Страницы

Поиск по вопросам

вторник, 9 июля 2019 г.

Как создать папку на другом сервере при помощи ansible?

Внимание! Этот вопрос является переводом вопроса: How to create a directory using Ansible?
Как создать папку /src/www на другом сервере при помощи ansible? Операционная система на удалённом сервере - debian или centos.


Ответ

Используйте модуль file с параметром state=directory.
Минимальный вариант:
- name: сreate directory file: path=/src/www state=directory
или:
- name: сreate directory file: path=/src/www state=directory
Дополнительно можно указать опциональные параметры, например, владельца папки или права на папку:
- name: сreate directory file: path=/src/www mode=0755 owner=root group=root state=directory
Также обратите внимание, что создавать последовательно вложенные папки нет никакой необходимости. Вместо:
- name: сreate directory file: path=/src/www state=directory - name: сreate subdirectory file: path=/src/www/logs state=directory
Можно сразу указывать сразу путь целиком: все необходимые папки и подпапки будут созданы автоматически.
- name: сreate directories file: path=/src/www/logs state=directory
Исключение -- случай, когда вам необходимо указывать различные уровни доступа, владельцев и т.п.

Об идемпотентности
Как и все модули ansible, file поддерживает идемпотентность выполнения. В случае, если на диске уже есть папка, которую вы пытаетесь создать, папка создаваться заново не будет.
Здесь есть один нюанс. Если вы указываете только имя папки и не удаляете каталог, а лишь меняете права доступа и/или владельца, то при повторном запуске плейбука права доступа или владельца не будут восстановлены к значениям по умолчанию, с которым была создана папка.
А вот в случае, когда вы не только указываете путь к папке, но и права доступа и владельца - то (в случае если они были изменены) ansible при повторных запусках плейбука будет не только проверять наличие папки, но и права доступа и владельца.
Например:
папка не удалена, владелец и права доступа не изменены: задача не будет выполнена, значение changed не будет увеличено папка не удалена, владелец не изменился, но изменены права доступа на папку: задача будет выполнена (папка не будет пересоздаваться, лишь восстановятся права доступа), значение changes увеличится на единицу
Продемонстрирую на следующем примере. Есть скрипт создания папки:
- name: http://ru.stackoverflow.com/questions/609260/ hosts: webservers become: true become_user: root tasks: - name: сreate directory file: path=/home/ansible/www mode=0775 state=directory
Запускаем в первый раз - создаётся папка:
$ ansible-playbook -i hosts_development so609260.yml
PLAY [http://ru.stackoverflow.com/questions/609260/] ***************************
TASK [setup] ******************************************************************* ok: [myserver.tld]
TASK [сreate directory] ******************************************************** changed: [myserver.tld]
PLAY RECAP ********************************************************************* myserver.tld : ok=2 changed=1 unreachable=0 failed=0
Заходим на удалённый сервер, смотрим - всё правильно:
# ls -l /home/ansible drwxrwxr-x. 2 root root 6 дек 29 17:09 www
При повторном запуске скрипта - ничего не меняется:
$ ansible-playbook -i hosts_development so609260.yml
PLAY [http://ru.stackoverflow.com/questions/609260/] ***************************
TASK [setup] ******************************************************************* ok: [myserver.tld]
TASK [сreate directory] ******************************************************** ok: [myserver.tld]
PLAY RECAP ********************************************************************* myserver.tld : ok=2 changed=0 unreachable=0 failed=0
Но вот если сымитировать некоторые вандальные действия (папка не удалена, но кто-то поменял права доступа):
# chmod 0777 /home/ansible/www # ls -l /home/ansible drwxrwxrwx. 2 root root 6 дек 29 17:09 www
То повторный запуск восстановит права на папку:
$ ansible-playbook -i hosts_development so609260.yml
PLAY [http://ru.stackoverflow.com/questions/609260/] ***************************
TASK [setup] ******************************************************************* ok: [myserver.tld]
TASK [сreate directory] ******************************************************** changed: [myserver.tld]
PLAY RECAP ********************************************************************* myserver.tld : ok=2 changed=1 unreachable=0 failed=0
Как и было:
# ls -l /home/ansible drwxrwxr-x. 2 root root 6 дек 29 17:09 www

Комментариев нет:

Отправить комментарий