Copie de fichiers du local vers le distant
La plupart du temps, vous copierez des fichiers de serveurs locaux vers des serveurs distants. Voici un exemple de playbook d'exécution d'une telle tâche.
---- hôtes : serveurs web
Tâches:
- nom : copier le fichier sur un serveur distant
copie:
src : ~/test.SMS
destination : /tmp
Dans l'exemple ci-dessus, nous ciblons tous les serveurs web groupe dans notre inventaire Ansible. La source est le test.SMS résidant dans le répertoire personnel de notre machine locale et la destination est le dossier /tmp sur la machine distante.
$ ansible-playbook 1_copy_to_remote.ymlJOUER [serveurs Web]
******************************************************** **************************
TÂCHE [Rassembler des faits]
************************************************** **************************
d'accord : [172.17.0.3]
TÂCHE [Fichier de copie Ansible sur le serveur distant]
************************************************** **************************
modifié : [172.17.0.3]
JOUER RÉCAPITULATIF
************************************************** ***************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
Si nous exécutons le playbook, nous devrions voir les résultats comme ci-dessus.
Les autorisations par défaut sont définies sur 0644 sur la machine distante :
# ls -alsh test.SMS0 -rw-rw-r-- 1 a_user a_user 0 20 avril 08:49 test.SMS
Vous pouvez changer cela en ajoutant le paramètre mode :
---- hôtes : serveurs web
Tâches:
- nom : copier le fichier sur un serveur distant
copie:
src : ~/test.SMS
destination : /tmp
mode : 0744
Vos autorisations sur la télécommande ressembleront donc à ceci :
# ls -alsh test.SMS0 -rwxr--r-- 1 a_user a_user 0 20 avril 08:54 test.SMS
Copie de répertoires du local vers le distant
Pour copier des répertoires, vous avez deux options. Si vous mettez un / après le nom du répertoire, il copiera tout ce qui se trouve à l'intérieur de ce répertoire dans le dossier de destination. Si vous ne mettez pas le /, il créera d'abord le répertoire dans la destination, puis copiera tout à l'intérieur.
Essayons le module de copie avec le répertoire suivant situé dans notre dossier d'accueil local :
rép_test/|-- imbriqué1
| '-- test1.SMS
|-- imbriqué2
| '-- test2.SMS
'-- test0.SMS
Si nous utilisons le code suivant :
---- hôtes : serveurs web
Tâches:
- nom : copier le répertoire sur le serveur distant
copie:
src : ~/testdir
destination : /tmp
Ensuite, nous obtenons ce qui suit sur le serveur distant :
tmp/'-- testdir
|-- imbriqué1
| '-- test1.SMS
|-- imbriqué2
| '-- test2.SMS
'-- test0.SMS
Copie de fichiers entre des répertoires sur des machines distantes
Ansible copy vous permet de copier des fichiers d'un répertoire à un autre sur la même machine distante. Mais vous ne pouvez effectuer cela que pour les fichiers, vous ne pouvez pas copier les répertoires. Vous devez utiliser le remote_src paramètre pour informer Ansible de vos intentions.
---- hôtes : serveurs web
Tâches:
- name : Copier le fichier entre les répertoires sur un serveur distant
copie:
src : /tmp/test.SMS
destination : ~/test.SMS
remote_src : oui
Le code ci-dessus copiera /tmp/test.SMS dans le répertoire personnel de l'utilisateur (/home/[nom d'utilisateur]/).
Copie de fichiers avec plusieurs paramètres
Vous pouvez passer des paramètres individuels pour les fichiers.
---- hôtes : serveurs web
Tâches:
- nom : copier des fichiers avec plusieurs modifications
copie:
src : " élément.src "
destination : " élément.dest "
mode : "élément.mode"
avec_éléments :
- src: '~/testdir2/test1.txt', destination : '/tmp/a.txt', mode : '0644'
- src: '~/testdir2/test2.txt', destination : '/tmp/b.txt', mode : '0755'
- src: '~/testdir2/test3.txt', destination : '/tmp/c.txt', mode : '0644'
Dans l'exemple ci-dessus, nous renommons et définissons des autorisations individuelles pour les fichiers. La sortie Ansible ressemble à ceci :
$ ansible-playbook 4_copy_to_remote_with_multiple_parameters.ymlJOUER [serveurs Web]
************************************************** ****************
TÂCHE [Rassembler des faits]
******************************************************** ****************
d'accord : [172.17.0.3]
TÂCHE [Copier les fichiers avec plusieurs modifications]
******************************************************** ****************
modifié : [172.17.0.3] => (item=u'dest': u'/tmp/a.txt', u'src' : u'~/testdir2/test1.SMS',
u'mode' : u'0644')
modifié : [172.17.0.3] => (item=u'dest': u'/tmp/b.txt', u'src' : u'~/testdir2/test2.SMS',
u'mode' : u'0755')
modifié : [172.17.0.3] => (item=u'dest': u'/tmp/c.txt', u'src' : u'~/testdir2/test3.SMS',
u'mode' : u'0644')
JOUER RÉCAPITULATIF
************************************************** ************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
Création de contenu sur des serveurs distants
Vous pouvez utiliser le module de copie pour créer du contenu sur des serveurs distants directement à partir du fichier playbook. Voici un exemple:
---- hôtes : serveurs web
Tâches:
- name : utilisez une copie ansible pour créer du contenu sur un serveur distant
copie:
contenu : "Bonjour le serveur!\n"
destination : /tmp/bonjour.SMS
Cela créera le Bonjour.SMS sur le serveur distant qui contiendra "Hello Server!" texte.
# chat /tmp/bonjour.SMSBonjour serveur
Conclusion
Ansible copy est un module utile qui vous aide à copier des fichiers sur plusieurs serveurs. Cela devrait faciliter vos tâches de configuration.
Une étude plus approfondie:
http://docs.ansible.com/ansible/latest/modules/copy_module.html