Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
elearning:workbooks:debian:6:avance:l130:part7 [2020/08/18 10:17] – created adminelearning:workbooks:debian:6:avance:l130:part7 [2022/03/12 07:22] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2020.01**+Version : **2022.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======DOF507 - Validation de la Formation======+======DOF506 - Validation de la Formation======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **DOF507 - Validation de la Formation**+  * **DOF506 - Validation de la Formation**
     * Contenu du Module     * Contenu du Module
-    * Pour Aller Plus Loin +    * Support de Cours
-      * Support de Cours +
-      * L'Infrastructure Hors Formation +
-        * Matériel +
-        * Logiciels +
-        * Machine Virtuelle+
     * Rappel du Programme de la Formation     * Rappel du Programme de la Formation
       * Jour #1       * Jour #1
       * Jour #2       * Jour #2
 +    * LAB #1 - Validation des Acquis Pratique
 +      * 1.1 - Instructions
 +      * 1.2 - Corrigés
 +        * Erreur #1
 +        * Erreur #2
 +        * Erreur #3
 +        * Erreurs 4, 5 et 6
     * Évaluation de la Formation     * Évaluation de la Formation
 +    * Validation des Acquis Théorique 
  
-=====Pour Aller Plus Loin===== +=====Support de Cours=====
- +
-====Support de Cours====+
  
 L'accès au supports de cours ainsi que les LABS et les validations des acquis se fait grâce à un abonnement annuel par stagiaire à une plateforme de cours sur Internet. L'accès au supports de cours ainsi que les LABS et les validations des acquis se fait grâce à un abonnement annuel par stagiaire à une plateforme de cours sur Internet.
Ligne 40: Ligne 41:
   * de consulter les mises à jour du contenu des supports de cours pendant la période de l'abonnement,   * de consulter les mises à jour du contenu des supports de cours pendant la période de l'abonnement,
   * d'échanger avec les autres participants de la session ainsi qu'avec les anciens stagiaires.   * d'échanger avec les autres participants de la session ainsi qu'avec les anciens stagiaires.
- 
-====L'Infrastructure Hors Formation==== 
- 
-===Matériel=== 
- 
-  * Un poste 64 bits (MacOS, Linux, Windows(tm) ou Solaris(tm)), 
-  * Dans le cas de Windows(tm), **seulement** la version 7 ou 10 avec Hyper-V **désinstallé**, 
-  * Le mot de passe du compte administrateur du système, 
-  * Clavier AZERTY FR ou QWERTY US, 
-  * 16 Go de RAM minimum, 
-  * Processeur 8 cœurs minimum, 
-  * 16 Go d'espace disque disponible. 
- 
-===Logiciels=== 
- 
-  * Oracle VirtualBox v 6.0 ou plus (MacOS, Linux, Windows(tm) ou Solaris(tm)), 
-  * Si Windows(tm) - Putty et WinSCP, 
-  * Navigateur Web Chrome ou Firefox. 
- 
-===Machines Virtuelles=== 
- 
-A télécharger : **[[https://my-short.link/T22Ecn|Ansible]]**, **[[https://my-short.link/I9bXg|TargetA]]**, **[[https://my-short.link/UDrWC|TargetB]]**, **[[https://my-short.link/g326vV|Web01]]**, **[[https://my-short.link/cDgK6|Web02]]**, **[[https://my-short.link/aLbGD|Web03]]** & **[[https://my-short.link/zq2b|Web04]]** 
  
 =====Rappel du Programme de la Formation===== =====Rappel du Programme de la Formation=====
Ligne 67: Ligne 46:
 ====Jour #1==== ====Jour #1====
  
-  * **DOF500 - Configuration et Gestion des Ordinateurs avec Ansible** - 1 heure. +  * **DOF501 - Installation d'Ansible**
-    * Utilisation de l'Infrastructure +
-      * Connexion au Serveur Cloud +
-        * Linux, MacOS et Windows 10 muni du client ssh +
-        * Windows 7 et Windows 10 sans client ssh +
-      * Configuration de VirtualBox et Démarrage des Machines Virtuelles +
-      * Connexion à la Machine Virtuelle Ansible +
-    * Pré-requis +
-    * Programme de la Formation +
-    * Évaluation des Compétences +
- +
-  * **DOF501 - Installation d'Ansible** - 1 heure.+
     * Qu'est-ce Ansible ?     * Qu'est-ce Ansible ?
     * LAB #1 - Installation d'Ansible     * LAB #1 - Installation d'Ansible
Ligne 85: Ligne 53:
       * 2.2 - sudo       * 2.2 - sudo
  
-  * **DOF502 - Les Commandes ansible, ansible-playbook et ansible-galaxy** - 3 heures.+  * **DOF502 - Les Commandes ansible, ansible-playbook et ansible-galaxy**
     * LAB #1 - Débuter avec Ansible     * LAB #1 - Débuter avec Ansible
       * 1.1 - La Commande ansible       * 1.1 - La Commande ansible
Ligne 103: Ligne 71:
       * 3.2 - Ansible Galaxy       * 3.2 - Ansible Galaxy
  
-  * **DOF503 - Rôles, Gabarits et Hiérarchie des Variables** - 2 heures.+  * **DOF503 - Rôles, Gabarits et Hiérarchie des Variables**
     * LAB #1 - Dépendances de Rôles     * LAB #1 - Dépendances de Rôles
     * LAB #2 - Utilisation des Gabarits     * LAB #2 - Utilisation des Gabarits
Ligne 121: Ligne 89:
 ====Jour #2==== ====Jour #2====
  
-  * **DOF504 - Facts, Facts Secrets et Docker** - 2 heures.+  * **DOF504 - Facts, Facts Secrets et Docker**
     * LAB #1 - Utilisation des Facts d'Ansible     * LAB #1 - Utilisation des Facts d'Ansible
     * LAB #2 - La Commande ansible-vault     * LAB #2 - La Commande ansible-vault
       * 2.1 - Crypter le Fichier       * 2.1 - Crypter le Fichier
-      * 2.2 - Editer le Fichier+      * 2.2 - Éditer le Fichier
       * 2.3 - Décrypter le Fichier       * 2.3 - Décrypter le Fichier
       * 2.4 - Utilisation de Mots de Passe Aléatoires       * 2.4 - Utilisation de Mots de Passe Aléatoires
Ligne 133: Ligne 101:
       * 3.3 - La Connexion à Docker       * 3.3 - La Connexion à Docker
  
-  * **DOF505 - Utilisation d'Ansible avec Windows** - 2 heures. +  * **DOF505 - Utilisation d'Ansible avec Windows** 
-    * Pré-requis Windows +    * Prérequis Windows
-    * Arrêter les Machines Virtuelles non Indispensables+
     * LAB #1 - Préparer Windows 10     * LAB #1 - Préparer Windows 10
       * 1.1 - Mettre à Jour PowerShell et .NET       * 1.1 - Mettre à Jour PowerShell et .NET
Ligne 151: Ligne 118:
       * 3.5 - Créer un Utilisateur Local       * 3.5 - Créer un Utilisateur Local
  
-  * **DOF506 - Validations des Acquis** - 2 heures. +  * **DOF506 - Validation de la Formation** 
-    * Arrêter les Machines Virtuelles non Indispensables +    * Support de Cours 
-    * LAB #1 - Automatiser avec Ansible+    * Rappel du Programme de la Formation 
 +      * Jour #1 
 +      * Jour #2 
 +    * LAB #1 - Validation des Acquis Pratique
       * 1.1 - Instructions       * 1.1 - Instructions
       * 1.2 - Corrigés       * 1.2 - Corrigés
Ligne 160: Ligne 130:
         * Erreur #3         * Erreur #3
         * Erreurs 4, 5 et 6         * Erreurs 4, 5 et 6
- 
-  * **DOF507 - Validation de la Formation** - 1 heure. 
-    * Pour Aller Plus Loin 
-      * Support de Cours 
-      * L'Infrastructure Hors Formation 
-        * Matériel 
-        * Logiciels 
-        * Machine Virtuelle 
-    * Rappel du Programme de la Formation 
-      * Jour #1 
-      * Jour #2 
     * Évaluation de la Formation     * Évaluation de la Formation
 +    * Validation des Acquis Théorique 
 +
 +=====LAB #1 - Validation des Acquis Pratique=====
 +
 +Connectez-vous à la machine virtuelle **CentOS_7** :
 +
 +<code>
 +trainee@traineeXX:~$ ssh -l trainee centos7
 +</code>
 +
 +====1.1 - Instructions ====
 +
 +Il vous est demandé d'automatiser avec Ansible :
 +
 +  * l'installation du serveur vsftpd,
 +  * 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 :
 +
 +<code>
 +[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
 +</code>
 +
 +Vérifiez ensuite la présence des exécutables :
 +
 +<code>
 +[root@centos7 ~]# which ansible
 +/bin/ansible
 +[root@centos7 ~]# which ansible-playbook
 +/bin/ansible-playbook
 +</code>
 +
 +Afin de vous aider, on vous fournit deux fichiers :
 +
 +<code>
 +[root@centos7 ~]# cat vsftpd.yml
 +---
 +- name: ftp server install
 +  hosts: localhost
 +  gather_facts: no
 +  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 }}"
 +</code>
 +
 +<code>
 +[root@centos7 ~]# ansible-vault view secrets.yml
 +Vault password: fenestros
 +ftp_users:
 + - { username: mike, password: toto }
 + - { username: bob, password: tata }
 +</code>
 +
 +Lors de l'exécution de la commande ansible-playback, vous obtenez le résultat suivant :
 +
 +<code>
 +[root@centos7 ~]# ansible-playbook vsftpd.yml
 + [WARNING]: Could not match supplied host pattern, ignoring: all
 +
 + [WARNING]: provided hosts list is empty, only localhost is available
 +
 +ERROR! Syntax Error while loading YAML.
 +
 +
 +The error appears to have been in '/root/vsftpd.yml': line 14, column 13, but may
 +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 'yaml.scanner.ScannerError'>
 +exception: mapping values are not allowed in this context
 + in "<unicode string>", line 14, column 13
 +</code>
 +
 +A vous de jouer !
 +
 +[isauth account,@admin]
 +
 +====1.2 - Corrigés====
 +
 +===Erreur #1===
 +
 +Éditez le fichier **vsftpd.yml** :
 +
 +<code>
 +[root@centos7 ~]# vi vsftpd.yml
 +[root@centos7 ~]# cat vsftpd.yml
 +---
 +- name: ftp server install
 +  hosts: localhost
 +  gather_facts: no
 +  become: yes
 +  vars_files:
 +    - users.yml
 +  tasks:
 +    - name: latest vsftpd version
 +      yum:
 +        name: vsftpd
 +        state: latest
 +    - name: latest firewalld version
 +      yum:   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ajouter 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 }}"
 +</code>
 +
 +Relancez la commande **ansible-playbook** :
 +
 +<code>
 +[root@centos7 ~]# ansible-playbook vsftpd.yml
 +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
 +ERROR! Syntax Error while loading YAML.
 +  mapping values are not allowed in this context
 +
 +The error appears to be in '/root/vsftpd.yml': line 20, column 16, but may
 +be elsewhere in the file depending on the exact syntax problem.
 +
 +The offending line appears to be:
 +
 +        name vsftpd
 +        enabled: true
 +               ^ here
 +</code>
 +
 +===Erreur #2===
 +
 +Editez le fichier **vsftpd.yml** :
 +
 +<code>
 +[root@centos7 ~]# vi vsftpd.yml
 +[root@centos7 ~]# cat vsftpd.yml
 +---
 +- name: ftp server install
 +  hosts: localhost
 +  gather_facts: no
 +  become: yes
 +  vars_files:
 +    - users.yml
 +  tasks:
 +    - name: latest vsftpd version
 +      yum:
 +        name: vsftpd
 +        state: latest
 +    - name: latest firewalld version
 +      yum:   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ajouter yum:
 +        name: firewalld
 +        state: latest
 +    - name: vsftpd
 +      service:
 +        name: vsftpd <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ajouter le caractère : après name
 +        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 }}"
 +</code>
 +
 +Relancez la commande **ansible-playbook** :
 +
 +<code>
 +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
 +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
 +</code>
 +
 +===Erreur #3===
 +
 +Créez le fichier **users.yml** :
 +
 +<code>
 +[root@centos7 ~]# vi users.yml
 +[root@centos7 ~]# cat users.yml 
 +ftp_users:
 + - { username: mike, password: toto }
 + - { username: bob, password: tata }
 +</code>
 +
 +Relancez la commande **ansible-playbook** :
 +
 +<code>
 +[root@centos7 ~]# mv user.yml users.yml 
 +[root@centos7 ~]# ansible-playbook vsftpd.yml
 +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
 +
 +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]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'sha512' is undefined\n\nThe error appears to be in '/root/vsftpd.yml': line 32, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n        state: enabled\n    - name: Create_FTP_users\n      ^ here\n"}
 +
 +PLAY RECAP **************************************************************************************************************************************************************
 +localhost                  : ok=5    changed=3    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0  
 +</code>
 +
 +===Erreurs 4, 5 et 6===
 +
 +<code>
 +[root@centos7 ~]# vi vsftpd.yml
 +[root@centos7 ~]# cat vsftpd.yml
 +---
 +- name: ftp server install
 +  hosts: localhost
 +  gather_facts: no
 +  become: yes
 +  vars_files:
 +    - users.yml
 +  tasks:
 +    - name: latest vsftpd version
 +      yum:
 +        name: vsftpd
 +        state: latest
 +    - name: latest firewalld version
 +      yum:   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ajouter yum:
 +        name: firewalld
 +        state: latest
 +    - name: vsftpd
 +      service:
 +        name: vsftpd <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ajouter le caractère : après name
 +        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 }}"  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ajouter la ligne name:
 +        password: "{{ item.password | password_hash('sha512') }}" <<<<<<<<<<<<Entourer sha512 avec des caractères '
 +      with_items: "{{ ftp_users }}" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Aligner with_items: avec user:
 +</code>
 +
 +Relancez la commande **ansible-playbook** :
 +
 +<code>
 +[root@centos7 ~]# ansible-playbook vsftpd.yml
 +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
 +
 +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'username': u'mike', u'password': u'toto'})
 +changed: [localhost] => (item={u'username': u'bob', u'password': u'tata'})
 +
 +PLAY RECAP **************************************************************************************************************************************************************
 +localhost                  : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 +</code>
 +
 +Crypter le fichier users.yml :
 +
 +<code>
 +[root@centos7 ~]# ansible-vault encrypt users.yml
 +New Vault password: fenestros
 +Confirm New Vault password: fenestros
 +Encryption successful
 +</code>
 +
 +Consultez le fichier users.yml :
 +
 +<code>
 +[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;1.1;AES256
 +30323061313265353234666230373765333865663061626362646332376639356463623238343166
 +3635356261383732373633626230353837393735393933390a323561663963666262343835363166
 +61306137383463303138656131626236633935383031323864396164366139323265653732663834
 +6130656163356661360a663635333537373961616230353766666130633537323065663161393939
 +65353936613539303631373530643536616335356461323735646165616136303839636166663232
 +38616133393235636632646461346430373966306463636662333431373936633837616336326461
 +38633139616339343865626630333531366138313761663330346231333131346535663761396233
 +35353036373530323636636335336539616433373461653866316138306632323038626266623264
 +6634
 +</code>
 +
 +Exécutez le playbook :
 +
 +<code>
 +[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 'all'
 +
 +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'username': u'mike', u'password': u'toto'})
 +changed: [localhost] => (item={u'username': u'bob', u'password': u'tata'})
 +
 +PLAY RECAP ****************************************************************************************************************************************************************
 +localhost                  : ok=7    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 +</code>
 +
 +Notez que malgré le fait que le fichier **users.yml** soit crypté, les mots de passe des utilisateurs apparaissent en clair lors de l'exécution de la commande **ansible-playbook**. Pour palier à ce problème de sécurité, ajoutez **no_log: True** à la fin du fichier **vsftpd.yml** :
 +
 +
 +<code>
 +[root@centos7 ~]# vi vsftpd.yml
 +[root@centos7 ~]# cat vsftpd.yml
 +...
 +    - name: Create_FTP_users
 +      user:
 +        name: "{{ item.username }}" # pas d'instruction name
 +        password: "{{ item.password | password_hash('sha512') }}" # erreur de guillement
 +      with_items: "{{ ftp_users }}" # erreur d'indentation
 +      no_log: True
 +</code>
 +
 +De cette façon lors de l'exécution de la commande **ansible-playbook** vous obtiendrez :
 +
 +<code>
 +[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 'all'
 +...
 +TASK [Create_FTP_users] ***************************************************************************************************************************************************
 +changed: [localhost] => (item=None)
 +changed: [localhost] => (item=None)
 +
 +PLAY RECAP ****************************************************************************************************************************************************************
 +localhost                  : ok=7    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
 +</code>
 +
 +[/isauth]
  
 =====Évaluation de la Formation===== =====Évaluation de la Formation=====
Ligne 177: Ligne 583:
 Afin de valider votre formation, veuillez compléter l’Évaluation de la Formation. Afin de valider votre formation, veuillez compléter l’Évaluation de la Formation.
  
-=====Remerciements=====+=====Validation des Acquis Théorique=====
  
-Nous vous remercions de votre confiance et nous vous souhaitons une excellente continuation.+Afin de valider votre formation, veuillez passer la Validation des Acquis.
  
 ----- -----
  
-<html> +Copyright © 2022 Hugh Norris Document non-contractuel. Le programme peut être modifié sans préavis.
-<DIV ALIGN="CENTER"> +
-Copyright © 2020 Hugh Norris<BR><BR> +
-Document non-contractuel. Le programme peut être modifié sans préavis. +
-</div> +
-</html>  +
Menu