Commit 600e4775 authored by Bonnegent Sebastien's avatar Bonnegent Sebastien
Browse files

préparation initiale

parent 597daefa
Pipeline #8657 failed with stage
in 19 seconds
docs:
image: ubuntu:20.10
before_script:
- apt-get update && apt-get install -y make pandoc
- make clean
script:
- make
artifacts:
expire_in: 7 days
paths:
- html
FROM ubuntu:20.10
WORKDIR /root
RUN apt-get update && apt-get install openssh-server --assume-yes
RUN mkdir /root/.ssh
COPY ./docker/authorized_keys /root/.ssh/authorized_keys
COPY ./docker/ssh /etc/default/ssh
run chmod 644 /root/.ssh/authorized_keys
all: html/cours1.html html/cours2.html html/cours3.html html/cours4.html html/cours5.html html/cours6.html html/cours7.html
all: html/cours1.html
help:
@echo "- cours1.html: création du html (default)"
@echo "- cours1.pdf: création du PDF"
@echo "- lab: démarrage du lab docker"
@echo "- stop: arrêt du lab docker"
@echo "- run: lancement de la présentation"
html/%.html: %.md
@# pandoc -s -t S5 -o $@ $<
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=moon -o $@ $<
@# pandoc -s -t revealjs -V revealjs-url=./reveal.js-4.1.0/js/ -o $@ $<
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=league -o $@ $<
%.pdf: %.md
pandoc -t beamer $< -V theme:Madrid -o $@
lab:
@docker-compose up -d
@docker-compose ps
themes:
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=beige -o html/cours1.beige.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=black -o html/cours1.black.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=blood -o html/cours1.blood.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=league -o html/cours1.league.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=moon -o html/cours1.moon.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=night -o html/cours1.night.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=serif -o html/cours1.serif.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=simple -o html/cours1.simple.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=sky -o html/cours1.sky.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=solarized -o html/cours1.solarized.html cours1.md
pandoc -s -t revealjs -V revealjs-url=./reveal.js-3.9.2 -V theme=white -o html/cours1.white.html cours1.md
firefox html/cours1.*.html
stop:
@docker-compose stop
@docker-compose rm -f
cours%:
firefox --new-window html/$@.html
run:
present cours1.md
clean:
rm -f html/cours?.html html/cours1.*.html
mv *.pdf /tmp/
# Objectifs
Blabla
Exemple pratique d'utilisation de Ansible.
# Plan
## Cours 1
- à quoi ça sert ?
ubuntu
centos
- prérequis
- ansible
- ansible-playbook
- ...
# Comment démarrer ?
~~~
$ git clone https://gitlab.insa-rouen.fr/bonnegent/cours_ansible/
$ cd cours_ansible
~~~
Il faut ouvrir le fichier **cours1.html** dans votre navigateur favori.
# Liste des fichiers
- cours?.html : le support de cours
- cours?.md : la source du support de cours
- make : regénère les fichiers html
# Outils utilisés
- vim
- pandoc
- revealjs
- [vim](https://neovim.io/)
- [present](https://present.readthedocs.io/en/latest/)
- [pandoc](https://pandoc.org/)
---
- name: copie
hosts: ubuntu
tasks:
- name: copie d'un fichier
copy:
src: test_copie.txt
dest: /root/
owner: root
group: root
mode: 0640
dim. 22 nov. 2020 18:05:52 CET
test_var: dans group_vars/all
test_var: dans group_vars/ubuntu
test_var: dans host_vars
mon_secret: "{{ vault_mon_secret }}"
$ANSIBLE_VAULT;1.1;AES256
30666232373831346332643066326662353538643533666339346463346231623634373038636436
6563643462353237636465643839356237646166666264340a653934623436636562613937313437
32383565613833616338303063383835383533333939303032353632333530303766363264623563
3935663963366137620a346464393533376135306365356333623538626334666261383161646361
63336236343139363630653032336537366137323566356430366533636237366532
[ubuntu]
cible1 ansible_port=2222 ansible_host=192.168.1.152
[ubuntu:vars]
ansible_user=root
#ansible_password=MotDePasse
---
- name: template
hosts: ubuntu
tasks:
- name: copie d'un template
template:
src: test_template.txt
dest: /root/
ansible_hostname: {{ ansible_hostname }}
une variable: {{ test_var }}
---
- name: vim
hosts: ubuntu
tasks:
- name: installation de vim
apt:
name: vim
state: present
---
author:
- Sébastien Bonnegent
title: Ansible Pratique
---
# Ansible
## Support
https://gitlab.insa-rouen.fr/bonnegent/cours_ansible/-/blob/master/cours1.md
## A quoi ca sert ?
- automatisation des installation
- automatisation des configuration
- validation
=> quelque soit le nombre de cibles !
## Idempotent
> "Être idempotent permet à une tâche définie d’être exécutée une seule fois
> ou des centaines de fois sans créer un effet contraire sur le système cible,
> ne provoquant un changement à une seule reprise."
Jason Edelman. « Network Automation with Ansible. », O’Reilly Media, 2016.
## Cibles ?
![](../images/cnc.png)
## Cibles ?
- GNU/Linux
- les salles de TP
- les VMs Centos
- ...
- Microsoft Windows
- Apple
- IOT
- Routeur / switch
- Parefeux
- Smartphones
- ...
-> tout ce qui peut avoir un serveur SSH
## Avantages
- partage des bests practices
- réutilisation des configurations
- application à l'ensemble des cibles ou une partie
## Comment ? #1
- via ssh (à partir d'un serveur de contrôle)
- pas d'agent nécessaire
- penser à créer une clé (ssh-keygen)
## Comment ? #2
- fichiers textes au format YAML
~~~yml
---
# a playbook is a list of plays
- name: "PLAY1"
hosts: localhost
tasks:
- name: "PLAY2"
hosts: localhost
tasks:
~~~
## Prerequis #1
- python3
- ansible
- votre clé publique (~/.ssh/id_rsa.pub)
- au moins une cible :)
## Prerequis #2
~~~bash
# Debian/Ubuntu
sudo apt install ansible
# Fedora/Centos
sudo dnf install ansible
# Windows
pip3 install ansible
ssh-copy-id root@cible1
~~~
## Gestion des cibles: l'inventaire
~~~
# fichier ./hosts
[ubuntu]
cible1 ansible_port=2222 ansible_host=192.168.1.152
[ubuntu:vars]
ansible_user=root
# ansible_password=MotDePasse
~~~
## Ansible #1
~~~bash
$ ansible ubuntu -i ./hosts -m ping
The authenticity of host 192.168.1.152 cant be established.
ECDSA key fingerprint is SHA256W6ZaofvnNgo4S17ADGUWhEnYx3+zINCA.
Are you sure you want to continue connecting (yes/no/[fingerprint]) ?
yes
cible1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
~~~
## Ansible #2
~~~bash
$ ansible ubuntu -i ./hosts -a 'cat /etc/os-release'
cible1 | CHANGED | rc=0 >>
NAME="Ubuntu"
VERSION="20.10 (Groovy Gorilla)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.10"
VERSION_ID="20.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/priva..."
VERSION_CODENAME=groovy
UBUNTU_CODENAME=groovy
~~~
# Livre de jeu
## Playbook #1
![](../images/playbook.png)
## Playbook: exemple complet
~~~yml
---
- name: "play 1"
hosts: localhost
connection: local
pre_tasks:
roles:
tasks:
post_tasks:
handlers:
include_tasks:
~~~
## Structure d'une tache
~~~yml
- name: "tache 1"
module_x:
argument1: foo
argument2: bar
- name: "tache 2"
module_y:
argument1: foo
argument2: bar
~~~
## Playbook: vim
~~~yml
---
- name: vim
# cibles
hosts: ubuntu
tasks:
- name: installation de vim
# module APT
apt:
name: vim
state: present
~~~
## Playbook #3
~~~bash
$ ansible-playbook -i hosts vim.yml
PLAY [vim] ********************
TASK [Gathering Facts] ********
ok: [cible1]
TASK [installation de vim] ****
[WARNING]: Updating cache and auto-install missing dependency: python3-apt
changed: [cible1]
PLAY RECAP ********************
cible1 : ok=2 changed=1
~~~
## Playbook #4
~~~bash
$ ansible-playbook -i hosts vim.yml
PLAY [vim] ********************
TASK [Gathering Facts] ********
ok: [cible1]
TASK [installation de vim] ****
ok: [cible1]
PLAY RECAP ********************
cible1 : ok=2 changed=0
~~~
## Playbook #5
~~~bash
$ ssh root@192.168.1.152 -p 2222
Welcome to Ubuntu 20.10 (GNU/Linux 5.8.0-28-generic x86_64)
root@d743d4e1dd28:~# whereis vim
vim: /usr/bin/vim.basic /usr/bin/vim /etc/vim /usr/share/vim
root@d743d4e1dd28:~# apt remove -y vim
root@d743d4e1dd28:~# echo "relancer le playbook"
~~~
## Playbook #6
### Options utiles
* --check / -C : applique aucun changement
* --diff / -D : affiche les différences
### Copie
~~~
mkdir files/
date > files/test_copie.txt
~~~
## Copie
~~~
- name: copie d'un fichier
copy:
src: test_copie.txt
dest: /root/
owner: root
group: root
mode: 0640
~~~
## Template
~~~bash
mkdir templates
cat templates/test_template.txt
ansible_hostname: {{ ansible_hostname }}
~~~
~~~bash
- name: copie d'un template
template:
src: test_template.txt
dest: /root/
~~~
# Variables
## Variables
- group_vars/all: s'applique à toutes les cibles
- group_vars/ubuntu: pour le groupe ubuntu, surcharge "all"
- host_vars/cible1: pour la cible, plus prioritaire
## Variables
~~~bash
mkdir group_vars host_vars
echo "une variable: {{ test_var }}" >> templates/test_template.txt
echo "test_var: dans group_vars/all" >> group_vars/all
ansible-playbook -i hosts template.yml
ansible all -i ./hosts -a "cat /root/test_template.txt"
~~~
## Variables
~~~bash
echo "test_var: dans group_vars/ubuntu" >> group_vars/ubuntu
~~~
~~~bash
ansible-playbook -i hosts template.yml
ansible all -i ./hosts -a "cat /root/test_template.txt"
~~~
~~~bash
echo "test_var: dans host_vars" >> host_vars/cible1
~~~
## Variables securisees
- utilisation de Ansible Vault
- enregistrement crypté
- peut être utilisé sur host_vars ou group_vars
## Variables securisees
~~~bash
mv host_vars/cible1 vars.yml
mkdir host_vars/cible1
mv vars.yml host_vars/cible1/
echo 'mon_secret: "{{ vault_mon_secret }}"' >> host_vars/cible1/vars.yml
~~~
## Creation du trousseau
~~~bash
$ ansible-vault create host_vars/cible1/vault.yml
New Vault password:
Confirm New Vault password:
$ ansible-vault edit host_vars/cible1/vault.yml
$ ansible-playbook -i hosts template.yml
PLAY [template] ********
ERROR! Attempting to decrypt but no vault secrets found
$ ansible-playbook -i hosts --ask-vault-pass template.yml
$ ansible-playbook -i hosts --vault-password-file .vault_pass_file template.yml
~~~
# FIN
## Documentation
https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html
## Applications
* Serveurs linux: https://gitlab.insa-rouen.fr/bonnegent/ansible-serveurs
* Salles de TP: https://gitlab.insa-rouen.fr/bonnegent/ansible-tp
version: '3'
services:
cible1:
build: .
command: service ssh start
ports:
- "2222:22"
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEAq8N8jv6J/Ao3Qp6NmBdFKzFZoYGF/5W7hODVETWLgoVBwmE+Mnkf93QiLXe9wEMYU4NRMg39GOqFgGQ5fUmXKLZRsys35Wlerr2y71W95AXzNdWm8n/L5DofpFCZBGp79VcEX72pLtR3Qe72TSRCi9y5HXt6m0rB61q+QQ3Y1rCVx7msbDbneFVOySCCk/Kq30ttI0qVTkYkMugvpLk5VEOqutdgMiYnqHE8przpW1PsP3K/ldge1rN5cKSGTcZA3CxXWVKenA4l07M02gPelBGm2fHCeLR5WNflUIt+xc6sLX3ZvpARwd2rTb4s2LQEfRcsM1sStVwtT/Zb024buaAJ7hBfD5FKfWOWpfxHcv3+hMln7l2d/JTDCE1vT47jYokXAROwdyy3rJfurwuiDT5yvrqIciDCLQzLlspHJHhGafdC9/6uABTsM1BxNKG3N+Rw2vk+zQzyX8MoyWSXGP+T7fpGtaDdoeROfeEn0QmUPWm0203eGupFlf77FjqusS5aCQhEM2BIjaHJ2f5DEFsMha0SJD5JMv/AJMmOelWo/jbVgv0ouZBj7itg9EJUZ6X+SVlWTqhUlx6yvhxWLFKXvqbzBrEclhyJ+JHB1Vi95WVmLtPXo/5aAse5l1Np+orG2k5vZhMXnjERtPeYoyRhV4btTbiQMXgBKCB11Rs= bonnegent@ergo
SSHD_OPTS="-D -4"
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