Différences

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

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:centos:8:lcf900:l705 [2023/09/21 11:32] adminelearning:workbooks:centos:8:lcf900:l705 [2024/06/10 11:46] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version - **2023.01**+Version - **2024.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
Ligne 21: Ligne 21:
       * 1.8 - Gestion des Mots de Passe       * 1.8 - Gestion des Mots de Passe
       * 1.9 - Créer un Utilisateur Dédié pour Ansible       * 1.9 - Créer un Utilisateur Dédié pour Ansible
 +    * LAB #2 - Gestion des Services 
 +      * 2.1 - Interdire des Connexions SSH par Root 
 +    * LAB #3 - Gestion du Stockage 
 +      * 3.1 - Préparation 
 +      * 3.2 - Création des Partitions 
 +      * 3.3 - Création des VG et LV 
 +      * 3.4 - Création des Filesystems 
 +      * 3.5 - Création des Points de Montage 
 +      * 3.6 - Monter les Partitions 
 +      * 3.7 - Exécution du Playbook 
 +      * 3.8 - Vérification des Modifications 
 +    * LAB #4 - Gestion des Tâches 
 +      * 4.1 - Création d'un Cron Job 
 +      * 4.2 - Création d'un AT Job
  
 =====LAB #1 - Gestion des Utilisateurs et des Mots de Passe===== =====LAB #1 - Gestion des Utilisateurs et des Mots de Passe=====
Ligne 33: Ligne 46:
 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
 Warning: Permanently added '10.0.2.45' (ECDSA) to the list of known hosts. Warning: Permanently added '10.0.2.45' (ECDSA) to the list of known hosts.
-trainee@10.0.2.45's password: +trainee@10.0.2.45's password: trainee
 Activate the web console with: systemctl enable --now cockpit.socket Activate the web console with: systemctl enable --now cockpit.socket
  
 Last login: Thu Feb 16 16:46:22 2023 from 10.0.2.1 Last login: Thu Feb 16 16:46:22 2023 from 10.0.2.1
 +
 [trainee@centos8 ~]$ ls -la | grep .ssh [trainee@centos8 ~]$ ls -la | grep .ssh
 +
 [trainee@centos8 ~]$ mkdir .ssh [trainee@centos8 ~]$ mkdir .ssh
 +
 [trainee@centos8 ~]$ chmod 700 .ssh [trainee@centos8 ~]$ chmod 700 .ssh
 +
 [trainee@centos8 ~]$ ls -la | grep .ssh [trainee@centos8 ~]$ ls -la | grep .ssh
 drwx------.  2 trainee trainee      4096 Sep 20 09:50 .ssh drwx------.  2 trainee trainee      4096 Sep 20 09:50 .ssh
 +
 [trainee@centos8 ~]$ exit [trainee@centos8 ~]$ exit
 logout logout
Ligne 53: Ligne 71:
 <code> <code>
 trainee@debian11:~$ scp .ssh/authorized_keys trainee@10.0.2.45:/home/trainee/.ssh/authorized_keys trainee@debian11:~$ scp .ssh/authorized_keys trainee@10.0.2.45:/home/trainee/.ssh/authorized_keys
-trainee@10.0.2.45's password: +trainee@10.0.2.45's password: trainee
 authorized_keys                                     100%  846     1.3MB/  00:00  authorized_keys                                     100%  846     1.3MB/  00:00 
 </code> </code>
Ligne 70: Ligne 88:
  
 <code> <code>
 +[trainee@centos8 ~]$ su -
 +Password: fenestros
 +
 [root@centos8 ~]# vi /etc/sudoers.d/ansible_users [root@centos8 ~]# vi /etc/sudoers.d/ansible_users
 +
 [root@centos8 ~]# cat /etc/sudoers.d/ansible_users [root@centos8 ~]# cat /etc/sudoers.d/ansible_users
 trainee ALL=(ALL)       NOPASSWD:ALL trainee ALL=(ALL)       NOPASSWD:ALL
 +
 [root@centos8 ~]# chmod 440 /etc/sudoers.d/ansible_users [root@centos8 ~]# chmod 440 /etc/sudoers.d/ansible_users
 +
 [root@centos8 ~]# ls -l /etc/sudoers.d/ansible_users [root@centos8 ~]# ls -l /etc/sudoers.d/ansible_users
 -r--r-----. 1 root root 37 Sep 20 09:56 /etc/sudoers.d/ansible_users -r--r-----. 1 root root 37 Sep 20 09:56 /etc/sudoers.d/ansible_users
Ligne 83: Ligne 107:
 [root@centos8 ~]# exit [root@centos8 ~]# exit
 logout logout
 +
 [trainee@centos8 ~]$ sudo su - [trainee@centos8 ~]$ sudo su -
 +
 [root@centos8 ~]# exit [root@centos8 ~]# exit
 logout logout
 +
 [trainee@centos8 ~]$ exit [trainee@centos8 ~]$ exit
 logout logout
 Connection to 10.0.2.45 closed. Connection to 10.0.2.45 closed.
 +
 trainee@debian11:~$ trainee@debian11:~$
 </code> </code>
Ligne 124: Ligne 152:
 </code> </code>
  
-Créez maintenant les répertoires **hots_vars** et **group_vars** dans le rôle **users** :+Créez maintenant les répertoires **host_vars** et **group_vars** dans le rôle **users** :
  
 <code> <code>
 trainee@debian11:~$ mkdir -p ansible/users/host_vars trainee@debian11:~$ mkdir -p ansible/users/host_vars
-trainee@debian11:~$ mkdir -p ansible/users/group_vars+ 
 +trainee@debian11:~$ mkdir ansible/users/group_vars
 </code> </code>
  
Ligne 135: Ligne 164:
 <code> <code>
 trainee@debian11:~$ cd ansible/users/ trainee@debian11:~$ cd ansible/users/
 +
 trainee@debian11:~/ansible/users$ trainee@debian11:~/ansible/users$
 </code> </code>
  
-Constatez le fichier de configuration d'ansible actuellement utilisé :+Constatez le fichier de configuration d'Ansible actuellement utilisé :
  
 <code> <code>
Ligne 154: Ligne 184:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi ansible.cfg trainee@debian11:~/ansible/users$ vi ansible.cfg
 +
 trainee@debian11:~/ansible/users$ cat ansible.cfg trainee@debian11:~/ansible/users$ cat ansible.cfg
 [defaults] [defaults]
Ligne 280: Ligne 311:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi user1.yml trainee@debian11:~/ansible/users$ vi user1.yml
 +
 trainee@debian11:~/ansible/users$ cat user1.yml trainee@debian11:~/ansible/users$ cat user1.yml
 --- ---
Ligne 328: Ligne 360:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi user1.yml  trainee@debian11:~/ansible/users$ vi user1.yml 
 +
 trainee@debian11:~/ansible/users$ cat user1.yml  trainee@debian11:~/ansible/users$ cat user1.yml 
 --- ---
Ligne 366: Ligne 399:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi user1.yml  trainee@debian11:~/ansible/users$ vi user1.yml 
 +
 trainee@debian11:~/ansible/users$ cat user1.yml  trainee@debian11:~/ansible/users$ cat user1.yml 
 --- ---
Ligne 382: Ligne 416:
  
 <WRAP center round important 50%> <WRAP center round important 50%>
-**Important** : Notez l'utilisation de **"{{ item }}"** et **loop** qui permettent l'exécution d'un boucle pour la création des trois utilisateurs. DAns le cas où la version d'ansible < 2.5, il convient de remplacer **loop** avec **with_items**.+**Important** : Notez l'utilisation de **"{{ item }}"** et **loop** qui permettent l'exécution d'un boucle pour la création des trois utilisateurs. Dans le cas où la version d'Ansible < 2.5, il convient de remplacer **loop** avec **with_items**.
 </WRAP> </WRAP>
  
Ligne 439: Ligne 473:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi user1.yml  trainee@debian11:~/ansible/users$ vi user1.yml 
 +
 trainee@debian11:~/ansible/users$ cat user1.yml  trainee@debian11:~/ansible/users$ cat user1.yml 
 --- ---
Ligne 481: Ligne 516:
 10.0.2.45 | FAILED | rc=2 >> 10.0.2.45 | FAILED | rc=2 >>
 non-zero return code non-zero return code
 +
 trainee@debian11:~/ansible/users$ ansible all -m command -a 'ls -l /home' trainee@debian11:~/ansible/users$ ansible all -m command -a 'ls -l /home'
 10.0.2.45 | CHANGED | rc=0 >> 10.0.2.45 | CHANGED | rc=0 >>
Ligne 494: Ligne 530:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi user1.yml  trainee@debian11:~/ansible/users$ vi user1.yml 
 +
 trainee@debian11:~/ansible/users$ cat user1.yml  trainee@debian11:~/ansible/users$ cat user1.yml 
 --- ---
Ligne 538: Ligne 575:
 <code> <code>
 trainee@debian11:~/ansible/users$ vi user1.yml  trainee@debian11:~/ansible/users$ vi user1.yml 
 +
 trainee@debian11:~/ansible/users$ cat user1.yml  trainee@debian11:~/ansible/users$ cat user1.yml 
 --- ---
Ligne 561: Ligne 599:
  
 <WRAP center round important 50%> <WRAP center round important 50%>
-**Important** : Notez la création de deux tâches : **Create User Account** et **Delete User Account**. L'exécution de la tâche est conditionnée par la valeur de la variable **user_create** qui sera passée sur la ligne de commande lors de l’exécution du playbook. Notez que le mot de passe **trainee** est hashé grâce à l'utilisation de **password_hash('algorithme', 'salt')** où salt est du texte aléatoire. Dernièrement **update_password: on_create** implique que le mot de passe sera créé pour l'utilisateur spécifié par la valeur de la variable **user_name** uniquement lors de sa création.+**Important** : Notez la création de deux tâches : **Create User Account** et **Delete User Account**. L'exécution de la tâche est conditionnée par la valeur de la variable **user_create** qui sera passée sur la ligne de commande lors de l’exécution du playbook. Notez que le mot de passe **trainee** est haché grâce à l'utilisation de **password_hash('algorithme', 'salt')** où salt est du texte aléatoire. Dernièrement **update_password: on_create** implique que le mot de passe sera créé pour l'utilisateur spécifié par la valeur de la variable **user_name** uniquement lors de sa création.
 </WRAP>       </WRAP>      
  
Ligne 672: Ligne 710:
 [devops@centos8 ~]$ whoami [devops@centos8 ~]$ whoami
 devops devops
 +
 [devops@centos8 ~]$ exit [devops@centos8 ~]$ exit
 logout logout
Ligne 677: Ligne 716:
 </code> </code>
  
 +=====LAB #2 - Gestion des Services=====
 +
 +====2.1 - Interdire des Connexions par Root====
 +
 +Créez le fichier **ssh.yaml** :
 +
 +<code>
 +trainee@debian11:~/ansible/users$ vi ssh.yml
 +
 +trainee@debian11:~/ansible/users$ cat ssh.yml
 +---
 +- name: sshd
 +  hosts: all
 +  gather_facts: false
 +  handlers:
 +    - name: restart_sshd
 +      systemd: 
 +        name: sshd.service
 +        state: restarted
 +  tasks:
 +    - name: Enable SSHD
 +      systemd: 
 +        name: sshd
 +        enabled: true
 +        state: started
 +
 +    - name: No Root
 +      lineinfile:
 +        path: /etc/ssh/sshd_config
 +        regexp: '^PermitRootLogin'
 +        insertafter: '#LoginGraceTime'
 +        line: 'PermitRootLogin no'
 +      notify: restart_sshd 
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez la création d'un **handler** nommé **restart_sshd**. Deux tâches sont créées : **Enable SSHD** et **No Root**. **Enable SSHD** sert à activer et à démarrer le service sshd en utilisant le module **systemd** tandis que **No Root** édite le fichier **/etc/ssh/sshd_config** afin d'empêcher les connexions directes par l'utilisateur **root**. Notez l'utilisation du module **lineinfile** qui recherche une expression régulière **regexp** dans le fichier **/etc/ssh/sshd_config** et qui modifie la ligne en fonction de la valeur de **line**. La valeur d'**insertafter** spécifie la où doit être insérer la ligne si elle n'existe pas dans le fichier. Dernièrement en cas de modification du fichier le handler est appelé par **notify**.
 +</WRAP>
 +
 +Consultez la valeur de **PermitRootLogin** avant  l'exécution du playbook :
 +
 +<code>
 +trainee@debian11:~/ansible/users$ ansible all -m command -a 'grep PermitRootLogin /etc/ssh/sshd_config'
 +10.0.2.45 | CHANGED | rc=0 >>
 +PermitRootLogin yes
 +# the setting of "PermitRootLogin without-password".
 +</code>
 +
 +Exécutez le playbook :
 +
 +<code>
 +trainee@debian11:~/ansible/users$ ansible-playbook ssh.yml
 +
 +PLAY [sshd] ******************************************************************************************************************************************************************************************************
 +
 +TASK [Enable SSHD] ***********************************************************************************************************************************************************************************************
 +ok: [10.0.2.45]
 +
 +TASK [No Root] ***************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +RUNNING HANDLER [restart_sshd] ***********************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +PLAY RECAP *******************************************************************************************************************************************************************************************************
 +10.0.2.45                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 +</code>
 +
 +Consultez la valeur de **PermitRootLogin** après l'exécution du playbook :
 +
 +<code>
 +trainee@debian11:~/ansible/users$ ansible all -m command -a 'grep PermitRootLogin /etc/ssh/sshd_config'
 +10.0.2.45 | CHANGED | rc=0 >>
 +PermitRootLogin no
 +# the setting of "PermitRootLogin without-password".
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez la modification de la valeur de **PermitRootLogin**.
 +</WRAP>
 +
 +Dernièrement, exécutez de nouveau le playbook :
 +
 +<code>
 +trainee@debian11:~/ansible/users$ ansible-playbook ssh.yml
 +
 +PLAY [sshd] **********************************************************************************************
 +
 +TASK [Enable SSHD] ***************************************************************************************
 +ok: [10.0.2.45]
 +
 +TASK [No Root] *******************************************************************************************
 +ok: [10.0.2.45]
 +
 +PLAY RECAP ***********************************************************************************************
 +10.0.2.45                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez que le handler n'a pas été appelé car le fichier **/etc/ssh/sshd_config** n'a pas été modifié.
 +</WRAP>
 +
 +=====LAB #3 - Gestion du Stockage=====
 +
 +====3.1 - Préparation===
 +
 +Commencez par créer le répertoire **/home/ansible/storage** :
 +
 +<code>
 +trainee@debian11:~/ansible/users$ cd ..
 +
 +trainee@debian11:~/ansible$ mkdir storage
 +</code>
 +
 +Copiez ensuite les fichiers **/home/ansible/users/inventory** et **/home/ansible/users/ansible.cfg** dans le répertoire **/home/ansible/storage** :
 +
 +<code>
 +trainee@debian11:~/ansible$ cp users/{inventory,ansible.cfg} storage/
 +
 +trainee@debian11:~/ansible$ cd storage
 +
 +trainee@debian11:~/ansible/storage$ ls
 +ansible.cfg  inventory
 +</code>
 +
 +Consultez ensuite l'organisation des disques et des partitions de la VM **CentOS_8** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible all -m command -a 'lsblk'
 +10.0.2.45 | CHANGED | rc=0 >>
 +NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 +sda                   8:   0   32G  0 disk 
 +├─sda1                8:1    0    1G  0 part /boot
 +└─sda2                8:2    0   31G  0 part 
 +  ├─cl_centos8-root 253:0    0 27.8G  0 lvm  /
 +  └─cl_centos8-swap 253:1    0  3.2G  0 lvm  [SWAP]
 +sdb                   8:16      4G  0 disk 
 +sdc                   8:32     64G  0 disk 
 +└─sdc1                8:33     64G  0 part /home
 +sdd                   8:48     32G  0 disk 
 +sr0                  11:0    1 1024M  0 rom 
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez la présence du disque **sdb** qui est inutilisé.
 +</WRAP>
 +
 +====3.2 - Création des Partitions====
 +
 +Créez ensuite le fichier **storage.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi storage.yml
 +
 +trainee@debian11:~/ansible/storage$ cat storage.yml
 +---
 +- name: storage
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: part1
 +      parted:
 +        device: /dev/sdb
 +        part_start: 0%
 +        part_end: 50%
 +        number: 1
 +        state: present
 +
 +    - name: part2
 +      parted:
 +        device: /dev/sdb
 +        part_start: 50%
 +        part_end: 100%
 +        number: 2
 +        state: present
 +        flags: [ lvm ]
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **parted**. Le **device** est **/dev/sdb**. La partition commence au début du disque. La taille peut être spécifiée en GB, MB, secteurs ou en pourcentage. Dans le cas de la partition 2, le drapeau de la partition est fixé à **lvm**.
 +</WRAP>
 +
 +====3.3 - Création des VG et LV====
 +
 +Éditez le fichier **storage.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi storage.yml
 +
 +trainee@debian11:~/ansible/storage$ cat storage.yml 
 +---
 +- name: play1
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: part1
 +      parted:
 +        device: /dev/sdb
 +        part_start: 0%
 +        part_end: 50%
 +        number: 1
 +        state: present
 +
 +    - name: part2
 +      parted:
 +        device: /dev/sdb
 +        part_start: 50%
 +        part_end: 100%
 +        number: 2
 +        state: present
 +        flags: [ lvm ]
 +
 +    - name: vg
 +      lvg:
 +        vg: vg1
 +        pvs: /dev/sdb2
 +
 +    - name: lv
 +      lvol:
 +        lv: lv1
 +        vg: vg1
 +        size: 100%FREE
 +        shrink: false
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **lvg** pour créer le groupe de volumes **vg1** qui utilise le volume physique **/dev/sdb2**. L'exécution de la commande **pvcreate** est accomplie par l'entrée **pvs**. Notez ensuite l'utilisation du module **lvol** pour créer le volume logique **lv1**. La taille est fixée à 100% de la taille disponible. L'entrée **shrink: false** indique que la taille du volume ne peut pas être réduite.
 +</WRAP>
 +
 +====3.4 - Création des Filesystems====
 +
 +Éditez de nouveau le fichier **storage.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi storage.yml
 +
 +trainee@debian11:~/ansible/storage$ cat storage.yml 
 +---
 +- name: play1
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: part1
 +      parted:
 +        device: /dev/sdb
 +        part_start: 0%
 +        part_end: 50%
 +        number: 1
 +        state: present
 +
 +    - name: part2
 +      parted:
 +        device: /dev/sdb
 +        part_start: 50%
 +        part_end: 100%
 +        number: 2
 +        state: present
 +        flags: [ lvm ]
 +
 +    - name: vg
 +      lvg:
 +        vg: vg1
 +        pvs: /dev/sdb2
 +
 +    - name: lv
 +      lvol:
 +        lv: lv1
 +        vg: vg1
 +        size: 100%FREE
 +        shrink: false
 +
 +    - name: sdb1
 +      filesystem: 
 +        fstype: xfs
 +        dev: /dev/sdb1
 +
 +    - name: lv
 +      filesystem:
 +        fstype: xfs
 +        dev: /dev/vg1/lv1
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **filesystem** pour créer des systèmes de fichiers de type **xfs** sur **/dev/sdb1** et **/dev/vg1/lv1**.
 +</WRAP>
 +
 +====3.5 - Création des Points de Montage====
 +
 +Éditez ensuite le fichier **storage.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi storage.yml
 +trainee@debian11:~/ansible/storage$ cat storage.yml 
 +---
 +- name: play1
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: part1
 +      parted:
 +        device: /dev/sdb
 +        part_start: 0%
 +        part_end: 50%
 +        number: 1
 +        state: present
 +
 +    - name: part2
 +      parted:
 +        device: /dev/sdb
 +        part_start: 50%
 +        part_end: 100%
 +        number: 2
 +        state: present
 +        flags: [ lvm ]
 +
 +    - name: vg
 +      lvg:
 +        vg: vg1
 +        pvs: /dev/sdb2
 +
 +    - name: lv
 +      lvol:
 +        lv: lv1
 +        vg: vg1
 +        size: 100%FREE
 +        shrink: false
 +
 +    - name: sdb1
 +      filesystem: 
 +        fstype: xfs
 +        dev: /dev/sdb1
 +
 +    - name: lv
 +      filesystem:
 +        fstype: xfs
 +        dev: /dev/vg1/lv1
 +
 +    - name: dir1
 +      file:
 +        path: "{{ item }}"
 +        state: directory
 +      loop:
 +        - /data
 +        - /data/sales
 +        - /data/marketing
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **file** pour créer les répertoires **/data**, **/data/sales** et **/data/marketing** grâce au mot clef **loop**.
 +</WRAP>
 +
 +====3.6 - Monter les Partitions====
 +
 +Éditez une dernière fois le fichier **storage.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi storage.yml
 +
 +trainee@debian11:~/ansible/storage$ cat storage.yml 
 +---
 +- name: play1
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: part1
 +      parted:
 +        device: /dev/sdb
 +        part_start: 0%
 +        part_end: 50%
 +        number: 1
 +        state: present
 +
 +    - name: part2
 +      parted:
 +        device: /dev/sdb
 +        part_start: 50%
 +        part_end: 100%
 +        number: 2
 +        state: present
 +        flags: [ lvm ]
 +
 +    - name: vg
 +      lvg:
 +        vg: vg1
 +        pvs: /dev/sdb2
 +
 +    - name: lv
 +      lvol:
 +        lv: lv1
 +        vg: vg1
 +        size: 100%FREE
 +        shrink: false
 +
 +    - name: sdb1
 +      filesystem: 
 +        fstype: xfs
 +        dev: /dev/sdb1
 +
 +    - name: lv
 +      filesystem:
 +        fstype: xfs
 +        dev: /dev/vg1/lv1
 +
 +    - name: dir1
 +      file:
 +        path: "{{ item }}"
 +        state: directory
 +      loop:
 +        - /data
 +        - /data/sales
 +        - /data/marketing
 +
 +    - name: mount sales
 +      mount: 
 +        path: /data/sales
 +        src: /dev/sdb1
 +        fstype: xfs
 +        state: mounted
 +
 +    - name: mount marketing
 +      mount: 
 +        path: /data/marketing
 +        src: /dev/vg1/lv1
 +        fstype: xfs
 +        state: mounted  
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **mount** pour monter les filesystems **/dev/sdb1** et **/dev/vg1/lv1** sur les répertoires **/data/sales** et **/data/marketing** respectivement.
 +</WRAP>
 +
 +====3.7 - Exécution du Playbook====
 +
 +Exécutez maintenant le playbook **storage.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible-playbook storage.yml 
 +
 +PLAY [play1] *************************************************************************************************************************************************************************************************
 +
 +TASK [part1] *************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [part2] *************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [vg] ****************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [lv] ****************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [sdb1] **************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [lv] ****************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [dir1] **************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45] => (item=/data)
 +changed: [10.0.2.45] => (item=/data/sales)
 +changed: [10.0.2.45] => (item=/data/marketing)
 +
 +TASK [mount sales] *******************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +TASK [mount marketing] ***************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +PLAY RECAP ***************************************************************************************************************************************************************************************************
 +10.0.2.45                  : ok=9    changed=9    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 +</code>
 +
 +====3.8 - Vérification des Modifications====
 +
 +Vérifiez la modification dans la VM **CentOS_8** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible all -m command -a 'lsblk'
 +10.0.2.45 | CHANGED | rc=0 >>
 +NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 +sda                   8:   0   32G  0 disk 
 +├─sda1                8:1    0    1G  0 part /boot
 +└─sda2                8:2    0   31G  0 part 
 +  ├─cl_centos8-root 253:0    0 27.8G  0 lvm  /
 +  └─cl_centos8-swap 253:1    0  3.2G  0 lvm  [SWAP]
 +sdb                   8:16      4G  0 disk 
 +├─sdb1                8:17      2G  0 part /data/sales
 +└─sdb2                8:18      2G  0 part 
 +  └─vg1-lv1         253:   0    2G  0 lvm  /data/marketing
 +sdc                   8:32     64G  0 disk 
 +└─sdc1                8:33     64G  0 part /home
 +sdd                   8:48     32G  0 disk 
 +sr0                  11:0    1 1024M  0 rom
 +
 +trainee@debian11:~/ansible/storage$ ansible all -m command -a 'cat /etc/fstab'
 +10.0.2.45 | CHANGED | rc=0 >>
 +
 +#
 +# /etc/fstab
 +# Created by anaconda on Wed Jun 16 06:21:32 2021
 +#
 +# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
 +# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
 +#
 +# After editing this file, run 'systemctl daemon-reload' to update systemd
 +# units generated from this file.
 +#
 +/dev/mapper/cl_centos8-root /                       xfs     defaults        0 0
 +UUID=1c04981e-5317-4b73-9695-3ce25246835d /boot                   ext4    defaults        1 2
 +/dev/mapper/cl_centos8-swap swap                    swap    defaults        0 0
 +UUID=f76d6b66-985b-4a91-af9c-4987e8c1443c /home     ext4          defaults            1 2
 +/dev/sdb1 /data/sales xfs defaults 0 0
 +/dev/vg1/lv1 /data/marketing xfs defaults 0 0
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez la présence des filesystems **/dev/sdb1** et **/dev/vg1/lv1** ainsi que les points de montage **/data/sales** et **/data/marketing**. Notez aussi les modifications apportées au fichier **/etc/fstab**.
 +</WRAP>
 +
 +====LAB #4 - Gestion du Tâches====
 +
 +====4.1 - Création d'un Cron Job====
 +
 +Créez le fichier **schedule.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi schedule.yml
 +
 +trainee@debian11:~/ansible/storage$ cat schedule.yml
 +---
 +- name: scheduling
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: cron_job
 +      cron:
 +        name: my cron job
 +        hour: '11'
 +        minute: '25'
 +        job: 'cat /etc/passwd > /tmp/file1'
 +        user: root
 +        cron_file: mycron
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **cron** qui crée un cron job dont la description est **my cron job** et le fichier est **/etc/cron.d/mycron**. Notez que les valeurs de **hour** et **minute** doivent être passées en tant que texte.
 +</WRAP>
 +
 +Exécutez le playbook :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible-playbook schedule.yml 
 +
 +PLAY [scheduling] ********************************************************************************************************************************************************************************************
 +
 +TASK [cron_job] **********************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +PLAY RECAP ***************************************************************************************************************************************************************************************************
 +10.0.2.45                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 +</code>
 +
 +Vérifiez le contenu du fichier **/etc/cron.d/mycron** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible all -m command -a 'cat /etc/cron.d/mycron'
 +10.0.2.45 | CHANGED | rc=0 >>
 +#Ansible: my cron job
 +25 11 * * * root cat /etc/passwd > /tmp/file1
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez que la valeur de **name:** figure sur la ligne commençant par **#Ansible:**.
 +</WRAP>
 +
 +====4.1 - Création d'un AT Job====
 +
 +Créez le fichier **abc.txt** dans le répertoire **/home/trainee** de la VM **CentOS_8** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible all -m command -a 'touch /home/trainee/abc.txt'
 +[WARNING]: Consider using the file module with state=touch rather than running 'touch' If you need to use command because file is insufficient you can add 'warn: false' to this command task or set
 +'command_warnings=False' in ansible.cfg to get rid of this message.
 +10.0.2.45 | CHANGED | rc=0 >>
 +</code>
 +
 +Éditez le fichier **schedule.yml** :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ vi schedule.yml
 +
 +trainee@debian11:~/ansible/storage$ cat schedule.yml
 +---
 +- name: scheduling
 +  hosts: all
 +  become: true
 +  gather_facts: false
 +  tasks:
 +    - name: cron_job
 +      cron:
 +        name: my cron job
 +        hour: '11'
 +        minute: '25'
 +        job: 'cat /etc/passwd > /tmp/file1'
 +        user: root
 +        cron_file: mycron
 +
 +    - name: at_job
 +      at:
 +        command: cp /home/trainee/abc.txt /tmp/
 +        count: 1
 +        units: minutes
 +        unique: true
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez l'utilisation du module **at** qui crée un at job qui s'exécutera une minute après l'exécution du playbook. Puisque le module **at** ne comprend pas l'élément **name:**, la valeur **unique:true** spécifie que si le job existe déjà dans la queue, celui-ci ne sera pas créé. Notez que la valeur de **count:** est un entier.
 +</WRAP>
 +
 +Exécutez le playbook :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible-playbook schedule.yml 
 +
 +PLAY [scheduling] ********************************************************************************************************************************************************************************************
 +
 +TASK [cron_job] **********************************************************************************************************************************************************************************************
 +ok: [10.0.2.45]
 +
 +TASK [at_job] ************************************************************************************************************************************************************************************************
 +changed: [10.0.2.45]
 +
 +PLAY RECAP ***************************************************************************************************************************************************************************************************
 +10.0.2.45                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 +</code>
 +
 +Vérifiez immédiatement la présence du fichier at job :
 +
 +<code>
 +trainee@debian11:~/ansible/storage$ ansible all -m command -a 'ls /var/spool/at'
 +10.0.2.45 | CHANGED | rc=0 >>
 +a0000201af2968
 +spool
 +</code>
  
 ----- -----
  
-Copyright © 2023 Hugh Norris.+Copyright © 2024 Hugh Norris.
Menu