Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
elearning:workbooks:centos:8:lcf900:l703 [2022/05/17 08:03] – created admin | elearning:workbooks:centos:8:lcf900:l703 [2024/11/30 10:56] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
- | Version - **2022.01** | + | Version - **2024.01** |
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
- | ====== | + | ====== |
=====Contenu du Module===== | =====Contenu du Module===== | ||
- | * **DOF503 | + | * **LDF903 |
* Contenu du Module | * Contenu du Module | ||
* LAB #1 - Dépendances de Rôles | * LAB #1 - Dépendances de Rôles | ||
Ligne 25: | Ligne 25: | ||
* 2.6.2 - Le Gabarit Enfant | * 2.6.2 - Le Gabarit Enfant | ||
* LAB #3 - Gestion de la Hiérarchie des Variables | * LAB #3 - Gestion de la Hiérarchie des Variables | ||
+ | * LAB #4 - Utilisation des Facts d' | ||
+ | * LAB #5 - La Commande ansible-vault | ||
+ | * 5.1 - Crypter le Fichier | ||
+ | * 5.2 - Editer le Fichier | ||
+ | * 5.3 - Décrypter le Fichier | ||
+ | * 5.4 - Utilisation de Mots de Passe Aléatoires | ||
+ | * LAB #6 - Ansible par la Pratique | ||
+ | * 6.1 - Instructions | ||
+ | * 6.2 - Corrigés | ||
=====LAB #1 - Dépendances de Rôles===== | =====LAB #1 - Dépendances de Rôles===== | ||
Ligne 33: | Ligne 42: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11:~$ mkdir / |
- | [trainee@centos8 | + | trainee@debian11:~$ cd / |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 46: | Ligne 55: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- name: install jre | - name: install jre | ||
Ligne 68: | Ligne 77: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
java_home: / | java_home: / | ||
Ligne 82: | Ligne 91: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 92: | Ligne 101: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 104: | Ligne 113: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- name: install tomcat | - name: install tomcat | ||
Ligne 114: | Ligne 123: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
dependencies: | dependencies: | ||
Ligne 128: | Ligne 137: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- hosts: all | - hosts: all | ||
Ligne 144: | Ligne 153: | ||
< | < | ||
- | trainee@ansible: | + | trainee@debian11: |
- | trainee@ansible: | + | trainee@debian11: |
</ | </ | ||
Ligne 151: | Ligne 160: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
. | . | ||
├── exemple01.java | ├── exemple01.java | ||
Ligne 181: | Ligne 190: | ||
│ | │ | ||
│ | │ | ||
+ | │ | ||
│ | │ | ||
│ | │ | ||
Ligne 187: | Ligne 197: | ||
│ | │ | ||
│ | │ | ||
+ | │ | ||
│ | │ | ||
│ | │ | ||
│ | │ | ||
│ | │ | ||
- | │ └── Ubuntu-20.yml | + | │ ├── Ubuntu-20.yml |
+ | │ | ||
├── inventory | ├── inventory | ||
├── playbook.yaml | ├── playbook.yaml | ||
Ligne 200: | Ligne 212: | ||
└── main.yaml | └── main.yaml | ||
- | 15 directories, | + | 15 directories, |
</ | </ | ||
Ligne 206: | Ligne 218: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | PLAY [all] ******************************************************************************************************************************************************************************************************* | + | PLAY [all] *************************************************************************************************************************************************************************************************** |
- | TASK [Gathering Facts] | + | TASK [Gathering Facts] *************************************************************************************************************************************************************************************** |
ok: [web01] | ok: [web01] | ||
- | TASK [exemple01.java : install jre] ****************************************************************************************************************************************************************************** | + | TASK [exemple01.java : install jre] ************************************************************************************************************************************************************************** |
ok: [web01] | ok: [web01] | ||
- | TASK [exemple01.java : configure java home] ********************************************************************************************************************************************************************** | + | TASK [exemple01.java : configure java home] ****************************************************************************************************************************************************************** |
changed: [web01] | changed: [web01] | ||
- | TASK [tomcat : install tomcat] | + | TASK [tomcat : install tomcat] ******************************************************************************************************************************************************************************* |
changed: [web01] | changed: [web01] | ||
- | PLAY RECAP ******************************************************************************************************************************************************************************************************* | + | PLAY RECAP *************************************************************************************************************************************************************************************************** |
web01 : ok=4 changed=2 | web01 : ok=4 changed=2 | ||
</ | </ | ||
Ligne 233: | Ligne 245: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web01.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web01.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 243: | Ligne 255: | ||
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
permitted by applicable law. | permitted by applicable law. | ||
- | Last login: | + | Last login: |
trainee@web01: | trainee@web01: | ||
● tomcat8.service - LSB: Start Tomcat. | ● tomcat8.service - LSB: Start Tomcat. | ||
| | ||
- | | + | |
Docs: man: | Docs: man: | ||
| | ||
- | | + | |
trainee@web01: | trainee@web01: | ||
déconnexion | déconnexion | ||
Connection to web01 closed. | Connection to web01 closed. | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 260: | Ligne 272: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
dependencies: | dependencies: | ||
Ligne 274: | Ligne 286: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | PLAY [all] ******************************************************************************************************************************************************************************************************* | + | PLAY [all] *************************************************************************************************************************************************************************************************** |
- | TASK [Gathering Facts] | + | TASK [Gathering Facts] *************************************************************************************************************************************************************************************** |
ok: [web02] | ok: [web02] | ||
- | TASK [exemple01.java : install jre] ****************************************************************************************************************************************************************************** | + | TASK [exemple01.java : install jre] ************************************************************************************************************************************************************************** |
changed: [web02] | changed: [web02] | ||
- | TASK [exemple01.java : configure java home] ********************************************************************************************************************************************************************** | + | TASK [exemple01.java : configure java home] ****************************************************************************************************************************************************************** |
changed: [web02] | changed: [web02] | ||
- | TASK [tomcat : install tomcat] | + | TASK [tomcat : install tomcat] ******************************************************************************************************************************************************************************* |
changed: [web02] | changed: [web02] | ||
- | PLAY RECAP ******************************************************************************************************************************************************************************************************* | + | PLAY RECAP *************************************************************************************************************************************************************************************************** |
- | web02 : ok=4 changed=3 | + | web02 : ok=4 changed=3 |
</ | </ | ||
Ligne 297: | Ligne 309: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web02.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web02.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 307: | Ligne 319: | ||
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
permitted by applicable law. | permitted by applicable law. | ||
- | Last login: | + | Last login: |
trainee@web02: | trainee@web02: | ||
/ | / | ||
Ligne 313: | Ligne 325: | ||
déconnexion | déconnexion | ||
Connection to web02 closed. | Connection to web02 closed. | ||
- | [trainee@centos8 roles]$ ssh web03 | + | trainee@debian11:~/.ansible/roles$ |
- | Debian GNU/Linux 9 | + | |
- | Linux web03.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | + | |
- | + | ||
- | 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 / | + | |
- | + | ||
- | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | + | |
- | permitted by applicable law. | + | |
- | Last login: Wed Mar 9 12:12:51 2022 from 10.0.2.45 | + | |
- | trainee@web03: | + | |
- | trainee@web03: | + | |
- | déconnexion | + | |
- | Connection to web03 closed. | + | |
- | [trainee@centos8 | + | |
</ | </ | ||
Ligne 335: | Ligne 332: | ||
====2.1 - Variables==== | ====2.1 - Variables==== | ||
- | Les **Gabarits** ou // | + | Les **Gabarits** ou // |
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
Ligne 346: | Ligne 343: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 359: | Ligne 356: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- name: install | - name: install | ||
Ligne 385: | Ligne 382: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- name: reload haproxy | - name: reload haproxy | ||
Ligne 395: | Ligne 392: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
global | global | ||
log / | log / | ||
Ligne 459: | Ligne 456: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
haproxy_listen_address: | haproxy_listen_address: | ||
Ligne 470: | Ligne 467: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- hosts: all | - hosts: all | ||
Ligne 483: | Ligne 480: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | PLAY [all] ******************************************************************************************************************************************************************************************************* | + | PLAY [all] *************************************************************************************************************************************************************************************************** |
- | TASK [Gathering Facts] | + | TASK [Gathering Facts] *************************************************************************************************************************************************************************************** |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : install] | + | TASK [haproxy : install] ************************************************************************************************************************************************************************************* |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : configure] | + | TASK [haproxy : configure] *********************************************************************************************************************************************************************************** |
changed: [web04] | changed: [web04] | ||
- | TASK [haproxy : service] | + | TASK [haproxy : service] ************************************************************************************************************************************************************************************* |
ok: [web04] | ok: [web04] | ||
- | RUNNING HANDLER [haproxy : reload haproxy] | + | RUNNING HANDLER [haproxy : reload haproxy] ******************************************************************************************************************************************************************* |
changed: [web04] | changed: [web04] | ||
- | PLAY RECAP ******************************************************************************************************************************************************************************************************* | + | PLAY RECAP *************************************************************************************************************************************************************************************************** |
- | web04 : ok=5 changed=2 | + | web04 : ok=5 changed=2 |
</ | </ | ||
Ligne 509: | Ligne 506: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 519: | Ligne 516: | ||
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
permitted by applicable law. | permitted by applicable law. | ||
- | Last login: | + | Last login: |
trainee@web04: | trainee@web04: | ||
● haproxy.service - HAProxy Load Balancer | ● haproxy.service - HAProxy Load Balancer | ||
| | ||
- | | + | |
Docs: man: | Docs: man: | ||
| | ||
- | Process: | + | Process: |
- | Process: | + | Process: |
- | Main PID: 5394 (haproxy-systemd) | + | Main PID: 2970 (haproxy-systemd) |
Tasks: 3 (limit: 4915) | Tasks: 3 (limit: 4915) | ||
| | ||
- | | + | |
- | | + | |
- | | + | |
trainee@web04: | trainee@web04: | ||
Ligne 594: | Ligne 591: | ||
déconnexion | déconnexion | ||
Connection to web04 closed. | Connection to web04 closed. | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 608: | Ligne 605: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
frontend haproxy | frontend haproxy | ||
bind {{ haproxy_listen_address }}: | bind {{ haproxy_listen_address }}: | ||
Ligne 636: | Ligne 633: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
haproxy_listen_address: | haproxy_listen_address: | ||
Ligne 652: | Ligne 649: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | PLAY [all] ******************************************************************************************************************************************************************************************************* | + | PLAY [all] *************************************************************************************************************************************************************************************************** |
- | TASK [Gathering Facts] | + | TASK [Gathering Facts] *************************************************************************************************************************************************************************************** |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : install] | + | TASK [haproxy : install] ************************************************************************************************************************************************************************************* |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : configure] | + | TASK [haproxy : configure] *********************************************************************************************************************************************************************************** |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : service] | + | TASK [haproxy : service] ************************************************************************************************************************************************************************************* |
ok: [web04] | ok: [web04] | ||
- | PLAY RECAP ******************************************************************************************************************************************************************************************************* | + | PLAY RECAP *************************************************************************************************************************************************************************************************** |
- | web04 : ok=4 changed=0 | + | web04 : ok=4 changed=0 |
</ | </ | ||
Ligne 675: | Ligne 672: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 686: | Ligne 683: | ||
permitted by applicable law. | permitted by applicable law. | ||
Last login: Wed Mar 9 15:29:27 2022 from 10.0.2.45 | Last login: Wed Mar 9 15:29:27 2022 from 10.0.2.45 | ||
+ | |||
trainee@web04: | trainee@web04: | ||
errorfile 504 / | errorfile 504 / | ||
Ligne 704: | Ligne 702: | ||
server web02 10.0.2.55: | server web02 10.0.2.55: | ||
server web03 10.0.2.56: | server web03 10.0.2.56: | ||
+ | |||
trainee@web04: | trainee@web04: | ||
déconnexion | déconnexion | ||
Connection to web04 closed. | Connection to web04 closed. | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 717: | Ligne 716: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
haproxy_listen_address: | haproxy_listen_address: | ||
Ligne 734: | Ligne 733: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | PLAY [all] ******************************************************************************************************************************************************************************************************* | + | PLAY [all] *************************************************************************************************************************************************************************************************** |
- | TASK [Gathering Facts] | + | TASK [Gathering Facts] *************************************************************************************************************************************************************************************** |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : install] | + | TASK [haproxy : install] ************************************************************************************************************************************************************************************* |
ok: [web04] | ok: [web04] | ||
- | TASK [haproxy : configure] | + | TASK [haproxy : configure] *********************************************************************************************************************************************************************************** |
changed: [web04] | changed: [web04] | ||
- | TASK [haproxy : service] | + | TASK [haproxy : service] ************************************************************************************************************************************************************************************* |
ok: [web04] | ok: [web04] | ||
- | RUNNING HANDLER [haproxy : reload haproxy] | + | RUNNING HANDLER [haproxy : reload haproxy] ******************************************************************************************************************************************************************* |
changed: [web04] | changed: [web04] | ||
- | PLAY RECAP ******************************************************************************************************************************************************************************************************* | + | PLAY RECAP *************************************************************************************************************************************************************************************************** |
- | web04 : ok=5 changed=2 | + | web04 : ok=5 changed=2 |
</ | </ | ||
Ligne 760: | Ligne 759: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 770: | Ligne 769: | ||
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
permitted by applicable law. | permitted by applicable law. | ||
- | Last login: | + | Last login: |
trainee@web04: | trainee@web04: | ||
errorfile 408 / | errorfile 408 / | ||
Ligne 789: | Ligne 789: | ||
server web02 10.0.2.55: | server web02 10.0.2.55: | ||
server web03 10.0.2.56: | server web03 10.0.2.56: | ||
+ | |||
trainee@web04: | trainee@web04: | ||
déconnexion | déconnexion | ||
Connection to web04 closed. | Connection to web04 closed. | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 822: | Ligne 823: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
haproxy_listen_address: | haproxy_listen_address: | ||
Ligne 841: | Ligne 842: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
stats auth admin:admin | stats auth admin:admin | ||
{% endif %} | {% endif %} | ||
Ligne 858: | Ligne 859: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
haproxy_listen_address: | haproxy_listen_address: | ||
Ligne 875: | Ligne 876: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
stats auth admin:admin | stats auth admin:admin | ||
{% endif %} | {% endif %} | ||
Ligne 894: | Ligne 895: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
{% macro backend(name, | {% macro backend(name, | ||
server {{ name }} {{ ip }}:{{ port }} check | server {{ name }} {{ ip }}:{{ port }} check | ||
Ligne 904: | Ligne 905: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
{% endif %} | {% endif %} | ||
balance roundrobin | balance roundrobin | ||
Ligne 925: | Ligne 926: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
bind {{ haproxy_listen_address }}: | bind {{ haproxy_listen_address }}: | ||
mode http | mode http | ||
Ligne 949: | Ligne 950: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
haproxy_listen_address: | haproxy_listen_address: | ||
Ligne 964: | Ligne 965: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 990: | Ligne 991: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 1022: | Ligne 1023: | ||
déconnexion | déconnexion | ||
Connection to web04 closed. | Connection to web04 closed. | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 1080: | Ligne 1081: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
global | global | ||
log / | log / | ||
Ligne 1116: | Ligne 1117: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
{% extends ' | {% extends ' | ||
{% block globals %} | {% block globals %} | ||
Ligne 1165: | Ligne 1166: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- name: install | - name: install | ||
Ligne 1187: | Ligne 1188: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1213: | Ligne 1214: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
Debian GNU/Linux 9 | Debian GNU/Linux 9 | ||
Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | Linux web04.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
Ligne 1273: | Ligne 1274: | ||
déconnexion | déconnexion | ||
Connection to web04 closed. | Connection to web04 closed. | ||
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 1304: | Ligne 1305: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11:~$ mkdir / |
- | [trainee@centos8 | + | trainee@debian11:~$ mkdir / |
- | [trainee@centos8 | + | trainee@debian11:~$ mkdir / |
- | [trainee@centos8 | + | trainee@debian11:~$ |
</ | </ | ||
Ligne 1314: | Ligne 1315: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11:~$ touch / |
- | [trainee@centos8 | + | trainee@debian11:~$ touch / |
- | [trainee@centos8 | + | trainee@debian11:~$ |
</ | </ | ||
Ligne 1322: | Ligne 1323: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11:~$ cd .ansible/ |
- | [trainee@centos8 | + | trainee@debian11: |
debug | debug | ||
├── defaults | ├── defaults | ||
Ligne 1336: | Ligne 1337: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
</ | </ | ||
Ligne 1344: | Ligne 1345: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
group_vars/ | group_vars/ | ||
└── all.yaml | └── all.yaml | ||
Ligne 1354: | Ligne 1355: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- debug: | - debug: | ||
Ligne 1364: | Ligne 1365: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- hosts: all | - hosts: all | ||
Ligne 1375: | Ligne 1376: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1409: | Ligne 1410: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
endroit: ' | endroit: ' | ||
Ligne 1418: | Ligne 1419: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1456: | Ligne 1457: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
endroit: ' | endroit: ' | ||
Ligne 1469: | Ligne 1470: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1507: | Ligne 1508: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- hosts: all | - hosts: all | ||
Ligne 1518: | Ligne 1519: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1556: | Ligne 1557: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
endroit: ' | endroit: ' | ||
Ligne 1565: | Ligne 1566: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
# endroit: ' | # endroit: ' | ||
Ligne 1575: | Ligne 1576: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
- hosts: all | - hosts: all | ||
Ligne 1586: | Ligne 1587: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
localhost ansible_connection=local | localhost ansible_connection=local | ||
Ligne 1612: | Ligne 1613: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1655: | Ligne 1656: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
[group1] | [group1] | ||
localhost ansible_connection=local | localhost ansible_connection=local | ||
Ligne 1682: | Ligne 1683: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1725: | Ligne 1726: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
- | [trainee@centos8 | + | trainee@debian11: |
--- | --- | ||
endroit: ' | endroit: ' | ||
Ligne 1734: | Ligne 1735: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1777: | Ligne 1778: | ||
< | < | ||
- | [trainee@centos8 | + | trainee@debian11: |
PLAY [all] ******************************************************************************************************************************************************************************************************* | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
Ligne 1816: | Ligne 1817: | ||
**Important** : La variable fixée dans sur la **ligne de commande** surcharge toutes les autres variables. | **Important** : La variable fixée dans sur la **ligne de commande** surcharge toutes les autres variables. | ||
</ | </ | ||
+ | |||
+ | =====LAB #4 - Utilisation des Facts d' | ||
+ | |||
+ | Ansible Facts sont : | ||
+ | |||
+ | * des variables collectées automatiquement par le module **setup** d' | ||
+ | * spécifiques à l' | ||
+ | |||
+ | Il est cependant possible d' | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | web01 | SUCCESS => { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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 : | ||
+ | |||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | |||
+ | Ainsi que dictionnaire **ansible_default_ipv4** : | ||
+ | |||
+ | < | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | Modifiez le fichier **inventory** en mettant les deux machines TargetA et TargetB dans le groupe **linux** : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | [linux] | ||
+ | targeta | ||
+ | targetb | ||
+ | |||
+ | [group1] | ||
+ | localhost ansible_connection=local | ||
+ | |||
+ | [basededonnees] | ||
+ | web01 | ||
+ | |||
+ | [dotcms] | ||
+ | web02 | ||
+ | web03 | ||
+ | |||
+ | [equilibrage] | ||
+ | web04 | ||
+ | |||
+ | [debian: | ||
+ | basededonnees | ||
+ | dotcms | ||
+ | equilibrage | ||
+ | |||
+ | [debian: | ||
+ | ansible_user=trainee | ||
+ | </ | ||
+ | |||
+ | Modifiez le fichier **playbook.yaml** afin d' | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | --- | ||
+ | - hosts: all | ||
+ | become: true | ||
+ | roles: | ||
+ | - exemple01.java | ||
+ | </ | ||
+ | |||
+ | Utilisez la commande scp pour copier le fichier authorized_keys de la machine virtuelle debian11 vers la machine virtuelle targetb : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | trainee@10.0.2.53' | ||
+ | authorized_keys | ||
+ | trainee@debian11: | ||
+ | / | ||
+ | trainee@debian11: | ||
+ | </ | ||
+ | |||
+ | Grâce au Fact **ansible_os_family** il est possible d' | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | --- | ||
+ | - 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 == ' | ||
+ | </ | ||
+ | |||
+ | Modifiez le fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | Password: fenestros | ||
+ | |||
+ | root@debian11: | ||
+ | |||
+ | root@debian11: | ||
+ | 127.0.0.1 | ||
+ | 10.0.2.46 | ||
+ | 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 | ||
+ | |||
+ | # The following lines are desirable for IPv6 capable hosts | ||
+ | ::1 | ||
+ | ff02::1 ip6-allnodes | ||
+ | ff02::2 ip6-allrouters | ||
+ | |||
+ | root@debian11: | ||
+ | logout | ||
+ | |||
+ | trainee@debian11: | ||
+ | </ | ||
+ | |||
+ | Connectez-vous en ssh à targeta et testez la configuration de sudo : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | Debian GNU/Linux 9 | ||
+ | Linux targeta.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 | ||
+ | |||
+ | The programs included with the Debian GNU/Linux system are free software; | ||
+ | the exact distribution terms for each program are described in the | ||
+ | individual files in / | ||
+ | |||
+ | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
+ | permitted by applicable law. | ||
+ | Last login: Wed Sep 20 16:16:07 2023 from 10.0.2.46 | ||
+ | trainee@targeta: | ||
+ | </ | ||
+ | |||
+ | Modifiez le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@targeta: | ||
+ | |||
+ | trainee@targeta: | ||
+ | # | ||
+ | |||
+ | # deb cdrom: | ||
+ | |||
+ | #deb cdrom: | ||
+ | |||
+ | deb http:// | ||
+ | deb-src http:// | ||
+ | |||
+ | deb http:// | ||
+ | deb-src http:// | ||
+ | |||
+ | trainee@targeta: | ||
+ | Ign:1 http:// | ||
+ | Réception de:2 http:// | ||
+ | Réception de:3 http:// | ||
+ | Réception de:4 http:// | ||
+ | Réception de:5 http:// | ||
+ | Réception de:6 http:// | ||
+ | Réception de:7 http:// | ||
+ | Réception de:8 http:// | ||
+ | Réception de:9 http:// | ||
+ | Réception de:10 http:// | ||
+ | Réception de:11 http:// | ||
+ | 22,8 Mo réceptionnés en 27s (843 ko/s) | ||
+ | Lecture des listes de paquets... Fait | ||
+ | Construction de l' | ||
+ | Lecture des informations d' | ||
+ | 353 packages can be upgraded. Run 'apt list --upgradable' | ||
+ | </ | ||
+ | |||
+ | Supprimez le paquet **openjdk-8-jre** : | ||
+ | |||
+ | < | ||
+ | trainee@targeta: | ||
+ | ... | ||
+ | trainee@targeta: | ||
+ | déconnexion | ||
+ | Connection to targeta closed. | ||
+ | </ | ||
+ | |||
+ | Connectez-vous en ssh à targetb et testez la configuration de sudo : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | The authenticity of host ' | ||
+ | ECDSA key fingerprint is SHA256: | ||
+ | Are you sure you want to continue connecting (yes/ | ||
+ | Warning: Permanently added ' | ||
+ | trainee@targetb' | ||
+ | Last login: Sun Mar 21 08:53:18 2021 from 10.0.2.10 | ||
+ | |||
+ | [trainee@targetb ~]$ yum clean all | ||
+ | Loaded plugins: fastestmirror, | ||
+ | Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast | ||
+ | Cleaning repos: base extras updates | ||
+ | Other repos take up 119 M of disk space (use --verbose for details) | ||
+ | |||
+ | [trainee@targetb ~]$ sudo yum -y makecache | ||
+ | Loaded plugins: fastestmirror, | ||
+ | Loading mirror speeds from cached hostfile | ||
+ | * base: centos.mirror.ate.info | ||
+ | * extras: mirror.plusserver.com | ||
+ | * updates: mirror.plusserver.com | ||
+ | base | 3.6 kB 00: | ||
+ | extras | ||
+ | updates | ||
+ | (1/6): extras/ | ||
+ | (2/6): base/ | ||
+ | (3/6): base/ | ||
+ | (4/6): extras/ | ||
+ | (5/6): updates/ | ||
+ | (6/6): updates/ | ||
+ | Metadata Cache Created | ||
+ | </ | ||
+ | |||
+ | Supprimez le paquet **java-1.8.0-openjdk** : | ||
+ | |||
+ | < | ||
+ | [trainee@targetb ~]$ sudo yum -y remove java-1.8.0-openjdk | ||
+ | ... | ||
+ | [trainee@targetb ~]$ exit | ||
+ | logout | ||
+ | Connection to targetb closed. | ||
+ | trainee@debian11: | ||
+ | </ | ||
+ | |||
+ | Exécutez **ansible-playbook** et constatez le résultat : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | |||
+ | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* | ||
+ | ok: [targeta] | ||
+ | ok: [targetb] | ||
+ | |||
+ | TASK [exemple01.java : install jre (Debian)] ********************************************************************************************************************************************************************* | ||
+ | skipping: [targetb] | ||
+ | changed: [targeta] | ||
+ | |||
+ | TASK [exemple01.java : install jre (CentOS)] ********************************************************************************************************************************************************************* | ||
+ | skipping: [targeta] | ||
+ | changed: [targetb] | ||
+ | |||
+ | PLAY RECAP ******************************************************************************************************************************************************************************************************* | ||
+ | targeta | ||
+ | targetb | ||
+ | </ | ||
+ | |||
+ | Les conditions peuvent être combinées grâce à **and** et **or**. En voici un exemple : | ||
+ | |||
+ | < | ||
+ | tasks: | ||
+ | - name: " | ||
+ | command: / | ||
+ | when: (ansible_distribution == " | ||
+ | (ansible_distribution == " | ||
+ | </ | ||
+ | |||
+ | =====LAB #5 - La Commande ansible-vault===== | ||
+ | |||
+ | La commande **ansible-vault** permet de créer et d' | ||
+ | |||
+ | Pour illustrer son utilisation, | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | </ | ||
+ | |||
+ | Éditez le fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | --- | ||
+ | secret: gardezmoisecret | ||
+ | </ | ||
+ | |||
+ | Modifiez le fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | --- | ||
+ | - hosts: all | ||
+ | tasks: | ||
+ | - debug: | ||
+ | msg: "Le secret est {{ secret }}" | ||
+ | </ | ||
+ | |||
+ | Exécutez la commande **ansible-playbook** : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | |||
+ | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [debug] ***************************************************************************************************************************************************************************************************** | ||
+ | ok: [localhost] => { | ||
+ | " | ||
+ | } | ||
+ | |||
+ | PLAY RECAP ******************************************************************************************************************************************************************************************************* | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : L' | ||
+ | </ | ||
+ | |||
+ | ====5.1 - Crypter le Fichier==== | ||
+ | |||
+ | Cryptez maintenant le fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | New Vault password: fenestros | ||
+ | Confirm New Vault password: fenestros | ||
+ | Encryption successful | ||
+ | trainee@debian11: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le mot de passe est pour la commande **ansible-vault** et non pas uniquement pour l' | ||
+ | </ | ||
+ | |||
+ | Constatez maintenant le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | $ANSIBLE_VAULT; | ||
+ | 33343664333931323331346338346439613439633633396262393733663463363438663163383761 | ||
+ | 6566653230323032396434356132653262313962633265630a366436666261363933343663623131 | ||
+ | 63373230663530313864373236316465333464323131643933363664303332336261353732623064 | ||
+ | 3538303864633035320a376235333637656534376638613661303765373165383936653336646562 | ||
+ | 31376535333861616165346433306230366231333139323062366432333033386366 | ||
+ | </ | ||
+ | |||
+ | Exécutez de nouveau la commande **ansible-playbook** : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | ERROR! Attempting to decrypt but no vault secrets found | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Pour indiquer à la commande **ansible-playbook** que le fichier qui doit être lu soit crypté, utilisez l' | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | ERROR! Attempting to decrypt but no vault secrets found | ||
+ | trainee@debian11: | ||
+ | Vault password: fenestros | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | |||
+ | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [debug] ***************************************************************************************************************************************************************************************************** | ||
+ | ok: [localhost] => { | ||
+ | " | ||
+ | } | ||
+ | |||
+ | PLAY RECAP ******************************************************************************************************************************************************************************************************* | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | ||
+ | </ | ||
+ | |||
+ | ====5.2 - Editer le Fichier==== | ||
+ | |||
+ | Pour éditer le fichier, utilisez la sous-commande **edit** de la commande **ansible-vault** : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | Vault password: fenestros | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | ||
+ | </ | ||
+ | |||
+ | Le fichier est chargé en mémoire pour édition : | ||
+ | |||
+ | < | ||
+ | --- | ||
+ | secret: gardezlesecret | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | -- INSERT -- | ||
+ | </ | ||
+ | |||
+ | Modifiez le secret et sauvegardez le fichier : | ||
+ | |||
+ | < | ||
+ | --- | ||
+ | secret: gardezlesecret | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | ~ | ||
+ | :x | ||
+ | </ | ||
+ | |||
+ | Constatez que le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | $ANSIBLE_VAULT; | ||
+ | 36633861376466313363373336643832646663666334633931663262666361306236386232316461 | ||
+ | 3331633863386666626230663038653136653830303465660a353337316634363465663962336365 | ||
+ | 61396430313965653666333738376663336139613566636437353935653232306264336235333538 | ||
+ | 6439366539653436310a666361313237623137666634663439343132393532623962353163303364 | ||
+ | 37626635363832333934363930383265313932663230356234343235643935353535 | ||
+ | </ | ||
+ | |||
+ | Exécutez de nouveau la commande **ansible-playbook** avec l' | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | Vault password: fenestros | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | |||
+ | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [debug] ***************************************************************************************************************************************************************************************************** | ||
+ | ok: [localhost] => { | ||
+ | " | ||
+ | } | ||
+ | |||
+ | PLAY RECAP ******************************************************************************************************************************************************************************************************* | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | ||
+ | </ | ||
+ | |||
+ | ====5.3 - Décrypter le Fichier==== | ||
+ | |||
+ | Il est possible de décrypter le fichier en utilisant la sous-commande **decrypt** de la commande **ansible-vault** : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | Vault password: fenestros | ||
+ | Decryption successful | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le mot de passe **fenestros** ne sera pas en clair. | ||
+ | </ | ||
+ | |||
+ | Constatez que le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | --- | ||
+ | secret: gardezlesecret | ||
+ | </ | ||
+ | |||
+ | ====5.4 - Utilisation de Mots de Passe Aléatoires==== | ||
+ | |||
+ | Installez le paquet **pwgen** : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | trainee@debian11: | ||
+ | Password: fenestros | ||
+ | root@debian11: | ||
+ | Reading package lists... Done | ||
+ | Building dependency tree... Done | ||
+ | Reading state information... Done | ||
+ | The following packages were automatically installed and are no longer required: | ||
+ | libopengl0 linux-headers-5.10.0-15-amd64 linux-headers-5.10.0-15-common | ||
+ | Use 'apt autoremove' | ||
+ | The following NEW packages will be installed: | ||
+ | pwgen | ||
+ | 0 upgraded, 1 newly installed, 0 to remove and 22 not upgraded. | ||
+ | Need to get 19.6 kB of archives. | ||
+ | After this operation, 52.2 kB of additional disk space will be used. | ||
+ | Get:1 http:// | ||
+ | Fetched 19.6 kB in 0s (749 kB/s) | ||
+ | Selecting previously unselected package pwgen. | ||
+ | (Reading database ... 206562 files and directories currently installed.) | ||
+ | Preparing to unpack .../ | ||
+ | Unpacking pwgen (2.08-2) ... | ||
+ | Setting up pwgen (2.08-2) ... | ||
+ | Processing triggers for man-db (2.9.4-2) ... | ||
+ | root@debian11: | ||
+ | logout | ||
+ | |||
+ | trainee@debian11: | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **pwgen** pour générer un mot de passe aléatoire : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | di3Be1AiPayeehai | ||
+ | </ | ||
+ | |||
+ | Utilisez pwgen pour créer un mot de passe aléatoire contenu dans un fichier : | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | |||
+ | trainee@debian11: | ||
+ | backend.j2 | ||
+ | |||
+ | trainee@debian11: | ||
+ | oo3aeph5PaiVeiBu | ||
+ | </ | ||
+ | |||
+ | Utilisez maintenant le mot de passe aléatoire contenu dans le fichier **vault-password** pour crypter le fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | Encryption successful | ||
+ | </ | ||
+ | |||
+ | Constatez le contenu du fichier **/ | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | $ANSIBLE_VAULT; | ||
+ | 61326364653334653935643735623863353362333536396638356362376631633732306332316661 | ||
+ | 6662333436336237346433363637393666623165643438620a343436366136386637343238303063 | ||
+ | 38383866386631363834623461323334313030623136333334646335626165363263373966373663 | ||
+ | 3137333330653635620a396133346264656335633530353966383930613731626639393631623066 | ||
+ | 31323331383563373830306331653166326563333135326631363461313666313864 | ||
+ | </ | ||
+ | |||
+ | Exécutez de nouveau la commande **ansible-playbook** avec l' | ||
+ | |||
+ | < | ||
+ | trainee@debian11: | ||
+ | |||
+ | PLAY [all] ******************************************************************************************************************************************************************************************************* | ||
+ | |||
+ | TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [debug] ***************************************************************************************************************************************************************************************************** | ||
+ | ok: [localhost] => { | ||
+ | " | ||
+ | } | ||
+ | |||
+ | PLAY RECAP ******************************************************************************************************************************************************************************************************* | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | =====LAB #6 - Ansible par la Pratique===== | ||
+ | |||
+ | Connectez-vous à la machine virtuelle **CentOS7_10.0.2.51_SSH**. | ||
+ | |||
+ | ====6.1 - Instructions ==== | ||
+ | |||
+ | Il vous est demandé d' | ||
+ | |||
+ | * l' | ||
+ | * la mise à jour éventuelle de firewalld, | ||
+ | * la création d'une règle dans firewalld pour le trafic vers le serveur vsfptd, | ||
+ | * la création sécurisée de deux comptes ftp : | ||
+ | * user : mike | ||
+ | * mot de passe : toto | ||
+ | * user : bob | ||
+ | * mot de passe : tata | ||
+ | |||
+ | Installez donc Ansible à partir des dépôts : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ su - | ||
+ | Mot de passe : fenestros | ||
+ | Dernière connexion : jeudi 5 septembre 2019 à 18:28:51 CEST sur pts/0 | ||
+ | [root@centos7 ~]# yum install epel-release | ||
+ | [root@centos7 ~]# yum install ansible | ||
+ | </ | ||
+ | |||
+ | Vérifiez ensuite la présence des exécutables : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# which ansible | ||
+ | / | ||
+ | [root@centos7 ~]# which ansible-playbook | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Afin de vous aider, on vous fournit deux fichiers : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# cat vsftpd.yml | ||
+ | --- | ||
+ | - name: ftp server install | ||
+ | hosts: localhost | ||
+ | gather_facts: | ||
+ | become: yes | ||
+ | vars_files: | ||
+ | - users.yml | ||
+ | tasks: | ||
+ | - name: latest vsftpd version | ||
+ | yum: | ||
+ | name: vsftpd | ||
+ | state: latest | ||
+ | - name: latest firewalld version | ||
+ | name: firewalld | ||
+ | state: latest | ||
+ | - name: vsftpd | ||
+ | service: | ||
+ | name vsftpd | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld | ||
+ | service: | ||
+ | name: firewalld | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld allows ftp | ||
+ | firewalld: | ||
+ | permanent: yes | ||
+ | immediate: yes | ||
+ | state: enabled | ||
+ | - name: Create_FTP_users | ||
+ | user: | ||
+ | password: "{{ item.password | password_hash(sha512) }}" | ||
+ | with_items: "{{ ftp_users }}" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-vault view secrets.yml | ||
+ | Vault password: fenestros | ||
+ | ftp_users: | ||
+ | - { username: mike, password: toto } | ||
+ | - { username: bob, password: tata } | ||
+ | </ | ||
+ | |||
+ | Lors de l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-playbook vsftpd.yml | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | ERROR! Syntax Error while loading YAML. | ||
+ | |||
+ | |||
+ | The error appears to have been in '/ | ||
+ | be elsewhere in the file depending on the exact syntax problem. | ||
+ | |||
+ | The offending line appears to be: | ||
+ | |||
+ | - name: latest firewalld version | ||
+ | name: firewalld | ||
+ | ^ here | ||
+ | |||
+ | exception type: <class ' | ||
+ | exception: mapping values are not allowed in this context | ||
+ | in "< | ||
+ | </ | ||
+ | |||
+ | A vous de jouer ! | ||
+ | |||
+ | [isauth account, | ||
+ | |||
+ | ====6.2 - Corrigés==== | ||
+ | |||
+ | ===Erreur #1=== | ||
+ | |||
+ | Éditez le fichier **vsftpd.yml** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# vi vsftpd.yml | ||
+ | [root@centos7 ~]# cat vsftpd.yml | ||
+ | --- | ||
+ | - name: ftp server install | ||
+ | hosts: localhost | ||
+ | gather_facts: | ||
+ | become: yes | ||
+ | vars_files: | ||
+ | - users.yml | ||
+ | tasks: | ||
+ | - name: latest vsftpd version | ||
+ | yum: | ||
+ | name: vsftpd | ||
+ | state: latest | ||
+ | - name: latest firewalld version | ||
+ | yum: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | name: firewalld | ||
+ | state: latest | ||
+ | - name: vsftpd | ||
+ | service: | ||
+ | name vsftpd | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld | ||
+ | service: | ||
+ | name: firewalld | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld allows ftp | ||
+ | firewalld: | ||
+ | permanent: yes | ||
+ | immediate: yes | ||
+ | state: enabled | ||
+ | - name: Create_FTP_users | ||
+ | user: | ||
+ | password: "{{ item.password | password_hash(sha512) }}" | ||
+ | with_items: "{{ ftp_users }}" | ||
+ | </ | ||
+ | |||
+ | Relancez la commande **ansible-playbook** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-playbook vsftpd.yml | ||
+ | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | ||
+ | ERROR! Syntax Error while loading YAML. | ||
+ | mapping values are not allowed in this context | ||
+ | |||
+ | The error appears to be in '/ | ||
+ | be elsewhere in the file depending on the exact syntax problem. | ||
+ | |||
+ | The offending line appears to be: | ||
+ | |||
+ | name vsftpd | ||
+ | enabled: true | ||
+ | ^ here | ||
+ | </ | ||
+ | |||
+ | ===Erreur #2=== | ||
+ | |||
+ | Editez le fichier **vsftpd.yml** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# vi vsftpd.yml | ||
+ | [root@centos7 ~]# cat vsftpd.yml | ||
+ | --- | ||
+ | - name: ftp server install | ||
+ | hosts: localhost | ||
+ | gather_facts: | ||
+ | become: yes | ||
+ | vars_files: | ||
+ | - users.yml | ||
+ | tasks: | ||
+ | - name: latest vsftpd version | ||
+ | yum: | ||
+ | name: vsftpd | ||
+ | state: latest | ||
+ | - name: latest firewalld version | ||
+ | yum: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | name: firewalld | ||
+ | state: latest | ||
+ | - name: vsftpd | ||
+ | service: | ||
+ | name: vsftpd <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld | ||
+ | service: | ||
+ | name: firewalld | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld allows ftp | ||
+ | firewalld: | ||
+ | permanent: yes | ||
+ | immediate: yes | ||
+ | state: enabled | ||
+ | - name: Create_FTP_users | ||
+ | user: | ||
+ | password: "{{ item.password | password_hash(sha512) }}" | ||
+ | with_items: "{{ ftp_users }}" | ||
+ | </ | ||
+ | |||
+ | Relancez la commande **ansible-playbook** : | ||
+ | |||
+ | < | ||
+ | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | ||
+ | ERROR! vars file users.yml was not found | ||
+ | Could not find file on the Ansible Controller. | ||
+ | If you are using a module and expect the file to exist on the remote, see the remote_src option | ||
+ | </ | ||
+ | |||
+ | ===Erreur #3=== | ||
+ | |||
+ | Créez le fichier **users.yml** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# vi users.yml | ||
+ | [root@centos7 ~]# cat users.yml | ||
+ | ftp_users: | ||
+ | - { username: mike, password: toto } | ||
+ | - { username: bob, password: tata } | ||
+ | </ | ||
+ | |||
+ | Relancez la commande **ansible-playbook** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-playbook vsftpd.yml | ||
+ | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | ||
+ | |||
+ | PLAY [ftp server install] *********************************************************************************************************************************************** | ||
+ | |||
+ | TASK [latest vsftpd version] ******************************************************************************************************************************************** | ||
+ | changed: [localhost] | ||
+ | |||
+ | TASK [latest firewalld version] ***************************************************************************************************************************************** | ||
+ | changed: [localhost] | ||
+ | |||
+ | TASK [vsftpd] *********************************************************************************************************************************************************** | ||
+ | changed: [localhost] | ||
+ | |||
+ | TASK [firewalld] ******************************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [firewalld allows ftp] ********************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [Create_FTP_users] ************************************************************************************************************************************************* | ||
+ | fatal: [localhost]: | ||
+ | |||
+ | PLAY RECAP ************************************************************************************************************************************************************** | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | ===Erreurs 4, 5 et 6=== | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# vi vsftpd.yml | ||
+ | [root@centos7 ~]# cat vsftpd.yml | ||
+ | --- | ||
+ | - name: ftp server install | ||
+ | hosts: localhost | ||
+ | gather_facts: | ||
+ | become: yes | ||
+ | vars_files: | ||
+ | - users.yml | ||
+ | tasks: | ||
+ | - name: latest vsftpd version | ||
+ | yum: | ||
+ | name: vsftpd | ||
+ | state: latest | ||
+ | - name: latest firewalld version | ||
+ | yum: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | name: firewalld | ||
+ | state: latest | ||
+ | - name: vsftpd | ||
+ | service: | ||
+ | name: vsftpd <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld | ||
+ | service: | ||
+ | name: firewalld | ||
+ | enabled: true | ||
+ | state: started | ||
+ | - name: firewalld allows ftp | ||
+ | firewalld: | ||
+ | permanent: yes | ||
+ | immediate: yes | ||
+ | state: enabled | ||
+ | - name: Create_FTP_users | ||
+ | user: | ||
+ | name: "{{ item.username }}" | ||
+ | password: "{{ item.password | password_hash(' | ||
+ | with_items: "{{ ftp_users }}" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | </ | ||
+ | |||
+ | Relancez la commande **ansible-playbook** : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-playbook vsftpd.yml | ||
+ | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | ||
+ | |||
+ | PLAY [ftp server install] *********************************************************************************************************************************************** | ||
+ | |||
+ | TASK [latest vsftpd version] ******************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [latest firewalld version] ***************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [vsftpd] *********************************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [firewalld] ******************************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [firewalld allows ftp] ********************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [Create_FTP_users] ************************************************************************************************************************************************* | ||
+ | changed: [localhost] => (item={u' | ||
+ | changed: [localhost] => (item={u' | ||
+ | |||
+ | PLAY RECAP ************************************************************************************************************************************************************** | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | Crypter le fichier users.yml : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-vault encrypt users.yml | ||
+ | New Vault password: fenestros | ||
+ | Confirm New Vault password: fenestros | ||
+ | Encryption successful | ||
+ | </ | ||
+ | |||
+ | Consultez le fichier users.yml : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-vault view users.yml | ||
+ | Vault password: | ||
+ | ftp_users: | ||
+ | - { username: mike, password: toto } | ||
+ | - { username: bob, password: tata } | ||
+ | |||
+ | [root@centos7 ~]# cat users.yml | ||
+ | $ANSIBLE_VAULT; | ||
+ | 30323061313265353234666230373765333865663061626362646332376639356463623238343166 | ||
+ | 3635356261383732373633626230353837393735393933390a323561663963666262343835363166 | ||
+ | 61306137383463303138656131626236633935383031323864396164366139323265653732663834 | ||
+ | 6130656163356661360a663635333537373961616230353766666130633537323065663161393939 | ||
+ | 65353936613539303631373530643536616335356461323735646165616136303839636166663232 | ||
+ | 38616133393235636632646461346430373966306463636662333431373936633837616336326461 | ||
+ | 38633139616339343865626630333531366138313761663330346231333131346535663761396233 | ||
+ | 35353036373530323636636335336539616433373461653866316138306632323038626266623264 | ||
+ | 6634 | ||
+ | </ | ||
+ | |||
+ | Exécutez le playbook : | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-playbook vsftpd.yml --ask-vault-pass | ||
+ | Vault password: fenestros | ||
+ | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | ||
+ | |||
+ | PLAY [ftp server install] ************************************************************************************************************************************************* | ||
+ | |||
+ | TASK [latest vsftpd version] ********************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [latest firewalld version] ******************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [vsftpd] ************************************************************************************************************************************************************* | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [firewalld] ********************************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [firewalld allows ftp] *********************************************************************************************************************************************** | ||
+ | ok: [localhost] | ||
+ | |||
+ | TASK [Create_FTP_users] *************************************************************************************************************************************************** | ||
+ | changed: [localhost] => (item={u' | ||
+ | changed: [localhost] => (item={u' | ||
+ | |||
+ | PLAY RECAP **************************************************************************************************************************************************************** | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | Notez que malgré le fait que le fichier **users.yml** soit crypté, les mots de passe des utilisateurs apparaissent en clair lors de l' | ||
+ | |||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# vi vsftpd.yml | ||
+ | [root@centos7 ~]# cat vsftpd.yml | ||
+ | ... | ||
+ | - name: Create_FTP_users | ||
+ | user: | ||
+ | name: "{{ item.username }}" # pas d' | ||
+ | password: "{{ item.password | password_hash(' | ||
+ | with_items: "{{ ftp_users }}" # erreur d' | ||
+ | no_log: True | ||
+ | </ | ||
+ | |||
+ | De cette façon lors de l' | ||
+ | |||
+ | < | ||
+ | [root@centos7 ~]# ansible-playbook vsftpd.yml --ask-vault-pass | ||
+ | Vault password: fenestros | ||
+ | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | ||
+ | ... | ||
+ | TASK [Create_FTP_users] *************************************************************************************************************************************************** | ||
+ | changed: [localhost] => (item=None) | ||
+ | changed: [localhost] => (item=None) | ||
+ | |||
+ | PLAY RECAP **************************************************************************************************************************************************************** | ||
+ | localhost | ||
+ | </ | ||
+ | |||
+ | [/isauth] | ||
----- | ----- | ||
- | Copyright © 2022 Hugh Norris. | + | Copyright © 2024 Hugh Norris. |