Commit d502ade3 authored by Bonnegent Sebastien's avatar Bonnegent Sebastien
Browse files

version finale

parent f190d2e3
Pipeline #8660 passed with stage
in 16 seconds
*~
html/*.html
...@@ -6,8 +6,8 @@ title: Ansible Pratique ...@@ -6,8 +6,8 @@ title: Ansible Pratique
# Ansible # Ansible
## Support ## Support
* cours1.md: <https://gitlab.insa-rouen.fr/bonnegent/cours_ansible/-/blob/master/cours1.md>
https://gitlab.insa-rouen.fr/bonnegent/cours_ansible/-/blob/master/cours1.md * version html: <https://gitlab.insa-rouen.fr/bonnegent/cours_ansible/-/pipelines>
## A quoi ca sert ? ## A quoi ca sert ?
- automatisation des installation - automatisation des installation
...@@ -55,7 +55,6 @@ Jason Edelman. « Network Automation with Ansible. », O’Reilly Media, 2016. ...@@ -55,7 +55,6 @@ Jason Edelman. « Network Automation with Ansible. », O’Reilly Media, 2016.
- fichiers textes au format YAML - fichiers textes au format YAML
~~~yml ~~~yml
--- ---
# a playbook is a list of plays
- name: "PLAY1" - name: "PLAY1"
hosts: localhost hosts: localhost
tasks: tasks:
...@@ -73,15 +72,22 @@ Jason Edelman. « Network Automation with Ansible. », O’Reilly Media, 2016. ...@@ -73,15 +72,22 @@ Jason Edelman. « Network Automation with Ansible. », O’Reilly Media, 2016.
## Prerequis #2 ## Prerequis #2
~~~bash ~~~bash
# Debian/Ubuntu # Debian/Ubuntu
sudo apt install ansible $ sudo apt install ansible
# Fedora/Centos # Fedora/Centos
sudo dnf install ansible $ sudo dnf install ansible
# Windows # Windows
pip3 install ansible $ pip3 install ansible
ssh-copy-id root@cible1 $ ssh-copy-id root@cible1
~~~
# Utilisation de base
## Inventaire minimum
~~~
# fichier ./hosts
cible1
~~~ ~~~
## Gestion des cibles: l'inventaire ## Gestion des cibles: l'inventaire
...@@ -95,7 +101,7 @@ ansible_user=root ...@@ -95,7 +101,7 @@ ansible_user=root
# ansible_password=MotDePasse # ansible_password=MotDePasse
~~~ ~~~
## Ansible #1 ## Ping
~~~bash ~~~bash
$ ansible ubuntu -i ./hosts -m ping $ ansible ubuntu -i ./hosts -m ping
The authenticity of host 192.168.1.152 cant be established. The authenticity of host 192.168.1.152 cant be established.
...@@ -111,7 +117,7 @@ cible1 | SUCCESS => { ...@@ -111,7 +117,7 @@ cible1 | SUCCESS => {
} }
~~~ ~~~
## Ansible #2 ## Commande
~~~bash ~~~bash
$ ansible ubuntu -i ./hosts -a 'cat /etc/os-release' $ ansible ubuntu -i ./hosts -a 'cat /etc/os-release'
cible1 | CHANGED | rc=0 >> cible1 | CHANGED | rc=0 >>
...@@ -129,6 +135,20 @@ VERSION_CODENAME=groovy ...@@ -129,6 +135,20 @@ VERSION_CODENAME=groovy
UBUNTU_CODENAME=groovy UBUNTU_CODENAME=groovy
~~~ ~~~
## Variables automatiques
~~~bash
$ ansible cible1 -i ./hosts -m setup
cible1 | SUCCESS => {
"ansible_facts": {
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64"
...
"ansible_distribution": "Ubuntu",
...
~~~
# Livre de jeu # Livre de jeu
## Playbook #1 ## Playbook #1
![](../images/playbook.png) ![](../images/playbook.png)
...@@ -159,7 +179,7 @@ UBUNTU_CODENAME=groovy ...@@ -159,7 +179,7 @@ UBUNTU_CODENAME=groovy
argument2: bar argument2: bar
~~~ ~~~
## Playbook: vim ## Installation de vim
~~~yml ~~~yml
--- ---
- name: vim - name: vim
...@@ -173,7 +193,7 @@ UBUNTU_CODENAME=groovy ...@@ -173,7 +193,7 @@ UBUNTU_CODENAME=groovy
state: present state: present
~~~ ~~~
## Playbook #3 ## Application #1
~~~bash ~~~bash
$ ansible-playbook -i hosts vim.yml $ ansible-playbook -i hosts vim.yml
...@@ -190,7 +210,7 @@ PLAY RECAP ******************** ...@@ -190,7 +210,7 @@ PLAY RECAP ********************
cible1 : ok=2 changed=1 cible1 : ok=2 changed=1
~~~ ~~~
## Playbook #4 ## Application #2
~~~bash ~~~bash
$ ansible-playbook -i hosts vim.yml $ ansible-playbook -i hosts vim.yml
...@@ -206,7 +226,7 @@ PLAY RECAP ******************** ...@@ -206,7 +226,7 @@ PLAY RECAP ********************
cible1 : ok=2 changed=0 cible1 : ok=2 changed=0
~~~ ~~~
## Playbook #5 ## Vérification
~~~bash ~~~bash
$ ssh root@192.168.1.152 -p 2222 $ ssh root@192.168.1.152 -p 2222
Welcome to Ubuntu 20.10 (GNU/Linux 5.8.0-28-generic x86_64) Welcome to Ubuntu 20.10 (GNU/Linux 5.8.0-28-generic x86_64)
...@@ -216,19 +236,54 @@ root@d743d4e1dd28:~# apt remove -y vim ...@@ -216,19 +236,54 @@ root@d743d4e1dd28:~# apt remove -y vim
root@d743d4e1dd28:~# echo "relancer le playbook" root@d743d4e1dd28:~# echo "relancer le playbook"
~~~ ~~~
## Playbook #6 ## Options utiles
### Options utiles * check / -C : applique aucun changement
* --check / -C : applique aucun changement * diff / -D : affiche les différences
* --diff / -D : affiche les différences
### Copie ## Boucles
~~~yml
- name: installation de plusieurs paquets
apt:
name: {{ item }}
state: present
with_items:
- vim
- netcat
- htop
~~~ ~~~
mkdir files/
date > files/test_copie.txt ## Boucles pour les installations
~~~yml
- name: installation de plusieurs paquets
apt:
name: ['vim', 'netcat', 'htop']
state: present
~~~
## Cron
~~~yml
- name: auto renew des certificats
cron:
name: letsencrypt_renewal
special_time: monthly
job: "/usr/bin/certbot renew"
- name: mise à jour automatique base antivirus
cron:
name: freshclam
hour: "06"
minute: "30"
job: "/usr/bin/freshclam --quiet >/dev/null"
~~~ ~~~
## Copie ## Copie
~~~bash
$ mkdir files/
$ date > files/test_copie.txt
~~~ ~~~
~~~yml
- name: copie d'un fichier - name: copie d'un fichier
copy: copy:
src: test_copie.txt src: test_copie.txt
...@@ -240,18 +295,29 @@ date > files/test_copie.txt ...@@ -240,18 +295,29 @@ date > files/test_copie.txt
## Template ## Template
~~~bash ~~~bash
mkdir templates $ mkdir templates
cat templates/test_template.txt $ cat templates/test_template.txt
ansible_hostname: {{ ansible_hostname }} ansible_hostname: {{ ansible_hostname }}
~~~ ~~~
~~~bash ~~~yml
- name: copie d'un template - name: copie d'un template
template: template:
src: test_template.txt src: test_template.txt
dest: /root/ dest: /root/
~~~ ~~~
## Mise à jour
~~~yml
- name: Mise à jour des paquets
hosts: all
tasks:
- name: upgrade all packages
dnf:
name: "*"
state: latest
~~~
# Variables # Variables
## Variables ## Variables
- group_vars/all: s'applique à toutes les cibles - group_vars/all: s'applique à toutes les cibles
...@@ -260,25 +326,25 @@ ansible_hostname: {{ ansible_hostname }} ...@@ -260,25 +326,25 @@ ansible_hostname: {{ ansible_hostname }}
## Variables ## Variables
~~~bash ~~~bash
mkdir group_vars host_vars $ mkdir group_vars host_vars
echo "une variable: {{ test_var }}" >> templates/test_template.txt $ echo "une variable: {{ test_var }}" >> templates/test_template.txt
echo "test_var: dans group_vars/all" >> group_vars/all $ echo "test_var: dans group_vars/all" >> group_vars/all
ansible-playbook -i hosts template.yml $ ansible-playbook -i hosts template.yml
ansible all -i ./hosts -a "cat /root/test_template.txt" $ ansible all -i ./hosts -a "cat /root/test_template.txt"
~~~ ~~~
## Variables ## Variables
~~~bash ~~~bash
echo "test_var: dans group_vars/ubuntu" >> group_vars/ubuntu $ echo "test_var: dans group_vars/ubuntu" >> group_vars/ubuntu
~~~ ~~~
~~~bash ~~~bash
ansible-playbook -i hosts template.yml $ ansible-playbook -i hosts template.yml
ansible all -i ./hosts -a "cat /root/test_template.txt" $ ansible all -i ./hosts -a "cat /root/test_template.txt"
~~~ ~~~
~~~bash ~~~bash
echo "test_var: dans host_vars" >> host_vars/cible1 $ echo "test_var: dans host_vars" >> host_vars/cible1
~~~ ~~~
## Variables securisees ## Variables securisees
...@@ -288,10 +354,10 @@ echo "test_var: dans host_vars" >> host_vars/cible1 ...@@ -288,10 +354,10 @@ echo "test_var: dans host_vars" >> host_vars/cible1
## Variables securisees ## Variables securisees
~~~bash ~~~bash
mv host_vars/cible1 vars.yml $ mv host_vars/cible1 vars.yml
mkdir host_vars/cible1 $ mkdir host_vars/cible1
mv vars.yml host_vars/cible1/ $ mv vars.yml host_vars/cible1/
echo 'mon_secret: "{{ vault_mon_secret }}"' >> host_vars/cible1/vars.yml $ echo 'mon_secret: "{{ vault_mon_secret }}"' >> host_vars/cible1/vars.yml
~~~ ~~~
## Creation du trousseau ## Creation du trousseau
...@@ -308,10 +374,79 @@ $ ansible-playbook -i hosts --ask-vault-pass template.yml ...@@ -308,10 +374,79 @@ $ ansible-playbook -i hosts --ask-vault-pass template.yml
$ ansible-playbook -i hosts --vault-password-file .vault_pass_file template.yml $ ansible-playbook -i hosts --vault-password-file .vault_pass_file template.yml
~~~ ~~~
# Handler
## But
* tâche réalisée une seule fois (à la fin)
* seulement si une des tâches associées est modifiée
* exemple: redémarrage d'un daemon
## Exemple
~~~yml
handlers:
- name: restart httpd
systemd:
state: restarted
name: httpd
- name: fait truc
command: echo "truc"
~~~
## Utilisation
~~~yml
tasks:
- name: une action
command: "true"
notify:
- restart httpd
- name: une autre action
command: "true"
notify:
- restart httpd
~~~
# Conditions
## Vérifier la présence d'un chemin
~~~yml
- stat: path=/var/lib/clamav/daily.cvd
register: freshclamdir
- name: mise à jour de la base antivirus
command: /usr/bin/freshclam
when: freshclamdir.stat.path is not defined
~~~
## Grande famille
~~~yml
tasks:
- shell: echo "seulement famille Debian"
when: ansible_facts['os_family'] == "Debian"
- shell: echo "seulement Red Hat 6, dérivées, et >= 6"
when:
- ansible_facts['os_family'] == "RedHat"
- ansible_facts['lsb']['major_release']|int >= 6
~~~
## Distribution
~~~yml
- shell: echo "seulement Debian 9 ou CentOS 7"
when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "7") or
(ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] == "9")
- shell: echo "seulement CentOS 7"
when:
- ansible_facts['distribution'] == "CentOS"
- ansible_facts['distribution_major_version'] == "7"
~~~
# FIN # FIN
## Documentation ## Documentation
https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html * <https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html>
## Applications ## Applications
* Serveurs linux: https://gitlab.insa-rouen.fr/bonnegent/ansible-serveurs * Serveurs linux:
* Salles de TP: https://gitlab.insa-rouen.fr/bonnegent/ansible-tp <https://gitlab.insa-rouen.fr/bonnegent/ansible-serveurs>
* Salles de TP:
<https://gitlab.insa-rouen.fr/bonnegent/ansible-tp>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment