ansible michaellessard introduction à ansible - atelier ... · 3 rhug ansible workshop ordre du...
TRANSCRIPT
ANSIBLE Introduction à Ansible - atelier
Michael LessardArchitecte principal de solutions [email protected] michaellessard
AVERTISSEMENT
CECI EST UNE FORMATION D’INTRODUCTION GRATUITE OFFERTE PAR RED HAT
ELLE N’A AUCUN LIEN AVEC NOTRE GROUPE GLS
CET ATELIER A ÉTÉ ÉLABORÉ PAR QUELQUES ENTHOUSIASTES ARCHITECTES DE SOLUTIONS
AU CANADA
RHUG Ansible Workshop 3
ORDRE DU JOURFormation Ansible
Introduction à Ansible Variables Ansible+ LABO
Commande Ansible+ LABO
Rôles d’Ansible+ LABO
Template Ansible+ LABO
Ansible Tower
123
4 5 6
INTRODUCTION À ANSIBLE
5
SIMPLE PUISSANT SANS AGENT
Déploiement d’applicationGestion de configurationOrchestration de workflowAutomatisation des réseauxOrchestrer le cycle de vie complet
Automatisation facilePas besoin d’être programmeurLes tâches sont exécuter en ordreUtilisable par tousDevener productif rapidement
Sans agent Utilise OpenSSH & WinRMPas d’agent à exploiter ou maintenirDémarrer immédiatement Plus efficace, plus sécure
RHUG Ansible Workshop
Introduction à Ansible
6
Michael DeHaan (créateur de Cobbler et de Func)https://www.ansible.com/blog/2013/12/08/the-origins-of-ansible
Simple AUTOMATISE TOUTPeut gérer presque n’importe lequel *IX par le biais d’un protocole SSH
nécessite Python Windows (PowerShell, module WinRM Python)Composants de nuage, virtualisation, conteneur et réseau
Ansible doit une grande partie de ses origines au temps que j’ai passé au sein du groupe des technologies émergentes de Red Hat, qui était une unité de R D sous la direction du CTO de Red Hat.
- Michael DeHaan
...parce que Puppet était trop déclaratif, vous ne pouviez pas l’utiliser pour faire des choses comme réinitialiser des serveurs ou effectuer toutes les tâches ad hoc qui devaient être faites entretemps…
- Michael DeHaan
Une ansible est un dispositif théorique permettant de réaliser des communications à une vitesse supraluminique. Elle peut envoyer et recevoir des messages en provenance et en direction du périphérique correspondant sur n’importe quelle distance sans aucun délai. Les ansibles sont une composante emblématique de la littérature de science-fiction. -- Wikipédia
8
9
RHUG - RED HAT USER GROUP https://www.meetup.com/RHUGQuebec
ANSIBLE QUEBEC MEETUPhttps://www.meetup.com/Ansible-Quebec/
RHUG Ansible Workshop 10
EN 30 ANS, LA GESTION DES RÉSEAUX N’A PAS CHANGÉE.
POURQUOI ANSIBLE + RÉSEAU?
« Lorsqu’on leur a demandé ce qui selon eux était le composant le plus immature en gestion du nuage, 76 % ont dit que c’était le réseau; 15 % ont mentionné le traitement et 9 % le stockage. »
Rapport de gestion nuagique SDx 2015 : OpenStack and More sdxcentral.com
RHUG Ansible Workshop
AVANTAGES
13
Pourquoi Ansible est-il populaire?
➔ Efficace : sans agent, installation minimale, état désiré (aucun changement non nécessaire), architecture basée sur la technologie de diffusion personnalisée, ciblage facile basé sur des faits
➔ Rapide : Facile à apprendre/à se rappeler, langage déclaratif simple
➔ Évolutif : Peut gérer des milliers de noeuds, architecture modulaire extensible
➔ Securitaire : Transport au travers SSH➔ Vaste communauté : des milliers de rôles sur Ansible Galaxy
RHUG Ansible Workshop
ANSIBLE - LE LANGAGE DE DEVOPS
14
DU RÉSEAU AU CODE – SONDAGE NETDEVOPS (NOV. 2016)
Lesquels des outils suivants vous intéressent ou avez-vous déployés?
STARS TECHNO CONTRIBUTEURS26,499 Ansible 3077 15,636 Vagrant 788 9,988 Teraform 11498,265 Salt 1935 5,053 Chef 525 4,698 Puppet 467
RHUG Ansible Workshop 17
PRET ?
RHUG Ansible Workshop
COMPOSANTS CLÉS
18
Comprendre les termes d’Ansible
★ Playbook (Plan)★ Plays★ Tasks★ Modules (Tools) ★ Inventory
RHUG Ansible Workshop
INSTALLATION D’ANSIBLE
19
Mode d’emploi
# CENTOS # INSTALLER LE REPO EPELyum install epel-release
# RHEL # ACTIVER LE REPO EXTRASsubscription-manager repos --disable=rhel-7-server-extras-rpms
# INSTALLER ANSIBLEyum install ansible
Est-ce que Red Hat offre du soutien pour les services de base d’Ansible?https://access.redhat.com/articles/2271461
RHUG Ansible Workshop
Les différentes offres Ansible
20
RHUG Ansible Workshop
MODULES
21
En quoi ça consiste?
Bouts de code copiés sur le système cible.Exécutés pour satisfaire à la déclaration de
tâche.Personnalisables.
Les modules qui expédient avec Ansible sont tous écrit en Python, mais les modules peuvent être écrits en n’importe quel langage.
RHUG Ansible Workshop
MODULES
22
Vaste choix / force secrète d’Ansible...
➔ Modules de nuage
➔ Modules de grappes
➔ Modules de commandements
➔ Modules Crypto
➔ Modules de bases de données
➔ Modules de fichiers
➔ Modules d’identités
➔ Modules d’inventaire
➔ Modules de messages
➔ Modules de surveillance
➔ Modules de réseaux
➔ Modules de notification
➔ Modules de gestion à distance
➔ Modules d’intégration
➔ Modules de contrôle à la source
➔ Modules de stockage
➔ Modules de système
➔ Modules de logiciels utilitaires
➔ Modules d’infrastructures Web
➔ Modules Windows
RHUG Ansible Workshop
MODULES
23
Documentation
# AFFICHE TOUS LES MODULESansible-doc -l
# ACCÉDER À LA DOCUMENTATION D’UN MODULEansible-doc <module_name>
RHUG Ansible Workshop
MODULES
24
Fréquemment utilisés
Ansible Workshop
IDEMPO-QUOI?
25
« En mathématiques et en informatique, le concept d’idempotence signifie essentiellement qu'une opération a le même effet qu'on l'applique une ou plusieurs fois, ou encore qu'en le réappliquant on ne modifiera pas le résultat. »
« Lorsqu’il est soigneusement écrit, un scénario Ansible peut être idempotent afin de prévenir les effets secondaires imprévus sur les systèmes gérés. »
– Wikipédia
LES COMMANDES ANSIBLE
RHUG Ansible Workshop
INVENTAIREPour utiliser l’inventaire par défaut (/etc/ansible/hosts) ou créer un fichier hôte
[centos@centos1 ~]$ mkdir ansible ; cd ansible
[centos@centos1 ~]$ vim inventory
[all:vars]
ansible_ssh_user=centos
[web]
web1 ansible_ssh_host=centos2
[admin]
ansible ansible_ssh_host=centos1
[centos@centos1 ~]$ ansible all -i inventory -m command -a "uptime"
27
RHUG Ansible Workshop
INVENTAIRE - OPTION ALTERNATIVE
[centos@centos1 ~]$ cd ansible
[centos@centos1 ansible]$ vim ansible.cfg
[defaults]
inventory=/home/centos/ansible/inventory
[centos@centos1 ~]$ ansible all -m command -a "uptime"
28
RHUG Ansible Workshop
COMMANDEPour exécuter votre première commande Ansible...
(sur quoi) (module) (arguments)# ansible all -i inventory -m command -a "uptime"
192.168.250.13 | success | rc=0 >> 18:57:01 up 11:03, 1 user, load average: 0.00, 0.01, 0.05
192.168.250.11 | success | rc=0 >> 18:57:02 up 11:03, 1 user, load average: 0.00, 0.01, 0.05
29
RHUG Ansible Workshop
COMMANDEAutres exemples
# INSTALLER LE PAQUETAGE HTTPDansible web -s -i ./hosts -m yum -a "name=httpd state=present"
# DÉMARRER ET ACTIVER LE SERVICE HTTPDansible web -s -i ./hosts -m service -a "name=httpd enabled=yes state=started"
30
RHUG Ansible Workshop
LAB # 1
31
Commande Ansible
Objectifs
À l’aide de la commande Ansible, effectuez les tâches suivantes :
1. Testez la connexion Ansible à tous vos hôtes à l’aide du module Ping2. Installez le référentiel EPEL sur tous vos hôtes3. Installez HTTPD seulement sur vos hôtes Web4. Changez SELINUX en mode (tous les hôtes)
Modules de documentation :
http://docs.ansible.com/ansible/list_of_all_modules.html
RHUG Ansible Workshop
LAB #1 - SOLUTION
32
ansible all -i inventory -m pingansible all -i inventory -s -m yum -a "name=epel-release state=present"ansible web -i inventory -s -m yum -a "name=httpd state=present"ansible all -i inventory -s -m selinux -a "policy=targeted state=permissive"
PLAYBOOK ANSIBLE
RHUG Ansible Workshop
YAML
34
1. Principalement conçu pour la représentation des structures de données 2. Facile à écrire, format pouvant être lu par les humains 3. Objectif de la conception : abandonner la syntaxe traditionnelle “cloisonée”
Programme de validation YAML : yamllint.com
ÉVITEZ D’UTILISER LE COPIER-COLLER!!!
RHUG Ansible Workshop
EXEMPLE DE PLAYBOOK
35
---- name: This is a Play hosts: web remote_user: centos become: yes gather_facts: no vars: state: present tasks: - name: Install Apache yum: name=httpd state={{ state }}
RHUG Ansible Workshop
PLAYS
36
Nommage
- name: This is a Play
RHUG Ansible Workshop
PLAYS
37
Sélection des hôtes
- name: This is a Play hosts: web
- name: this is a play 2 hosts: all
RHUG Ansible Workshop
PLAYS
38
Arguments
- name: This is a Play hosts: web remote_user: centos become: yes gather_facts: no
RHUG Ansible Workshop
FAITS
39
Recueille les faits au sujet de l’hôte distant
➔ Ansible fournit automatiquement de nombreux faits au sujet du système
➔ Fournit par le module setup➔ Si Facter (Puppet) ou Ohai (Chef) sont installés, les variables de
ces programmes seront aussi copiés instantanément dans le fichier JSON pour être utilisés comme modèle ◆ Ces variables sont préfixées avec facter_ et ohai_. Il est donc facile
d’en connaître la source.➔ Si vous utilisez les faits d’Ansible et que vous choisissez de ne
pas installer Facter et Ohai, vous pouvez éviter les dépendances associées à Ruby sur vos systèmes distants
http://docs.ansible.com/ansible/setup_module.html
RHUG Ansible Workshop
PLAYS
40
Variables et tâches
---- name: This is a Play hosts: web remote_user: centos become: yes gather_facts: no vars: state: present tasks: - name: Install Apache yum: name=httpd state={{ state }}
**** Lorsqu’une variable est utilisée comme premier élément pour commencer une valeur, les guillemets sont obligatoires.
RHUG Ansible Workshop
EXÉCUTER UN PLAYBOOK ANSIBLE
41
[centos@centos7-1 ansible]$ ansible-playbook play.yml -i inventory
RHUG Ansible Workshop
EXÉCUTER UN PLAYBOOK ANSIBLE
42
En mode vérification uniquement
[centos@centos7-1 ansible]$ ansible-playbook play.yml -i hosts --check
RHUG Ansible Workshop
PLAYS
43
Boucles
- name: This is a Play hosts: web remote_user: centos become: yes gather_facts: no vars: state: present tasks: - name: Install Apache and PHP yum: name={{ item }} state={{ state }} with_items: - httpd - php
RHUG Ansible Workshop
BOUCLES
44
Plusieurs types de boucles générales et à usage déterminé
➔ with_nested➔ with_dict➔ with_fileglob➔ with_together➔ with_sequence➔ until➔ with_random_choice➔ with_first_found➔ with_indexed_items➔ with_lines
http://docs.ansible.com/ansible/playbooks_loops.html
RHUG Ansible Workshop
HANDLERS
45
Exécuter seulement si la tâche a un statut modifié
---- name: This is a Play hosts: web tasks: - yum: name={{ item }} state=installed with_items: - httpd - memcached notify: Restart Apache
- template: src=templates/web.conf.j2 dest=/etc/httpd/conf.d/web.conf notify: Restart Apache
handlers: - name: Restart Apache service: name=httpd state=restarted
RHUG Ansible Workshop
TAG
46
Exemple d’utilisation d’un tag
tasks:
- yum: name={{ item }} state=installed with_items: - httpd - memcached tags: - packages
- template: src=templates/src.j2 dest=/etc/foo.conf tags: - configuration
RHUG Ansible Workshop
TAGS
47
Exécuter avec des tags
ansible-playbook example.yml --tags “configuration”
ansible-playbook example.yml --skip-tags "notification"
RHUG Ansible Workshop
TAGS
48
Tags spéciaux
ansible-playbook example.yml --tags “tagged”
ansible-playbook example.yml --tags “untagged”
ansible-playbook example.yml --tags “all”
RHUG Ansible Workshop
RESULT
49
Enregistre les résultats de la tâche pour le débogage ou d’autres fins
# Example setting the Apache version - shell: httpd -v|grep version|awk '{print $3}'|cut -f2 -d'/' register: result
- debug: var=result (va afficher le résultat)
RHUG Ansible Workshop
TÂCHES CONDITIONNELLES
50
Seulement exécuter sur la machine dont le système d’exploitation est Red Hat
- name: This is a Play hosts: web remote_user: centos become: sudo
tasks: - name: install Apache yum: name=httpd state=installed when: ansible_os_family == "RedHat"
RHUG Ansible Workshop
BLOCS
51
Applique une condition à plusieurs tâches à la fois
tasks:
- block: - yum: name={{ item }} state=installed with_items: - httpd - memcached - template: src=templates/web.conf.j2 dest=/etc/httpd/conf.d/web.conf - service: name=bar state=started enabled=True when: ansible_distribution == 'CentOS'
RHUG Ansible Workshop
ERREURS
52
Ignore les erreurs
- name: ping host command: ping -c1 www.foobar.com ignore_errors: yes
Par défaut, Ansible s’arrête aux erreurs. Ajoutez le paramètre ignore_error pour sauter les erreurs possibles.
RHUG Ansible Workshop
ERREURS
53
Gérer les erreurs à l’aide des blocs
tasks:
- block: - debug: msg='i execute normally' - command: /bin/false - debug: msg='i never execute, cause ERROR!' rescue: - debug: msg='I caught an error' - command: /bin/false - debug: msg='I also never execute :-(' always: - debug: msg="this always executes"
RHUG Ansible Workshop
LINEINFILE
54
Pour ajouter, enlever ou mettre à jour une ligne en particulier
- lineinfile: dest=/etc/selinux/config regexp=^SELINUX= line=SELINUX=enforcing
- lineinfile: dest=/etc/httpd/conf/httpd.conf regexp="^Listen " insertafter="^#Listen " line="Listen 8080"
Vous trouverez ci-dessous un très bon exemple :https://relativkreativ.at/articles/how-to-use-ansibles-lineinfile-module-in-a-bulletproof-way
Remarque : L’utilisation d’un template ou d’un module dédié est plus efficace
RHUG Ansible Workshop
LAB #2
55
Configurer des groupes de serveurs à l’aide d’un playbook
Objectifs
À l’aide d’un scénario Ansible :
1. Changez SELINUX en mode permissif sur tous vos hôtes2. Installez HTTPD seulement sur vos hôtes du groupe Web3. Exécutez et activer le service HTTPD sur les hôtes du group Web seulement
si un nouveau paquetage httpd est installé.4. Copiez un fichier motd indiquant Bienvenue sur mon serveur! sur tous
vos hôtes5. Copiez un fichier index.html Hello World sur vos hôtes du groupe Web
dans /var/www/html6. Modifiez le sshd.conf pour mettre PermitRootLogin à no, et redémarrer le
service ssh seulement si l’option est modifiée7. EXTRA : comme le pare-feu est activé par défaut sur vos serveurs, ouvrez le
port 80
RHUG Ansible Workshop
EXEMPLE DE PLAYBOOK
56
---- name: Installation du serveur web hosts: web become: yes vars: state: present tasks: - name: Installation d’Apache yum: name=httpd state={{ state }}
- name: copier un fichier hosts: all tasks: - name: copie du fichier copy: src=test.txt dest=/tmp/test.txt
RHUG Ansible Workshop
LAB #2 - SOLUTION #1
57
---- name: Lab2 - All server setup hosts: all become: yes
tasks:- name: Configure selinux to {{ selinux }}
selinux: policy: targeted state: permissive
- name: Copy motd file copy: src=motd dest=/etc/motd
- name: Lab2 - Web server setup hosts: web become: yes
tasks:- name: Install Apache
yum: name=httpd state=present notify: StartApache
- name: Copy Index.html copy: src=index.html dest=/var/www/html/index.html
- name: Set ssh root login at no lineinfile: dest=/etc/ssh/sshd_config line="PermitRootLogin no" state=present notify: RestartSSH
handlers:- name: StartApache
service: name=httpd state=started enabled=yes- name: RestartSSH
service: name=sshd state=restarted enabled=yes[centos@centos1 ansible]$ vim motd ; vim index.html (put some words in the files)[centos@centos1 ansible]$ ansible-playbook -i hosts lab2.yaml
RHUG Ansible Workshop
LAB #2 - SOLUTION EXTRA (pare-feu ip)
58
A AJOUTER DANS LE PLAY QUI S’APPLIQUE AUX SERVEURS WEB - name: Open Firewall ports
firewalld: zone=public port=80/tcp permanent=true state=enabled notify: ReloadFirewall
A AJOUTER DANS LA SECTION HANDLER - name: ReloadFirewall
shell: firewall-cmd --reload
RHUG Ansible Workshop
LAB #2 - SOLUTION
59
---- name: Lab2 - All server setup hosts: all become: yes
tasks: - name: Configure selinux to permissive selinux: policy: targeted state: permissive
- name: Copy motd file copy: src=motd dest=/etc/motd
- name: Lab2 - Web server setup hosts: web become: yes
tasks: - name: Install Apache yum: name=httpd state=present notify: StartApache
- name: Copy Index.html copy: src=index.html dest=/var/www/html/index.html
- name: Set ssh root login at no lineinfile: dest=/etc/ssh/sshd_config line="PermitRootLogin no" state=present notify: RestartSSH
- name: Open Firewall ports firewalld: zone=public port=80/tcp permanent=true state=enabled notify: ReloadFirewall
handlers: - name: StartApache service: name=httpd state=started enabled=yes - name: RestartSSH service: name=sshd state=restarted enabled=yes - name: ReloadFirewall shell: firewall-cmd --reload
VARIABLES ANSIBLEET
GESTION DE LA CONFIGURATION
RHUG Ansible Workshop
PRIORITÉ DES VARIABLES
61
Ansible v2
1. role defaults
2. inventory file or script group vars
3. inventory group_vars/all
4. playbook group_vars/all
5. inventory group_vars/*
6. playbook group_vars/*
7. inventory file or script host vars
8. inventory host_vars/*
9. playbook host_vars/*
10. host facts
11. play vars
12. play vars_prompt
13. play vars_files
14. role vars (defined in role/vars/main.yml)
15. block vars (only for tasks in block)
16. task vars (only for the task)
17. role (and include_role) params
18. include params
19. include_vars
20. set_facts / registered vars
21. extra vars (always win precedence)
RHUG Ansible Workshop
VARIABLES MAGIQUES
62
Ansible génère et maintient l’information au sujet de son état actuel et des autres hôtes par le biais d’une série de variables magiques .
★ hostvars[inventory_hostname] Montre tous les faits Ansible Variable spécifique pour hôte spécifique {{ hostvars['test.example.com']['ansible_distribution'] }}
★ group_names
est une liste (tableau) de tous les groupes dont fait partie
l’hôte actuel
★ groups
est une liste de tous les groupes (et hôtes) de l’inventaire.
RHUG Ansible Workshop
VARIABLES MAGIQUES
63
Utiliser le module debug pour consulter le contenu
- name: debug hosts: all tasks: - name: Show hostvars[inventory_hostname] debug: var=hostvars[inventory_hostname]
- name: Show ansible_ssh_host variable in hostvars debug: var=hostvars[inventory_hostname].ansible_ssh_host
- name: Show group_names debug: var=group_names
- name: Show groups debug: var=groups
ansible-playbook -i ../hosts --limit <hostname> debug.yml
RHUG Ansible Workshop
UTILISATION DES VARIABLES YAML
64
Les valeurs YAML commençant par une variable doivent être écrites entre guillemets
vars: var1: {{ foo }} <<< ERROR! var2: “{{ bar }}” var3: Echoing {{ foo }} here is fine
RHUG Ansible Workshop
Module de modèles
65
À l’aide de Jinja2
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644
Les modèles vous permettent de créer des fichiers de configuration dynamiques à l’aide des variables.
Documentation :http://docs.ansible.com/ansible/template_module.html
RHUG Ansible Workshop
JINJA2
66
Délimiteurs
{{ variable }}
{% for server in groups.webservers %}
Jinja2 est un langage moderne et convivial, facilitant l’élaboration de modèles pour Python, qui s’inspire des modèles Django et il est utilisé par Ansible.
Il est fortement recommandé de lire au sujet de Jinja2 pour comprendre comment sont construits les modèles.
RHUG Ansible Workshop
JINJA2
67
BOUCLES
{% for server in groups.web %}{{ server }} {{ hostvars[server].ansible_default_ipv4.address }}{% endfor %}
web1 10.0.1.1web2 10.0.1.2web3 10.0.1.3
RHUG Ansible Workshop
JINJA2
68
Conditionnel
{% if ansible_processor_cores >= 2 %}-smp enable{% else %} -smp disable{% endif %}
RHUG Ansible Workshop
JINJA2
69
Filtres de variables
{% set my_var='this-is-a-test' %}{{ my_var | replace('-', '_') }}
this_is_a_test
RHUG Ansible Workshop
JINJA2
70
Filtres de variables
{% set servers = "server1,server2,server3" %}{% for server in servers.split(",") %}{{ server }}{% endfor %}
server1server2server3
RHUG Ansible Workshop
JINJA2, d’autres filtres
71
Beaucoup d’options...
# Combine two lists{{ list1 | union(list2) }}
# Get a random number{{ 59 | random }} * * * * root /script/from/cron
# md5sum of a filename{{ filename | md5 }}
# Comparisons{{ ansible_distribution_version | version_compare('12.04', '>=') }}
# Default if undefined{{ user_input | default(‘Hello World') }}
RHUG Ansible Workshop
JINJA2
72
Tests
{% if variable is defined %}
{% if variable is none %}
{% if variable is even %}
{% if variable is string %}
{% if variable is sequence %}
RHUG Ansible Workshop
Jinja2
73
Commentaires sur les modèles
{% for host in groups['app_servers'] %} {# ce commentaire ne serra pas affiché #} {{ loop.index }} {{ host }}{% endfor %}
RHUG Ansible Workshop
Faits
74
Mettre des faits dans un play
# Example setting the Apache version - shell: httpd -v|grep version|awk '{print $3}'|cut -f2 -d'/' register: result
- set_fact: apache_version: ”{{ result.stdout }}"
RHUG Ansible Workshop
LAB #3
75
Gestion de la configuration à l’aide des variables
Objectifs
Copiez et modifiez le scénario de votre labo 2 pour ajouter ce qui suit :
1. Utilisez le fichier debug.yml (voir la diapo suivante) pour explorer tous les faits d’Ansible
2. Convertissez votre fichier MOTD dans un modèle indiquant : Bienvenue à <hostname>!
3. Installez Facter sur tous vos hôtes, puis réexécutez le debug.yml. Vous devriez voir plusieurs nouvelles variables (facter_)
4. Convertissez votre fichier index.html en une template Jinja2 pour afficher l’information suivante :
Serveurs Web
centos1 192.168.3.52 - mémoire libre : 337.43 MB
RHUG Ansible Workshop
LAB #3 - Aide (fichier de débogage)
76
---- name: debug hosts: all tasks:
- name: Show hostvars[inventory_hostname] debug: var=hostvars[inventory_hostname]
- name: Show hostvars[inventory_hostname].ansible_ssh_host debug: var=hostvars[inventory_hostname].ansible_ssh_host
- name: Show group_names debug: var=group_names
- name: Show groups debug: var=groups
[centos@centos1 ansible]$ ansible-playbook -i ./hosts debug.yaml
Ansible Workshop
LAB #3 - SOLUTION - playbook
77
---- name: Lab3 - All server setup hosts: all become: yes
tasks: - name: Configure selinux to permissive selinux: policy: targeted state: permissive
- name: Copy motd template template: src=motd.j2 dest=/etc/motd - name: Install facter package: name=facter state=present
- name: Lab3 - Web server setup hosts: web become: yes
tasks: - name: Install Apache yum: name=httpd state=present notify: Restart Apache
- name: Copy Index.html template template: src=index.html.j2 dest=/var/www/html/index.htm
handlers: - name: Restart Apache service: name=httpd state=restarted enabled=yes
Ansible Workshop
LAB #3 - SOLUTION - fichiers template
78
Welcome to {{ hostvars[inventory_hostname].inventory_hostname }}!
Web Servers<br>{% for server in groups.web %}{{ hostvars[server].ansible_hostname }} {{ hostvars[server].ansible_default_ipv4.address }} - free memory: {{ hostvars[server].facter_memoryfree }}<br>{% endfor %}
motd.j2
index.html.j2
RÔLES D’ANSIBLE
RHUG Ansible Workshop
RÔLES
80
Une collection redistribuable et réutilisable de :
❏ tâches
❏ fichiers
❏ scripts
❏ template
❏ variables
RHUG Ansible Workshop
RÔLES
81
Souvent utilisés pour installer et configurer les services
➔ installer les paquetages
➔ copier les fichiers
➔ exécuter les programmes démons
Par exemple : Apache, MySQL, Nagios, etc.
RHUG Ansible Workshop
RÔLES
82
Structure de répertoire
rôles└── myapp ├── defaults ├── files ├── handlers ├── meta ├── tasks ├── templates └── vars
RHUG Ansible Workshop
RÔLES
83
Pour créer automatiquement une structure de fichiers
ansible-galaxy init <role_name>
RHUG Ansible Workshop
RÔLES
84
Exemples de playbook
---- hosts: webservers roles: - common - webservers
RHUG Ansible Workshop
RÔLES
85
Exemples de playbook
---- hosts: webservers roles: - common - { role: myapp, dir: '/opt/a', port: 5000 } - { role: myapp, dir: '/opt/b', port: 5001 }
RHUG Ansible Workshop
RÔLES
86
Exemples de playbook
---- hosts: webservers roles: - { role: foo, when: "ansible_os_family == 'RedHat'" }
RHUG Ansible Workshop
RÔLES
87
Pré et post - exemple “rolling upgrade”
---- hosts: webservers serial: 1
pre_tasks: - command:lb_rm.sh {{ inventory_hostname }} delegate_to: lb
- command: mon_rm.sh {{ inventory_hostname }} delegate_to: nagios
roles: - myapp
post_tasks: - command: mon_add.sh {{ inventory_hostname }} delegate_to: nagios
- command: lb_add.sh {{ inventory_hostname }} delegate_to: lb
http://docs.ansible.com/ansible/playbooks_delegation.html
Ansible Workshop
ANSIBLE GALAXY
89
RHUG Ansible Workshop
ANSIBLE GALAXY
90
# ansible-galaxy search 'install git' --platforms elFound 176 roles matching your search:Name...
# ansible-galaxy install davidkarban.git -p roles
# ansible-galaxy list -p roles
# ansible-galaxy remove -p roles
RHUG Ansible Workshop
LAB #4
91
Convertir le playbook du lab 3 en deux rôles
Objectifs
1. Créez deux rôles : common et apache 2. Créez un playbook pour appliquer ces rôles.
a. common devrait être appliqué à tous les serveursb. apache devrait être appliqué à votre groupe Web
3. Mettez les template jinja2 dans le fichier approprié.
Ansible Workshop
LAB #4 - SOLUTION 1/3
92
[centos@centos1 ~]$ cd ansible ; mkdir roles ; cd roles [centos@centos1 roles]$ ansible-galaxy init common ; ansible-galaxy init apache
[centos@centos1 roles]$ cd apache[centos@centos1 apache]$ vim tasks/main.yml ---# tasks file for apache
- name: Install Apache yum: name=httpd state=present notify: Start Apache
- name: Copy Index.html template template: src=index.html.j2 dest=/var/www/html/index.html
[centos@centos1 apache]$ vim handlers/main.yml---# handlers file for apache
- name: Start Apache service: name=httpd state=restarted enabled=yes[centos@centos1 apache]$ cp ../../index.html.j2 templates/
Création des répertoires à l’aide de modèle Ansible Galaxy
Rôle apache
Ansible Workshop
LAB #4 - SOLUTION 2/3
93
[centos@centos1 apache]$ cd ../common [centos@centos1 common]$ vim tasks/main.yml ---# tasks file for common
- name: Configure selinux to permissive selinux: policy: targeted state: "{{ selinux }}"
- name: Copy motd template template: src=motd.j2 dest=/etc/motd
- name: install facter yum: name=facter state=present[centos@centos1 common]$ vim vars/main.yml# vars file for common# SELINUX OPTION : enforcing,permissive,disabledselinux: permissive
[centos@centos1 apache]$ cp ../../motd.j2 templates/
Rôle common
Ansible Workshop
LAB #4 - SOLUTION 3/3
94
[centos@centos1 common]$ cd ../../ [centos@centos1 ansible]$ vim lab4.yaml ---- name: Lab4 - All server setup hosts: all become: yes
roles: - common
- name: Lab4 - Web server setup hosts: web become: yes
roles: - apache
[centos@centos1 ansible]$ ansible-playbook -i ./hosts install.yml
Playbook
RHUG Ansible Workshop
ANSIBLE TOWER
95
Quelles sont les valeurs ajoutées?
➔ Gestion centralisée des authentifications
➔ Contrôle de l’accès en fonction du rôle
➔ Intégration de Satellite et de Cloudforms
➔ Déploiement par bouton
➔ Journalisation et déploiement centralisés
➔ Notification centralisée (Slack, Twilio, etc..)
➔ System tracking
➔ Workflow, API et plus ...
TOUR ANSIBLEDémo de 20 minutes :
https://www.ansible.com/tower
PROCHAINES ÉTAPES ?
AUTOMATISATION ANSIBLE - 4 JOURShttps://www.redhat.com/en/services/training/do407-automation-ansible
MEETUP ANSIBLEhttps://www.meetup.com/Ansible-Montreal/https://www.meetup.com/Ansible-Quebec/
MERCI
plus.google.com/+RedHat
linkedin.com/company/red-hat
youtube.com/user/RedHatVideos
facebook.com/redhatinc
twitter.com/RedHatNews
EN SUPPLÉMENT
RHUG Ansible Workshop
RÉPARER VIM POUR L’ÉDITION YAML
102
# yum install git (required for plug-vim)$ cd$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim$ vim .vimrccall plug#begin('~/.vim/plugged')Plug 'pearofducks/ansible-vim'call plug#end()
$ vim:PlugInstall
When you edit a file type : :set ft=ansible
RHUG Ansible Workshop
Automatisation d’équipement Cisco
103
https://www.youtube.com/watch?v=wbhdJE7DM-A
LE DÉMO COMMENCE À 10:24
RHUG Ansible Workshop
INTÉGRATION TRAVIS CI
104
Installation
Procédure : https://galaxy.ansible.com/intro
RHUG Ansible Workshop
RÔLES - INTÉGRATION AVEC TRAVIS CI
105
Ansible 2+, la magie est dans .travis.yml
RHUG Ansible Workshop
INTÉGRATION TRAVIS CI
106
[centos@centos7-1 nginx]$ vim .travis.yml
---language: pythonpython: "2.7"
# Use the new container infrastructuresudo: required
# Install ansibleaddons: apt:
packages:- python-pip
install: # Install ansible - pip install ansible
# Check ansible version - ansible --version
# Create ansible.cfg with correct roles_path - printf '[defaults]\nroles_path=../' >ansible.cfg
script: # Basic role syntax check - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/
RHUG Ansible Workshop
Mise en cache des faits (Ansible 2.4+)
107
À ajouter à votre ansible.cfg pour accélérer l’exécution du scénario
[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /path/to/cachedir
fact_caching_timeout = 86400
RHUG Ansible Workshop
Correction de la sorite d’Ansible
108
Ajoutez à votre fichier ansible.cfg
[defaults]
stdout_callback = debug