Ceci est une ancienne révision du document !
Table des matières
Version - 2021.01
Dernière mise-à-jour : 2021/05/18 12:53
DOF506 - Ansible par la Pratique
Contenu du Module
- DOF506 - Validations des Acquis
- Contenu du Module
- LAB #1 - Automatiser avec Ansible
- 1.1 - Instructions
- 1.2 - Corrigés
- Erreur #1
- Erreur #2
- Erreur #3
- Erreurs 4, 5 et 6
LAB #1 - Automatiser avec Ansible
Connectez-vous à la machine virtuelle CentOS_7 :
trainee@traineeXX:~$ ssh -l trainee centos7
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 :
[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 /bin/ansible [root@centos7 ~]# which ansible-playbook /bin/ansible-playbook
Afin de vous aider, on vous fournit deux fichiers :
[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 }}"
[root@centos7 ~]# ansible-vault view secrets.yml
Vault password: fenestros
ftp_users:
- { username: mike, password: toto }
- { username: bob, password: tata }
Lors de l'exécution de la commande ansible-playback, vous obtenez le résultat suivant :
[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
A vous de jouer !
<ifauth @admin>
1.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: 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 }}"
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 '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
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: 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 }}"
Relancez la commande ansible-playbook :
[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
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 ~]# 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
Erreurs 4, 5 et 6
[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:
Relancez la commande ansible-playbook :
[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
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 '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
Crypter le fichier secrets.yml :
[root@centos7 ~]# ansible-vault encrypt secrets.yml New Vault password: fenestros Confirm New Vault password: fenestros Encryption successful
Consultez le fichier secrets.yml :
[root@centos7 ~]# ansible-vault view secrets.yml
Vault password:
ftp_users:
- { username: mike, password: toto }
- { username: bob, password: tata }
[root@centos7 ~]# cat secrets.yml
$ANSIBLE_VAULT;1.1;AES256
30323061313265353234666230373765333865663061626362646332376639356463623238343166
3635356261383732373633626230353837393735393933390a323561663963666262343835363166
61306137383463303138656131626236633935383031323864396164366139323265653732663834
6130656163356661360a663635333537373961616230353766666130633537323065663161393939
65353936613539303631373530643536616335356461323735646165616136303839636166663232
38616133393235636632646461346430373966306463636662333431373936633837616336326461
38633139616339343865626630333531366138313761663330346231333131346535663761396233
35353036373530323636636335336539616433373461653866316138306632323038626266623264
6634
Exécutez le playbook :
[root@centos7 ~]# ansible-playbook vsftpd.yml --ask-vault-pass
Vault password:
[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
</ifauth>
<html>
Copyright © 2021 Hugh NORRIS
</html>