Исправлена ​​передовая практика копирования каталогов

В моей пьесе у меня есть

- 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 пользователя.