ansible michaellessard introduction à ansible - atelier ... · 3 rhug ansible workshop ordre du...

108
ANSIBLE Introduction à Ansible - atelier Michael Lessard Architecte principal de solutions [email protected] michaellessard

Upload: doancong

Post on 27-Feb-2019

381 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

ANSIBLE Introduction à Ansible - atelier

Michael LessardArchitecte principal de solutions [email protected] michaellessard

Page 2: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 3: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 4: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

INTRODUCTION À ANSIBLE

Page 5: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande 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

Page 6: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 7: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 8: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

8

Page 9: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

9

RHUG - RED HAT USER GROUP https://www.meetup.com/RHUGQuebec

ANSIBLE QUEBEC MEETUPhttps://www.meetup.com/Ansible-Quebec/

Page 10: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop 10

Page 11: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

EN 30 ANS, LA GESTION DES RÉSEAUX N’A PAS CHANGÉE.

Page 12: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 13: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 14: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

ANSIBLE - LE LANGAGE DE DEVOPS

14

Page 15: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

DU RÉSEAU AU CODE – SONDAGE NETDEVOPS (NOV. 2016)

Lesquels des outils suivants vous intéressent ou avez-vous déployés?

Page 16: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 17: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop 17

PRET ?

Page 18: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

COMPOSANTS CLÉS

18

Comprendre les termes d’Ansible

★ Playbook (Plan)★ Plays★ Tasks★ Modules (Tools) ★ Inventory

Page 19: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 20: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

Les différentes offres Ansible

20

Page 21: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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.

Page 22: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 23: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

MODULES

23

Documentation

# AFFICHE TOUS LES MODULESansible-doc -l

# ACCÉDER À LA DOCUMENTATION D’UN MODULEansible-doc <module_name>

Page 24: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

MODULES

24

Fréquemment utilisés

Page 25: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 26: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

LES COMMANDES ANSIBLE

Page 27: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande 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

Page 28: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 29: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 30: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 31: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 32: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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"

Page 33: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

PLAYBOOK ANSIBLE

Page 34: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande 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!!!

Page 35: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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 }}

Page 36: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

PLAYS

36

Nommage

- name: This is a Play

Page 37: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 38: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

PLAYS

38

Arguments

- name: This is a Play hosts: web remote_user: centos become: yes gather_facts: no

Page 39: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 40: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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.

Page 41: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

EXÉCUTER UN PLAYBOOK ANSIBLE

41

[centos@centos7-1 ansible]$ ansible-playbook play.yml -i inventory

Page 42: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 43: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 44: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 45: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 46: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 47: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

TAGS

47

Exécuter avec des tags

ansible-playbook example.yml --tags “configuration”

ansible-playbook example.yml --skip-tags "notification"

Page 48: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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”

Page 49: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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)

Page 50: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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"

Page 51: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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'

Page 52: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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.

Page 53: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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"

Page 54: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 55: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 56: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 57: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 58: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 59: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 60: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

VARIABLES ANSIBLEET

GESTION DE LA CONFIGURATION

Page 61: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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)

Page 62: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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.

Page 63: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 64: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 65: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 66: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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.

Page 67: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 68: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

JINJA2

68

Conditionnel

{% if ansible_processor_cores >= 2 %}-smp enable{% else %} -smp disable{% endif %}

Page 69: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

JINJA2

69

Filtres de variables

{% set my_var='this-is-a-test' %}{{ my_var | replace('-', '_') }}

this_is_a_test

Page 70: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

JINJA2

70

Filtres de variables

{% set servers = "server1,server2,server3" %}{% for server in servers.split(",") %}{{ server }}{% endfor %}

server1server2server3

Page 71: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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') }}

Page 72: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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 %}

Page 73: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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 %}

Page 74: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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 }}"

Page 75: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 76: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 77: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 78: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 79: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RÔLES D’ANSIBLE

Page 80: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

RÔLES

80

Une collection redistribuable et réutilisable de :

❏ tâches

❏ fichiers

❏ scripts

❏ template

❏ variables

Page 81: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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.

Page 82: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

RÔLES

82

Structure de répertoire

rôles└── myapp ├── defaults ├── files ├── handlers ├── meta ├── tasks ├── templates └── vars

Page 83: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

RÔLES

83

Pour créer automatiquement une structure de fichiers

ansible-galaxy init <role_name>

Page 84: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

RÔLES

84

Exemples de playbook

---- hosts: webservers roles: - common - webservers

Page 85: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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 }

Page 86: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

RÔLES

86

Exemples de playbook

---- hosts: webservers roles: - { role: foo, when: "ansible_os_family == 'RedHat'" }

Page 87: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 88: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop 88

http://galaxy.ansible.com

Page 89: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

Ansible Workshop

ANSIBLE GALAXY

89

Page 90: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 91: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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é.

Page 92: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 93: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 94: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 95: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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 ...

Page 96: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

TOUR ANSIBLEDémo de 20 minutes :

https://www.ansible.com/tower

Page 97: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

PROCHAINES ÉTAPES ?

Page 98: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

AUTOMATISATION ANSIBLE - 4 JOURShttps://www.redhat.com/en/services/training/do407-automation-ansible

Page 99: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

MEETUP ANSIBLEhttps://www.meetup.com/Ansible-Montreal/https://www.meetup.com/Ansible-Quebec/

Page 100: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

MERCI

plus.google.com/+RedHat

linkedin.com/company/red-hat

youtube.com/user/RedHatVideos

facebook.com/redhatinc

twitter.com/RedHatNews

Page 101: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

EN SUPPLÉMENT

Page 102: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 103: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

Automatisation d’équipement Cisco

103

https://www.youtube.com/watch?v=wbhdJE7DM-A

LE DÉMO COMMENCE À 10:24

Page 104: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

INTÉGRATION TRAVIS CI

104

Installation

Procédure : https://galaxy.ansible.com/intro

Page 105: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

RÔLES - INTÉGRATION AVEC TRAVIS CI

105

Ansible 2+, la magie est dans .travis.yml

Page 106: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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/

Page 107: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

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

Page 108: ANSIBLE michaellessard Introduction à Ansible - atelier ... · 3 RHUG Ansible Workshop ORDRE DU JOUR Formation Ansible Introduction à Ansible Variables Ansible + LABO Commande Ansible

RHUG Ansible Workshop

Correction de la sorite d’Ansible

108

Ajoutez à votre fichier ansible.cfg

[defaults]

stdout_callback = debug