Ceci est une ancienne révision du document !


Dernière mise-à-jour : 2020/01/30 03:45

DOF604 - Facts, Facts Secrets et Docker

LAB #11 - 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
web01 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.0.2.11"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::930d:2780:8f4f:3b5"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/01/2006",
        "ansible_bios_version": "VirtualBox",
        "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": "2019-01-30",
            "day": "30",
            "epoch": "1548832320",
            "hour": "08",
            "iso8601": "2019-01-30T07:12:00Z",
            "iso8601_basic": "20190130T081200108341",
            "iso8601_basic_short": "20190130T081200",
            "iso8601_micro": "2019-01-30T07:12:00.108409Z",
            "minute": "12",
            "month": "01",
            "second": "00",
            "time": "08:12:00",
            "tz": "CET",
            "tz_offset": "+0100",
            "weekday": "mercredi",
            "weekday_number": "3",
            "weeknumber": "04",
            "year": "2019"
        },
...
        "module_setup": true
    },
    "changed": false
}

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.11",
    "alias": "enp0s3",
    "broadcast": "10.0.2.255",
    "gateway": "10.0.2.2",
    "interface": "enp0s3",
    "macaddress": "08:00:27:16:85:dc",
    "mtu": 1500,
    "netmask": "255.255.255.0",
    "network": "10.0.2.0",
    "type": "ether"
}

A Faire : Importez dans VirtualBox la machine virtuelle TargetB. Démarrez le machine.

La machine virtuelle importée est sous CentOS7 et est dans le même réseau NAT que la machine Ansible et a la même configuration ssh et sudo que la machine TargetA :

Machine Nom d'hôte Adresse IP Redirection de Port
TargetB targetb.i2tch.loc 10.0.2.15 2822

A Faire : Créez la redirection de ports dans le réseau NAT NatNetwork de VirtualBox.

Modifiez ensuite le fichier /etc/hosts de la machine Ansible :

trainee@ansible:~/.ansible/roles$ su -
Mot de passe : 
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
10.0.2.15       targetb.i2tch.loc       targetb


# 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:~/.ansible/roles$

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.10)' 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: Sat Feb  9 16:40:14 2019 from 10.0.2.9
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.

Connectez-vous à la machine TargetB et supprimez le paquet java-1.8.0-openjdk :

trainee@ansible:~/.ansible/roles$ ssh targetb
The authenticity of host 'targetb (10.0.2.15)' 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' (ECDSA) to the list of known hosts.
Last login: Sat Feb  9 16:42:41 2019 from 10.0.2.9
[trainee@targetb ~]$ su -
Mot de passe : fenestros
Dernière connexion : samedi  9 février 2019 à 15:42:49 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 au 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

PLAY [all] **************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************
ok: [targeta]
ok: [targetb]

TASK [exemple01.java : install jre (Debian)] ****************************************************************************************************************************
skipping: [targetb]
changed: [targeta]

TASK [exemple01.java : install jre (CentOS)] ****************************************************************************************************************************
skipping: [targeta]
changed: [targetb]

PLAY RECAP **************************************************************************************************************************************************************
targeta                    : ok=2    changed=1    unreachable=0    failed=0   
targetb                    : ok=2    changed=1    unreachable=0    failed=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 #12 - La Commande ansible-vault

La commande ansible-vault permet de créer et 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

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 

Important : L'exécution démontre que la variable secret est bien lue.

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 
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
65386665623833656366383938313561666433393865613465656365633166613263343361303361
3834616631626232353438393331333238316434656339300a386636626239323661656563393535
35636434663062316530346161383030626163303831323735636232366637336633663032616364
6337313434333831620a396130616138306161303330333730323866396135373830613636353730
36646532393537343563383434363364623336643333393936613634653637396439

Exécutez de nouveau la commande ansible-playbook :

trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost

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

Important : Notez que le mot de passe fenestros ne sera pas en clair.

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 
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
62356135383762346138326536396438646331313533326630373431313063663630343031353733
3032323565656264313738326462613961353963336264620a656430343634643764623337653137
33656438353831346230653764306461393235386464326132303239396438643263343962353030
3561376633396465630a616161636236303662626531323430353430663762383131666437303566
62303538613338636664623232323734643937316663623637363965383637646639

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
Vault password: 

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 

Important : Notez que le mot de passe fenestros ne sera pas en clair.

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

Utilisation de Mots de Passe Aléatoires

Installez le paquet pwgen :

trainee@ansible:~/.ansible/roles$ su -
Mot de passe : 
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
aqu2VeifohMue2Ee

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
debug  exemple01.java  exemple1  geerlingguy.java  group_vars  haproxy  host_vars  inventory  playbook.retry  playbook.yaml  tomcat  vault-password  vault
trainee@ansible:~/.ansible/roles$ cat vault-password 
waide5sheemohZ4e

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 
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
33363436656334616461646164393366636639356533323639636131373131343933636631383738
6465306265353838643132633234356538656137636332660a323965613931363065396234313961
31313330646632643431383262623639373731616237663435306533353263643566353132363238
6439626633343738370a306631333861323433333364643736666561386136363966303239343264
64373430383336323139396334346637316461393961633838303035386262396662

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

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  

LAB #13 - Ansible et Docker

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 :

Machine Virtuelle
Application
Exécutables et Bibliothèques
Système d'Exploitation Virtualisé
Hyperviseur
Système d'Exploitation Hôte
Infrastructure
Conteneur
Application
Exécutables et Bibliothèques
Docker
Système d'Exploitation Hôte
Infrastructure

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

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:~$ su -
Mot de passe : 
root@ansible:~# apt-get install 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 install docker-ce

Dernièrement, vérifiez la version de Docker client et serveur :

root@ansible:~# docker version
Client:
 Version:           18.09.1
 API version:       1.39
 Go version:        go1.10.6
 Git commit:        4c52b90
 Built:             Wed Jan  9 19:35:59 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.1
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       4c52b90
  Built:            Wed Jan  9 19:02:44 2019
  OS/Arch:          linux/amd64
  Experimental:     false

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
a02a4930cb5d: Pull complete 
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest
220c66d30fa66a016e8bb171d6ce69c8f5b2e7966f700317e7dcc1fe6398cb5c

Vérifiez que le conteneur fonctionne :

root@ansible:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
220c66d30fa6        centos              "sleep infinity"    2 minutes ago       Up 2 minutes                            postgresql

La Connexion à Docker

Créez maintenant le Rôle docker :

trainee@ansible:~$ mkdir .ansible/roles/docker
trainee@ansible:~$ cd .ansible/roles
trainee@ansible:~/.ansible/roles$

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   

Vérifiez maintenant que postgresql a été installé dans le conteneur :

root@ansible:/home/trainee/.ansible/roles# docker exec -it postgresql /bin/bash
[root@220c66d30fa6 /]# psql --version
psql (PostgreSQL) 9.2.24

<html>

Copyright © 2019 Hugh NORRIS

</html>

Menu