Исправлена передовая практика копирования каталогов
В моей пьесе у меня есть
- name: Grab h5bp/server-configs-nginx
git: repo=https://github.com/h5bp/server-configs-nginx.git
dest=/tmp/server-configs-nginx
version="3db5d61f81d7229d12b89e0355629249a49ee4ac"
force=yes
- name: Copy over h5bp configuration
command: cp -r /tmp/server-configs-nginx/{{ item }} /etc/nginx/{{ item }}
with_items:
- "mime.types"
- "h5bp/"
Что вызывает предупреждение в недоступной пробелы:
[ANSIBLE0006] cp used in place of copy module
/Users/austinpray/Dropbox/DEV/opensauce/bedrock-ansible/roles/nginx/tasks/main.yml:0
Task/Handler: Copy over h5bp configuration
Итак, возникает вопрос: есть ли лучший способ сделать это с помощью доступных модулей, а не с помощью команды?
Ответы
Ответ 1
В настоящее время command
- ваш лучший вариант. Нет пульта дистанционного управления. Вот нить об этом: Как переместить/переименовать файл с помощью задачи Ansible в удаленной системе
У вас есть еще пара вариантов:
- вы можете использовать модуль
file
для создания символической ссылки (путем установки src
, path
и state=link
.
- вы можете проверить репо на сервере Ansible, а затем использовать
copy
. Это более распространенная модель для развертывания кода.
- вы можете использовать
command
, но оберните его условным выражением stat
, чтобы он только перезаписывал один раз. Это особенно полезно, если вы используете notify
для перезапуска nginx.
Наконец, похоже, что вы можете использовать "deploy by git". Это не всегда лучший выбор, особенно если вы не "владеете" этим репо. Но это может быть хорошо - всего лишь немного запаха кода.
Ответ 2
Вы можете использовать synchronize
module с mode='pull'
- name: Copy over h5bp configuration
synchronize: mode=pull src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }}
with_items:
- "mime.types"
- "h5bp/"
Примечание. Чтобы скопировать удаленный доступ к удаленному компьютеру, используйте ту же команду и добавьте delegate_to
(как удаленный источник) и текущий inventory_host
(как удаленный dest)
Ответ 3
Ansible 2.0 приносит параметр remote_src
в модуль copy
: http://docs.ansible.com/ansible/copy_module.html
Теперь вам просто нужно сделать что-то вроде:
- name: Copy over h5bp configuration
copy: src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }} remote_src=yes
with_items:
- "mime.types"
- "h5bp"
Ответ 4
Еще один способ - предварительно закрепить вашу папку и использовать модуль unarchive ansible
:
- name: copy your folder using a work around
unarchive: src=your.zip dest=/destinationfolder
become: yes
Это будет распаковать вашу папку в пункт назначения, чтобы у вас была копия папки;-)
но не забывайте иметь пакет unzip на вашей целевой машине.
RHEL:
yum install unzip -y
Debian:
apt install unzip
Ответ 5
Вы можете использовать with_fileglob: http://docs.ansible.com/ansible/playbooks_loops.html#id4
# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
Ответ 6
- copy: src= {{item}} dest =/etc/fooapp/directory_mode = yes
поле user_mode пользователя.