it-swarm.com.ru

Возможная лучшая практика для копирования каталогов

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

- 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/"

Что поднимает предупреждение в ansible-lint:

[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

Таким образом, возникает вопрос: есть ли лучший способ сделать это с помощью доступных модулей вместо команд?

19
Austin Pray

В настоящее время command ваш лучший вариант. Там нет опции удаленного к удаленному. Вот ветка об этом: Как переместить/переименовать файл с помощью задачи Ansible в удаленной системе

У вас есть пара других вариантов:

  • вы можете использовать модуль file для создания символической ссылки (установив src, path и state=link.
  • вы можете проверить репо на сервере Ansible и затем использовать copy. Это более распространенная модель для развертывания кода.
  • вы можете продолжать использовать command, но оберните его условным обозначением stat, чтобы оно перезаписывалось только один раз. Это особенно полезно, если вы используете notify для перезапуска nginx.

Наконец, похоже, что вы можете выполнять «развертывание с помощью git». Это не всегда лучший выбор, особенно, если вы не «владеете» этим репо. Но это может быть хорошо - просто немного запаха кода.

7
tedder42

Вы можете использовать модуль synchronize с 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 (как удаленный адрес)

16
ant31

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"
7
PriceChild

Другой способ - сжать вашу папку и использовать модуль unarchive ansible:

- name: copy your folder using a work around
  unarchive: src=your.Zip dest=/destinationfolder
  become: yes

Это разархивирует вашу папку в вашем месте назначения, поэтому у вас будет копия папки; -) , Но не забудьте иметь unzip package на вашей целевой машине.

RHEL: 

yum install unzip -y


Debian: 

установить установить распаковать

5
Hassan Boutougha
  • copy: src = {{item}} dest =/etc/fooapp/directory_mode = yes

поле directory_mode пользователя. 

0
Vijay Samanthapuri

Вы можете использовать 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/*
0
user3773243