Différences

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

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:debian:6:avance:l130:part4 [2020/04/12 13:04] adminelearning:workbooks:debian:6:avance:l130:part4 [2023/08/25 01:31] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version **2020.01**+Version **2023.02**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-====== DOF504 Facts, Facts Secrets et Docker======+======LCF804 Utilisation d'Ansible avec Docker et Windows======
  
-=====LAB #11 - Utilisation des Facts d'Ansible=====+=====Contenu du Module=====
  
-Ansible Facts sont :+  * **LCF804 - Utilisation d'Ansible avec Docker et Windows** 
 +    * 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 lors du contrôle à distance d'un hôte, +=====LAB #1 - Ansible et Docker=====
-  * spécifiques à l'hôte concerné. +
  
-Il est cependant possible d'exécuter ce module manuellement afin de voir les Facts collectées :+====1.1 - Présentation de Docker====
  
-<code> +Docker est une application de virtualisation légère qui utilise des **images** et des **conteneurs**.
-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 +
-+
-</code>+
  
-<WRAP center round important 60%> +Une **image** est un paquet exécutable contenant tout ce qu'il est nécessaire afin d'exécuter un logiciel donné, incluant :
-**Important** : Notez que le nom de chaque **Fact** commence par **ansible_**. Évitez donc de créer des variables commençant var cette valeur ! +
-</WRAP>+
  
-Parmi les Factsles plus utiles sont :+  * le code 
 +  * un runtime 
 +  * des bibliothèques, 
 +  * des variables d'environnement 
 +  * des fichiers de configuration
  
-  "ansible_hostname": "web01", +Un **conteneur** est une instance de l'image en cours d'exécution en mémoireElle 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.
-  "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** :+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 :
  
-<file> +Docker existe en deux versions **Docker-CE** (Docker Community Edition) et **Docker-EE** (Docker Enterprise Edition)Pour consulter les différences entre les deux versionsconsultez le lien  **[[https://docs.docker.com/engine/installation/]]**.
-"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" +
-+
-</file>+
  
-Démarrez maintenant la machine virtuelle **TargetB**Si vous participez dans une FAD, utilisez les commandes suivantes :+====1.2 - Installer docker====
  
-<code> +Docker n'est pas dans le dépôts de CentOSAfin de l'installer il convient d'ajouter le dépôt de docker :
-trainee@ansible:~$ exit +
-déconnexion +
-Connection to localhost closed. +
-desktop@server16:~$ VBoxManage startvm TargetB --type headless +
-Waiting for VM "TargetB" to power on... +
-VM "TargetB" has been successfully started. +
-desktop@server16:~$ ssh -trainee localhost -p 2222 +
-trainee@localhost's password:  +
-Linux ansible.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 +
- +
-The programs included with the Debian GNU/Linux system are free software; +
-the exact distribution terms for each program are described in the +
-individual files in /usr/share/doc/*/copyright. +
- +
-Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent +
-permitted by applicable law. +
-Last login: Sun Apr 12 09:57:34 2020 from 10.0.2.2  +
-root@ansible:~#  +
-</code> +
- +
-Modifiez ensuite le fichier **/etc/hosts** de la machine **Ansible** :+
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ su - +[trainee@centos8 roles]$ su - 
-Mot de passe : fenestros +Password: fenestros 
-root@ansible:~# vi /etc/hosts +[root@centos8 ~]dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo 
-root@ansible:~# cat /etc/hosts +Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
-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+
  
- +[root@centos8 ~]dnf list docker-ce 
-The following lines are desirable for IPv6 capable hosts +Docker CE Stable - x86_64                                                                                                                                                          83 kB/s |  20 kB     00:00     
-::1     localhost ip6-localhost ip6-loopback +Last metadata expiration check0:00:01 ago on Wed 09 Mar 2022 12:38:58 EST. 
-ff02::1 ip6-allnodes +Available Packages 
-ff02::2 ip6-allrouters +docker-ce.x86_64                                                                                 3:20.10.12-3.el8                                                                                 docker-ce-stable
-root@ansible:~# exit +
-déconnexion +
-trainee@ansible:~/.ansible/roles$+
 </code> </code>
  
-Modifiez le fichier **inventory** en mettant les deux machines TargetA et TargetB dans le groupe **linux** :+Installez ensuite la dépendance **containerd** de docker-ce :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ vi inventory +[root@centos8 ~]# dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm 
-trainee@ansible:~/.ansible/roles$ cat inventory +Last metadata expiration check0:06:03 ago on Wed 09 Mar 2022 12:38:58 EST. 
-[linux] +containerd.io-1.2.10-3.2.el7.x86_64.rpm                                                                                                                                            13 MB/s |  23 MB     00:01     
-targeta +Dependencies resolved. 
-targetb+================================================================================================================================================================================================================== 
 + Package                                             Architecture                                 Version                                                Repository                                          Size 
 +================================================================================================================================================================================================================== 
 +Installing: 
 + containerd.io                                       x86_64                                       1.2.10-3.2.el7                                         @commandline                                        23 M 
 +     replacing  runc.x86_64 1.0.2-1.module_el8.5.0+911+f19012f9
  
-[group1] +Transaction Summary 
-localhost ansible_connection=local+================================================================================================================================================================================================================== 
 +Install  1 Package
  
-[basededonnees] +Total size: 23 M 
-web01 +Is this ok [y/N]: y
- +
-[dotcms] +
-web02 +
-web03 +
- +
-[equilibrage] +
-web04 +
- +
-[debian:children] +
-basededonnees +
-dotcms +
-equilibrage +
- +
-[debian:vars] +
-ansible_user=trainee+
 </code> </code>
  
-Modifiez le fichier **playbook.yaml** afin d'utiliser le Rôle **exemple01.java** en tant qu'utilisateur privilégié :+Installez maintenant le paquet **docker-ce** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ vi playbook.yaml  +[root@centos8 ~]# dnf install docker-ce --nobest -y
-trainee@ansible:~/.ansible/roles$ cat playbook.yaml  +
---- +
-hosts: all +
-  become: true +
-  roles:  +
-    exemple01.java +
 </code> </code>
  
-Connectez-vous à la machine TargetA et supprimez le paquet **openjdk-8-jre** :+Dernièrement, démarrez docker et vérifiez la version de Docker client et serveur :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ ssh targeta +[root@centos8 ~]# systemctl enable docker 
-The authenticity of host 'targeta (10.0.2.10)' can't be established. +[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 (yes/no)? yes +● docker.service - Docker Application Container Engine 
-WarningPermanently added 'targeta' (ECDSA) to the list of known hosts+   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled
-Debian GNU/Linux 9 +   Activeactivating (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
 +    Tasks16 
 +   Memory: 37.7M 
 +   CGroup: /system.slice/docker.service 
 +           └─59410 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
  
-The programs included with the Debian GNU/Linux system are free software; +Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.125986199-05:00" level=info msg="Starting up" 
-the exact distribution terms for each program are described in the +Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128455293-05:00" level=info msg="parsed scheme: \"unix\"" module=grpc 
-individual files in /usr/share/doc/*/copyright.+Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128518502-05:00" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc 
 +Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128568972-05:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <> 
 +Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128603681-05:00" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc 
 +Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105356011-05:00" level=info msg="parsed scheme: \"unix\"" module=grpc 
 +Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105423457-05:00" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc 
 +Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105455755-05:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <> 
 +Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105470536-05:00" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc 
 +Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.106759173-05:00" level=error msg="Failed to built-in GetDriver graph btrfs /var/lib/docker" 
 +[root@centos8 ~]# docker --version 
 +Docker version 20.10.12, build e91ed57 
 +[root@centos8 ~]# docker version 
 +Client: Docker Engine - Community 
 + Version:           20.10.12 
 + API version:       1.40 
 + Go version:        go1.16.12 
 + Git commit:        e91ed57 
 + Built:             Mon Dec 13 11:45:22 2021 
 + OS/Arch:           linux/amd64 
 + Context:           default 
 + Experimental:      true
  
-Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent +Server: Docker Engine - Community 
-permitted by applicable law. + Engine: 
-Last loginSat Feb  9 16:40:14 2019 from 10.0.2.9 +  Version         19.03.15 
-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:       99e3ed8919 
-root@targeta:~# exit +  Built:            Sat Jan 30 03:15:19 2021 
-déconnexion +  OS/Arch:          linux/amd64 
-trainee@targeta:~$ exit +  Experimental:     false 
-déconnexion + containerd: 
-Connection to targeta closed.+  Version:          1.2.10 
 +  GitCommit       b34a5c8af56e510852c35414db4c1f4fa6172339 
 + runc
 +  Version         1.0.0-rc8+dev 
 +  GitCommit       3e425f80a8c931f88e6d94a8c831b9d5aa481657 
 + docker-init
 +  Version:          0.18.0 
 +  GitCommit:        fec3683
 </code> </code>
  
-<WRAP center round important 60%+<WRAP center round important> 
-**Important** : Notez que le mot de passe **fenestros** ne sera pas en clair.+**Important** - Docker est composé de trois éléments : un serveur, un client et un ou plusieurs **Repositories** ou Dépôts en français.
 </WRAP> </WRAP>
  
-Connectez-vous à la machine TargetB et supprimez le paquet **java-1.8.0-openjdk** :+Démarrez un conteneur dénommé **postgresql** en mode détaché à partir d'une image **CentOS** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ ssh targetb +[root@centos8 ~]# docker run -d --name postgresql centos sleep infinity 
-The authenticity of host 'targetb (10.0.2.15)can't be established. +Unable to find image 'centos:latestlocally 
-ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU. +latestPulling from library/centos 
-Are you sure you want to continue connecting (yes/no)? yes +a1d0c7532777Pull complete  
-WarningPermanently added 'targetb' (ECDSA) to the list of known hosts. +Digestsha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 
-Last loginSat Feb  9 16:42:41 2019 from 10.0.2.9 +StatusDownloaded newer image for centos:latest 
-[trainee@targetb ~]$ su - +1028e25f81d14d685678794902cd599aa618eb283d80e274526d71ec9708e69d
-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.+
 </code> </code>
  
-<WRAP center round important 60%> +Vérifiez que le conteneur fonctionne :
-**Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. +
-</WRAP> +
- +
-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** :+
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ vi exemple01.java/tasks/main.yaml  +[root@centos8 ~]# docker ps -a 
-trainee@ansible:~/.ansible/roles$ cat exemple01.java/tasks/main.yaml  +CONTAINER ID   IMAGE     COMMAND            CREATED              STATUS          PORTS     NAMES 
---+1028e25f81d1   centos    "sleep infinity"   About a minute ago   Up 30 seconds             postgresql
-- 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'+
 </code> </code>
  
-Exécutez **ansible-playbook** et constatez le résultat :+Ajoutez **trainee** au groupe **docker** afin qu'il puisse gérer les conteneurs puis redevenir l'utilisateur **trainee** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l linux+[root@centos8 ~]# usermod -aG docker trainee 
 +[root@centos8 ~]# exit 
 +logout 
 +[trainee@centos8 roles]$ 
 +</code>
  
-PLAY [all] **************************************************************************************************************************************************************+Rejoignez le groupe **docker** en tant que **trainee** :
  
-TASK [Gathering Facts] ************************************************************************************************************************************************** +<code> 
-ok: [targeta+[trainee@centos8 roles]$ newgrp docker 
-ok: [targetb]+</code> 
  
-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 ************************************************************************************************************************************************************** +<code> 
-targeta                    : ok=2    changed=1    unreachable=0    failed=0    +[trainee@centos8 roles]$ mkdir docker
-targetb                    : ok=2    changed=1    unreachable=0    failed=0  +
 </code> </code>
  
-Les conditions peuvent être combinées grâce à **and** et **or**En voici un exemple : +Modifiez ensuite le fichier playbook.yaml :
- +
-<file> +
-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"+
-</file> +
- +
-=====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** :+
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ mkdir vault+[trainee@centos8 roles]$ vi playbook.yaml  
 +[trainee@centos8 roles]cat playbook.yaml  
 +--- 
 +- hosts: all 
 +  tasks: 
 +    - name: message 
 +      debug: msg="Conteneur - {{ inventory_hostname }} sous {{ansible_distribution}}"
 </code> </code>
  
-Éditez le fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** :+Modifiez le fichier **inventory** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ vi /home/trainee/.ansible/roles/group_vars/all.yaml +[trainee@centos8 roles]$ cp inventory inventory.old 
-trainee@ansible:~/.ansible/roles$ cat /home/trainee/.ansible/roles/group_vars/all.yaml +[trainee@centos8 roles]$ vi inventory 
---- +[trainee@centos8 roles]$ cat inventory 
-secret: gardezmoisecret+postgresql ansible_connection=docker
 </code> </code>
  
-Modifiez le fichier **/home/trainee/.ansible/roles/playbook.yaml** :+Supprimez le fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ vi playbook.yaml  +[trainee@centos8 roles]$ rm -rf /home/trainee/.ansible/roles/group_vars/all.yaml
-trainee@ansible:~/.ansible/roles$ cat playbook.yaml  +
---- +
-- hosts: all +
-  tasks: +
-  - debug: +
-      msg: "Le secret est {{ secret }}"+
 </code> </code>
  
Ligne 331: Ligne 231:
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost+[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml 
 +[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] => { 
-    "msg": "Le secret est gardezmoisecret"+    "msg": "Conteneur - postgresql sous CentOS"
 } }
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-localhost                  : ok=2    changed=0    unreachable=0    failed=0 +postgresql                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    
 </code> </code>
  
-<WRAP center round important 60%> +=====LAB #2 - Préparer Windows 10=====
-**Important** : L'exécution démontre que la variable **secret** est bien lue. +
-</WRAP>+
  
-====Crypter le Fichier====+Ansible est capable de travailler avec les versions de Windows(tm) suivantes :
  
-Cryptez maintenant le fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** en utilisant la commande **ansible-vault** :+  Windows(tm) 7,  
 +  Windows(tm) 8.1,  
 +  Windowst(tm) 10, 
 +  Windowst(tm) 11, 
 +  Windows(tm) Server 2008,  
 +  Windows(tm) Server 2008 R2,  
 +  Wondows(tm) Server 2012,  
 +  Windows(tm) Server 2012 R2,  
 +  * Windows(tm) Server 2016,  
 +  * Windows(tm) Server 2019, 
 +  * Windows(tm) Server 2022.
  
-<code> +Ansible nécessite sur chaque hôte :
-trainee@ansible:~/.ansible/roles$ ansible-vault encrypt group_vars/all.yaml  +
-New Vault password: fenestros +
-Confirm New Vault password: fenestros +
-Encryption successful +
-</code>+
  
-<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>+
  
-<WRAP center round important 60%> +====2.1 Mettre à Jour PowerShell et .NET====
-**Important** : Notez que le mot de passe est pour la commande **ansible-vault** et non pas uniquement pour l'action de cryptage en cours. +
-</WRAP>+
  
-Constatez maintenant le contenu du fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** :+Afin de mettre à jour les versions de PowerShell et .NET, Ansible fournit un script appelé **Upgrade-PowerShell.ps1**. Exécutez PowerShell en tant qu'Administrateur :
  
 <code> <code>
-trainee@ansible:~/.ansible/rolescat /home/trainee/.ansible/roles/group_vars/all.yaml +Windows PowerShell 
-$ANSIBLE_VAULT;1.1;AES256 +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:\Windows\system32> $url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1" 
-36646532393537343563383434363364623336643333393936613634653637396439+PS C:\Windows\system32> $file = "$env:temp\Upgrade-PowerShell.ps1" 
 +PS C:\Windows\system32> $username = "trainee" 
 +PS C:\Windows\system32> $password = "a39dae707d" 
 +PS C:\Windows\system32> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) 
 +PS C:\Windows\system32> Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force 
 +PS C:\Windows\system32> &$file -Version 5.1 -Username $username -Password $password -Verbose 
 +COMMENTAIRES : 2019-10-24T09:36:23 - INFO - starting script 
 +COMMENTAIRES : 2019-10-24T09:36:23 - INFO - current and target PS version are the same, no action is required 
 +COMMENTAIRES : 2019-10-24T09:36:23 - INFO - clearing auto logon registry properties
 </code> </code>
  
-Exécutez de nouveau la commande **ansible-playbook** :+Au cas où, vous pouvez enlever l'auto-login de l'administrateur et remettre la politique d'exécution à **Restricted** avec les commandes suivantes :
  
 <code> <code>
-trainee@ansible:~/.ansible/rolesansible-playbook -i inventory playbook.yaml -l localhost +PS C:\Windows\system32> Set-ExecutionPolicy -ExecutionPolicy Restricted -Force 
- +PS C:\Windows\system32> $reg_winlogon_path = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" 
-PLAY [all] ************************************************************************************************************************************************************** +PS C:\Windows\system32> Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0 
-ERROR! Attempting to decrypt but no vault secrets found+PS C:\Windows\system32> Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue 
 +PS C:\Windows\system32> Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue 
 +PS C:\Windows\system32>
 </code> </code>
  
-<WRAP center round important 60%> +====2.2 - Configurer WinRM====
-**Important** : Notez l'erreur due au fait que le fichier a été crypté. +
-</WRAP>+
  
-Pour indiquer à la commande **ansible-playbook** que le fichier qui doit être lu soit cryptéutilisez l'option **--ask-vault-pass** :+Pour mettre en place un **listener** WinRM en HTTP et un **listener** WinRM en HTTPScréer un certificat auto-signé et activer l'authentification de base sur le service WinRM, utilisez le script **ConfigureRemotingForAnsible.ps1** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost --ask-vault-pass +PS C:\Windows\system32> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" 
-Vault password:fenestros +PS C:\Windows\system32> $file = "$env:temp\ConfigureRemotingForAnsible.ps1" 
 +PS C:\Windows\system32> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) 
 +PS C:\Windows\system32> powershell.exe -ExecutionPolicy ByPass -File $file 
 +Self-signed SSL certificate generated; thumbprint17502EEEAC259F4C76D0F199A4B803E94E980CAD
  
-PLAY [all] ************************************************************************************************************************************************************** 
  
-TASK [Gathering Facts] ************************************************************************************************************************************************** +wxf                 : http://schemas.xmlsoap.org/ws/2004/09/transfer 
-ok[localhost]+a                   : http://schemas.xmlsoap.org/ws/2004/08/addressing 
 +w                   : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd 
 +lang                : fr-FR 
 +Address             : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous 
 +ReferenceParameters ReferenceParameters
  
-TASK [debug] ************************************************************************************************************************************************************ +Ok.
-ok: [localhost] => { +
-    "msg": "Le secret est gardezmoisecret" +
-}+
  
-PLAY RECAP ************************************************************************************************************************************************************** 
-localhost                  : ok=2    changed=0    unreachable=0    failed=0  
-</code> 
  
-<WRAP center round important 60%> 
-**Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. 
-</WRAP> 
  
-====Editer le Fichier==== +PS C:\Windows\system32>
- +
-Pour éditer le fichier, utilisez la sous-commande **edit** de la commande **ansible-vault** : +
- +
-<code> +
-trainee@ansible:~/.ansible/roles$ ansible-vault edit group_vars/all.yaml  +
-Vault password: fenestros+
 </code> </code>
  
-<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. +
-</WRAP>+
  
-Le fichier est chargé en mémoire pour édition :+Pour voir la liste des **listeners** ainsi créés, utilisez la commande suivante :
  
 <code> <code>
---- +PS C:\Windows\system32> winrm enumerate winrm/config/Listener 
-secretgardezmoisecret +Listener 
-~                                                                                                                                                                         +    Address = * 
-~                                                                                                                                                                         +    Transport = HTTP 
-~                                                                                                                                                                         +    Port = 5985 
-~                                                                                                                                                                         +    Hostname 
-~                                                                                                                                                                         +    Enabled = true 
-~                                                                                                                                                                         +    URLPrefix = wsman 
-~                                                                                                                                                                         +    CertificateThumbprint 
-~                                                                                                                                                                                                                                                                                                                                              +    ListeningOn = 10.0.2.5810.29.0.34, 127.0.0.1, ::1
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-"/tmp/tmpn2p84qb3.yaml" lines28 characters +
-</code>+
  
-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, ::1
  
-<code> +PS C:\Windows\system32>
---- +
-secret: gardezlesecret +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                                                                                                                                                                                              +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-~                                                                                                                                                                         +
-:x+
 </code> </code>
  
-Constatez que le contenu du fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** est toujours crypté :+Pour obtenir les informations concernant le certificat, exécutez les commandes suivantes en remplacant le contenu de $thumbprint avec la valeur que vous avez obtenue :
  
 <code> <code>
-trainee@ansible:~/.ansible/rolescat /home/trainee/.ansible/roles/group_vars/all.yaml +PS C:\Windows\system32> $thumbprint = "17502EEEAC259F4C76D0F199A4B803E94E980CAD" 
-$ANSIBLE_VAULT;1.1;AES256 +PS C:\Windows\system32> Get-ChildItem -Path cert:\LocalMachine\My -Recurse | Where-Object { $_.Thumbprint -eq $thumbprint } | Select-Object *
-62356135383762346138326536396438646331313533326630373431313063663630343031353733 +
-3032323565656264313738326462613961353963336264620a656430343634643764623337653137 +
-33656438353831346230653764306461393235386464326132303239396438643263343962353030 +
-3561376633396465630a616161636236303662626531323430353430663762383131666437303566 +
-62303538613338636664623232323734643937316663623637363965383637646639 +
-</code>+
  
-Exécutez de nouveau la commande **ansible-playbook** avec l'option **--ask-vault-pass** : 
  
-<code> +PSPath                   : Microsoft.PowerShell.Security\Certificate::LocalMachine\My\17502EEEAC259F4C76D0F199A4B803E94 
-trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost --ask-vault-pass +                           E980CAD 
-Vault password+PSParentPath             Microsoft.PowerShell.Security\Certificate::LocalMachine\My 
 +PSChildName              : 17502EEEAC259F4C76D0F199A4B803E94E980CAD 
 +PSDrive                  : Cert 
 +PSProvider               : Microsoft.PowerShell.Security\Certificate 
 +PSIsContainer            : False 
 +EnhancedKeyUsageList     : {Authentification du serveur (1.3.6.1.5.5.7.3.1)} 
 +DnsNameList              : {DESKTOP-1OV5NMP, DESKTOP-1OV5NMP} 
 +SendAsTrustedIssuer      : False 
 +EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty 
 +EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty 
 +PolicyId                 : 
 +Archived                 : False 
 +Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, 
 +                           System.Security.Cryptography.Oid, System.Security.Cryptography.Oid} 
 +FriendlyName             : 
 +IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName 
 +NotAfter                 : 22/10/2022 11:45:21 
 +NotBefore                : 23/10/2019 11:45:21 
 +HasPrivateKey            : True 
 +PrivateKey               : System.Security.Cryptography.RSACryptoServiceProvider 
 +PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey 
 +RawData                  : {48, 130, 5, 49...} 
 +SerialNumber             : 73F2EADFBABB86B7438B30B157A1C3FB 
 +SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName 
 +SignatureAlgorithm       : System.Security.Cryptography.Oid 
 +Thumbprint               : 17502EEEAC259F4C76D0F199A4B803E94E980CAD 
 +Version                  : 3 
 +Handle                   : 2829331536176 
 +Issuer                   : CN=DESKTOP-1OV5NMP 
 +Subject                  CN=DESKTOP-1OV5NMP
  
-PLAY [all] ************************************************************************************************************************************************************** 
  
-TASK [Gathering Facts] ************************************************************************************************************************************************** 
-ok: [localhost] 
- 
-TASK [debug] ************************************************************************************************************************************************************ 
-ok: [localhost] => { 
-    "msg": "Le secret est gardezlesecret" 
-} 
  
-PLAY RECAP ************************************************************************************************************************************************************** +PS C:\Windows\system32>
-localhost                  ok=2    changed=0    unreachable=0    failed=0 +
 </code> </code>
  
-<WRAP center round important 60%> +Dernièrement pour obtenir des informations concernant le service, exécutez les deux commandes suivantes :
-**Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. +
-</WRAP>+
  
-====Décrypter le Fichier====+<code> 
 +PS C:\Windows\system32> winrm get winrm/config/Service 
 +Service 
 +    RootSDDL O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) 
 +    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
  
-Il est possible de décrypter le fichier en utilisant la sous-commande **decrypt** de la commande **ansible-vault** :+PS C:\Windows\system32> winrm get winrm/config/Winrs 
 +Winrs 
 +    AllowRemoteShellAccess = true 
 +    IdleTimeout = 7200000 
 +    MaxConcurrentUsers = 2147483647 
 +    MaxShellRunTime = 2147483647 
 +    MaxProcessesPerShell = 2147483647 
 +    MaxMemoryPerShellMB = 2147483647 
 +    MaxShellsPerUser = 2147483647
  
-<code> +PS C:\Windows\system32>
-trainee@ansible:~/.ansible/roles$ ansible-vault decrypt group_vars/all.yaml  +
-Vault password: fenestros +
-Decryption successful+
 </code> </code>
  
-<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. +
-</WRAP>+
  
-Constatez que le contenu du fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** n'est plus crypté :+Exécutez ensuite la commande suivante :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ cat /home/trainee/.ansible/roles/group_vars/all.yaml +PS C:\Windows\system32> winrm configSDDL default 
---- +Service 
-secretgardezlesecret+    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)(A;;GXGR;;;S-1-5-21-1664865965-3091009943-3054596003-1002)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) 
 +    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>
 </code> </code>
  
-====Utilisation de Mots de Passe Aléatoires====+Dans la fenêtre **Autorisations pour Default**, ajoutez l'utilisateur pour Ansible ( trainee ) et accordez lui les permissions **Exécution** en plus des permissions **Lecture** :
  
-Installez le paquet **pwgen** :+{{ :elearning:workbooks:debian:6:avance:l130:win10.png?direct&600 |}}
  
-<code> +=====LAB #Préparer le Contrôleur Ansible=====
-trainee@ansible:~/.ansible/roles$ su - +
-Mot de passe :  +
-root@ansible:~apt-get install pwgen +
-root@ansible:~# exit +
-déconnexion +
-</code>+
  
-Utilisez maintenant la commande **pwgen** pour générer un mot de passe aléatoire :+====3.1 - Installer pywinrm==== 
 + 
 +Dans la machine virtuelle **centos8**, installez le support python pour WinRM :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ pwgen 16 +[trainee@centos8 ~]$ su - 
-aqu2VeifohMue2Ee+Passwordfenestros 
 + 
 +[root@centos8 ~]# pip3 install "pywinrm>=0.3.0" 
 +Collecting pywinrm>=0.3.0 
 +  Downloading pywinrm-0.4.2-py2.py3-none-any.whl (44 kB) 
 +     |████████████████████████████████| 44 kB 250 kB/s              
 +Collecting xmltodict 
 +  Downloading xmltodict-0.12.0-py2.py3-none-any.whl (9.2 kB) 
 +Requirement already satisfied: requests>=2.9.1 in /usr/lib/python3.6/site-packages (from pywinrm>=0.3.0) (2.20.0) 
 +Requirement already satisfied: six in /usr/lib/python3.6/site-packages (from pywinrm>=0.3.0) (1.11.0) 
 +Collecting requests-ntlm>=0.3.0 
 +  Downloading requests_ntlm-1.1.0-py2.py3-none-any.whl (5.7 kB) 
 +Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/lib/python3.6/site-packages (from requests>=2.9.1->pywinrm>=0.3.0) (3.0.4) 
 +Requirement already satisfied: idna<2.8,>=2.5 in /usr/lib/python3.6/site-packages (from requests>=2.9.1->pywinrm>=0.3.0) (2.5) 
 +Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/lib/python3.6/site-packages (from requests>=2.9.1->pywinrm>=0.3.0) (1.24.2) 
 +Collecting ntlm-auth>=1.0.2 
 +  Downloading ntlm_auth-1.5.0-py2.py3-none-any.whl (29 kB) 
 +Requirement already satisfied: cryptography>=1.3 in /usr/local/lib64/python3.6/site-packages (from requests-ntlm>=0.3.0->pywinrm>=0.3.0) (36.0.1) 
 +Requirement already satisfied: cffi>=1.12 in /usr/local/lib64/python3.6/site-packages (from cryptography>=1.3->requests-ntlm>=0.3.0->pywinrm>=0.3.0) (1.15.0) 
 +Requirement already satisfied: pycparser in /usr/local/lib/python3.6/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=0.3.0->pywinrm>=0.3.0) (2.21) 
 +Installing collected packages: ntlm-auth, xmltodict, requests-ntlm, pywinrm 
 +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 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
 </code> </code>
  
-Utilisez pwgen pour créer un mot de passe aléatoire contenu dans un fichier :+Modifiez ensuite le fichier **/etc/hosts** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ pwgen 16 1 > vault-password +[trainee@centos8 ~]$ su - 
-trainee@ansible:~/.ansible/roles$ ls +Passwordfenestros 
-debug  exemple01.java  exemple1  geerlingguy.java  group_vars  haproxy  host_vars  inventory  playbook.retry  playbook.yaml  tomcat  vault-password  vault +[root@centos8 ~]# vi /etc/hosts 
-trainee@ansible:~/.ansible/roles$ cat vault-password  +[root@centos8 ~]# cat /etc/hosts 
-waide5sheemohZ4e+127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
 +::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 
 +10.0.2.45 centos8.ittraining.loc centos8 
 +10.0.2.54 web01.i2tch.loc web01 
 +10.0.2.55 web02.i2tch.loc web02 
 +10.0.2.56 web03.i2tch.loc web03 
 +10.0.2.57 web04.i2tch.loc web04 
 +10.0.2.52 targeta.i2tch.loc targeta  
 +10.0.2.53 targetb.i2tch.loc targetb 
 +10.0.2.58 windows10
 </code> </code>
  
-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** :+====3.2 Tester la Configuration==== 
 + 
 +Pour tester la configuration, commencez par modifier le fichier inventory en tant que trainee :
  
 <code> <code>
-trainee@ansible:~/.ansible/rolesansible-vault encrypt group_vars/all.yaml --vault-password-file vault-password  +[root@centos8 ~]# exit 
-Encryption successful+logout 
 +[trainee@centos8 ~]vi inventory 
 +[trainee@centos8 ~]$ cat inventory 
 +[windows] 
 +windows10 
 + 
 +[windows:vars] 
 +ansible_user=trainee 
 +ansible_password=a39dae707d 
 +ansible_connection=winrm 
 +ansible_winrm_server_cert_validation=ignore
 </code> </code>
  
-Constatez le contenu du fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** :+Procédez au test :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ cat group_vars/all.yaml +[trainee@centos8 ~]$ ansible windows -i inventory -m win_ping 
-$ANSIBLE_VAULT;1.1;AES256 +windows10 | SUCCESS => { 
-33363436656334616461646164393366636639356533323639636131373131343933636631383738 +    "changed": false, 
-6465306265353838643132633234356538656137636332660a323965613931363065396234313961 +    "ping": "pong" 
-31313330646632643431383262623639373731616237663435306533353263643566353132363238 +}
-6439626633343738370a306631333861323433333364643736666561386136363966303239343264 +
-64373430383336323139396334346637316461393961633838303035386262396662+
 </code> </code>
  
-Exécutez de nouveau la commande **ansible-playbook** avec l'option **--vault-password-file** :+=====LAB #4 Travailler avec Ansible et Windows=====
  
-<code> +====4.Obtenir les Informations sur Windows 10====
-trainee@ansible:~/.ansible/roles$ ansible-playbook -i inventory playbook.yaml -l localhost --vault-password-file vault-password+
  
-PLAY [all] **************************************************************************************************************************************************************+De la même façon qu'avec Linux, il est possible d'utiliser le module **setup** pour obtenir des Facts :
  
-TASK [Gathering Facts************************************************************************************************************************************************** +<code> 
-ok: [localhost+[trainee@centos8 ~]$ ansible windows -i inventory -m setup 
- +windows10 | SUCCESS => { 
-TASK [debug************************************************************************************************************************************************************ +    "ansible_facts":
-ok: [localhost=> { +        "ansible_architecture": "64 bits", 
-    "msg": "Le secret est gardezlesecret"+        "ansible_architecture2": "x86_64", 
 +        "ansible_bios_date": "04/01/2014", 
 +        "ansible_bios_version": "rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org", 
 +        "ansible_date_time":
 +            "date": "2022-03-10", 
 +            "day": "10", 
 +            "epoch": "1646895432,89327", 
 +            "epoch_int": 1646895433, 
 +            "epoch_local": "1646899032,89327", 
 +            "hour": "07", 
 +            "iso8601": "2022-03-10T06:57:12Z", 
 +            "iso8601_basic": "20220310T075712893274", 
 +            "iso8601_basic_short": "20220310T075712", 
 +            "iso8601_micro": "2022-03-10T06:57:12.893274Z", 
 +            "minute": "57", 
 +            "month": "03", 
 +            "second": "12", 
 +            "time": "07:57:12", 
 +            "tz": "Romance Standard Time", 
 +            "tz_offset": "+01:00", 
 +            "weekday": "Thursday", 
 +            "weekday_number": "4", 
 +            "weeknumber": "9", 
 +            "year": "2022" 
 +        }, 
 +        "ansible_distribution": "Microsoft Windows 10 Professionnel", 
 +        "ansible_distribution_major_version": "10", 
 +        "ansible_distribution_version": "10.0.19042.0", 
 +        "ansible_domain": "", 
 +        "ansible_env":
 +            "ALLUSERSPROFILE": "C:\\ProgramData", 
 +            "APPDATA": "C:\\Users\\trainee\\AppData\\Roaming", 
 +            "COMPUTERNAME": "DESKTOP-P0SAHCP", 
 +            "ComSpec": "C:\\Windows\\system32\\cmd.exe", 
 +            "CommonProgramFiles": "C:\\Program Files\\Common Files", 
 +            "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files", 
 +            "CommonProgramW6432": "C:\\Program Files\\Common Files", 
 +            "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData", 
 +            "HOMEDRIVE": "C:", 
 +            "HOMEPATH": "\\Users\\trainee", 
 +            "LOCALAPPDATA": "C:\\Users\\trainee\\AppData\\Local", 
 +            "LOGONSERVER": "\\\\DESKTOP-P0SAHCP", 
 +            "NUMBER_OF_PROCESSORS": "8", 
 +            "OS": "Windows_NT", 
 +            "OneDrive": "C:\\Users\\trainee\\OneDrive", 
 +            "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL", 
 +            "PROCESSOR_ARCHITECTURE": "AMD64", 
 +            "PROCESSOR_IDENTIFIER": "Intel64 Family 15 Model 6 Stepping 1, GenuineIntel", 
 +            "PROCESSOR_LEVEL": "15", 
 +            "PROCESSOR_REVISION": "0601", 
 +            "PROMPT": "$P$G", 
 +            "PSExecutionPolicyPreference": "Unrestricted", 
 +            "PSModulePath": "C:\\Users\\trainee\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules", 
 +            "PUBLIC": "C:\\Users\\Public", 
 +            "Path": "C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Users\\trainee\\AppData\\Local\\Microsoft\\WindowsApps", 
 +            "ProgramData": "C:\\ProgramData", 
 +            "ProgramFiles": "C:\\Program Files", 
 +            "ProgramFiles(x86)": "C:\\Program Files (x86)", 
 +            "ProgramW6432": "C:\\Program Files", 
 +            "SystemDrive": "C:", 
 +            "SystemRoot": "C:\\Windows", 
 +            "TEMP": "C:\\Users\\trainee\\AppData\\Local\\Temp", 
 +            "TMP": "C:\\Users\\trainee\\AppData\\Local\\Temp", 
 +            "USERDOMAIN": "DESKTOP-P0SAHCP", 
 +            "USERDOMAIN_ROAMINGPROFILE": "DESKTOP-P0SAHCP", 
 +            "USERNAME": "trainee", 
 +            "USERPROFILE": "C:\\Users\\trainee", 
 +            "windir": "C:\\Windows" 
 +        }, 
 +        "ansible_fqdn": "DESKTOP-P0SAHCP", 
 +        "ansible_hostname": "DESKTOP-P0SAHCP", 
 +        "ansible_interfaces": [ 
 +            { 
 +                "connection_name": "Ethernet 2", 
 +                "default_gateway": "10.0.2.1", 
 +                "dns_domain": null, 
 +                "interface_index": 13, 
 +                "interface_name": "Intel(R) PRO/1000 MT Network Connection", 
 +                "macaddress": "92:E1:64:91:2B:57" 
 +            } 
 +        ], 
 +        "ansible_ip_addresses": [ 
 +            "fe80::1c9:fbad:7f52:9542%13", 
 +            "10.0.2.58" 
 +        ], 
 +        "ansible_kernel": "10.0.19042.0", 
 +        "ansible_lastboot": "2022-03-10 07:13:15Z", 
 +        "ansible_machine_id": "S-1-5-21-309167381-963478272-52300377", 
 +        "ansible_memfree_mb": 14006, 
 +        "ansible_memtotal_mb": 16384, 
 +        "ansible_netbios_name": "DESKTOP-P0SAHCP", 
 +        "ansible_nodename": "DESKTOP-P0SAHCP", 
 +        "ansible_os_family": "Windows", 
 +        "ansible_os_installation_type": "Client", 
 +        "ansible_os_name": "Microsoft Windows 10 Professionnel", 
 +        "ansible_os_product_type": "workstation", 
 +        "ansible_owner_contact": "", 
 +        "ansible_owner_name": "trainee", 
 +        "ansible_pagefilefree_mb": 2432, 
 +        "ansible_pagefiletotal_mb": 2432, 
 +        "ansible_powershell_version": 5, 
 +        "ansible_processor": [ 
 +            "0", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "1", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "2", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "3", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "4", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "5", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "6", 
 +            "GenuineIntel", 
 +            "Common KVM processor", 
 +            "7", 
 +            "GenuineIntel", 
 +            "Common KVM processor" 
 +        ], 
 +        "ansible_processor_cores": 8, 
 +        "ansible_processor_count": 1, 
 +        "ansible_processor_threads_per_core": 1, 
 +        "ansible_processor_vcpus": 8, 
 +        "ansible_product_name": "Standard PC (i440FX + PIIX, 1996)", 
 +        "ansible_product_serial": null, 
 +        "ansible_reboot_pending": true, 
 +        "ansible_swaptotal_mb": 0, 
 +        "ansible_system": "Win32NT", 
 +        "ansible_system_description": "", 
 +        "ansible_system_vendor": "QEMU", 
 +        "ansible_uptime_seconds": 2647, 
 +        "ansible_user_dir": "C:\\Users\\trainee", 
 +        "ansible_user_gecos": "", 
 +        "ansible_user_id": "trainee", 
 +        "ansible_user_sid": "S-1-5-21-309167381-963478272-52300377-1001", 
 +        "ansible_virtualization_role": "guest", 
 +        "ansible_virtualization_type": "kvm", 
 +        "ansible_win_rm_certificate_expires": "2025-03-08 07:34:49", 
 +        "ansible_windows_domain": "WORKGROUP", 
 +        "ansible_windows_domain_member": false, 
 +        "ansible_windows_domain_role": "Stand-alone workstation", 
 +        "gather_subset": [ 
 +            "all" 
 +        ], 
 +        "module_setup": true 
 +    }, 
 +    "changed": false
 } }
- 
-PLAY RECAP ************************************************************************************************************************************************************** 
-localhost                  : ok=2    changed=0    unreachable=0    failed=0   
 </code> </code>
  
-=====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**.+<code> 
 +[trainee@centos8 ~]$ vi command.yml 
 +[trainee@centos8 ~]$ cat command.yml 
 +--- 
 +- name: ipconfig 
 +  hosts: windows 
 +  tasks: 
 +    - name: run ipconfig 
 +      win_command: ipconfig 
 +      register: ipconfig 
 +    - debug: var=ipconfig 
 +</code>
  
-Une **image** est un paquet exécutable contenant tout ce qu'il est nécessaire afin d'exécuter un logiciel donné, incluant :+Exécutez le PlayBook :
  
-  * le code +<code> 
-  * un runtime +[trainee@centos8 ~]$ ansible-playbook command.yml -i inventory
-  * 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.+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]
  
-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/]]**.+TASK [run ipconfig] ********************************************************************************************************************************************************************************************** 
 +changed: [windows10]
  
-====Installer docker====+TASK [debug] ***************************************************************************************************************************************************************************************************** 
 +ok: [windows10] => { 
 +    "ipconfig":
 +        "changed": true, 
 +        "cmd": "ipconfig", 
 +        "delta": "0:00:00.111976", 
 +        "end": "2022-03-10 07:14:51.164294", 
 +        "failed": false, 
 +        "rc": 0, 
 +        "start": "2022-03-10 07:14:51.052317", 
 +        "stderr": "", 
 +        "stderr_lines": [], 
 +        "stdout": "\r\nConfiguration IP de Windows\r\n\r\n\r\nCarte Ethernet Ethernet 2 :\r\n\r\n   Suffixe DNS propre � la connexion. . . : \r\n   Adresse IPv6 de liaison locale. . . . .: fe80::1c9:fbad:7f52:9542%13\r\n   Adresse IPv4. . . . . . . . . . . . . .: 10.0.2.58\r\n   Masque de sous-r�seau. . . .�. . . . . : 255.255.255.0\r\n   Passerelle par d�faut. . . .�. . . . . : 10.0.2.1\r\n", 
 +        "stdout_lines":
 +            "", 
 +            "Configuration IP de Windows", 
 +            "", 
 +            "", 
 +            "Carte Ethernet Ethernet 2 :", 
 +            "", 
 +            "   Suffixe DNS propre � la connexion. . . : ", 
 +            "   Adresse IPv6 de liaison locale. . . . .: fe80::1c9:fbad:7f52:9542%13", 
 +            "   Adresse IPv4. . . . . . . . . . . . . .: 10.0.2.58", 
 +            "   Masque de sous-r�seau. . . .�. . . . . : 255.255.255.0", 
 +            "   Passerelle par d�faut. . . .�. . . . . : 10.0.2.1" 
 +        ] 
 +    } 
 +}
  
-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 : +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
- +windows10                  ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0     
-<code> +
-trainee@ansible:~$ su - +
-Mot de passe :  +
-root@ansible:~# apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common+
 </code> </code>
  
-Téléchargez la clef GPG officielle de docker :+====4.3 - Exécuter un script PowerShell==== 
 + 
 +Créez un script PowerShell pour démarrer le service Windows Update :
  
 <code> <code>
-root@ansible:~# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - +[trainee@centos8 ~]$ vi script1.ps1 
-OK+[trainee@centos8 ~]$ cat script1.ps1 
 +Start-Service -Name wuauserv
 </code> </code>
  
-Vérifiez que l'ID de la clef est **9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88** :+Créez ensuite un PlayBook appelé **winupdate.yml** :
  
 <code> <code>
-root@ansible:~# apt-key fingerprint 0EBFCD88 +[trainee@centos8 ~]$ vi winupdate.yml 
-pub   rsa4096 2017-02-22 [SCEA+[trainee@centos8 ~]$ cat winupdate.yml 
-      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88 +- name: "PowerShell script" 
-uid           [ unknown] Docker Release (CE deb) <docker@docker.com> +  hosts: "windows" 
-sub   rsa4096 2017-02-22 [S]+  gather_facts: "false" 
 +  tasks: 
 +    name: "Windows Update" 
 +      script: "script1.ps1"
 </code> </code>
  
-Ajoutez le dépôt **stable** de docker :+Exécutez le PlayBook :
  
 <code> <code>
-root@ansible:~# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" +[trainee@centos8 ~]$ ansible-playbook winupdate.yml -i inventory
-</code>+
  
-<WRAP center round important> +PLAY [PowerShell script] *****************************************************************************************************************************************************************************************
-**Important** - Notez que la commande **lsb_release -cs** retourne le nom de la distribution Debian, à savoir dans ce cas **stretch**+
-</WRAP>+
  
-Installez maintenant le paquet **docker-ce** :+TASK [Windows Update] ******************************************************************************************************************************************************************************************** 
 +changed[windows10]
  
-<code> +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-root@ansible:~# apt-get update +windows10                  ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
-... +
-root@ansible:~# apt-get install docker-ce+
 </code> </code>
  
-Dernièrement, vérifiez la version de Docker client et serveur :+====4.4 - Installer un Logiciel avec Chocolatey====
  
-<code> +**[[https://chocolatey.org/|Chocolatey]]** est un gestionnaire de paquets pour Windows(tm).
-root@ansible:~# docker version +
-Client: +
- Version:           18.09.+
- 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 +Créez le PlayBook **firefox.yml** :
- 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 +
-</code> +
- +
-<WRAP center round important> +
-**Important** - Docker est composé de trois éléments : un serveur, un client et un ou plusieurs Repositories ou Dépôts en français. +
-</WRAP> +
- +
-Démarrez un conteneur dénommé **postgresql** en mode détaché à partir d'une image **CentOS** :+
  
 <code> <code>
-root@ansible:~# docker run ---name postgresql centos sleep infinity +[trainee@centos8 ~]$ vi firefox.yml 
-Unable to find image 'centos:latest' locally +[trainee@centos8 ~]$ cat firefox.yml 
-latestPulling from library/centos +--
-a02a4930cb5dPull complete  +- name: Install Firefox using Chocolatey 
-Digestsha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 +  hostsall 
-StatusDownloaded newer image for centos:latest +  tasks
-220c66d30fa66a016e8bb171d6ce69c8f5b2e7966f700317e7dcc1fe6398cb5c+    - nameInstall Firefox 
 +      win_chocolatey
 +        namefirefox 
 +        state: present
 </code> </code>
  
-Vérifiez que le conteneur fonctionne :+Exécutez le PlayBook :
  
 <code> <code>
-root@ansible:~# docker ps +[trainee@centos8 ~]$ ansible-playbook firefox.yml -i inventory
-CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES +
-220c66d30fa6        centos              "sleep infinity"    2 minutes ago       Up 2 minutes                            postgresql +
-</code>+
  
-====La Connexion à Docker====+PLAY [Install Firefox using Chocolatey] **************************************************************************************************************************************************************************
  
-Créez maintenant le Rôle **docker** :+TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* 
 +ok: [windows10] 
 + 
 +TASK [Install Firefox] ******************************************************************************************************************************************************************************************* 
 +[WARNING]: Chocolatey was missing from this system, so it was installed during this task run. 
 +changed[windows10]
  
-<code> +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-trainee@ansible:~$ mkdir .ansible/roles/docker +windows10                  ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
-trainee@ansible:~$ cd .ansible/roles +
-trainee@ansible:~/.ansible/roles$+
 </code> </code>
  
-Modifiez ensuite le fichier playbook.yaml :+====4.5 - Créer un Utilisateur Local==== 
 + 
 +Créez le PlayBook **user.yml** :
  
 <code> <code>
-trainee@ansible:~/.ansible/roles$ vi playbook.yaml  +[trainee@centos8 ~]$ vi users.yml 
-trainee@ansible:~/.ansible/roles$ cat playbook.yaml +[trainee@centos8 ~]$ cat users.yml
 --- ---
-- hosts: all+name: Create a user 
 +  hosts: windows
   tasks:   tasks:
-    - name: message +    - name: Create Jean 
-      debugmsg="Conteneur - {{ inventory_hostname }} sous {{ansible_distribution}}" +      win_user
-    name: install +        name: jean 
-      packagename=postgresql state=present +        passwordP@$$w0rd 
 +        statepresent 
 +        groups: 
 +          - utilisateurs
 </code> </code>
  
-Modifiez le fichier **inventory** :+Exécutez le PlayBook :
  
 <code> <code>
-trainee@ansible:~/.ansible/rolescp inventory inventory.old +[trainee@centos8 ~]$ ansible-playbook users.yml -i inventory
-trainee@ansible:~/.ansible/roles$ vi inventory +
-trainee@ansible:~/.ansible/roles$ cat inventory +
-postgresql ansible_connection=docker +
-</code>+
  
-Supprimez le fichier **/home/trainee/.ansible/roles/group_vars/all.yaml** :+PLAY [Create a user] *********************************************************************************************************************************************************************************************
  
-<code> +TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* 
-<code> +ok: [windows10]
-trainee@ansible:~/.ansible/roles$ rm -rf /home/trainee/.ansible/roles/group_vars/all.yaml +
-</code> +
- +
-Exécutez la commande **ansible-playbook** en tant que **root** : +
- +
-<code> +
-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] ********************************************************************************************************************************************************** +TASK [Create Jean*********************************************************************************************************************************************************************************************** 
-changed: [postgresql]+changed: [windows10]
  
-PLAY RECAP ************************************************************************************************************************************************************** +PLAY RECAP ******************************************************************************************************************************************************************************************************* 
-postgresql                 : ok=   changed=1    unreachable=0    failed=0   +windows10                  : ok=   changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
 </code> </code>
  
-Vérifiez maintenant que postgresql a été installé dans le conteneur :+Vérifiez que le compte a été créé :
  
-<code> +{{ :elearning:workbooks:debian:6:avance:l130:win101.png?direct&600 |}}
-root@ansible:/home/trainee/.ansible/roles# docker exec -it postgresql /bin/bash +
-[root@220c66d30fa6 /]# psql --version +
-psql (PostgreSQL) 9.2.24 +
-</code>+
  
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2023 Hugh Norris.
-Copyright © 2020 Hugh NORRIS +
-</div> +
-</html>+
Menu