Внимание! Этот вопрос является переводом вопроса: 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
Комментариев нет:
Отправить комментарий