Provisioning Facile avec ansible

Partie 1



Formation 11/04/2014 @Theodo  

Présentation ✌




CItation




« Ne rien livrer au hasard, c'est économiser du travail. »

                                                                                                                      Antoine Albalat

Ansible

Mais ... qu'est-ce que c'est ?


Outil de provisioning

Python (hosts et serveurs) == prestige


Paramiko pour le ssh / Jinja2 pour les templates /YAML pour l'écriture


Disponible dans les packages managers (apt, yum, pip, ...)

... et chez votre marchand de journaux ! N'attendez plus !

qu'est-ce que c'est vraiment !


Provisioning :

  • Puppet
  • Chef
  • ...


Déploiement :

  • Capistrano
  • Fabric
  • ...


oh ben, qui voilà !




qu'est-ce que c'est vraiment ! (2)


un outil simple

compréhansible

extansible




scalable


bref ...

un être sansible

ses particularités ?




pas de serveur central pour provisionner d'autres serveurs

pas de daemon pour provisionner les serveur

pas d'agent

pas besoin d'une base de donnée

pas besoin d'accès root sur la machine distante

comment ça marche ?



DEMO

or die



gathering fact

$ ansible host -m setup



"ansible_all_ipv4_addresses": [
    "REDACTED IP ADDRESS"
],
"ansible_all_ipv6_addresses": [
    "REDACTED IPV6 ADDRESS"
],
"ansible_architecture": "x86_64",
"ansible_bios_date": "09/20/2012",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
    "BOOT_IMAGE": "/boot/vmlinuz-3.5.0-23-generic",
    "quiet": true,
    "root": "UUID=4195bff4-e157-4e41-8701-e93f0aec9e22",
    "splash": true
},
...

host file



[atlanta]
host1
host2

[raleigh]
host2
host3

[southeast:children]
atlanta
raleigh
 

Playbook


---
- hosts: webservers
  vars:
    http_port: 80
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service: name=httpd state=started
  handlers:
    - name: restart apache
      service: name=httpd state=restarted 

task

- name: Install packages
  apt:
    pkg={{ item }}
    state=latest
  with_items:
    - build-essential
    - vim
    - fail2ban
    - chkrootkit
    - ufw
    - curl
    - rsync
    - wget
    - sendmail
    - logwatch
    - cron-apt 

TASK (2)

Les templates


server {
    listen 80;
    server_name {{ item.server_name }};

    root    /home/www/{{ item.name }}/htdocs;
    index   index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

Task (3)

Tâches conditionnelles


tasks:
 - name: "shutdown Debian flavored systems"
 command: /sbin/shutdown -t now
 when: ansible_os_family == "Debian"

tasks:
 - command: /bin/false
 register: result
 ignore_errors: True
 - command: /bin/something
 when: result|failed
 - command: /bin/something_else
 when: result|success
 - command: /bin/still/something_else
 when: result|skipped

Les modules





Voir la documentation


 

ansible galaxy




Teaser




Partie 2 : « Ansible avancé - Le challenge »


merci pour votre attention




Avez-vous des questions ?

deck

By Guillaume Dedrie

deck

  • 835
Loading comments...

More from Guillaume Dedrie