Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:debian:6:avance:l130:part2 [2020/04/12 12:59] adminelearning:workbooks:debian:6:avance:l130:part2 [2023/08/25 01:28] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2020.01**+Version : **2023.02**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-====== DOF502 - Les Commandes ansible, ansible-playbook et ansible-galaxy======+====== LCF802 - Les Commandes ansible, ansible-playbook et ansible-galaxy======
  
-=====LAB #5 - Débuter avec Ansible=====+=====Contenu du Module=====
  
-====La Commande ansible====+  * **LCF802 - Les Commandes ansible, ansible-playbook et ansible-galaxy** 
 +    * Contenu du Module 
 +    * LAB #1 - Débuter avec Ansible 
 +      * 1.1 - La Commande ansible 
 +    * LAB #2 - La Commande ansible-playbook 
 +      * 2.1 - Playbook Files 
 +      * 2.2 - Tasks 
 +      * 2.3 - Handlers 
 +      * 2.4 - Modules 
 +        * 2.4.1 - Modules pour des Paquets 
 +        * 2.4.2 - Modules pour des Fichiers 
 +        * 2.4.3 - Modules pour le Système 
 +      * 2.5 - Inventory Files 
 +      * 2.6 - Privilèges 
 +        * 2.6.1 - Création de Groupes 
 +    * LAB #3 - La Commande ansible-galaxy 
 +      * 3.1 - Utiliser des Rôles avec un Play Book 
 +      * 3.2 - Ansible Galaxy 
 + 
 +=====LAB #1 - Débuter avec Ansible===== 
 + 
 +====1.1 - La Commande ansible====
  
 Utilisez la commande **ansible** pour vérifier si la machine **TargetA** fonctionne : Utilisez la commande **ansible** pour vérifier si la machine **TargetA** fonctionne :
  
 <code> <code>
-trainee@ansible:~$ ansible all -i 10.0.2.10, -m ping +[trainee@centos8 ~]$ ansible all -i 10.0.2.52, -m ping 
-[WARNING]: Platform linux on host 10.0.2.10 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +10.0.2.52 | SUCCESS => {
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-10.0.2.10 | SUCCESS => {+
     "ansible_facts": {     "ansible_facts": {
         "discovered_interpreter_python": "/usr/bin/python"         "discovered_interpreter_python": "/usr/bin/python"
Ligne 24: Ligne 43:
     "ping": "pong"     "ping": "pong"
 } }
- 
 </code> </code>
    
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Cette commande indique à Ansible qu'elle doit exécuter le module indiqué par l'option **-m** dans **tous** (//all//) les serveurs indiqués par l'option **-i**. La virgule placée après l'adresse IP indique à la commande ansible que la valeur est une adresse IP et non le nom d'un fichier. **Important** : Cette commande indique à Ansible qu'elle doit exécuter le module indiqué par l'option **-m** dans **tous** (//all//) les serveurs indiqués par l'option **-i**. La virgule placée après l'adresse IP indique à la commande ansible que la valeur est une adresse IP et non le nom d'un fichier.
 </WRAP> </WRAP>
Ligne 34: Ligne 52:
  
 <code> <code>
-trainee@ansible:~$ ansible --help +[trainee@centos8 ~]$ ansible --help 
-Usage: ansible <host-pattern> [options]+usage: ansible [-h] [--version[-v] [-b] [--become-method BECOME_METHOD] 
 +               [--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts] 
 +               [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k] 
 +               [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER] 
 +               [-c CONNECTION] [-T TIMEOUT] 
 +               [--ssh-common-args SSH_COMMON_ARGS] 
 +               [--sftp-extra-args SFTP_EXTRA_ARGS] 
 +               [--scp-extra-args SCP_EXTRA_ARGS] 
 +               [--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D] 
 +               [-e EXTRA_VARS] [--vault-id VAULT_IDS] 
 +               [--ask-vault-password | --vault-password-file VAULT_PASSWORD_FILES] 
 +               [-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR] 
 +               [--task-timeout TASK_TIMEOUT] [-a MODULE_ARGS] [-m MODULE_NAME] 
 +               pattern
  
 Define and run a single task 'playbook' against a set of hosts Define and run a single task 'playbook' against a set of hosts
  
-Options+positional arguments: 
-  -a MODULE_ARGS, --args=MODULE_ARGS +  pattern               host pattern 
-                        module arguments + 
-  --ask-vault-pass      ask for vault password +optional arguments
-  -B SECONDS, --background=SECONDS+  --ask-vault-password, --ask-vault-pass 
 +                        ask for vault password 
 +  --list-hosts          outputs list of matching hosts; does not execute 
 +                        anything else 
 +  --playbook-dir BASEDIR 
 +                        Since this tool does not use playbooksuse this as a 
 +                        substitute playbook directory.This sets the relative 
 +                        path for many features including roles/ group_vars/ 
 +                        etc. 
 +  --syntax-check        perform a syntax check on the playbook, but do not 
 +                        execute it 
 +  --task-timeout TASK_TIMEOUT 
 +                        set task timeout limit in seconds, must be positive 
 +                        integer. 
 +  --vault-id VAULT_IDS  the vault identity to use 
 +  --vault-password-file VAULT_PASSWORD_FILES, --vault-pass-file VAULT_PASSWORD_FILES 
 +                        vault password file 
 +  --version             show program's version number, config file location, 
 +                        configured module search path, module location, 
 +                        executable location and exit 
 +  -B SECONDS, --background SECONDS
                         run asynchronously, failing after X seconds                         run asynchronously, failing after X seconds
                         (default=N/A)                         (default=N/A)
Ligne 50: Ligne 101:
   -D, --diff            when changing (small) files and templates, show the   -D, --diff            when changing (small) files and templates, show the
                         differences in those files; works great with --check                         differences in those files; works great with --check
-  -e EXTRA_VARS, --extra-vars=EXTRA_VARS+  -M MODULE_PATH, --module-path MODULE_PATH 
 +                        prepend colon-separated path(s) to module library (def 
 +                        ault=~/.ansible/plugins/modules:/usr/share/ansible/plu 
 +                        gins/modules) 
 +  -P POLL_INTERVAL, --poll POLL_INTERVAL 
 +                        set the poll interval if using -B (default=15) 
 +  -a MODULE_ARGS, --args MODULE_ARGS 
 +                        The action's options in space separated k=v format: -a 
 +                        'opt1=val1 opt2=val2' 
 +  -e EXTRA_VARS, --extra-vars EXTRA_VARS
                         set additional variables as key=value or YAML/JSON, if                         set additional variables as key=value or YAML/JSON, if
                         filename prepend with @                         filename prepend with @
-  -f FORKS, --forks=FORKS+  -f FORKS, --forks FORKS
                         specify number of parallel processes to use                         specify number of parallel processes to use
                         (default=5)                         (default=5)
   -h, --help            show this help message and exit   -h, --help            show this help message and exit
-  -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY+  -i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORY
                         specify inventory host path or comma separated host                         specify inventory host path or comma separated host
                         list. --inventory-file is deprecated                         list. --inventory-file is deprecated
-  -l SUBSET, --limit=SUBSET+  -l SUBSET, --limit SUBSET
                         further limit selected hosts to an additional pattern                         further limit selected hosts to an additional pattern
-  --list-hosts          outputs a list of matching hosts; does not execute +  -m MODULE_NAME, --module-name MODULE_NAME 
-                        anything else +                        Name of the action to execute (default=command)
-  -m MODULE_NAME, --module-name=MODULE_NAME +
-                        module name to execute (default=command+
-  -M MODULE_PATH, --module-path=MODULE_PATH +
-                        prepend colon-separated path(s) to module library +
-                        (default=['/home/trainee/.ansible/plugins/modules', +
-                        '/usr/share/ansible/plugins/modules'])+
   -o, --one-line        condense output   -o, --one-line        condense output
-  --playbook-dir=BASEDIR +  -t TREE, --tree TREE  log output to this directory
-                        Since this tool does not use playbooks, use this as a +
-                        subsitute playbook directory.This sets the relative +
-                        path for many features including roles/ group_vars/ +
-                        etc. +
-  -P POLL_INTERVAL, --poll=POLL_INTERVAL +
-                        set the poll interval if using -B (default=15) +
-  --syntax-check        perform a syntax check on the playbook, but do not +
-                        execute it +
-  -t TREE, --tree=TREE  log output to this directory +
-  --vault-id=VAULT_IDS  the vault identity to use +
-  --vault-password-file=VAULT_PASSWORD_FILES +
-                        vault password file+
   -v, --verbose         verbose mode (-vvv for more, -vvvv to enable   -v, --verbose         verbose mode (-vvv for more, -vvvv to enable
                         connection debugging)                         connection debugging)
-  --version             show program's version number and exit 
  
-  Connection Options: +Privilege Escalation Options: 
-    control as whom and how to connect to hosts+  control how and which user you become as on target hosts
  
-    -k, --ask-pass      ask for connection password +  --become-method BECOME_METHOD 
-    --private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE+                        privilege escalation method to use (default=sudo), use 
 +                        `ansible-doc -t become -l` to list valid choices. 
 +  --become-user BECOME_USER 
 +                        run operations as this user (default=root) 
 +  -K, --ask-become-pass 
 +                        ask for privilege escalation password 
 +  -b, --become          run operations with become (does not imply password 
 +                        prompting) 
 + 
 +Connection Options: 
 +  control as whom and how to connect to hosts 
 + 
 +  --private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE
                         use this file to authenticate the connection                         use this file to authenticate the connection
-    -u REMOTE_USER, --user=REMOTE_USER +  --scp-extra-args SCP_EXTRA_ARGS 
-                        connect as this user (default=None) +                        specify extra arguments to pass to scp only (e.g. -l
-    -c CONNECTION, --connection=CONNECTION +  --sftp-extra-args SFTP_EXTRA_ARGS
-                        connection type to use (default=smart) +
-    -T TIMEOUT, --timeout=TIMEOUT +
-                        override the connection timeout in seconds +
-                        (default=10) +
-    --ssh-common-args=SSH_COMMON_ARGS +
-                        specify common arguments to pass to sftp/scp/ssh (e.g. +
-                        ProxyCommand+
-    --sftp-extra-args=SFTP_EXTRA_ARGS+
                         specify extra arguments to pass to sftp only (e.g. -f,                         specify extra arguments to pass to sftp only (e.g. -f,
                         -l)                         -l)
-    --scp-extra-args=SCP_EXTRA_ARGS +  --ssh-common-args SSH_COMMON_ARGS 
-                        specify extra arguments to pass to scp only (e.g. -l+                        specify common arguments to pass to sftp/scp/ssh (e.g. 
-    --ssh-extra-args=SSH_EXTRA_ARGS+                        ProxyCommand
 +  --ssh-extra-args SSH_EXTRA_ARGS
                         specify extra arguments to pass to ssh only (e.g. -R)                         specify extra arguments to pass to ssh only (e.g. -R)
 +  -T TIMEOUT, --timeout TIMEOUT
 +                        override the connection timeout in seconds
 +                        (default=10)
 +  -c CONNECTION, --connection CONNECTION
 +                        connection type to use (default=smart)
 +  -k, --ask-pass        ask for connection password
 +  -u REMOTE_USER, --user REMOTE_USER
 +                        connect as this user (default=None)
  
-  Privilege Escalation Options: +Some actions do not make sense in Ad-Hoc (include, meta, etc)
-    control how and which user you become as on target hosts +
- +
-    -s, --sudo          run operations with sudo (nopasswd) (deprecated, use +
-                        become) +
-    -U SUDO_USER, --sudo-user=SUDO_USER +
-                        desired sudo user (default=root) (deprecated, use +
-                        become) +
-    -S, --su            run operations with su (deprecated, use become) +
-    -R SU_USER, --su-user=SU_USER +
-                        run operations with su as this user (default=None) +
-                        (deprecated, use become) +
-    -b, --become        run operations with become (does not imply password +
-                        prompting) +
-    --become-method=BECOME_METHOD +
-                        privilege escalation method to use (default=sudo), +
-                        valid choices: [ sudo | su | pbrun | pfexec | doas | +
-                        dzdo | ksu | runas | pmrun | enable | machinectl ] +
-    --become-user=BECOME_USER +
-                        run operations as this user (default=root) +
-    --ask-sudo-pass     ask for sudo password (deprecated, use become) +
-    --ask-su-pass       ask for su password (deprecated, use become) +
-    -K, --ask-become-pass +
-                        ask for privilege escalation password +
- +
-Some modules do not make sense in Ad-Hoc (include, meta, etc)+
 </code> </code>
  
-Démarrez maintenant les quatre machines **Web01**, **Web02**, **Web03** et **Web04**. Si vous participez à une FAD, utilisez les commandes suivantes : +Les quatre machines **WebXX** mises à votre disposition sont dans le même réseau que la machine centos8 et ont la même configuration ssh et sudo que la machine **debian10** :
- +
-<code> +
-trainee@ansible:~$ exit +
-déconnexion +
-Connection to localhost closed. +
-desktop@server16:~$ VBoxManage startvm Web01 --type headless +
-Waiting for VM "Web01" to power on... +
-VM "Web01" has been successfully started. +
-desktop@server16:~$ VBoxManage startvm Web02 --type headless +
-Waiting for VM "Web02" to power on... +
-VM "Web02" has been successfully started. +
-desktop@server16:~$ VBoxManage startvm Web03 --type headless +
-Waiting for VM "Web03" to power on... +
-VM "Web03" has been successfully started. +
-desktop@server16:~$ VBoxManage startvm Web04 --type headless +
-Waiting for VM "Web04" to power on... +
-VM "Web04" has been successfully started. +
-desktop@server16:~$ ssh -l trainee localhost -p 2222 +
-trainee@localhost's password: trainee +
-Linux ansible.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 +
- +
-The programs included with the Debian GNU/Linux system are free software; +
-the exact distribution terms for each program are described in the +
-individual files in /usr/share/doc/*/copyright. +
- +
-Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent +
-permitted by applicable law. +
-Last login: Sun Apr 12 07:42:09 2020 from 10.0.2.2 +
-trainee@ansible:~$  +
-</code> +
- +
-Rappelez-vous que les quatre machines virtuelles **WebXX** importées sont dans le même réseau NAT que la machine Ansible et ont la même configuration ssh et sudo que la machine **TargetA** :+
  
 ^ Machine ^ Nom d'hôte ^ Adresse IP ^ ^ Machine ^ Nom d'hôte ^ Adresse IP ^
-| Web01 | web01.i2tch.loc | 10.0.2.11 +| Web01 | web01.i2tch.loc | 10.0.2.54 
-| Web02 | web02.i2tch.loc | 10.0.2.12 +| Web02 | web02.i2tch.loc | 10.0.2.55 
-| Web03 | web03.i2tch.loc | 10.0.2.13 +| Web03 | web03.i2tch.loc | 10.0.2.56 
-| Web04 | web04.i2tch.loc | 10.0.2.14 | +| Web04 | web04.i2tch.loc | 10.0.2.57 |
- +
-Modifiez le fichier **/etc/hosts** de la machine **Ansible** : +
- +
-<code> +
-trainee@ansible:~$ su -  +
-Mot de passe : fenestros +
-root@ansible:~# vi /etc/hosts +
-root@ansible:~# cat /etc/hosts +
-127.0.0.1 localhost +
-127.0.1.1 ansible.i2tch.loc    ansible +
-10.0.2.9 ansible.i2tch.loc    ansible +
-10.0.2.10   targeta.i2tch.loc    targeta +
-10.0.2.11 web01.i2tch.loc web01 +
-10.0.2.12 web02.i2tch.loc web02 +
-10.0.2.13 web03.i2tch.loc web03 +
-10.0.2.14 web04.i2tch.loc web04 +
- +
-# The following lines are desirable for IPv6 capable hosts +
-::1     localhost ip6-localhost ip6-loopback +
-ff02::1 ip6-allnodes +
-ff02::2 ip6-allrouters +
-root@ansible:~# exit +
-déconnexion +
-trainee@ansible:~$ +
-</code> +
- +
-<WRAP center round important 60%> +
-**Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. +
-</WRAP>+
  
 Utilisez la commande **scp** pour copier le fichier **authorized_keys** de la machine virtuelle **ansible** vers les machines virtuelles **Web01**, **Web02**, **Web03** et **Web04** : Utilisez la commande **scp** pour copier le fichier **authorized_keys** de la machine virtuelle **ansible** vers les machines virtuelles **Web01**, **Web02**, **Web03** et **Web04** :
  
 <code> <code>
-trainee@ansible:~$ scp .ssh/authorized_keys trainee@web01.i2tch.loc:/home/trainee/.ssh/authorized_keys +[trainee@centos8 ~]$ scp .ssh/authorized_keys trainee@10.0.2.54:/home/trainee/.ssh/authorized_keys 
-The authenticity of host 'web01.i2tch.loc (10.0.2.11)' can't be established.+The authenticity of host '10.0.2.54 (10.0.2.54)' can't be established.
 ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE.
-Are you sure you want to continue connecting (yes/no)? yes +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
-Warning: Permanently added 'web01.i2tch.loc,10.0.2.11' (ECDSA) to the list of known hosts.+Warning: Permanently added '10.0.2.54' (ECDSA) to the list of known hosts.
 Debian GNU/Linux 9 Debian GNU/Linux 9
-trainee@web01.i2tch.loc's password:  +trainee@10.0.2.54's password: trainee 
-authorized_keys                                                                                                                        100%  701   645.8KB/s   00:00     +authorized_keys                                                                                                                                                                 100%  888     1.8MB/s   00:00  
-trainee@ansible:~$ scp .ssh/authorized_keys trainee@web02.i2tch.loc:/home/trainee/.ssh/authorized_keys +    
-The authenticity of host 'web02.i2tch.loc (10.0.2.12)' can't be established.+[trainee@centos8 ~]$ scp .ssh/authorized_keys trainee@10.0.2.55:/home/trainee/.ssh/authorized_keys 
 +The authenticity of host '10.0.2.55 (10.0.2.55)' can't be established.
 ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE.
-Are you sure you want to continue connecting (yes/no)? yes +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
-Warning: Permanently added 'web02.i2tch.loc,10.0.2.12' (ECDSA) to the list of known hosts.+Warning: Permanently added '10.0.2.55' (ECDSA) to the list of known hosts.
 Debian GNU/Linux 9 Debian GNU/Linux 9
-trainee@web02.i2tch.loc's password:  +trainee@10.0.2.55's password: trainee 
-authorized_keys                                                                                                                        100%  701   768.3KB/s   00:00     +authorized_keys                                                                                                                                                                 100%  888     2.1MB/s   00:00  
-trainee@ansible:~$ scp .ssh/authorized_keys trainee@web03.i2tch.loc:/home/trainee/.ssh/authorized_keys +    
-The authenticity of host 'web03.i2tch.loc (10.0.2.13)' can't be established.+[trainee@centos8 ~]$ scp .ssh/authorized_keys trainee@10.0.2.56:/home/trainee/.ssh/authorized_keys 
 +The authenticity of host '10.0.2.56 (10.0.2.56)' can't be established.
 ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE.
-Are you sure you want to continue connecting (yes/no)? yes +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
-Warning: Permanently added 'web03.i2tch.loc,10.0.2.13' (ECDSA) to the list of known hosts.+Warning: Permanently added '10.0.2.56' (ECDSA) to the list of known hosts.
 Debian GNU/Linux 9 Debian GNU/Linux 9
-trainee@web03.i2tch.loc's password:  +trainee@10.0.2.56's password: trainee 
-authorized_keys                                                                                                                        100%  701     1.0MB/s   00:00     +authorized_keys                                                                                                                                                                 100%  888     1.7MB/s   00:00     
-trainee@ansible:~$ scp .ssh/authorized_keys trainee@web04.i2tch.loc:/home/trainee/.ssh/authorized_keys + 
-The authenticity of host 'web04.i2tch.loc (10.0.2.14)' can't be established.+[trainee@centos8 ~]$ scp .ssh/authorized_keys trainee@10.0.2.57:/home/trainee/.ssh/authorized_keys 
 +The authenticity of host '10.0.2.57 (10.0.2.57)' can't be established.
 ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE.
-Are you sure you want to continue connecting (yes/no)? yes +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
-Warning: Permanently added 'web04.i2tch.loc,10.0.2.14' (ECDSA) to the list of known hosts.+Warning: Permanently added '10.0.2.57' (ECDSA) to the list of known hosts.
 Debian GNU/Linux 9 Debian GNU/Linux 9
-trainee@web04.i2tch.loc's password:  +trainee@10.0.2.57's password: trainee 
-authorized_keys +authorized_keys                                                                                                                                                                 100%  888     1.3MB/  00:00
 </code> </code>
  
-Vérifiez que vous pouvez vous connecter aux machines virtuelles **Web01****Web02**, **Web03** et **Web04** sans entrer de mot de passe :+Modifier le fichier **/etc/hosts** dans **centos8** :
  
 <code> <code>
-trainee@ansible:~$ ssh -l trainee web01+[trainee@centos8 ~]$ su - 
 +Passwordfenestros 
 +[root@centos8 ~]# vi /etc/hosts 
 +[root@centos8 ~]# cat /etc/hosts 
 +127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
 +::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 
 +10.0.2.45 centos8.ittraining.loc centos8 
 +10.0.2.54 web01.i2tch.loc web01 
 +10.0.2.55 web02.i2tch.loc web02 
 +10.0.2.56 web03.i2tch.loc web03 
 +10.0.2.57 web04.i2tch.loc web04 
 +[root@centos8 ~]# exit 
 +logout 
 +[trainee@centos8 ~]$ 
 +</code> 
 + 
 +Vérifiez que vous pouvez vous connecter aux machines virtuelles **Web01**, **Web02**, **Web03** et **Web04** sans entrer de mot de passe et que la configuration de sudo est correcte : 
 + 
 +<code> 
 +[trainee@centos8 ~]$ ssh -l trainee web01
 Debian GNU/Linux 9 Debian GNU/Linux 9
 Linux web01.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 Linux web01.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64
Ligne 259: Ligne 249:
 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 permitted by applicable law. permitted by applicable law.
-Last login: Sun Apr 12 10:41:27 2020 from 10.0.2.9+Last login: Wed Mar  9 11:47:41 2022 from 10.0.2.45 
 +trainee@web01:~$ sudo apt update 
 +Réception de:1 http://security.debian.org/debian-security stretch/updates InRelease [53,0 kB] 
 +Ign:2 http://ftp.fr.debian.org/debian stretch InRelease                              
 +Réception de:3 http://ftp.fr.debian.org/debian stretch-updates InRelease [93,6 kB] 
 +Réception de:4 http://ftp.fr.debian.org/debian stretch Release [118 kB] 
 +Réception de:5 http://ftp.fr.debian.org/debian stretch Release.gpg [3 177 B] 
 +Réception de:6 http://security.debian.org/debian-security stretch/updates/main Sources [396 kB] 
 +Réception de:7 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [759 kB] 
 +Réception de:8 http://security.debian.org/debian-security stretch/updates/main Translation-en [354 kB] 
 +Réception de:http://ftp.fr.debian.org/debian stretch/main Sources [6 736 kB]        
 +Réception de:10 http://ftp.fr.debian.org/debian stretch/main amd64 Packages [7 080 kB] 
 +Réception de:11 http://ftp.fr.debian.org/debian stretch/main Translation-en [5 377 kB] 
 +21,0 Mo réceptionnés en 32s (638 ko/s)                                                                                                                                                                            
 +Lecture des listes de paquets... Fait 
 +Construction de l'arbre des dépendances        
 +Lecture des informations d'état... Fait 
 +341 packages can be upgraded. Run 'apt list --upgradable' to see them.
 trainee@web01:~$ exit trainee@web01:~$ exit
 déconnexion déconnexion
 Connection to web01 closed. Connection to web01 closed.
-trainee@ansible:~$ ssh -l trainee web02 +[trainee@centos8 ~]$ ssh -l trainee web02
-The authenticity of host 'web02 (10.0.2.12)' can't be established. +
-ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. +
-Are you sure you want to continue connecting (yes/no)? yes +
-Warning: Permanently added 'web02' (ECDSA) to the list of known hosts.+
 Debian GNU/Linux 9 Debian GNU/Linux 9
 Linux web02.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 Linux web02.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64
Ligne 277: Ligne 280:
 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 permitted by applicable law. permitted by applicable law.
-Last login: Tue Jan 29 12:02:10 2019+Last login: Wed Mar  9 11:40:49 2022 from 10.0.2.45 
 +trainee@web02:~$ sudo apt update 
 +Réception de:1 http://security.debian.org/debian-security stretch/updates InRelease [53,0 kB] 
 +Ign:2 http://ftp.fr.debian.org/debian stretch InRelease                         
 +Réception de:3 http://ftp.fr.debian.org/debian stretch-updates InRelease [93,6 kB] 
 +Réception de:4 http://ftp.fr.debian.org/debian stretch Release [118 kB] 
 +Réception de:5 http://ftp.fr.debian.org/debian stretch Release.gpg [3 177 B] 
 +Réception de:6 http://security.debian.org/debian-security stretch/updates/main Sources [396 kB] 
 +Réception de:7 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [759 kB] 
 +Réception de:8 http://security.debian.org/debian-security stretch/updates/main Translation-en [354 kB] 
 +Réception de:9 http://ftp.fr.debian.org/debian stretch/main Sources [6 736 kB]        
 +Réception de:10 http://ftp.fr.debian.org/debian stretch/main amd64 Packages [7 080 kB] 
 +Réception de:11 http://ftp.fr.debian.org/debian stretch/main Translation-en [5 377 kB] 
 +21,0 Mo réceptionnés en 32s (639 ko/s)                                                                                                                                                                            
 +Lecture des listes de paquets... Fait 
 +Construction de l'arbre des dépendances        
 +Lecture des informations d'état... Fait 
 +341 packages can be upgraded. Run 'apt list --upgradable' to see them.
 trainee@web02:~$ exit trainee@web02:~$ exit
 déconnexion déconnexion
 Connection to web02 closed. Connection to web02 closed.
-trainee@ansible:~$ ssh -l trainee web03 +[trainee@centos8 ~]$ ssh -l trainee web03
-The authenticity of host 'web03 (10.0.2.13)' can't be established. +
-ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. +
-Are you sure you want to continue connecting (yes/no)? yes +
-Warning: Permanently added 'web03' (ECDSA) to the list of known hosts.+
 Debian GNU/Linux 9 Debian GNU/Linux 9
 Linux web03.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 Linux web03.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64
Ligne 295: Ligne 311:
 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 permitted by applicable law. permitted by applicable law.
-Last login: Tue Jan 29 12:02:34 2019+Last login: Wed Mar  9 11:40:49 2022 from 10.0.2.45 
 +trainee@web03:~$ sudo apt update 
 +Réception de:1 http://security.debian.org/debian-security stretch/updates InRelease [53,0 kB] 
 +Ign:2 http://ftp.fr.debian.org/debian stretch InRelease                         
 +Réception de:3 http://ftp.fr.debian.org/debian stretch-updates InRelease [93,6 kB] 
 +Réception de:4 http://ftp.fr.debian.org/debian stretch Release [118 kB] 
 +Réception de:5 http://ftp.fr.debian.org/debian stretch Release.gpg [3 177 B] 
 +Réception de:6 http://security.debian.org/debian-security stretch/updates/main Sources [396 kB] 
 +Réception de:7 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [759 kB] 
 +Réception de:8 http://security.debian.org/debian-security stretch/updates/main Translation-en [354 kB] 
 +Réception de:9 http://ftp.fr.debian.org/debian stretch/main Sources [6 736 kB]        
 +Réception de:10 http://ftp.fr.debian.org/debian stretch/main amd64 Packages [7 080 kB] 
 +Réception de:11 http://ftp.fr.debian.org/debian stretch/main Translation-en [5 377 kB] 
 +21,0 Mo réceptionnés en 40s (524 ko/s)                                                                                                                                                                            
 +Lecture des listes de paquets... Fait 
 +Construction de l'arbre des dépendances        
 +Lecture des informations d'état... Fait 
 +341 packages can be upgraded. Run 'apt list --upgradable' to see them.
 trainee@web03:~$ exit trainee@web03:~$ exit
 déconnexion déconnexion
 Connection to web03 closed. Connection to web03 closed.
-trainee@ansible:~$ ssh -l trainee web04 +[trainee@centos8 ~]$ ssh -l trainee web04
-The authenticity of host 'web04 (10.0.2.14)' can't be established. +
-ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. +
-Are you sure you want to continue connecting (yes/no)? yes +
-Warning: Permanently added 'web04' (ECDSA) to the list of known hosts.+
 Debian GNU/Linux 9 Debian GNU/Linux 9
 Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64
Ligne 313: Ligne 342:
 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 permitted by applicable law. permitted by applicable law.
-Last login: Tue Jan 29 12:02:57 2019+Last login: Wed Mar  9 11:40:49 2022 from 10.0.2.45 
 +trainee@web04:~$ sudo apt update 
 +Réception de:1 http://security.debian.org/debian-security stretch/updates InRelease [53,0 kB] 
 +Ign:2 http://ftp.fr.debian.org/debian stretch InRelease           
 +Réception de:3 http://ftp.fr.debian.org/debian stretch-updates InRelease [93,6 kB] 
 +Réception de:4 http://ftp.fr.debian.org/debian stretch Release [118 kB] 
 +Réception de:5 http://ftp.fr.debian.org/debian stretch Release.gpg [3 177 B] 
 +Réception de:6 http://security.debian.org/debian-security stretch/updates/main Sources [396 kB] 
 +Réception de:7 http://ftp.fr.debian.org/debian stretch/main Sources [6 736 kB] 
 +Réception de:8 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [759 kB] 
 +Réception de:9 http://ftp.fr.debian.org/debian stretch/main amd64 Packages [7 080 kB]         
 +Réception de:10 http://security.debian.org/debian-security stretch/updates/main Translation-en [354 kB] 
 +Réception de:11 http://ftp.fr.debian.org/debian stretch/main Translation-en [5 377 kB]             
 +21,0 Mo réceptionnés en 39s (535 ko/s)                                                                                                                                                                            
 +Lecture des listes de paquets... Fait 
 +Construction de l'arbre des dépendances        
 +Lecture des informations d'état... Fait 
 +341 packages can be upgraded. Run 'apt list --upgradable' to see them. 
 +trainee@web04:~$ exit 
 +déconnexion 
 +Connection to web04 closed. 
 +[trainee@centos8 ~]$
 </code> </code>
  
-Utilisez ensuite la commende **ansible** avec le module **ping** :+Utilisez ensuite la commande **ansible** avec le module **ping** :
  
 <code> <code>
-trainee@ansible:~$ ansible all -i web01, -m ping +[trainee@centos8 ~]$ ansible all -i 10.0.2.54, -m ping 
-[WARNING]: Platform linux on host web01 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +10.0.2.54 | SUCCESS => {
-change thisSee https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web01 | SUCCESS => {+
     "ansible_facts": {     "ansible_facts": {
         "discovered_interpreter_python": "/usr/bin/python"         "discovered_interpreter_python": "/usr/bin/python"
Ligne 329: Ligne 377:
     "ping": "pong"     "ping": "pong"
 } }
-trainee@ansible:~$ ansible all -i web02, -m ping +[trainee@centos8 ~]$ ansible all -i 10.0.2.55, -m ping 
-[WARNING]: Platform linux on host web02 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +10.0.2.55 | SUCCESS => {
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web02 | SUCCESS => { +
-    "ansible_facts":+
-        "discovered_interpreter_python": "/usr/bin/python" +
-    }, +
-    "changed": false, +
-    "ping": "pong" +
-+
-trainee@ansible:~$ ansible all -i web03, -m ping +
-[WARNING]: Platform linux on host web03 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change thisSee https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web03 | SUCCESS => { +
-    "ansible_facts":+
-        "discovered_interpreter_python": "/usr/bin/python" +
-    }, +
-    "changed": false, +
-    "ping": "pong" +
-+
-trainee@ansible:~$ ansible all -i web04, -m ping +
-[WARNING]: Platform linux on host web04 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change thisSee https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web04 | SUCCESS => {+
     "ansible_facts": {     "ansible_facts": {
         "discovered_interpreter_python": "/usr/bin/python"         "discovered_interpreter_python": "/usr/bin/python"
Ligne 364: Ligne 390:
  
 <code> <code>
-trainee@ansible:~$ ansible all -i web01,web02,web03,web04 -m ping +[trainee@centos8 ~]$ ansible all -i web01,web02,web03,web04 -m ping 
-[WARNING]: Platform linux on host web04 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +web02 | SUCCESS => {
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web04 | SUCCESS => {+
     "ansible_facts": {     "ansible_facts": {
         "discovered_interpreter_python": "/usr/bin/python"         "discovered_interpreter_python": "/usr/bin/python"
Ligne 374: Ligne 398:
     "ping": "pong"     "ping": "pong"
 } }
-[WARNING]: Platform linux on host web01 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could 
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. 
 web01 | SUCCESS => { web01 | SUCCESS => {
     "ansible_facts": {     "ansible_facts": {
Ligne 383: Ligne 405:
     "ping": "pong"     "ping": "pong"
 } }
-[WARNING]: Platform linux on host web03 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could 
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. 
 web03 | SUCCESS => { web03 | SUCCESS => {
     "ansible_facts": {     "ansible_facts": {
Ligne 392: Ligne 412:
     "ping": "pong"     "ping": "pong"
 } }
-[WARNING]: Platform linux on host web02 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +web04 | SUCCESS => {
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web02 | SUCCESS => {+
     "ansible_facts": {     "ansible_facts": {
         "discovered_interpreter_python": "/usr/bin/python"         "discovered_interpreter_python": "/usr/bin/python"
Ligne 403: Ligne 421:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Notez que les résultats ne sont pas retournés dans un ordre séquentiel par rapport à la commande exécutée. En effet, ansible a paralléliser l'exécution des commandes. **Important** : Notez que les résultats ne sont pas retournés dans un ordre séquentiel par rapport à la commande exécutée. En effet, ansible a paralléliser l'exécution des commandes.
 </WRAP> </WRAP>
Ligne 410: Ligne 428:
  
 <code> <code>
-trainee@ansible:~$ ansible all -i web01,web02,web03,web04 -m command --args 'uptime' +[trainee@centos8 ~]$ ansible all -i web01,web02,web03,web04 -m command --args 'uptime' 
-[WARNING]Platform linux on host web03 is using the discovered Python interpreter at /usr/bin/pythonbut future installation of another Python interpreter could +web02 | CHANGED | rc=0 >> 
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.+ 11:40:49 up 18:26 1 user,  load average0,24, 0,11, 0,03
 web03 | CHANGED | rc=0 >> web03 | CHANGED | rc=0 >>
- 10:49:07 up 51 min,  1 user,  load average: 0,00, 0,00, 0,00 + 11:40:49 up 18:26,  1 user,  load average: 0,10, 0,03, 0,01
-[WARNING]: Platform linux on host web01 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.+
 web01 | CHANGED | rc=0 >> web01 | CHANGED | rc=0 >>
- 10:49:07 up 52 min,  1 user,  load average: 0,00, 0,00, 0,00 + 11:40:49 up 18:26,  1 user,  load average: 0,00, 0,00, 0,00
-[WARNING]: Platform linux on host web04 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.+
 web04 | CHANGED | rc=0 >> web04 | CHANGED | rc=0 >>
- 10:49:07 up 51 min,  1 user,  load average: 0,00, 0,00, 0,00 + 11:40:49 up 18:26,  1 user,  load average: 0,00, 0,00, 0,00
-[WARNING]: Platform linux on host web02 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web02 | CHANGED | rc=0 >> +
- 10:49:07 up 52 min,  1 user,  load average: 0,16, 0,03, 0,01+
 </code> </code>
  
-Exécutez ensuite une commande pour installer **apache2** dans les machines web01, web02, web03 et web04 en utilisant le module **command**. Vous devez voire la confirmation que le paquet a déjà été installé - **apache2 is already the newest version** : +=====LAB #- La Commande ansible-playbook=====
- +
-<code> +
-trainee@ansible:~$ ansible all -i web01,web02,web03,web04 -m command --args 'sudo apt-get install -y apache2' +
-[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo +
-[WARNING]: Platform linux on host web03 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web03 | CHANGED | rc=0 >> +
-Lecture des listes de paquets… +
-Construction de l'arbre des dépendances… +
-Lecture des informations d'état… +
-apache2 is already the newest version (2.4.25-3+deb9u6). +
-0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. +
-[WARNING]: Platform linux on host web02 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web02 | CHANGED | rc=0 >> +
-Lecture des listes de paquets… +
-Construction de l'arbre des dépendances… +
-Lecture des informations d'état… +
-apache2 is already the newest version (2.4.25-3+deb9u6). +
-0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. +
-[WARNING]: Platform linux on host web04 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web04 | CHANGED | rc=0 >> +
-Lecture des listes de paquets… +
-Construction de l'arbre des dépendances… +
-Lecture des informations d'état… +
-apache2 is already the newest version (2.4.25-3+deb9u6). +
-0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. +
-[WARNING]: Platform linux on host web01 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could +
-change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. +
-web01 | CHANGED | rc=0 >> +
-Lecture des listes de paquets… +
-Construction de l'arbre des dépendances… +
-Lecture des informations d'état… +
-apache2 is already the newest version (2.4.25-3+deb9u6). +
-0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. +
-</code> +
- +
-<WRAP center round important 60%> +
-**Important** : Notez l'utilisation de la commande **sudo**. +
-</WRAP> +
- +
-=====LAB #- La Commande ansible-playbook=====+
  
 La commande **ansible-playbook** permet d’insérer la configuration d'Ansible dans des fichiers afin de pouvoir ré-exécuter les mêmes jeux de commandes à chaque fois. La commande **ansible-playbook** utilisent des **Playbook Files** ainsi que des **Inventory Files**.  La commande **ansible-playbook** permet d’insérer la configuration d'Ansible dans des fichiers afin de pouvoir ré-exécuter les mêmes jeux de commandes à chaque fois. La commande **ansible-playbook** utilisent des **Playbook Files** ainsi que des **Inventory Files**. 
  
-====Playbook Files====+====2.1 - Playbook Files====
  
 Un Playbook File contient une liste de **Plays** qui regroupent des tâches, appelées des **tasks**. Chaque task est une commande à exécuter sur une machine cible : Un Playbook File contient une liste de **Plays** qui regroupent des tâches, appelées des **tasks**. Chaque task est une commande à exécuter sur une machine cible :
 +
 +{{ :elearning:workbooks:debian:6:avance:l130:ansible-playbooks.png?nolink&600 |}}
  
 {{ :elearning:workbooks:debian:6:avance:playbook.png?nolink&400 |}} {{ :elearning:workbooks:debian:6:avance:playbook.png?nolink&400 |}}
 +
 +{{ :elearning:workbooks:debian:6:avance:l130:ansible-playbook.png?nolink&600 |}}
  
 Dans l'exemple suivant, le playbook contient deux **Play** commençant par le caractère **-** : Dans l'exemple suivant, le playbook contient deux **Play** commençant par le caractère **-** :
Ligne 508: Ligne 479:
   * Le mot clef **tasks:** contient une autre liste YAML qui spécifie les tâches à effectuer.   * Le mot clef **tasks:** contient une autre liste YAML qui spécifie les tâches à effectuer.
  
-===Tasks===+====2.2 - Tasks====
  
 Un task est une tâche individuelle qui doit être accomplie : Un task est une tâche individuelle qui doit être accomplie :
Ligne 528: Ligne 499:
   * Le **module** Ansible **group** est un dictionnaire YAML qui contient deux champs - **name** et **state**.   * Le **module** Ansible **group** est un dictionnaire YAML qui contient deux champs - **name** et **state**.
  
-===Handlers===+====2.3 - Handlers====
  
 Un **Handler** est une tâche **conditionnelle** : Un **Handler** est une tâche **conditionnelle** :
Ligne 569: Ligne 540:
   * Dans le cas contraire, le handler n'est pas appelé.    * Dans le cas contraire, le handler n'est pas appelé. 
  
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Notez que les handlers sont appelés **après** l'exécution de tous les **tasks**. Pour appeler un handler immédiatement, il convient d'utiliser **meta: flush_handlers** à l'emplacement voulu. **Important** : Notez que les handlers sont appelés **après** l'exécution de tous les **tasks**. Pour appeler un handler immédiatement, il convient d'utiliser **meta: flush_handlers** à l'emplacement voulu.
 </WRAP> </WRAP>
  
-===Modules===+====2.4 - Modules====
  
-La liste complète des modules se trouve à **[[http://docs.ansible.com/ansible/latest/list_of_all_modules.html |cette]]** adresse. Chaque module commence par vérifier si un task doit être effectué avant de l'entreprendre.+La liste complète des modules se trouve à **[[https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html |cette]]** adresse. Chaque module commence par vérifier si un task doit être effectué avant de l'entreprendre.
  
-==Modules pour des Paquets==+===2.4.1 - Modules pour des Paquets===
  
   * Le **module** Ansible **package** est généralement une valeur scalaire qui contient une chaîne qui stipule le paquet à installer ou bien un dictionnaire. Le contenu est composé de deux paramètres - **name** et **state**. Dans le cas de ce module la valeur du paramètre **state** peut être **latest**, **present**, **absent** ou le numéro d'une version du paquet à installer. Ce module utilise le gestionnaire des paquets de la distribution concernée,   * Le **module** Ansible **package** est généralement une valeur scalaire qui contient une chaîne qui stipule le paquet à installer ou bien un dictionnaire. Le contenu est composé de deux paramètres - **name** et **state**. Dans le cas de ce module la valeur du paramètre **state** peut être **latest**, **present**, **absent** ou le numéro d'une version du paquet à installer. Ce module utilise le gestionnaire des paquets de la distribution concernée,
Ligne 583: Ligne 554:
   * Le **module** Ansible **gem** est décrit par deux paramètres - **name** et **state**. Dans le cas de ce module la valeur du paramètre **state** est similaire à celle du module package.   * Le **module** Ansible **gem** est décrit par deux paramètres - **name** et **state**. Dans le cas de ce module la valeur du paramètre **state** est similaire à celle du module package.
  
-==Modules pour des Fichiers==+===2.4.2 - Modules pour des Fichiers===
  
   * Le **module** Ansible **copy** copie un fichier du contrôleur vers un système distant. Ce module peut vérifier les propriétés du fichier telles son contenu, le propriétaire avec **owner:**, le groupe avec **group:** ou les permissions avec **0644**,   * Le **module** Ansible **copy** copie un fichier du contrôleur vers un système distant. Ce module peut vérifier les propriétés du fichier telles son contenu, le propriétaire avec **owner:**, le groupe avec **group:** ou les permissions avec **0644**,
Ligne 591: Ligne 562:
   * Le **module** Ansible **unarchive** désarchive une archive sur le système distant. Avant de désarchiver l'archive, Ansible vérifie si le fichier spécifié par la valeur de **creates** existe ou pas. Dans le cas où le fichier n'existe pas, Ansible procède au désarchivage. Dans le cas contraire, Ansible considère que l'archive a déjà été désarchivé.   * Le **module** Ansible **unarchive** désarchive une archive sur le système distant. Avant de désarchiver l'archive, Ansible vérifie si le fichier spécifié par la valeur de **creates** existe ou pas. Dans le cas où le fichier n'existe pas, Ansible procède au désarchivage. Dans le cas contraire, Ansible considère que l'archive a déjà été désarchivé.
  
-==Modules pour le Système==+===2.4.3 - Modules pour le Système===
  
 Les modules les plus importants dans cette catégorie sont : Les modules les plus importants dans cette catégorie sont :
Ligne 600: Ligne 571:
   * **group**.   * **group**.
  
-====Inventory Files====+====2.5 - Inventory Files====
  
 Un Ansible Inventory File : Un Ansible Inventory File :
Ligne 606: Ligne 577:
   * contrôle quels systèmes sont ciblés par ansible-playbook,   * contrôle quels systèmes sont ciblés par ansible-playbook,
   * permet des configurations par système,   * permet des configurations par système,
-  * est un fichier au format INI, +  * est un fichier au format INI. 
-  * est stocké par défaut dans le répertoire **/etc/ansible/hosts**.+ 
 +L'inventory file par défaut est **/etc/ansible/hosts**.
  
 Dans un tel fichier, on peut trouver des listes simples : Dans un tel fichier, on peut trouver des listes simples :
Ligne 638: Ligne 610:
 </file>  </file> 
  
-Par exemple, l'Inventory file pour quatre systèmes différents pourrait ressembler à l'exemple suivant :+Par exemple, l'Inventory File pour quatre systèmes différents pourrait ressembler à l'exemple suivant :
  
 <file> <file>
 ... ...
-web01 ansible_hostname=10.0.2.11 ansible_user=trainee+web01 ansible_hostname=10.0.2.54 ansible_user=trainee
 ... ...
-web02 ansible_hostname=10.0.2.12 ansible_user=trainee+web02 ansible_hostname=10.0.2.55 ansible_user=trainee
 ... ...
-web03 ansible_hostname=10.0.2.13 ansible_user=trainee+web03 ansible_hostname=10.0.2.56 ansible_user=trainee
 ... ...
-web04 ansible_hostname=10.0.2.14 ansible_user=trainee+web04 ansible_hostname=10.0.2.57 ansible_user=trainee
 ... ...
 </file> </file>
  
-===Privilèges===+====2.6 - Privilèges====
  
 Ansible a besoin d'obtenir les privilèges d'administration pour la plupart des tâches à accomplir. L'escalade des privilèges peut être configurée dans trois endroits différents grâce à l'utilisation : Ansible a besoin d'obtenir les privilèges d'administration pour la plupart des tâches à accomplir. L'escalade des privilèges peut être configurée dans trois endroits différents grâce à l'utilisation :
Ligne 666: Ligne 638:
   * **Docker** - la commande docker exec. La configuration est effectuée par Ansible au lieu d'un DockerFile traditionnel.   * **Docker** - la commande docker exec. La configuration est effectuée par Ansible au lieu d'un DockerFile traditionnel.
  
-===Création de Groupes===+===2.6.1 - Création de Groupes===
  
 Ansible permet le regroupement d'hôtes dans des groupes. Prenons l'exemple suivant : Ansible permet le regroupement d'hôtes dans des groupes. Prenons l'exemple suivant :
Ligne 702: Ligne 674:
  
 [debian:children] [debian:children]
-web+apache
 nginx nginx
  
Ligne 752: Ligne 724:
 Dans cet exemple, la valeur du mot clef **hosts:** est le nom d'un groupe. Dans cet exemple, la valeur du mot clef **hosts:** est le nom d'un groupe.
  
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Notez qu'il existe un groupe spécial appelé **all**. Ce groupe n'a pas besoin d'être défini et contient l'ensemble des hôtes références dans l'Inventory File **Important** : Notez qu'il existe un groupe spécial appelé **all**. Ce groupe n'a pas besoin d'être défini et contient l'ensemble des hôtes références dans l'Inventory File
 </WRAP> </WRAP>
  
-Dans la machine virtuelle Ansible, créez le fichier Inventory File suivant :+Dans la machine virtuelle **centos8**, créez le fichier Inventory File suivant :
  
 <code> <code>
-trainee@ansible:~$ vi inventory +[trainee@centos8 ~]$ vi inventory 
-trainee@ansible:~$ cat inventory+[trainee@centos8 ~]$ cat inventory
 [basededonnees] [basededonnees]
 web01 web01
Ligne 783: Ligne 755:
  
 <code> <code>
-trainee@ansible:~$ vi playbook.yaml  +[trainee@centos8 ~]$ vi playbook.yaml 
-trainee@ansible:~$ cat playbook.yaml +[trainee@centos8 ~]$ cat playbook.yaml
 --- ---
 - hosts: basededonnees - hosts: basededonnees
Ligne 790: Ligne 762:
   tasks:   tasks:
     - name: install     - name: install
-      package: name=postgresql state=installed+      package: name=postgresql state=present
     - name: service     - name: service
       service: name=postgresql state=started enabled=yes       service: name=postgresql state=started enabled=yes
Ligne 798: Ligne 770:
   tasks:   tasks:
     - name: install jre     - name: install jre
-      package: name=openjdk-8-jre state=installed+      package: name=openjdk-8-jre state=present
 - hosts: equilibrage - hosts: equilibrage
   become: true   become: true
   tasks:   tasks:
     - name: install     - name: install
-      package: name=haproxy stated=installed+      package: name=haproxy state=present
     - name: service     - name: service
       service: name=haproxy state=started enabled=yes       service: name=haproxy state=started enabled=yes
Ligne 812: Ligne 784:
  
 <code> <code>
-trainee@ansible:~$ ansible-playbook -i inventory playbook.yaml +[trainee@centos8 ~]$ ansible-playbook -i inventory playbook.yaml
  
-PLAY [basededonnees] *********************************************************************************************************************************************************+PLAY [basededonnees] *********************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web01] ok: [web01]
  
-TASK [install] ********************************************************************************************************************************************************** +TASK [install] ***************************************************************************************************************************************************************************************************
-[DEPRECATION WARNING]: State 'installed' is deprecated. Using state 'present' instead.. This feature will be removed in version 2.9. Deprecation warnings can be  +
-disabled by setting deprecation_warnings=False in ansible.cfg.+
 changed: [web01] changed: [web01]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web01] ok: [web01]
  
-PLAY [dotcms] *********************************************************************************************************************************************************** +PLAY [dotcms] **************************************************************************************************************************************************************************************************** 
- +TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
-TASK [Gathering Facts] ************************************************************************************************************************************************** +
-ok: [web03]+
 ok: [web02] ok: [web02]
- 
-TASK [install jre] ****************************************************************************************************************************************************** 
 ok: [web03] ok: [web03]
-ok: [web02] 
  
-PLAY [equilibrage] ********************************************************************************************************************************************************* +TASK [install jre] ***********************************************************************************************************************************************************************************************
- +
-TASK [Gathering Facts] ************************************************************************************************************************************************** +
-ok: [web04] +
- +
-TASK [install] ********************************************************************************************************************************************************** +
-fatal: [web04]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (apt) module: stated Supported parameters include: allow_unauthenticated, autoclean, autoremove, cache_valid_time, deb, default_release, dpkg_options, force, force_apt_get, install_recommends, only_upgrade, package, purge, state, update_cache, upgrade"+
- to retry, use: --limit @/home/trainee/playbook.retry +
- +
-PLAY RECAP ************************************************************************************************************************************************************** +
-web01                      : ok=3    changed=1    unreachable=0    failed=0    +
-web02                      : ok=2    changed=0    unreachable=0    failed=0    +
-web03                      : ok=2    changed=0    unreachable=0    failed=0    +
-web04                      : ok=1    changed=0    unreachable=0    failed=1  +
-</code> +
- +
-Notez l’avertissement ainsi que l'erreur. +
- +
-<WRAP center round important 60%> +
-**Important** : L'avertissement nous apprend que le mot clef **installed** devrait être remplacé par **present**.  +
-</WRAP> +
- +
-<WRAP center round important 60%> +
-**Important** : L'erreur indique qu'il existe une erreur de syntaxe dans le fichier playbook.yaml.  +
-</WRAP> +
- +
-En consultant le fichier playbook.yaml, il existe une erreur à la ligne 19 - **stated** devrait être corrigé en **state** : +
- +
-<code> +
-trainee@ansible:~$ nl playbook.yaml +
-     1 --- +
-     2 - hosts: basededonnees +
-     3   become: true +
-     4   tasks: +
-     5     - name: install +
-     6       package: name=postgresql state=installed +
-     7     - name: service +
-     8       service: name=postgresql state=started enabled=yes +
-     9       tags: service +
-    10 - hosts: dotcms +
-    11   become: true +
-    12   tasks: +
-    13     - name: install jre +
-    14       package: name=openjdk-8-jre state=installed +
-    15 - hosts: equilibrage +
-    16   become: true +
-    17   tasks: +
-    18     - name: install +
-    19       package: name=haproxy stated=installed +
-    20     - name: service +
-    21       service: name=haproxy state=started enabled=yes +
-    22       tags: service +
-</code> +
- +
-Corrigez le fichier playbook.yaml aux lignes **6**, **14** et **19** et remplacez le mot **installed** par **present** : +
- +
-<code> +
-trainee@ansible:~$ vi playbook.yaml  +
-trainee@ansible:~$ cat playbook.yaml  +
---- +
-- hosts: basededonnees +
-  become: true +
-  tasks: +
-    - name: install +
-      package: name=postgresql state=present +
-    - name: service +
-      service: name=postgresql state=started enabled=yes +
-      tags: service +
-- hosts: dotcms +
-  become: true +
-  tasks: +
-    - name: install jre +
-      package: name=openjdk-8-jre state=present +
-- hosts: equilibrage +
-  become: true +
-  tasks: +
-    - name: install +
-      package: name=haproxy state=present +
-    - name: service +
-      service: name=haproxy state=started enabled=yes +
-      tags: service +
-</code> +
- +
-Ré-exécutez la commande **ansible-playbook** : +
- +
-<code> +
-trainee@ansible:~$ ansible-playbook -i inventory playbook.yaml  +
- +
-PLAY [basededonnees] ********************************************************************************************************************************************************* +
- +
-TASK [Gathering Facts] ************************************************************************************************************************************************** +
-ok: [web01] +
- +
-TASK [install] ********************************************************************************************************************************************************** +
-ok: [web01] +
- +
-TASK [service] ********************************************************************************************************************************************************** +
-ok: [web01] +
- +
-PLAY [dotcms] *********************************************************************************************************************************************************** +
- +
-TASK [Gathering Facts] **************************************************************************************************************************************************+
 ok: [web03] ok: [web03]
 ok: [web02] ok: [web02]
  
-TASK [install jre] ****************************************************************************************************************************************************** +PLAY [equilibrage] ***********************************************************************************************************************************************************************************************
-ok: [web02] +
-ok: [web03] +
- +
-PLAY [equilibrage] *********************************************************************************************************************************************************+
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [install] **********************************************************************************************************************************************************+TASK [install] ***************************************************************************************************************************************************************************************************
 changed: [web04] changed: [web04]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-web01                      : ok=3    changed=   unreachable=0    failed=0    +web01                      : ok=3    changed=   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
-web02                      : ok=2    changed=0    unreachable=0    failed=0    +web02                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
-web03                      : ok=2    changed=0    unreachable=0    failed=0    +web03                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
-web04                      : ok=3    changed=1    unreachable=0    failed=0 +web04                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
 </code> </code>
- 
-<WRAP center round important 60%> 
-**Important** : Notez que seul **web04** a été modifié. 
-</WRAP> 
  
 Il est possible de limiter l'action de la commande **ansible-playbook** avec l'option **-l**. Exécutez la commande **ansible-playbook** en limitant l'action d'ansible-playbook au groupe **equilibrage** : Il est possible de limiter l'action de la commande **ansible-playbook** avec l'option **-l**. Exécutez la commande **ansible-playbook** en limitant l'action d'ansible-playbook au groupe **equilibrage** :
  
 <code> <code>
-trainee@ansible:~$ ansible-playbook -i inventory playbook.yaml -l equilibrage+[trainee@centos8 ~]$ ansible-playbook -i inventory playbook.yaml -l equilibrage
  
-PLAY [basededonnees] *********************************************************************************************************************************************************+PLAY [basededonnees] *********************************************************************************************************************************************************************************************
 skipping: no hosts matched skipping: no hosts matched
  
-PLAY [dotcms] ***********************************************************************************************************************************************************+PLAY [dotcms] ****************************************************************************************************************************************************************************************************
 skipping: no hosts matched skipping: no hosts matched
  
-PLAY [equilibrage] *********************************************************************************************************************************************************+PLAY [equilibrage] ***********************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [install] **********************************************************************************************************************************************************+TASK [install] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-web04                      : ok=3    changed=0    unreachable=0    failed=0 +web04                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 </code> </code>
  
Ligne 997: Ligne 853:
  
 <code> <code>
-trainee@ansible:~$ ansible-playbook -i inventory playbook.yaml -l web04+[trainee@centos8 ~]$ ansible-playbook -i inventory playbook.yaml -l web04
  
-PLAY [basededonnees] ****************************************************************************************************************************************************+PLAY [basededonnees] *********************************************************************************************************************************************************************************************
 skipping: no hosts matched skipping: no hosts matched
  
-PLAY [dotcms] ***********************************************************************************************************************************************************+PLAY [dotcms] ****************************************************************************************************************************************************************************************************
 skipping: no hosts matched skipping: no hosts matched
  
-PLAY [equilibrage] ******************************************************************************************************************************************************+PLAY [equilibrage] ***********************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [install] **********************************************************************************************************************************************************+TASK [install] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-web04                      : ok=3    changed=0    unreachable=0    failed=0+web04                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
 </code> </code>
  
Ligne 1036: Ligne 892:
  
 <code> <code>
-trainee@ansible:~$ ansible-playbook -i inventory playbook.yaml --tags service+[trainee@centos8 ~]$ ansible-playbook -i inventory playbook.yaml --tags service
  
-PLAY [basededonnees] ****************************************************************************************************************************************************+PLAY [basededonnees] *********************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web01] ok: [web01]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web01] ok: [web01]
  
-PLAY [dotcms] ***********************************************************************************************************************************************************+PLAY [dotcms] ****************************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web02] ok: [web02]
 ok: [web03] ok: [web03]
  
-PLAY [equilibrage] ******************************************************************************************************************************************************+PLAY [equilibrage] ***********************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-web01                      : ok=2    changed=0    unreachable=0    failed=0    +web01                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
-web02                      : ok=1    changed=0    unreachable=0    failed=0    +web02                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
-web03                      : ok=1    changed=0    unreachable=0    failed=0    +web03                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
-web04                      : ok=2    changed=0    unreachable=0    failed=0 +web04                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 </code> </code>
  
Ligne 1070: Ligne 926:
  
 <code> <code>
-trainee@ansible:~$ ansible-playbook -i inventory playbook.yaml --tags service -l equilibrage+[trainee@centos8 ~]$ ansible-playbook -i inventory playbook.yaml --tags service -l equilibrage
  
-PLAY [basededonnees] ****************************************************************************************************************************************************+PLAY [basededonnees] *********************************************************************************************************************************************************************************************
 skipping: no hosts matched skipping: no hosts matched
  
-PLAY [dotcms] ***********************************************************************************************************************************************************+PLAY [dotcms] ****************************************************************************************************************************************************************************************************
 skipping: no hosts matched skipping: no hosts matched
  
-PLAY [equilibrage] ******************************************************************************************************************************************************+PLAY [equilibrage] ***********************************************************************************************************************************************************************************************
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-TASK [service] **********************************************************************************************************************************************************+TASK [service] ***************************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-web04                      : ok=2    changed=0    unreachable=0    failed=0 +web04                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
 </code> </code>
  
-=====LAB #- La Commande ansible-galaxy=====+=====LAB #- La Commande ansible-galaxy=====
  
-====Utiliser des Rôles avec un Play Book====+====3.1 - Utiliser des Rôles avec un Play Book====
  
 Les **Rôles** permettent la création d'une bibliothèque réutilisable.  Les **Rôles** permettent la création d'une bibliothèque réutilisable. 
 +
 +{{ :elearning:workbooks:debian:6:avance:l130:blog-ansible.png?nolink&600 |}}
  
 Un **Rôle** est un répertoire contenant les sous-répertoires suivants : Un **Rôle** est un répertoire contenant les sous-répertoires suivants :
Ligne 1113: Ligne 971:
     * contient des variables de configuration de haute priorité, difficilement sur-chargées par des variables ailleurs.     * contient des variables de configuration de haute priorité, difficilement sur-chargées par des variables ailleurs.
  
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Notez que seul le répertoire **tasks** est obligatoire. **Important** : Notez que seul le répertoire **tasks** est obligatoire.
 </WRAP> </WRAP>
Ligne 1159: Ligne 1017:
 </file> </file>
  
-Dans le cas de l'utilisation de **Rôles**, le fichier playlist.yaml devient plus simplifié. Par exemple :+Dans le cas de l'utilisation de **Rôles**, le fichier playbook.yaml devient plus simplifié. Par exemple :
  
 <file>  <file> 
Ligne 1177: Ligne 1035:
 </file> </file>
  
-====Ansible Galaxy====+====3.2 - Ansible Galaxy====
  
 Ansible Galaxy est un dépôt de Rôles créées par des tierces personnes. Ce dépôt peut être consulté à l'adresse **[[https://galaxy.ansible.com/]]** : Ansible Galaxy est un dépôt de Rôles créées par des tierces personnes. Ce dépôt peut être consulté à l'adresse **[[https://galaxy.ansible.com/]]** :
  
-{{ :elearning:workbooks:debian:6:avance:galaxy01.png?nolink&600 |}}+{{ :elearning:workbooks:debian:6:avance:l130:ansible1.png?direct&600 |}}
  
-Recherchez le mot clef **java** :+Recherchez le mot clef **java** avec un premier filtre de type **Rôle** et un deuxième filtre de type **Download Count** :
  
-{{ :elearning:workbooks:debian:6:avance:galaxy02.png?nolink&600 |}} +{{ :elearning:workbooks:debian:6:avance:l130:ansible2.png?direct&600 |}}
- +
-Appliquez le filtre **Download Count** : +
- +
-{{ :elearning:workbooks:debian:6:avance:galaxy03.png?nolink&600 |}}+
  
 Consultez la première dans la liste : Consultez la première dans la liste :
  
-{{ :elearning:workbooks:debian:6:avance:galaxy04.png?nolink&600 |}}+{{ :elearning:workbooks:debian:6:avance:l130:ansible3.png?direct&600 |}}
  
 Copiez la commande d'installation : Copiez la commande d'installation :
  
-{{ :elearning:workbooks:debian:6:avance:galaxy05.png?nolink&600 |}}+{{ :elearning:workbooks:debian:6:avance:l130:ansible4.png?direct&600 |}}
  
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Notez que la convention utilisée pour les noms est //nom_utilisateur.rôle//. **Important** : Notez que la convention utilisée pour les noms est //nom_utilisateur.rôle//.
 </WRAP> </WRAP>
  
-Dans la machine **Ansible**, collez la commande copiée et exécutez-la :+Dans la machine **centos8**, collez la commande copiée et exécutez-la :
  
 <code> <code>
-trainee@ansible:~$ ansible-galaxy install geerlingguy.java+[trainee@centos8 ~]$ ansible-galaxy install geerlingguy.java 
 +Starting galaxy role install process
 - downloading role 'java', owned by geerlingguy - downloading role 'java', owned by geerlingguy
-- downloading role from https://github.com/geerlingguy/ansible-role-java/archive/1.9.5.tar.gz+- downloading role from https://github.com/geerlingguy/ansible-role-java/archive/2.0.1.tar.gz
 - extracting geerlingguy.java to /home/trainee/.ansible/roles/geerlingguy.java - extracting geerlingguy.java to /home/trainee/.ansible/roles/geerlingguy.java
-- geerlingguy.java (1.9.5) was installed successfully+- geerlingguy.java (2.0.1) was installed successfully
 </code> </code>
  
-Consultez maintenant le répertoire **/home/trainee/.ansible/roles/geerlingguy.java** :+Installez le paquet **tree** et consultez le répertoire **/home/trainee/.ansible/roles/geerlingguy.java** :
  
 <code> <code>
-trainee@ansible:~$ su - +[trainee@centos8 ~]$ su - 
-Mot de passe fenestros +Password:  
-root@ansible:~# apt-get install tree +[root@centos8 ~]which tree 
-... +/usr/bin/tree 
-root@ansible:~# exit +[root@centos8 ~]# exit 
-trainee@ansible:~$ tree /home/trainee/.ansible/roles/geerlingguy.java+logout 
 +[trainee@centos8 ~]$ tree /home/trainee/.ansible/roles/geerlingguy.java
 /home/trainee/.ansible/roles/geerlingguy.java /home/trainee/.ansible/roles/geerlingguy.java
 ├── defaults ├── defaults
-│   └── main.yml+│   └── main.yml
 ├── LICENSE ├── LICENSE
 ├── meta ├── meta
-│   └── main.yml+│   └── main.yml
 ├── molecule ├── molecule
-│   └── default +│   └── default 
-│       ├── molecule.yml +│       ├── converge.yml 
-│       ├── playbook.yml +│       └── molecule.yml
-│       ├── tests +
-│       │   └── test_default.py +
-│       └── yaml-lint.yml+
 ├── README.md ├── README.md
 ├── tasks ├── tasks
-│   ├── main.yml +│   ├── main.yml 
-│   ├── setup-Debian.yml +│   ├── setup-Debian.yml 
-│   ├── setup-FreeBSD.yml +│   ├── setup-FreeBSD.yml 
-│   └── setup-RedHat.yml+│   └── setup-RedHat.yml
 ├── templates ├── templates
-│   └── java_home.sh.j2+│   └── java_home.sh.j2
 └── vars └── vars
 +    ├── Debian-10.yml
 +    ├── Debian-11.yml
     ├── Debian-8.yml     ├── Debian-8.yml
     ├── Debian-9.yml     ├── Debian-9.yml
     ├── Fedora.yml     ├── Fedora.yml
     ├── FreeBSD.yml     ├── FreeBSD.yml
-    ├── RedHat-6.yml 
     ├── RedHat-7.yml     ├── RedHat-7.yml
 +    ├── RedHat-8.yml
     ├── Ubuntu-12.yml     ├── Ubuntu-12.yml
     ├── Ubuntu-14.yml     ├── Ubuntu-14.yml
     ├── Ubuntu-16.yml     ├── Ubuntu-16.yml
-    ── Ubuntu-18.yml+    ── Ubuntu-18.yml 
 +    └── Ubuntu-20.yml
  
-directories, 23 files+directories, 24 files
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important>
 **Important** : Notez que dans ce cas il n'y a pas eu de dépendances. Par contre la commande **ansible-galaxy** sait résoudre et gérer les dépendances. **Important** : Notez que dans ce cas il n'y a pas eu de dépendances. Par contre la commande **ansible-galaxy** sait résoudre et gérer les dépendances.
 </WRAP> </WRAP>
Ligne 1265: Ligne 1121:
  
 <code> <code>
-trainee@ansible:~$ vi playbook_java.yaml +[trainee@centos8 ~]$ vi playbook_java.yaml 
-trainee@ansible:~$ cat playbook_java.yaml+[trainee@centos8 ~]$ cat playbook_java.yaml
 --- ---
 - hosts: all - hosts: all
Ligne 1274: Ligne 1130:
 </code> </code>
  
-Exécutez la commande **ansible-playbook** :+Avant d’exécuter ce playbook, créez le fichier **~/.ansible.cfg** :
  
 <code> <code>
-trainee@ansible:~$ ansible-playbook -i inventory playbook_java.yaml+[trainee@centos8 ~]$ vi .ansible.cfg 
 +[trainee@centos8 ~]cat .ansible.cfg 
 +[defaults] 
 +deprecation_warnings=False 
 +log_path = ./ansible.log 
 +</code>
  
-PLAY [all] **************************************************************************************************************************************************************+<WRAP center round important> 
 +**Important** : Le comportement d'Ansible peut être configuré par des directives dans la variable d'environnement **ANSIBLE_CONFIG** ou dans le fichier **ansible.cfg** dans le répertoire courant de travail ou dans le fichier **.ansible.cfg** dans le répertoire personnel de l'utilisateur ou dans le fichier **/etc/ansible/ansible.cfg**, selon le premier qui est trouvé. Pour une liste complète des directives, consultez la page [[https://docs.ansible.com/ansible/latest/reference_appendices/config.html]]. 
 +</WRAP>
  
-TASK [Gathering Facts] **************************************************************************************************************************************************+Pour consultez l'ensemble des variables, exécutez la commande suivante : 
 + 
 +<code> 
 +[trainee@centos8 ~]$ ansible-config list | more 
 +ACTION_WARNINGS: 
 +  default: true 
 +  description: [By default Ansible will issue a warning when received from a task 
 +      action (module or action plugin), These warnings can be silenced by adjusting 
 +      this setting to False.] 
 +  env: 
 +  - {name: ANSIBLE_ACTION_WARNINGS} 
 +  ini: 
 +  - {key: action_warnings, section: defaults} 
 +  name: Toggle action warnings 
 +  type: boolean 
 +  version_added: '2.5' 
 +AGNOSTIC_BECOME_PROMPT: 
 +  default: true 
 +  description: Display an agnostic become prompt instead of displaying a prompt containing 
 +    the command line supplied become method 
 +  env: 
 +  - {name: ANSIBLE_AGNOSTIC_BECOME_PROMPT} 
 +  ini: 
 +  - {key: agnostic_become_prompt, section: privilege_escalation} 
 +  name: Display an agnostic become prompt 
 +  type: boolean 
 +  version_added: '2.5' 
 +  yaml: {key: privilege_escalation.agnostic_become_prompt} 
 +ALLOW_WORLD_READABLE_TMPFILES: 
 +  default: false 
 +  deprecated: {alternatives: world_readable_tmp, collection_name: ansible.builtin, 
 +    version: '2.14', why: moved to shell plugins} 
 +  description: ['This setting has been moved to the individual shell plugins as a 
 +      plugin option :ref:`shell_plugins`.', 'The existing configuration settings are 
 +      still accepted with the shell plugin adding additional options, like variables.', 
 +    This message will be removed in 2.14.] 
 +  name: Allow world-readable temporary files 
 +  type: boolean 
 +ANSIBLE_CONNECTION_PATH: 
 +  default: null 
 +  description: [Specify where to look for the ansible-connection script. This location 
 +      will be checked before searching $PATH., 'If null, ansible will start with the 
 +      same directory as the ansible script.'
 +  env: 
 +  - {name: ANSIBLE_CONNECTION_PATH} 
 +  ini: 
 +  - {key: ansible_connection_path, section: persistent_connection} 
 +  name: Path of ansible-connection script 
 +  type: path 
 +  version_added: '2.8' 
 +  yaml: {key: persistent_connection.ansible_connection_path} 
 +ANSIBLE_COW_ACCEPTLIST: 
 +  default: [bud-frogs, bunny, cheese, daemon, default, dragon, elephant-in-snake, 
 +    elephant, eyes, hellokitty, kitty, luke-koala, meow, milk, moofasa, moose, ren, 
 +    sheep, small, stegosaurus, stimpy, supermilker, three-eyes, turkey, turtle, tux, 
 +    udder, vader-koala, vader, www] 
 +  description: White list of cowsay templates that are 'safe' to use, set to empty 
 +    list if you want to enable all installed templates. 
 +  env: 
 +  - deprecated: {alternatives: ANSIBLE_COW_ACCEPTLIST, collection_name: ansible.builtin, 
 +--More-- 
 +</code> 
 + 
 +Exécutez maintenant la commande **ansible-playbook** : 
 + 
 +<code> 
 +[trainee@centos8 ~]$ ansible-playbook -i inventory playbook_java.yaml 
 + 
 +PLAY [all] ******************************************************************************************************************************************************************************************************* 
 + 
 +TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
 ok: [web04] ok: [web04]
-ok: [web02] 
-ok: [web03] 
 ok: [web01] ok: [web01]
 +ok: [web03]
 +ok: [web02]
  
-TASK [geerlingguy.java : Include OS-specific variables for Fedora or FreeBSD.] ****************************************************************************************** +TASK [geerlingguy.java : Include OS-specific variables for Fedora or FreeBSD.] ***********************************************************************************************************************************
-skipping: [web04]+
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
- 
-TASK [geerlingguy.java : Include version-specific variables for CentOS/RHEL.] ******************************************************************************************* 
 skipping: [web04] skipping: [web04]
 +
 +TASK [geerlingguy.java : Include version-specific variables for CentOS/RHEL.] ************************************************************************************************************************************
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
- 
-TASK [geerlingguy.java : Include version-specific variables for Ubuntu.] ************************************************************************************************ 
 skipping: [web04] skipping: [web04]
 +
 +TASK [geerlingguy.java : Include version-specific variables for Ubuntu.] *****************************************************************************************************************************************
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
 +skipping: [web04]
  
-TASK [geerlingguy.java : Include version-specific variables for Debian.] ************************************************************************************************ +TASK [geerlingguy.java : Include version-specific variables for Debian.] *****************************************************************************************************************************************
-ok: [web04] +
-ok: [web01]+
 ok: [web02] ok: [web02]
 ok: [web03] ok: [web03]
- +ok[web01]
-TASK [geerlingguy.java Define java_packages.*************************************************************************************************************************+
 ok: [web04] ok: [web04]
 +
 +TASK [geerlingguy.java : Define java_packages.] ******************************************************************************************************************************************************************
 ok: [web01] ok: [web01]
 ok: [web02] ok: [web02]
 ok: [web03] ok: [web03]
 +ok: [web04]
  
-TASK [geerlingguy.java : include_tasks] ********************************************************************************************************************************* +TASK [geerlingguy.java : include_tasks] **************************************************************************************************************************************************************************
-skipping: [web04]+
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
 +skipping: [web04]
  
-TASK [geerlingguy.java : include_tasks] ********************************************************************************************************************************* +TASK [geerlingguy.java : include_tasks] ************************************************************************************************************************************************************************** 
-included: /home/trainee/.ansible/roles/geerlingguy.java/tasks/setup-Debian.yml for web04, web01, web02, web03+included: /home/trainee/.ansible/roles/geerlingguy.java/tasks/setup-Debian.yml for web01, web02, web03, web04
  
-TASK [geerlingguy.java : Ensure 'man' directory exists.] **************************************************************************************************************** +TASK [geerlingguy.java : Ensure 'man' directory exists.] *********************************************************************************************************************************************************
-skipping: [web04]+
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
 +skipping: [web04]
  
-TASK [geerlingguy.java : Ensure Java is installed.] *********************************************************************************************************************+TASK [geerlingguy.java : Ensure Java is installed.] **************************************************************************************************************************************************************
 changed: [web04] changed: [web04]
 changed: [web03] changed: [web03]
Ligne 1338: Ligne 1271:
 changed: [web01] changed: [web01]
  
-TASK [geerlingguy.java : include_tasks] ********************************************************************************************************************************* +TASK [geerlingguy.java : include_tasks] **************************************************************************************************************************************************************************
-skipping: [web04]+
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
 +skipping: [web04]
  
-TASK [geerlingguy.java : Set JAVA_HOME if configured.] ****************************************************************************************************************** +TASK [geerlingguy.java : Set JAVA_HOME if configured.] ***********************************************************************************************************************************************************
-skipping: [web04]+
 skipping: [web01] skipping: [web01]
 skipping: [web02] skipping: [web02]
 skipping: [web03] skipping: [web03]
 +skipping: [web04]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-web01                      : ok=5    changed=1    unreachable=0    failed=0    +web01                      : ok=5    changed=1    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0    
-web02                      : ok=5    changed=1    unreachable=0    failed=0    +web02                      : ok=5    changed=1    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0    
-web03                      : ok=5    changed=1    unreachable=0    failed=0    +web03                      : ok=5    changed=1    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0    
-web04                      : ok=5    changed=1    unreachable=0    failed=0+web04                      : ok=5    changed=1    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0 
 </code> </code>
  
-<WRAP center round important 60%> +Notez qu'Ansible a pu localiser le Rôle grâce à la valeur de la variable Ansible **ANSIBLE_ROLES_PATH**. La valeur par défaut de cette variable est **~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles** :
-**Important** : Notez qu'Ansible a pu localiser le Rôle grâce à la valeur de la variable Ansible **ANSIBLE_ROLES_PATH**. La valeur par défaut de cette variable est **~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles**+
-</WRAP>+
  
 +<code>
 +[trainee@centos8 ~]$ ansible-config dump |grep ROLES_PATH
 +DEFAULT_ROLES_PATH(default) = ['/home/trainee/.ansible/roles', '/usr/share/ansible/roles', '/etc/ansible/roles']
 +</code>
 +
 +Le PLAY RECAP contient 7 catégories :
 +
 +  * **ok**
 +    * le nombre de tâches qui ont été traitées sans erreur
 +  * **changed**
 +    * le nombre de tâches qui ont effectué des modifications sur un des hôtes concernés
 +  * **unreachable**
 +    * le nombre de tâches qui n'ont pas été exécutées parce que l'hôte ne pouvait pas être contacté
 +  * **failed**
 +    * le nombre de tâches en erreur pour lesquelles la valeur de **ignore_errors:** était fixée à **false**
 +  * **skipped**
 +    * le nombre de tâches qui n'ont pas été exécutées parce que la valeur de la clause **when** était **fausse**
 +  * **rescued**
 +    * le nombre de tâches de type **rescue** qui ont été exécutées suite à une erreur ailleurs dans le playbook
 +  * **ignored**
 +    * le nombre de tâches en erreur pour lesquelles la valeur de **ignore_errors:** était fixée à **true**
 +
 +Pour mieux expliquer la catégorie **rescued**, considérez le code suivant :
 +
 +<file>
 +---
 + - name: Ansible Blocks
 +   hosts: server1
 +   gather_facts: false
 +
 +   tasks:
 +     - block:
 +        - name: List home directory content
 +          command: "ls -l ~/"
 +
 +        - name: Failing intentionally
 +          command: "ls -l /tmp/does-not-exist"
 +
 +       rescue:
 +        - name: Rescue block (perform recovery)
 +          debug:
 +            msg: "Something went wrong, cleaning up.."
 +
 +       always:
 +        - name: This will execute always
 +          debug:
 +            msg: "I will execute even in failure scenario"
 +</file>
 +
 +Dans le cas ci-dessus, la deuxième tâche dans la section **block** va générer une erreur. Dans ce cas la tâche dans la section **rescue** sera exécutée. Dans **tous** les cas la tâche dans la section **always** sera exécutée.
  
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2023 Hugh Norris.
-Copyright © 2020 Hugh NORRIS +
-</div> +
-</html>+
Menu