Ceci est une ancienne révision du document !
Table des matières
Version - 2020.01
Dernière mise-à-jour : 2021/03/24 16:55
DOF504 - Facts, Facts Secrets et Docker
Contenu du Module
- DOF504 - Facts, Facts Secrets et Docker
- Contenu du Module
- LAB #1 - Utilisation des Facts d'Ansible
- LAB #2 - La Commande ansible-vault
- 2.1 - Crypter le Fichier
- 2.2 - Editer le Fichier
- 2.3 - Décrypter le Fichier
- 2.4 - Utilisation de Mots de Passe Aléatoires
- LAB #3 - Ansible et Docker
- 3.1 - Présentation de Docker
- 3.2 - Installer Docker
- 3.3 - La Connexion à Docker
LAB #1 - Utilisation des Facts d'Ansible
Ansible Facts sont :
- des variables collectées automatiquement par le module setup d'Ansible lors du contrôle à distance d'un hôte,
- spécifiques à l'hôte concerné.
Il est cependant possible d'exécuter ce module manuellement afin de voir les Facts collectées :
trainee@ansible:~/.ansible/roles$ ansible all -i web01, -m setup | more /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature web01 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.0.2.54" ], "ansible_all_ipv6_addresses": [ "fe80::d255:17e1:74c1:306e" ], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "04/01/2014", "ansible_bios_vendor": "SeaBIOS", "ansible_bios_version": "rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org", "ansible_board_asset_tag": "NA", "ansible_board_name": "NA", "ansible_board_serial": "NA", "ansible_board_vendor": "NA", "ansible_board_version": "NA", "ansible_chassis_asset_tag": "NA", "ansible_chassis_serial": "NA", "ansible_chassis_vendor": "QEMU", "ansible_chassis_version": "pc-i440fx-5.2", "ansible_cmdline": { "BOOT_IMAGE": "/boot/vmlinuz-4.9.0-8-amd64", "quiet": true, "ro": true, "root": "UUID=b29b93ed-8de4-4980-a407-15bba3ad09ba" }, "ansible_date_time": { "date": "2021-03-24", "day": "24", "epoch": "1616599366", "hour": "16", "iso8601": "2021-03-24T15:22:46Z", "iso8601_basic": "20210324T162246325210", "iso8601_basic_short": "20210324T162246", "iso8601_micro": "2021-03-24T15:22:46.325210Z", --Plus--
Important : Notez que le nom de chaque Fact commence par ansible_. Évitez donc de créer des variables commençant var cette valeur !
Parmi les Facts, les plus utiles sont :
- “ansible_hostname”: “web01”,
- “ansible_fqdn”: “web01.i2tch.loc”,
- “ansible_architecture”: “x86_64”,
- “ansible_distribution”: “Debian”,
- “ansible_distribution_major_version”: “9”,
- “ansible_distribution_version”: “9.7”,
- “ansible_os_family”: “Debian”,
- “ansible_memtotal_mb”: 240,
- “ansible_processor_cores”: 1,
- “ansible_virtualization_role”: “guest”.
Ainsi que dictionnaire ansible_default_ipv4 :
"ansible_default_ipv4": { "address": "10.0.2.54", "alias": "ens18", "broadcast": "10.0.2.255", "gateway": "10.0.2.1", "interface": "ens18", "macaddress": "de:b9:d4:17:cd:da", "mtu": 1500, "netmask": "255.255.255.0", "network": "10.0.2.0", "type": "ether" },
Modifiez le fichier inventory en mettant les deux machines TargetA et TargetB dans le groupe linux :
trainee@ansible:~/.ansible/roles$ vi inventory trainee@ansible:~/.ansible/roles$ cat inventory [linux] targeta targetb [group1] localhost ansible_connection=local [basededonnees] web01 [dotcms] web02 web03 [equilibrage] web04 [debian:children] basededonnees dotcms equilibrage [debian:vars] ansible_user=trainee
Modifiez le fichier playbook.yaml afin d'utiliser le Rôle exemple01.java en tant qu'utilisateur privilégié :
trainee@ansible:~/.ansible/roles$ vi playbook.yaml trainee@ansible:~/.ansible/roles$ cat playbook.yaml --- - hosts: all become: true roles: - exemple01.java
Connectez-vous à la machine TargetA et supprimez le paquet openjdk-8-jre :
trainee@ansible:~/.ansible/roles$ ssh targeta The authenticity of host 'targeta (10.0.2.52)' 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 'targeta' (ECDSA) to the list of known hosts. Debian GNU/Linux 9 Linux targeta.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: Wed Mar 24 11:49:46 2021 from 10.0.2.50 trainee@targeta:~$ su - Mot de passe : fenestros root@targeta:~# apt-get -y remove openjdk-8-jre ... root@targeta:~# exit déconnexion trainee@targeta:~$ exit déconnexion Connection to targeta closed.
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Utilisez la commande scp pour copier le fichier authorized_keys de la machine virtuelle ansible vers la machine virtueke targetb :
trainee@ansible:~/.ansible/roles$ cd ~ trainee@ansible:~$ scp .ssh/authorized_keys trainee@targetb.i2tch.loc:/home/trainee/.ssh/authorized_keys The authenticity of host 'targetb.i2tch.loc (10.0.2.53)' can't be established. ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'targetb.i2tch.loc' (ECDSA) to the list of known hosts. trainee@targetb.i2tch.loc's password: authorized_keys 100% 701 18.1KB/s 00:00 trainee@ansible:~$ cd .ansible/roles trainee@ansible:~/.ansible/roles$
Connectez-vous à la machine TargetB et supprimez le paquet java-1.8.0-openjdk :
trainee@ansible:~/.ansible/roles$ ssh targetb Last login: Wed Mar 24 11:01:43 2021 [trainee@targetb ~]$ yum -y remove java-1.8.0-openjdk Modules complémentaires chargés : fastestmirror, langpacks Vous devez être super-utilisateur pour exécuter cette commande. [trainee@targetb ~]$ su - Mot de passe : fenestros Dernière connexion : dimanche 21 mars 2021 à 13:34:55 CET sur pts/0 [root@targetb ~]# yum -y remove java-1.8.0-openjdk ... [root@targetb ~]# exit logout [trainee@targetb ~]$ exit déconnexion Connection to targetb closed.
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Grâce au Fact ansible_os_family il est possible d'appliquer le fichier /home/trainee/.ansible/roles/exemple01.java/tasks/main.yaml aux deux distributions. Notez l'utilisation de la clause when :
trainee@ansible:~/.ansible/roles$ vi exemple01.java/tasks/main.yaml trainee@ansible:~/.ansible/roles$ cat exemple01.java/tasks/main.yaml --- - name: install jre (Debian) package: name=openjdk-8-jre state=present when: ansible_os_family == 'Debian' - name: install jre (CentOS) package: name=java-1.8.0-openjdk state=present when: ansible_os_family == 'RedHat'
Exécutez ansible-playbook et constatez le résultat :
trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l linux /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature PLAY [all] ********************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [targeta] ok: [targetb] TASK [exemple01.java : install jre (Debian)] *********************************************************************************************************** skipping: [targetb] [WARNING]: Updating cache and auto-installing missing dependency: python-apt changed: [targeta] TASK [exemple01.java : install jre (CentOS)] *********************************************************************************************************** skipping: [targeta] changed: [targetb] PLAY RECAP ********************************************************************************************************************************************* targeta : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 targetb : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Les conditions peuvent être combinées grâce à and et or. En voici un exemple :
tasks: - name: "Extinction des systèmes CentOS 6 et Debian 7" command: /sbin/shutdown -t now when: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "6") or (ansible_distribution == "Debian" and ansible_distribution_major_version == "7")
LAB #2 - La Commande ansible-vault
La commande ansible-vault permet de créer et d'utiliser des fichiers cryptés, par exemple, ceux qui contiennent des mots de passe.
Pour illustrer son utilisation, créez le Rôle vault :
trainee@ansible:~/.ansible/roles$ mkdir vault
Éditez le fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
trainee@ansible:~/.ansible/roles$ vi /home/trainee/.ansible/roles/group_vars/all.yaml trainee@ansible:~/.ansible/roles$ cat /home/trainee/.ansible/roles/group_vars/all.yaml --- secret: gardezmoisecret
Modifiez le fichier /home/trainee/.ansible/roles/playbook.yaml :
trainee@ansible:~/.ansible/roles$ vi playbook.yaml trainee@ansible:~/.ansible/roles$ cat playbook.yaml --- - hosts: all tasks: - debug: msg: "Le secret est {{ secret }}"
Exécutez la commande ansible-playbook :
trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature PLAY [all] ********************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [localhost] TASK [debug] ******************************************************************************************************************************************* ok: [localhost] => { "msg": "Le secret est gardezmoisecret" } PLAY RECAP ********************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Important : L'exécution démontre que la variable secret est bien lue.
2.1 - Crypter le Fichier
Cryptez maintenant le fichier /home/trainee/.ansible/roles/group_vars/all.yaml en utilisant la commande ansible-vault :
trainee@ansible:~/.ansible/roles$ ansible-vault encrypt group_vars/all.yaml /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature New Vault password: fenestros Confirm New Vault password: fenestros Encryption successful
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Important : Notez que le mot de passe est pour la commande ansible-vault et non pas uniquement pour l'action de cryptage en cours.
Constatez maintenant le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
trainee@ansible:~/.ansible/roles$ cat /home/trainee/.ansible/roles/group_vars/all.yaml $ANSIBLE_VAULT;1.1;AES256 30626538653763633464663266313765353138393239613338633165626339346432633831306633 3235323032326163343665653130653131643936613363370a393235333431613135323963303064 64626264663239623030353534303035343738323631653533656433613664613037613434383134 6634653531373732380a393235666361643066383039356434643835353832393364623562316239 33613933653336333232643930306131313231633565383066646262316638663639
Exécutez de nouveau la commande ansible-playbook :
trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature PLAY [all] ********************************************************************************************************************************************* ERROR! Attempting to decrypt but no vault secrets found
Important : Notez l'erreur due au fait que le fichier a été crypté.
Pour indiquer à la commande ansible-playbook que le fichier qui doit être lu soit crypté, utilisez l'option –ask-vault-pass :
trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost --ask-vault-pass /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature Vault password: fenestros PLAY [all] ********************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [localhost] TASK [debug] ******************************************************************************************************************************************* ok: [localhost] => { "msg": "Le secret est gardezmoisecret" } PLAY RECAP ********************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Important : Notez que le mot de passe fenestros ne sera pas en clair.
2.2 - Editer le Fichier
Pour éditer le fichier, utilisez la sous-commande edit de la commande ansible-vault :
trainee@ansible:~/.ansible/roles$ ansible-vault edit group_vars/all.yaml /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature Vault password: fenestros
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Le fichier est chargé en mémoire pour édition :
--- secret: gardezmoisecret ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "/tmp/tmpn2p84qb3.yaml" 2 lines, 28 characters
Modifiez le secret et sauvegardez le fichier :
--- secret: gardezlesecret ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ :x
Constatez que le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml est toujours crypté :
trainee@ansible:~/.ansible/roles$ cat /home/trainee/.ansible/roles/group_vars/all.yaml $ANSIBLE_VAULT;1.1;AES256 37616265353436313939616237316635373133353534316237633434633461373963376235313363 6333303263626436366137653630643439626230323732650a393037333030336432326135373834 38626238643938623935343032366231373066356135383661653733653832396437323964363334 3236303738643031390a343834663162626637363765356430313233666535323763616364383732 35643466613032646366313561313062333531306237616662363032353330393530
Exécutez de nouveau la commande ansible-playbook avec l'option –ask-vault-pass :
trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost --ask-vault-pass /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature Vault password: fenestros PLAY [all] ********************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [localhost] TASK [debug] ******************************************************************************************************************************************* ok: [localhost] => { "msg": "Le secret est gardezlesecret" } PLAY RECAP ********************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Important : Notez que le mot de passe fenestros ne sera pas en clair.
2.3 - Décrypter le Fichier
Il est possible de décrypter le fichier en utilisant la sous-commande decrypt de la commande ansible-vault :
trainee@ansible:~/.ansible/roles$ ansible-vault decrypt group_vars/all.yaml /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature Vault password: fenestros Decryption successful
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Constatez que le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml n'est plus crypté :
trainee@ansible:~/.ansible/roles$ cat /home/trainee/.ansible/roles/group_vars/all.yaml --- secret: gardezlesecret
2.4 - Utilisation de Mots de Passe Aléatoires
Installez le paquet pwgen :
trainee@ansible:~/.ansible/roles$ su - Mot de passe : fenestros root@ansible:~# apt-get install pwgen ... root@ansible:~# exit déconnexion
Utilisez maintenant la commande pwgen pour générer un mot de passe aléatoire :
trainee@ansible:~/.ansible/roles$ pwgen 16 1 Ceiripaht6Fi1aiF
Utilisez pwgen pour créer un mot de passe aléatoire contenu dans un fichier :
trainee@ansible:~/.ansible/roles$ pwgen 16 1 > vault-password trainee@ansible:~/.ansible/roles$ ls backend.j2 debug exemple01.java geerlingguy.java group_vars haproxy host_vars inventory playbook.yaml tomcat vault vault-password trainee@ansible:~/.ansible/roles$ cat vault-password iezeich5ooSheifi
Utilisez maintenant le mot de passe aléatoire contenu dans le fichier vault-password pour crypter le fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
trainee@ansible:~/.ansible/roles$ ansible-vault encrypt group_vars/all.yaml --vault-password-file vault-password /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature Encryption successful
Constatez le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
trainee@ansible:~/.ansible/roles$ cat group_vars/all.yaml $ANSIBLE_VAULT;1.1;AES256 64613166306436313464333963336633373133323433303033383131376261343834356136633864 3665663332643735303836323362376662356435616136300a653834336561356361383736396436 63373761333738383637666237613339663637666439303131323862643939613735336534636131 3135653736393065320a646363646239373033613630346362383838633635313734373362366237 36333365376637323336303461613862376638663333646632633135653964346139
Exécutez de nouveau la commande ansible-playbook avec l'option –vault-password-file :
trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost --vault-password-file vault-password /home/trainee/.local/lib/python3.5/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python. from cryptography.exceptions import InvalidSignature PLAY [all] ********************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [localhost] TASK [debug] ******************************************************************************************************************************************* ok: [localhost] => { "msg": "Le secret est gardezlesecret" } PLAY RECAP ********************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
LAB #3 - Ansible et Docker
3.1 - Présentation de Docker
Docker est une application de virtualisation légère qui utilise des images et des conteneurs.
Une image est un paquet exécutable contenant tout ce qu'il est nécessaire afin d'exécuter un logiciel donné, incluant :
- le code
- un runtime
- des bibliothèques,
- des variables d'environnement
- des fichiers de configuration
Un conteneur est une instance de l'image en cours d'exécution en mémoire. Elle est isolée de l'environnement de l'hôte par défaut mais peut accéder à des fichiers et de ports de l'hôte selon la configuration.
Les conteneurs exécutent des applications nativement en utilisant le noyau de la machine hôte. De ce fait les performances d'un conteneur sont supérieures à celles d'une machine virtuelle qui doit passer par un hyperviseur pour accéder aux ressources de la machine hôte :
Docker existe en deux versions Docker-CE (Docker Community Edition) et Docker-EE (Docker Enterprise Edition). Pour consulter les différences entre les deux versions, consultez le lien https://docs.docker.com/engine/installation/.
3.2 - Installer docker
Docker n'est pas dans le dépôts de Debian. Afin de l'installer il convient d'ajouter le dépôt de docker. Premièrement, il est nécessaire d'installer les paquets permettant à Debian d'utiliser un dépôt en https :
trainee@ansible:~/.ansible/roles$ su - Mot de passe : fenestros root@ansible:~# apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
Téléchargez la clef GPG officielle de docker :
root@ansible:~# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - OK
Vérifiez que l'ID de la clef est 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 :
root@ansible:~# apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S]
Ajoutez le dépôt stable de docker :
root@ansible:~# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Important - Notez que la commande lsb_release -cs retourne le nom de la distribution Debian, à savoir dans ce cas stretch.
Installez maintenant le paquet docker-ce :
root@ansible:~# apt-get update ... root@ansible:~# apt-get -y install docker-ce
Dernièrement, vérifiez la version de Docker client et serveur :
root@ansible:~# docker version Client: Docker Engine - Community Version: 19.03.15 API version: 1.40 Go version: go1.13.15 Git commit: 99e3ed8919 Built: Sat Jan 30 03:17:11 2021 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.15 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 99e3ed8919 Built: Sat Jan 30 03:15:40 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.3 GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.18.0 GitCommit: fec3683
Important - Docker est composé de trois éléments : un serveur, un client et un ou plusieurs Repositories ou Dépôts en français.
Démarrez un conteneur dénommé postgresql en mode détaché à partir d'une image CentOS :
root@ansible:~# docker run -d --name postgresql centos sleep infinity Unable to find image 'centos:latest' locally latest: Pulling from library/centos 7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest f9be86154d1dfaf652d888f478847fbc233ec8984d53a388eb000d2f9dd0344f
Vérifiez que le conteneur fonctionne :
root@ansible:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f9be86154d1d centos "sleep infinity" 29 minutes ago Up 29 minutes postgresql
3.3 - La Connexion à Docker
Créez maintenant le Rôle docker :
trainee@ansible:~/.ansible/roles$ mkdir docker
Modifiez ensuite le fichier playbook.yaml :
trainee@ansible:~/.ansible/roles$ vi playbook.yaml trainee@ansible:~/.ansible/roles$ cat playbook.yaml --- - hosts: all tasks: - name: message debug: msg="Conteneur - {{ inventory_hostname }} sous {{ansible_distribution}}" - name: install package: name=postgresql state=present
Modifiez le fichier inventory :
trainee@ansible:~/.ansible/roles$ cp inventory inventory.old trainee@ansible:~/.ansible/roles$ vi inventory trainee@ansible:~/.ansible/roles$ cat inventory postgresql ansible_connection=docker
Supprimez le fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
<code> trainee@ansible:~/.ansible/roles$ rm -rf /home/trainee/.ansible/roles/group_vars/all.yaml
Exécutez la commande ansible-playbook en tant que root :
trainee@ansible:~/.ansible/roles$ su - Mot de passe : root@ansible:~# cd /home/trainee/.ansible/roles/ root@ansible:/home/trainee/.ansible/roles# ansible-playbook -i inventory playbook.yaml PLAY [all] ********************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [postgresql] TASK [message] ***************************************************************************************************************************************** ok: [postgresql] => { "msg": "Conteneur - postgresql sous CentOS" } TASK [install] ***************************************************************************************************************************************** changed: [postgresql] PLAY RECAP ********************************************************************************************************************************************* postgresql : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Vérifiez maintenant que postgresql a été installé dans le conteneur :
root@ansible:/home/trainee/.ansible/roles# docker exec -it postgresql /bin/bash [root@f9be86154d1d /]# psql --version psql (PostgreSQL) 10.15
<html>
Copyright © 2021 Hugh NORRIS
</html>