Ansible

  • CMS(Configuration Management System)
  • License GPL
  • Écrit en python
  • pas d'agent
  • gestion de conf + déploiement + l'orchestration
  • parfait pour utilisation perso

Installation

Client

Pour la partie client, l'installation de python suffit:

pkg install python
aptitude install python
yum install python

Server

Sur le serveur on va installer Ansible et Nginx qui servira pour Ansible tower qui est une GUI web pour utiliser ansible.

pkg install ansible
pkg install nginx
mkdir /usr/local/etc/ansible
cp -r /usr/local/share/examples/ansible/* /usr/local/etc/ansible/
cd /usr/local/etc/ansible/

Ajout de la clé ssh sur l'hôte:

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa root@192.168.0.142
ssh-agent bash
ssh-add 

On a maintenant Ansible d'installé sur le serveur et la clé SSH distribuée

Configuration

Arborescence Ansible:

|_ .vault_pass # Fichier contenant les mots de passe et autres secrets
|_ ansible.cfg # Fichier de configuration général d'Ansible
|_ facts.txt # Fichiers contenant les facts des serveurs
|_ (d) hosts_vars # Répertoire avec des fichiers contenant les variables des serveurs
|	|_ host01.yml # Variables host1
|	|_ host02.yml # Variables host2
|	|_ host03.yml # Variables host3
|_ sites.yml # Fichier définissant toutes les actions à effectuer et les hôtes sur lesquels lancer les actions
|_ (d) roles # Répertoire contenant tous les rôles
|	|_ zabbix_server # Répertoire contenant les fichiers nécessaires pour déployer le rôle zabbix_server
|	|	|_ files # Répertoire contant les fichiers à copier sur les hôtes
|	|	|_ tasks # Répertoire contenant les tâches à effectuer
|	|	|_ templates # Fichier templates en Jinja2 qui sera modifié et envoyé sur l’hôte
|	|	|_ handlers # Actions à effectuer appelées depuis une tâche
|	|	|_ vars # Répertoire avec les fichiers contenant des variables
|___|_ zabbix_agent # Répertoire contenant les fichiers nécessaires pour déployer le rôle zabbix_server

La configuration se fait dans le fichier /etc/ansible/hosts

#Les hôtes a conf
[DebianHost]
192.168.0.142
 
#Le chemin de l'executable python sur la machine hôte
[DebianHost:vars]
ansible_python_interpreter=/usr/bin/python2.7

On peut classer les hôtes par groupe, ici 192.168.0.142 appartient au groupe DebianHost.

On teste ensuite la connection avec l'hôte:

root@:/usr/local/etc/ansible # ansible all -m ping
192.168.0.142 | success >> {
    "changed": false,
    "ping": "pong"
}

ici on a lancé a tout les hôtes, on peut le faire de cette facon si l'on souhaite pinger seulement un groupe:

ansible DebianHost -m ping

ici on voit que ça ping.

On va maitenant lancer un update sur le(s) hôte(s) Debian:

ansible DebianHost -a "/usr/bin/aptitude update"
192.168.0.142 | success | rc=0 >>
Hit http://ftp.fr.debian.org wheezy Release.gpg
Hit http://security.debian.org wheezy/updates Release.gpg
Get: 1 http://ftp.fr.debian.org wheezy-updates Release.gpg [1554 B]
Hit http://security.debian.org wheezy/updates Release
Hit http://ftp.fr.debian.org wheezy Release
[...]
Fetched 151 kB in 3s (42.8 kB/s)
Reading package lists...

restart service:

ansible DebianHost -m service -a "name=nginx state=restarted"
192.168.0.142 | success >> {
    "changed": true,
    "name": "nginx",
    "state": "started"
}

copier un fichier(ex:resolveur DNS):

ansible DebianHost -m copy -a "src=/etc/resolv.conf dest=/etc/resolv.conf"

On va maintenant utiliser un fichier sous format yml dans lequel on va spécifier les actions, ici on va installer nginx et ajouter un fichier de conf Vhost:

- name: "Nginx conf"
  hosts: DebianHost
  remote_user: root
  tasks:
    - name: "Nginx package"
      apt: name=nginx state=installed
    - name: "Nginx Vhost"
      template: src=nginx.vhost.j2 dest=/etc/nginx/sites-enabled/default
    - name: "restart nginx"
      service: name=nginx state=restarted

avec ici le fichier vhost nginx:

server {
        listen 80;
        index index.php index.html index.htm;
        server_name localhost;
        root /var/www/;
        location / {
        root /var/www;
        index index.php index.html;
                   }
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}
ansible-playbook -i hosts -l DebianHost nginx.yml
 
PLAY [Nginx conf] *************************************************************
 
GATHERING FACTS ***************************************************************
ok: [192.168.0.142]
 
TASK: [Nginx package] *********************************************************
ok: [192.168.0.142]
 
TASK: [Nginx Vhost] ***********************************************************
ok: [192.168.0.142]
 
TASK: [restart nginx] *********************************************************
changed: [192.168.0.142]
 
PLAY RECAP ********************************************************************
192.168.0.142              : ok=4    changed=1    unreachable=0    failed=0

A ce stade, on est capable de mettre en place nginx avec un Vhost sur des hôtes Debian et ce de maniere automatisée

wiki/ansible.txt · Dernière modification: 2018/10/08 14:30 par root
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5