Dans mon cahier j'ai
- 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/"
Ce qui soulève l'avertissement dans 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
Cela soulève donc la question: existe-t-il une meilleure façon de faire cela avec des modules ansibles plutôt qu'avec une commande?
Actuellement, command
est votre meilleure option. Il n'y a pas d'option de télécommande à distance. Voici un fil à ce sujet: Comment déplacer/renommer un fichier en utilisant une tâche Ansible sur un système distant
Vous avez deux autres options:
file
pour créer un lien symbolique (en définissant src
, path
et state=link
.copy
. C'est un modèle plus courant de déploiement de code.command
mais l'envelopper avec une condition stat
afin qu'il ne soit écrasé qu'une seule fois. Ceci est particulièrement utile si vous utilisez notify
pour redémarrer nginx.Enfin, il semble que vous fassiez un "deploy by git". Ce n'est pas toujours le meilleur choix, surtout si vous ne possédez pas ce dépôt. Mais ça pourrait aller, juste un peu d'odeur de code.
Vous pouvez utiliser le module synchronize
avec 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/"
Remarque: pour copier de distance à distance, utilisez la même commande et ajoutez delegate_to
(en tant que source distante) et le inventory_Host
en cours (en tant que destination distante).
Ansible 2.0 apporte le paramètre remote_src
au module copy
: http://docs.ansible.com/ansible/copy_module.html
Maintenant, il vous suffit de faire quelque chose comme:
- name: Copy over h5bp configuration
copy: src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }} remote_src=yes
with_items:
- "mime.types"
- "h5bp"
Une autre méthode consiste à compresser votre dossier avant et à utiliser le module unarchive ansible
:
- name: copy your folder using a work around
unarchive: src=your.Zip dest=/destinationfolder
become: yes
Cela décompressera votre dossier sur votre destination afin que vous ayez une copie du dossier ;-) Mais n'oubliez pas de disposer de unzip package sur votre machine cible.
RHEL:
miam installer unzip -y
Debian:
apt installer unzip
champ utilisateur directory_mode.
Vous pouvez utiliser 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/*