Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
elearning:workbooks:debian:6:avance:l130:part4 [2019/10/18 09:57] – admin | elearning:workbooks:debian:6:avance:l130:part4 [2023/08/25 01:31] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
+ | |||
+ | Version : **2023.02** | ||
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
- | ====== | + | ======LCF804 |
- | =====LAB #11 - Utilisation des Facts d' | + | =====Contenu du Module===== |
- | Ansible | + | * **LCF804 - Utilisation d'Ansible |
+ | * Contenu du Module | ||
+ | * LAB #1 - Ansible et Docker | ||
+ | * 1.1 - Présentation de Docker | ||
+ | * 1.2 - Installer Docker | ||
+ | * 1.3 - La Connexion à Docker | ||
+ | * LAB #2 - Préparer Windows 10 | ||
+ | * 2.1 - Mettre à Jour PowerShell et .NET | ||
+ | * 2.2 - Configurer WinRM | ||
+ | * 2.3 - Consulter les Informations sur WinRM | ||
+ | * 2.4 - Créer un Utilisateur Local pour Ansible | ||
+ | * LAB #3 - Préparer le Contrôleur Ansible | ||
+ | * 3.1 - Installer pywinrm | ||
+ | * 3.2 - Tester la Configuration | ||
+ | * LAB #4 - Travailler avec Ansible et Windows | ||
+ | * 4.1 - Obtenir les Informations sur Windows10 | ||
+ | * 4.2 - Exécuter une Commande | ||
+ | * 4.3 - Exécuter un script PowerShell | ||
+ | * 4.4 - Installer un Logiciel avec Chocolatey | ||
+ | * 4.5 - Créer un Utilisateur Local | ||
- | * des variables collectées automatiquement par le module **setup** d'Ansible | + | =====LAB #1 - Ansible |
- | * spécifiques à l' | + | |
- | Il est cependant possible d' | + | ====1.1 - Présentation |
- | < | + | Docker est une application de virtualisation légère qui utilise des **images** et des **conteneurs**. |
- | trainee@ansible: | + | |
- | web01 | SUCCESS => { | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | ], | + | |
- | " | + | |
- | " | + | |
- | ], | + | |
- | " | + | |
- | " | + | |
- | }, | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | }, | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | }, | + | |
- | ... | + | |
- | " | + | |
- | }, | + | |
- | " | + | |
- | } | + | |
- | </ | + | |
- | <WRAP center round important 60%> | + | Une **image** est un paquet exécutable contenant tout ce qu'il est nécessaire afin d' |
- | **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 : | + | * le code |
+ | * un runtime | ||
+ | * des bibliothèques, | ||
+ | * des variables d' | ||
+ | * des fichiers de configuration | ||
- | | + | Un **conteneur** est une instance de l' |
- | | + | |
- | | + | |
- | | + | |
- | * " | + | |
- | * " | + | |
- | * " | + | |
- | * " | + | |
- | * " | + | |
- | * " | + | |
- | Ainsi que dictionnaire **ansible_default_ipv4** | + | 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/ |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | } | + | |
- | </ | + | |
- | <WRAP center round todo 60%> | + | ====1.2 - Installer docker==== |
- | **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** : | + | Docker n'est pas dans le dépôts |
- | + | ||
- | ^ Machine ^ Nom d' | + | |
- | | TargetB | targetb.i2tch.loc | 10.0.2.15 | 2822 | | + | |
- | + | ||
- | <WRAP center round todo 60%> | + | |
- | **A Faire** : Créez la redirection | + | |
- | </ | + | |
- | + | ||
- | Modifiez ensuite | + | |
< | < | ||
- | trainee@ansible: | + | [trainee@centos8 |
- | Mot de passe : | + | Password: fenestros |
- | root@ansible:~# vi / | + | [root@centos8 |
- | root@ansible:~# cat /etc/hosts | + | Adding repo from: https:// |
- | 127.0.0.1 localhost | + | |
- | 127.0.1.1 ansible.i2tch.loc | + | |
- | 10.0.2.9 ansible.i2tch.loc | + | |
- | 10.0.2.10 | + | |
- | 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 | + | |
- | # The following lines are desirable for IPv6 capable hosts | + | [root@centos8 ~]# dnf list docker-ce |
- | ::1 | + | Docker CE Stable - x86_64 |
- | ff02::1 ip6-allnodes | + | Last metadata expiration check: 0:00:01 ago on Wed 09 Mar 2022 12:38:58 EST. |
- | ff02::2 ip6-allrouters | + | Available Packages |
- | root@ansible:~# exit | + | docker-ce.x86_64 |
- | déconnexion | + | |
- | trainee@ansible:~/.ansible/ | + | |
</ | </ | ||
- | Modifiez le fichier | + | Installez ensuite la dépendance |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ vi inventory | + | [root@centos8 |
- | trainee@ansible:~/.ansible/roles$ cat inventory | + | Last metadata expiration check: 0:06:03 ago on Wed 09 Mar 2022 12:38:58 EST. |
- | [linux] | + | containerd.io-1.2.10-3.2.el7.x86_64.rpm |
- | targeta | + | Dependencies resolved. |
- | targetb | + | ================================================================================================================================================================================================================== |
+ | Package | ||
+ | ================================================================================================================================================================================================================== | ||
+ | Installing: | ||
+ | | ||
+ | | ||
- | [group1] | + | Transaction Summary |
- | localhost ansible_connection=local | + | ================================================================================================================================================================================================================== |
+ | Install | ||
- | [basededonnees] | + | Total size: 23 M |
- | web01 | + | Is this ok [y/N]: y |
- | + | ||
- | [dotcms] | + | |
- | web02 | + | |
- | web03 | + | |
- | + | ||
- | [equilibrage] | + | |
- | web04 | + | |
- | + | ||
- | [debian:children] | + | |
- | basededonnees | + | |
- | dotcms | + | |
- | equilibrage | + | |
- | + | ||
- | [debian: | + | |
- | ansible_user=trainee | + | |
</ | </ | ||
- | Modifiez | + | Installez maintenant |
< | < | ||
- | trainee@ansible:~/ | + | [root@centos8 |
- | trainee@ansible: | + | |
- | --- | + | |
- | - hosts: all | + | |
- | become: true | + | |
- | roles: | + | |
- | | + | |
</ | </ | ||
- | Connectez-vous à la machine TargetA | + | Dernièrement, |
< | < | ||
- | trainee@ansible:~/.ansible/ | + | [root@centos8 |
- | The authenticity of host ' | + | [root@centos8 ~]# systemctl start docker |
- | ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. | + | [root@centos8 ~]# systemctl status docker |
- | Are you sure you want to continue connecting | + | ● docker.service - Docker Application Container Engine |
- | Warning: Permanently added ' | + | Loaded: loaded |
- | Debian GNU/Linux 9 | + | Active: activating (start) since Wed 2022-03-09 12:48:23 EST; 51s ago |
- | Linux targeta.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | + | Docs: https://docs.docker.com |
+ | Main PID: 59410 (dockerd) | ||
+ | Tasks: 16 | ||
+ | | ||
+ | CGroup: | ||
+ | | ||
- | The programs included with the Debian GNU/Linux system are free software; | + | Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: |
- | the exact distribution terms for each program are described in the | + | Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: |
- | individual files in /usr/share/doc/*/copyright. | + | Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: |
+ | Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: | ||
+ | Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: | ||
+ | Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: | ||
+ | Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: | ||
+ | Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: | ||
+ | Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: | ||
+ | Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: | ||
+ | [root@centos8 ~]# docker --version | ||
+ | Docker version 20.10.12, build e91ed57 | ||
+ | [root@centos8 ~]# docker version | ||
+ | Client: Docker Engine - Community | ||
+ | | ||
+ | API version: | ||
+ | Go version: | ||
+ | Git commit: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | + | Server: Docker Engine - Community |
- | permitted by applicable law. | + | Engine: |
- | Last login: Sat Feb 9 16:40:14 2019 from 10.0.2.9 | + | |
- | trainee@targeta:~$ su - | + | API version: 1.40 (minimum version 1.12) |
- | Mot de passe : fenestros | + | Go version: go1.13.15 |
- | root@targeta:~# apt-get -y remove openjdk-8-jre | + | Git commit: |
- | root@targeta:~# exit | + | Built: |
- | déconnexion | + | OS/ |
- | trainee@targeta:~$ exit | + | Experimental: |
- | déconnexion | + | |
- | Connection to targeta closed. | + | Version: |
+ | | ||
+ | runc: | ||
+ | | ||
+ | | ||
+ | docker-init: | ||
+ | | ||
+ | GitCommit: | ||
</ | </ | ||
- | <WRAP center round important | + | <WRAP center round important> |
- | **Important** | + | **Important** |
</ | </ | ||
- | Connectez-vous | + | Démarrez un conteneur dénommé **postgresql** en mode détaché |
< | < | ||
- | trainee@ansible:~/ | + | [root@centos8 |
- | The authenticity of host 'targetb (10.0.2.15)' | + | Unable to find image 'centos: |
- | ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU. | + | latest: Pulling from library/centos |
- | Are you sure you want to continue connecting (yes/no)? yes | + | a1d0c7532777: Pull complete |
- | Warning: Permanently added ' | + | Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 |
- | Last login: Sat Feb 9 16:42:41 2019 from 10.0.2.9 | + | Status: Downloaded newer image for centos:latest |
- | [trainee@targetb ~]$ su - | + | 1028e25f81d14d685678794902cd599aa618eb283d80e274526d71ec9708e69d |
- | Mot de passe : fenestros | + | |
- | Dernière connexion | + | |
- | [root@targetb ~]# yum -y remove java-1.8.0-openjdk | + | |
- | [root@targetb ~]# exit | + | |
- | logout | + | |
- | [trainee@targetb ~]$ exit | + | |
- | déconnexion | + | |
- | Connection to targetb closed. | + | |
</ | </ | ||
- | <WRAP center round important 60%> | + | Vérifiez |
- | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | + | |
- | </ | + | |
- | + | ||
- | Grâce au Fact **ansible_os_family** il est possible d' | + | |
< | < | ||
- | trainee@ansible:~/ | + | [root@centos8 |
- | trainee@ansible: | + | CONTAINER ID |
- | --- | + | 1028e25f81d1 |
- | - name: install jre (Debian) | + | |
- | package: name=openjdk-8-jre state=present | + | |
- | when: ansible_os_family == ' | + | |
- | + | ||
- | - name: install jre (CentOS) | + | |
- | package: name=java-1.8.0-openjdk state=present | + | |
- | when: ansible_os_family == ' | + | |
</ | </ | ||
- | Exécutez | + | Ajoutez |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ | + | [root@centos8 ~]# usermod -aG docker |
+ | [root@centos8 | ||
+ | logout | ||
+ | [trainee@centos8 | ||
+ | </ | ||
- | PLAY [all] ************************************************************************************************************************************************************** | + | Rejoignez le groupe |
- | TASK [Gathering Facts] ************************************************************************************************************************************************** | + | < |
- | ok: [targeta] | + | [trainee@centos8 roles]$ newgrp docker |
- | ok: [targetb] | + | </ |
- | TASK [exemple01.java : install jre (Debian)] **************************************************************************************************************************** | + | ====1.3 - La Connexion à Docker==== |
- | skipping: [targetb] | + | |
- | changed: [targeta] | + | |
- | TASK [exemple01.java : install jre (CentOS)] | + | Créez maintenant le Rôle **docker** : |
- | skipping: [targeta] | + | |
- | changed: [targetb] | + | |
- | PLAY RECAP ************************************************************************************************************************************************************** | + | < |
- | targeta | + | [trainee@centos8 roles]$ mkdir docker |
- | targetb | + | |
</ | </ | ||
- | Les conditions peuvent être combinées grâce à **and** et **or**. En voici un exemple : | + | Modifiez ensuite le fichier playbook.yaml : |
- | + | ||
- | < | + | |
- | tasks: | + | |
- | - name: " | + | |
- | command: / | + | |
- | when: (ansible_distribution == " | + | |
- | (ansible_distribution == " | + | |
- | </ | + | |
- | + | ||
- | =====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, | + | |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ | + | [trainee@centos8 roles]$ vi playbook.yaml |
+ | [trainee@centos8 | ||
+ | --- | ||
+ | - hosts: all | ||
+ | tasks: | ||
+ | - name: message | ||
+ | debug: msg=" | ||
</ | </ | ||
- | Éditez | + | Modifiez |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ vi / | + | [trainee@centos8 roles]$ cp inventory inventory.old |
- | trainee@ansible: | + | [trainee@centos8 |
- | --- | + | [trainee@centos8 |
- | secret: gardezmoisecret | + | postgresql ansible_connection=docker |
</ | </ | ||
- | Modifiez | + | Supprimez |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ vi playbook.yaml | + | [trainee@centos8 roles]$ rm -rf /home/ |
- | trainee@ansible:~/ | + | |
- | --- | + | |
- | - hosts: all | + | |
- | tasks: | + | |
- | - debug: | + | |
- | msg: "Le secret est {{ secret }}" | + | |
</ | </ | ||
Ligne 319: | Ligne 231: | ||
< | < | ||
- | trainee@ansible: | + | [trainee@centos8 |
+ | [DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.8 (default, Sep 10 2021, 09:13:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]. | ||
+ | This feature will be removed from ansible-core in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. | ||
- | PLAY [all] ************************************************************************************************************************************************************** | + | PLAY [all] ******************************************************************************************************************************************************************************************************* |
- | TASK [Gathering Facts] ************************************************************************************************************************************************** | + | TASK [Gathering Facts] |
- | ok: [localhost] | + | ok: [postgresql] |
- | TASK [debug] ************************************************************************************************************************************************************ | + | TASK [message] *************************************************************************************************************************************************************************************************** |
- | ok: [localhost] => { | + | ok: [postgresql] => { |
- | " | + | " |
} | } | ||
- | PLAY RECAP ************************************************************************************************************************************************************** | + | PLAY RECAP ******************************************************************************************************************************************************************************************************* |
- | localhost | + | postgresql |
</ | </ | ||
- | <WRAP center round important 60%> | + | =====LAB #2 - Préparer Windows 10===== |
- | **Important** : L' | + | |
- | </ | + | |
- | ====Crypter le Fichier==== | + | Ansible est capable de travailler avec les versions de Windows(tm) suivantes : |
- | Cryptez maintenant le fichier | + | |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | * Windows(tm) Server 2016, | ||
+ | * Windows(tm) Server 2019, | ||
+ | * Windows(tm) Server 2022. | ||
- | < | + | Ansible nécessite sur chaque hôte : |
- | trainee@ansible:~/ | + | |
- | New Vault password: fenestros | + | |
- | Confirm New Vault password: fenestros | + | |
- | Encryption successful | + | |
- | </ | + | |
- | <WRAP center round important 60%> | + | * PowerShell 3.0 ou supérieur |
- | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | + | * Au moins .NET 4.0. |
- | </ | + | |
- | <WRAP center round important 60%> | + | ====2.1 |
- | **Important** : Notez que le mot de passe est pour la commande **ansible-vault** | + | |
- | </ | + | |
- | Constatez maintenant le contenu du fichier | + | Afin de mettre à jour les versions de PowerShell et .NET, Ansible fournit un script appelé |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ cat /home/ | + | Windows PowerShell |
- | $ANSIBLE_VAULT; | + | Copyright (C) Microsoft Corporation. Tous droits réservés. |
- | 65386665623833656366383938313561666433393865613465656365633166613263343361303361 | + | |
- | 3834616631626232353438393331333238316434656339300a386636626239323661656563393535 | + | Testez le nouveau système multiplateforme PowerShell https://aka.ms/pscore6 |
- | 35636434663062316530346161383030626163303831323735636232366637336633663032616364 | + | |
- | 6337313434333831620a396130616138306161303330333730323866396135373830613636353730 | + | PS C: |
- | 36646532393537343563383434363364623336643333393936613634653637396439 | + | PS C: |
+ | PS C: | ||
+ | PS C: | ||
+ | PS C: | ||
+ | PS C: | ||
+ | PS C: | ||
+ | COMMENTAIRES : | ||
+ | COMMENTAIRES : | ||
+ | COMMENTAIRES : | ||
</ | </ | ||
- | Exécutez | + | Au cas où, vous pouvez enlever l' |
< | < | ||
- | trainee@ansible:~/ | + | PS C:\Windows\system32> |
- | + | PS C: | |
- | PLAY [all] ************************************************************************************************************************************************************** | + | PS C: |
- | ERROR! Attempting to decrypt but no vault secrets found | + | PS C: |
+ | PS C: | ||
+ | PS C: | ||
</ | </ | ||
- | <WRAP center round important 60%> | + | ====2.2 - Configurer WinRM==== |
- | **Important** : Notez l' | + | |
- | </ | + | |
- | Pour indiquer à la commande | + | Pour mettre en place un **listener** WinRM en HTTP et un **listener** WinRM en HTTPS, créer un certificat auto-signé et activer |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ | + | PS C: |
- | Vault password:fenestros | + | PS C: |
+ | PS C: | ||
+ | PS C: | ||
+ | Self-signed SSL certificate generated; thumbprint: 17502EEEAC259F4C76D0F199A4B803E94E980CAD | ||
- | PLAY [all] ************************************************************************************************************************************************************** | ||
- | TASK [Gathering Facts] ************************************************************************************************************************************************** | + | wxf : http:// |
- | ok: [localhost] | + | a : http:// |
+ | w : http:// | ||
+ | lang : fr-FR | ||
+ | Address | ||
+ | ReferenceParameters | ||
- | TASK [debug] ************************************************************************************************************************************************************ | + | Ok. |
- | ok: [localhost] => { | + | |
- | " | + | |
- | } | + | |
- | PLAY RECAP ************************************************************************************************************************************************************** | ||
- | localhost | ||
- | </ | ||
- | <WRAP center round important 60%> | ||
- | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | ||
- | </ | ||
- | ====Editer le Fichier==== | + | PS C:\Windows\system32> |
- | + | ||
- | Pour éditer le fichier, utilisez la sous-commande **edit** de la commande **ansible-vault** | + | |
- | + | ||
- | <code> | + | |
- | trainee@ansible: | + | |
- | Vault password: fenestros | + | |
</ | </ | ||
- | <WRAP center round important 60%> | + | ====2.3 - Consulter les Informations sur WinRM==== |
- | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | + | |
- | </ | + | |
- | Le fichier est chargé en mémoire pour édition | + | Pour voir la liste des **listeners** ainsi créés, utilisez la commande suivante |
< | < | ||
- | --- | + | PS C:\Windows\system32> |
- | secret: gardezmoisecret | + | Listener |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | Port = 5985 |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | "/ | + | |
- | </ | + | |
- | Modifiez le secret et sauvegardez le fichier | + | Listener |
+ | Address = * | ||
+ | Transport = HTTPS | ||
+ | Port = 5986 | ||
+ | Hostname = DESKTOP-1OV5NMP | ||
+ | Enabled = true | ||
+ | URLPrefix = wsman | ||
+ | CertificateThumbprint = 17502EEEAC259F4C76D0F199A4B803E94E980CAD | ||
+ | ListeningOn = 10.0.2.58, 10.29.0.34, 127.0.0.1, | ||
- | <code> | + | PS C: |
- | --- | + | |
- | secret: gardezlesecret | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | ~ | + | |
- | :x | + | |
</ | </ | ||
- | Constatez que le contenu | + | Pour obtenir les informations concernant le certificat, exécutez les commandes suivantes en remplacant |
< | < | ||
- | trainee@ansible:~/ | + | PS C:\Windows\system32> |
- | $ANSIBLE_VAULT; | + | PS C: |
- | 62356135383762346138326536396438646331313533326630373431313063663630343031353733 | + | |
- | 3032323565656264313738326462613961353963336264620a656430343634643764623337653137 | + | |
- | 33656438353831346230653764306461393235386464326132303239396438643263343962353030 | + | |
- | 3561376633396465630a616161636236303662626531323430353430663762383131666437303566 | + | |
- | 62303538613338636664623232323734643937316663623637363965383637646639 | + | |
- | </ | + | |
- | Exécutez de nouveau la commande **ansible-playbook** avec l' | ||
- | < | + | PSPath |
- | trainee@ansible:~/.ansible/ | + | |
- | Vault password: | + | PSParentPath |
+ | PSChildName | ||
+ | PSDrive | ||
+ | PSProvider | ||
+ | PSIsContainer | ||
+ | EnhancedKeyUsageList | ||
+ | DnsNameList | ||
+ | SendAsTrustedIssuer | ||
+ | EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty | ||
+ | EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty | ||
+ | PolicyId | ||
+ | Archived | ||
+ | Extensions | ||
+ | | ||
+ | FriendlyName | ||
+ | IssuerName | ||
+ | NotAfter | ||
+ | NotBefore | ||
+ | HasPrivateKey | ||
+ | PrivateKey | ||
+ | PublicKey | ||
+ | RawData | ||
+ | SerialNumber | ||
+ | SubjectName | ||
+ | SignatureAlgorithm | ||
+ | Thumbprint | ||
+ | Version | ||
+ | Handle | ||
+ | Issuer | ||
+ | Subject | ||
- | PLAY [all] ************************************************************************************************************************************************************** | ||
- | TASK [Gathering Facts] ************************************************************************************************************************************************** | ||
- | ok: [localhost] | ||
- | TASK [debug] ************************************************************************************************************************************************************ | + | PS C:\Windows\system32> |
- | ok: [localhost] => { | + | |
- | " | + | |
- | } | + | |
- | + | ||
- | PLAY RECAP ************************************************************************************************************************************************************** | + | |
- | localhost | + | |
</ | </ | ||
- | <WRAP center round important 60%> | + | Dernièrement pour obtenir des informations concernant |
- | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | + | |
- | </ | + | |
- | ====Décrypter le Fichier==== | + | < |
+ | PS C: | ||
+ | Service | ||
+ | RootSDDL | ||
+ | MaxConcurrentOperations | ||
+ | MaxConcurrentOperationsPerUser | ||
+ | EnumerationTimeoutms | ||
+ | MaxConnections | ||
+ | MaxPacketRetrievalTimeSeconds | ||
+ | AllowUnencrypted | ||
+ | Auth | ||
+ | Basic = true | ||
+ | Kerberos = true | ||
+ | Negotiate = true | ||
+ | Certificate = false | ||
+ | CredSSP = false | ||
+ | CbtHardeningLevel = Relaxed | ||
+ | DefaultPorts | ||
+ | HTTP = 5985 | ||
+ | HTTPS = 5986 | ||
+ | IPv4Filter = * | ||
+ | IPv6Filter = * | ||
+ | EnableCompatibilityHttpListener = false | ||
+ | EnableCompatibilityHttpsListener = false | ||
+ | CertificateThumbprint | ||
+ | AllowRemoteAccess = true | ||
- | Il est possible de décrypter le fichier en utilisant la sous-commande **decrypt** de la commande **ansible-vault** | + | PS C:\Windows\system32> |
+ | Winrs | ||
+ | AllowRemoteShellAccess = true | ||
+ | IdleTimeout = 7200000 | ||
+ | MaxConcurrentUsers = 2147483647 | ||
+ | MaxShellRunTime = 2147483647 | ||
+ | MaxProcessesPerShell = 2147483647 | ||
+ | MaxMemoryPerShellMB = 2147483647 | ||
+ | MaxShellsPerUser = 2147483647 | ||
- | <code> | + | PS C: |
- | trainee@ansible: | + | |
- | Vault password: fenestros | + | |
- | Decryption successful | + | |
</ | </ | ||
- | <WRAP center round important 60%> | + | ====2.4 - Créer un Utilisateur Local pour Ansible==== |
- | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | + | |
- | </ | + | |
- | Constatez que le contenu du fichier **/ | + | Exécutez ensuite la commande suivante |
< | < | ||
- | trainee@ansible:~/ | + | PS C:\Windows\system32> |
- | --- | + | Service |
- | secret: gardezlesecret | + | RootSDDL = O: |
+ | MaxConcurrentOperations = 4294967295 | ||
+ | MaxConcurrentOperationsPerUser = 1500 | ||
+ | EnumerationTimeoutms = 240000 | ||
+ | MaxConnections = 300 | ||
+ | MaxPacketRetrievalTimeSeconds = 120 | ||
+ | AllowUnencrypted = false | ||
+ | Auth | ||
+ | Basic = true | ||
+ | Kerberos = true | ||
+ | Negotiate = true | ||
+ | Certificate = false | ||
+ | CredSSP = false | ||
+ | CbtHardeningLevel = Relaxed | ||
+ | DefaultPorts | ||
+ | HTTP = 5985 | ||
+ | HTTPS = 5986 | ||
+ | IPv4Filter = * | ||
+ | IPv6Filter = * | ||
+ | EnableCompatibilityHttpListener = false | ||
+ | EnableCompatibilityHttpsListener = false | ||
+ | CertificateThumbprint | ||
+ | AllowRemoteAccess = true | ||
+ | |||
+ | PS C:\Windows\system32> | ||
</ | </ | ||
- | ====Utilisation de Mots de Passe Aléatoires==== | + | Dans la fenêtre **Autorisations pour Default**, ajoutez l' |
- | Installez le paquet **pwgen** | + | {{ :elearning: |
- | < | + | =====LAB |
- | trainee@ansible: | + | |
- | Mot de passe : | + | |
- | root@ansible: | + | |
- | root@ansible: | + | |
- | déconnexion | + | |
- | </ | + | |
- | Utilisez maintenant | + | ====3.1 - Installer pywinrm==== |
+ | |||
+ | Dans la machine virtuelle | ||
< | < | ||
- | trainee@ansible:~/.ansible/roles$ pwgen 16 1 | + | [trainee@centos8 ~]$ su - |
- | aqu2VeifohMue2Ee | + | Password: fenestros |
+ | |||
+ | [root@centos8 | ||
+ | Collecting pywinrm> | ||
+ | Downloading pywinrm-0.4.2-py2.py3-none-any.whl (44 kB) | ||
+ | | ||
+ | Collecting xmltodict | ||
+ | Downloading xmltodict-0.12.0-py2.py3-none-any.whl (9.2 kB) | ||
+ | Requirement already satisfied: requests> | ||
+ | Requirement already satisfied: six in / | ||
+ | Collecting requests-ntlm> | ||
+ | Downloading requests_ntlm-1.1.0-py2.py3-none-any.whl (5.7 kB) | ||
+ | Requirement already satisfied: chardet< | ||
+ | Requirement already satisfied: idna< | ||
+ | Requirement already satisfied: urllib3< | ||
+ | Collecting ntlm-auth> | ||
+ | Downloading ntlm_auth-1.5.0-py2.py3-none-any.whl (29 kB) | ||
+ | Requirement already satisfied: cryptography> | ||
+ | Requirement already satisfied: cffi> | ||
+ | Requirement already satisfied: pycparser in / | ||
+ | Installing collected packages: ntlm-auth, xmltodict, requests-ntlm, | ||
+ | Successfully installed ntlm-auth-1.5.0 pywinrm-0.4.2 requests-ntlm-1.1.0 xmltodict-0.12.0 | ||
+ | WARNING: Running pip as the ' | ||
</ | </ | ||
- | Utilisez pwgen pour créer un mot de passe aléatoire contenu dans un fichier : | + | Modifiez ensuite le fichier |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ pwgen 16 1 > vault-password | + | [trainee@centos8 ~]$ su - |
- | trainee@ansible:~/.ansible/roles$ ls | + | Password: fenestros |
- | debug exemple01.java exemple1 | + | [root@centos8 |
- | trainee@ansible:~/.ansible/ | + | [root@centos8 |
- | waide5sheemohZ4e | + | 127.0.0.1 |
+ | ::1 | ||
+ | 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 | ||
+ | 10.0.2.52 targeta.i2tch.loc targeta | ||
+ | 10.0.2.53 targetb.i2tch.loc targetb | ||
+ | 10.0.2.58 windows10 | ||
</ | </ | ||
- | Utilisez maintenant le mot de passe aléatoire contenu dans le fichier **vault-password** pour crypter | + | ====3.2 |
+ | |||
+ | Pour tester la configuration, | ||
< | < | ||
- | trainee@ansible:~/ | + | [root@centos8 ~]# exit |
- | Encryption successful | + | logout |
+ | [trainee@centos8 | ||
+ | [trainee@centos8 ~]$ cat inventory | ||
+ | [windows] | ||
+ | windows10 | ||
+ | |||
+ | [windows: | ||
+ | ansible_user=trainee | ||
+ | ansible_password=a39dae707d | ||
+ | ansible_connection=winrm | ||
+ | ansible_winrm_server_cert_validation=ignore | ||
</ | </ | ||
- | Constatez le contenu du fichier **/ | + | Procédez au test : |
< | < | ||
- | trainee@ansible:~/.ansible/roles$ cat group_vars/ | + | [trainee@centos8 |
- | $ANSIBLE_VAULT; | + | windows10 | SUCCESS => { |
- | 33363436656334616461646164393366636639356533323639636131373131343933636631383738 | + | " |
- | 6465306265353838643132633234356538656137636332660a323965613931363065396234313961 | + | " |
- | 31313330646632643431383262623639373731616237663435306533353263643566353132363238 | + | } |
- | 6439626633343738370a306631333861323433333364643736666561386136363966303239343264 | + | |
- | 64373430383336323139396334346637316461393961633838303035386262396662 | + | |
</ | </ | ||
- | Exécutez de nouveau la commande **ansible-playbook** | + | =====LAB #4 - Travailler |
- | < | + | ====4.1 - Obtenir les Informations sur Windows 10==== |
- | trainee@ansible: | + | |
- | PLAY [all] ************************************************************************************************************************************************************** | + | De la même façon qu' |
- | TASK [Gathering Facts] ************************************************************************************************************************************************** | + | < |
- | ok: [localhost] | + | [trainee@centos8 ~]$ ansible windows -i inventory -m setup |
- | + | windows10 | SUCCESS => { | |
- | TASK [debug] ************************************************************************************************************************************************************ | + | " |
- | ok: [localhost] => { | + | " |
- | "msg": "Le secret est gardezlesecret" | + | " |
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | "module_setup": | ||
+ | }, | ||
+ | | ||
} | } | ||
- | |||
- | PLAY RECAP ************************************************************************************************************************************************************** | ||
- | localhost | ||
</ | </ | ||
- | =====LAB #13 - Ansible et Docker===== | + | ====4.2 - Exécutez une Commande==== |
- | ====Présentation de Docker==== | + | Créez le PlayBook **command.yml** : |
- | Docker est une application de virtualisation légère qui utilise des **images** et des **conteneurs**. | + | < |
+ | [trainee@centos8 ~]$ vi command.yml | ||
+ | [trainee@centos8 ~]$ cat command.yml | ||
+ | --- | ||
+ | - name: ipconfig | ||
+ | hosts: windows | ||
+ | tasks: | ||
+ | - name: run ipconfig | ||
+ | win_command: | ||
+ | register: ipconfig | ||
+ | - debug: var=ipconfig | ||
+ | </ | ||
- | Une **image** est un paquet exécutable contenant tout ce qu'il est nécessaire afin d' | + | Exécutez le PlayBook |
- | * le code | + | <code> |
- | * un runtime | + | [trainee@centos8 ~]$ ansible-playbook command.yml -i inventory |
- | * des bibliothèques, | + | |
- | * des variables d' | + | |
- | * des fichiers de configuration | + | |
- | Un **conteneur** est une instance de l' | + | PLAY [ipconfig] ************************************************************************************************************************************************************************************************** |
- | 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 : | + | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* |
+ | ok: [windows10] | ||
- | ^ Machine Virtuelle | + | TASK [run ipconfig] ********************************************************************************************************************************************************************************************** |
- | | Application | + | changed: [windows10] |
- | | Exécutables et Bibliothèques | + | |
- | | Système d' | + | |
- | | Hyperviseur | + | |
- | | Système d' | + | |
- | | Infrastructure | + | |
+ | TASK [debug] ***************************************************************************************************************************************************************************************************** | ||
+ | ok: [windows10] => { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | "", | ||
+ | " | ||
+ | "", | ||
+ | "", | ||
+ | "Carte Ethernet Ethernet 2 :", | ||
+ | "", | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | } | ||
+ | } | ||
- | ^ Conteneur | + | PLAY RECAP ******************************************************************************************************************************************************************************************************* |
- | | Application | + | windows10 |
- | | Exécutables et Bibliothèques | + | </ |
- | | Docker | + | |
- | | Système d' | + | |
- | | Infrastructure | + | |
- | + | ||
- | + | ||
- | Docker existe en deux versions | + | |
- | ====Installer docker==== | + | ====4.3 - Exécuter un script PowerShell==== |
- | Docker n'est pas dans le dépôts de Debian. Afin de l' | + | Créez un script PowerShell pour démarrer |
< | < | ||
- | trainee@ansible:~$ su - | + | [trainee@centos8 |
- | Mot de passe : | + | [trainee@centos8 |
- | root@ansible:~# apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common | + | Start-Service |
</ | </ | ||
- | Téléchargez la clef GPG officielle de docker | + | Créez ensuite un PlayBook appelé **winupdate.yml** |
< | < | ||
- | root@ansible:~# curl -fsSL https:// | + | [trainee@centos8 |
- | OK | + | [trainee@centos8 ~]$ cat winupdate.yml |
+ | - name: " | ||
+ | hosts: " | ||
+ | gather_facts: | ||
+ | tasks: | ||
+ | | ||
+ | | ||
</ | </ | ||
- | Vérifiez que l'ID de la clef est **9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88** | + | Exécutez le PlayBook |
< | < | ||
- | root@ansible:~# apt-key fingerprint 0EBFCD88 | + | [trainee@centos8 ~]$ ansible-playbook winupdate.yml -i inventory |
- | pub | + | |
- | 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 | + | |
- | uid [ unknown] Docker Release (CE deb) < | + | |
- | sub | + | |
- | </ | + | |
- | Ajoutez le dépôt | + | PLAY [PowerShell script] ***************************************************************************************************************************************************************************************** |
- | < | + | TASK [Windows Update] ******************************************************************************************************************************************************************************************** |
- | root@ansible:~# add-apt-repository " | + | changed: [windows10] |
+ | |||
+ | PLAY RECAP ******************************************************************************************************************************************************************************************************* | ||
+ | windows10 | ||
</ | </ | ||
- | <WRAP center round important> | + | ====4.4 |
- | **Important** | + | |
- | </ | + | |
- | Installez maintenant | + | **[[https:// |
+ | |||
+ | Créez | ||
< | < | ||
- | root@ansible:~# apt-get update | + | [trainee@centos8 |
- | ... | + | [trainee@centos8 |
- | root@ansible:~# apt-get install docker-ce | + | --- |
+ | - name: Install Firefox using Chocolatey | ||
+ | hosts: all | ||
+ | tasks: | ||
+ | - name: Install Firefox | ||
+ | win_chocolatey: | ||
+ | name: firefox | ||
+ | state: present | ||
</ | </ | ||
- | Dernièrement, | + | Exécutez le PlayBook |
< | < | ||
- | root@ansible:~# docker version | + | [trainee@centos8 ~]$ ansible-playbook firefox.yml -i inventory |
- | Client: | + | |
- | | + | |
- | API version: | + | |
- | Go version: | + | |
- | Git commit: | + | |
- | | + | |
- | | + | |
- | | + | |
- | Server: Docker Engine - Community | + | PLAY [Install Firefox using Chocolatey] ************************************************************************************************************************************************************************** |
- | | + | |
- | Version: | + | |
- | API version: | + | |
- | Go version: | + | |
- | Git commit: | + | |
- | Built: | + | |
- | OS/ | + | |
- | Experimental: | + | |
- | </ | + | |
- | <WRAP center round important> | + | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* |
- | **Important** - Docker est composé de trois éléments : un serveur, un client et un ou plusieurs Repositories ou Dépôts en français. | + | ok: [windows10] |
- | </ | + | |
- | Démarrez un conteneur dénommé | + | TASK [Install Firefox] |
+ | [WARNING]: Chocolatey was missing from this system, so it was installed during this task run. | ||
+ | changed: [windows10] | ||
- | < | + | PLAY RECAP ******************************************************************************************************************************************************************************************************* |
- | root@ansible:~# docker run -d --name postgresql centos sleep infinity | + | windows10 |
- | Unable to find image ' | + | |
- | latest: Pulling from library/ | + | |
- | a02a4930cb5d: | + | |
- | Digest: sha256: | + | |
- | Status: Downloaded newer image for centos: | + | |
- | 220c66d30fa66a016e8bb171d6ce69c8f5b2e7966f700317e7dcc1fe6398cb5c | + | |
</ | </ | ||
- | Vérifiez que le conteneur fonctionne : | + | ====4.5 - Créer un Utilisateur Local==== |
- | < | + | Créez le PlayBook |
- | root@ansible: | + | |
- | CONTAINER ID IMAGE | + | |
- | 220c66d30fa6 | + | |
- | </ | + | |
- | + | ||
- | ====La Connexion à Docker==== | + | |
- | + | ||
- | Créez | + | |
< | < | ||
- | trainee@ansible:~$ mkdir .ansible/ | + | [trainee@centos8 |
- | trainee@ansible: | + | [trainee@centos8 |
- | trainee@ansible: | + | |
- | </ | + | |
- | + | ||
- | Modifiez ensuite le fichier playbook.yaml : | + | |
- | + | ||
- | < | + | |
- | trainee@ansible: | + | |
- | trainee@ansible:~/ | + | |
--- | --- | ||
- | - hosts: | + | - name: Create a user |
+ | | ||
tasks: | tasks: | ||
- | - name: message | + | - name: Create Jean |
- | | + | |
- | | + | name: jean |
- | | + | |
+ | | ||
+ | groups: | ||
+ | - utilisateurs | ||
</ | </ | ||
- | Modifiez | + | Exécutez |
< | < | ||
- | trainee@ansible:~/ | + | [trainee@centos8 |
- | trainee@ansible:~/.ansible/ | + | |
- | trainee@ansible: | + | |
- | postgresql ansible_connection=docker | + | |
- | </ | + | |
- | Supprimez le fichier | + | PLAY [Create a user] ********************************************************************************************************************************************************************************************* |
- | < | + | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* |
- | < | + | ok: [windows10] |
- | trainee@ansible: | + | |
- | </ | + | |
- | + | ||
- | Exécutez la commande **ansible-playbook** en tant que **root** : | + | |
- | + | ||
- | < | + | |
- | trainee@ansible: | + | |
- | Mot de passe : | + | |
- | root@ansible: | + | |
- | root@ansible:/ | + | |
- | + | ||
- | PLAY [all] ************************************************************************************************************************************************************** | + | |
- | + | ||
- | TASK [Gathering Facts] ************************************************************************************************************************************************** | + | |
- | ok: [postgresql] | + | |
- | + | ||
- | TASK [message] | + | |
- | ok: [postgresql] => { | + | |
- | " | + | |
- | } | + | |
- | TASK [install] ********************************************************************************************************************************************************** | + | TASK [Create Jean] *********************************************************************************************************************************************************************************************** |
- | changed: [postgresql] | + | changed: [windows10] |
- | PLAY RECAP ************************************************************************************************************************************************************** | + | PLAY RECAP ******************************************************************************************************************************************************************************************************* |
- | postgresql | + | windows10 |
</ | </ | ||
- | Vérifiez | + | Vérifiez que le compte |
- | < | + | {{ :elearning: |
- | root@ansible:/ | + | |
- | [root@220c66d30fa6 /]# psql --version | + | |
- | psql (PostgreSQL) 9.2.24 | + | |
- | </ | + | |
----- | ----- | ||
- | < | + | |
- | <div align=" | + | Copyright © 2023 Hugh Norris. |
- | Copyright © 2019 Hugh NORRIS | + | |
- | </ | + | |
- | </ | + |