From d55a07bc8711fadc6dd1bef9c1c2df2443be71b2 Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Mon, 19 Jun 2017 23:16:23 +0200 Subject: [PATCH] Ansible, suite --- reveal/sysadmin.html | 199 ++++++++++++++++++++++++++++++------------- 1 file changed, 140 insertions(+), 59 deletions(-) diff --git a/reveal/sysadmin.html b/reveal/sysadmin.html index 4bb33b5..f79dbe8 100644 --- a/reveal/sysadmin.html +++ b/reveal/sysadmin.html @@ -354,7 +354,7 @@ Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'util

Installation de Git

-

+    

     $ su
     # apt install git
     # git --version
@@ -363,7 +363,7 @@ Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'util
   

Initialisation du dépôt

-

+    

     $ cd /etc
     $ su
     # git init
@@ -374,7 +374,7 @@ Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'util
   

Premières modifications

-

+    

     # echo "127.0.0.1 foo" >> /etc/hosts
     # git status
     # git diff [HEAD]
@@ -422,75 +422,156 @@ Couche application : HTTP, SMTP, DNS, etc.
     

Introduction à Ansible

-

Qu'est-ce qu'Ansible ?

-

Un outil d'automatisation de configuration
et gestion d'infrastructure

+

Objectifs d'Ansible

+
    +
  • homogénéité
  • +
  • fiabilité
  • +
  • rapidité
  • +
-

Principes de base

+

Parfait pour

+
    +
  • tâches répétitives
  • +
  • actions urgentes
  • +
  • demandes spécifiques
  • +
+
+
+

Principes fondateurs

    -
  • les tasks sont les unités d'action
  • -
  • les playbook organisent l'exécution des tâches
  • -
  • les rôles sont comme des paquets de tâches, pour faciliter la réutilisation
  • -
  • l'inventaire recense toute l'infrastructure et les moyens d'y accéder
  • +
  • Idempotence
  • +
  • Pas d'agent
  • +
  • Souplesse et légèreté
-

Modules

-
    -
  • sert d'abstraction (multi-OS, versions…)
  • -
  • permet l'idempotence
  • -
  • des centaines disponibles (core, extras…)
  • -
+

Installation

+

Paquets pour de nombreuses distributions

+
$ su
+# apt install ansible
+# ansible --version
+ansible 2.2.1.0
+  config file = /etc/ansible/ansible.cfg
+  configured module search path = Default w/o overrides
+
-
- command: "date"
-
-- shell: "cat foo.txt | grep bar"
-
-- copy
-    src: "files/foo"
-    dest: "/etc/bar"
-    mode: "0644"
-
-- replace:
-    dest: "/etc/ssh/sshd_config"
-    regexp: '^(Match User ((?!{{ name }}).)*)$'
-    replace: '\1,{{ name }}'
-
-- lineinfile:
-    dest: "/etc/evocheck.cf"
-    line: "IS_APTICRON=0"
-    regexp: "^IS_APTICRON="
+

Commandes de base

+

+        $ ansible localhost --module-name ping
+        $ ansible localhost --module-name ping --one-line
+        $ ansible localhost --module-name setup
+        $ ansible localhost --module-name setup --args "filter=ansible_mem*"
+        $ ansible localhost --module-name lineinfile --args \
+          "dest=/etc/hosts regexp=example.com line='192.168.0.25 example.com'"
+			
-
- apt:
-    name: '{{ item }}'
-    update_cache: yes
-  with_items: ["vim", "htop"]
-
-- apt_repository:
-    repo: "deb http://mirror.evolix.org/jessie stable main"
-
-- mysql_user:
-    name: mysqladmin
-    password: my_password
-    priv: "*.*:ALL,GRANT"
-    config_file: /root/.my.cnf
-
-- sysctl:
-    name: "vm.max_map_count"
-    value: 262144
-    sysctl_file: "/etc/sysctl.d/elasticsearch.conf"
+

Éléments de base

-
-

Playbooks

-
---
-- hosts: all
+      

Modules

+
    +
  • couche d'abstraction du shell
  • +
  • homogénéité
  • +
  • idempotence
  • +
+
+
+

Tasks / Handlers

+
    +
  • invocation d'un module avec des paramètres
  • +
  • le handler n'est exécuté qu'une fois
  • +
+
+
+

Playbooks

+
    +
  • exécution procédurale de tâches
  • +
  • définition du contexte
  • +
  • orchestration complexe
  • +
+
+
+

Rôles

+
    +
  • comme un paquet autonome
  • +
  • contient tasks, handlers, variables, templates
  • +
  • inclus dans des playbooks
  • +
  • stockés localement ou récupérés dans un registre
  • +
+
+
+

Inventaire et variables

+
    +
  • liste des serveurs
  • +
  • moyens d'accès
  • +
  • variables spécifiques (par hôte ou groupe)
  • +
+
+
+

+				inventory/
+				├── group_vars
+				│   ├── all.yml
+				│   ├── hypervisors.yml
+				│   └── proxies.yml
+				├── hosts
+				├── hosts-dev
+				└── host_vars
+				    ├── stack01-data01.yml
+				    ├── stack01-front01-web01.yml
+				    └── stack01-front01.yml
+		
+
+
+

+				kvm01 ansible_host=192.168.2.1
+				kvm02 ansible_host=192.168.2.2
 
-  tasks:
-  - shell: echo hello World
-    
+ stack01-front01 ansible_host=192.168.2.1 ansible_port=22020 + stack01-front01-web01 ansible_host=192.168.2.1 ansible_port=22101 + stack01-data01 ansible_host=192.168.2.1 ansible_port=22010 + + [hypervisors] + kvm01 + kvm02 + + [fronts] + stack01-front01 + + [dbs] + stack01-data01 + + [web] + stack01-front01-web01 +
+
+
+

Variables

+
    +
  • sources multiples (facts ou configuration)
  • +
  • règles de précédence pour personnalisation
  • +
+
+
+

Un playbook

+
+
+

+        ---
+        - hosts: localhost
+
+          tasks:
+          - name: example.com in /etc/hosts
+            lineinfile:
+              dest: /etc/hosts
+              regexp: example.com
+              line: '192.168.0.25 example.com'
+              state: present
+        
+
$ ansible-playbook playbook.yml