Skip to content
Snippets Groups Projects
ansible.md 3.43 KiB
Newer Older
Vincent Mazenod's avatar
Vincent Mazenod committed
# ansible

![ansible](images/ansible.png "ansible")<!-- .element width="30%" -->


Vincent Mazenod's avatar
Vincent Mazenod committed
## ansible

* outil de
  * provisioning
  * gestion de config
  * déploiemenet d'application

* racheté par RedHat en octobre 2015

* outils équivalents
  * puppet, chief, salt ...


## ansible

* écrit en python
  * python 2 par défaut
  * marche bien en python 3
    * virtualenv

Vincent Mazenod's avatar
Vincent Mazenod committed
* [ansible docs](https://docs.ansible.com/)

Vincent Mazenod's avatar
Vincent Mazenod committed

## ansible

* prérequis
  * sur la machine pilote (mgmt node)
    * ansible
  * sur le(s) noeud(s)
    * une connextion ssh ou PowerShell
    * python


## ansible

[![gestion ansible](images/ansible_mgmt.png "gestion ansible")](https://medium.com/formcept/configuration-management-and-continuous-deployment-cd0892dce998)


## terminologie

Vincent Mazenod's avatar
Vincent Mazenod committed
* **mgmt node** (machine pilote) machine surlaquelle ansible est installé et responsable de la configuration de toutes les machines gérées.
Vincent Mazenod's avatar
Vincent Mazenod committed
* **inventory** (inventaire) fichier contenant les ip de tous les serveurs à configurer
* **playbook** gère la configuration à déployer sur chaque serveur
* **task** fichier où sont définies les actions réalisées par le playbook


## terminologie

* **module** actions plus ou moins complexe utilisables à partir des **tasks**. ansible possède de [nombreux modules natifs](https://docs.ansible.com/ansible/latest/modules/modules_by_category.html). Il est possible d'écrire ses propres modules.
* **role** permet d'organiser les playbooks en parties claires et réutilisables


## terminologie

* **play** est l'exécution d'un playbook sur un serveur
* **facts** information collectée par ansible sur le système du serveur à configurer
* **handlers** similaire aux **tasks** mais appelable à partir d'une **task** (redémarrage de service par exemple)


## inventory

* fichier texte au format *ini*
* organiser par groupes
* [inventory docs](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html)

```ini
localhost              ansible_connection=local

[webservers]
jumper ansible_port=5555 ansible_host=192.0.2.50
bar.example.com ansible_user=limosadm

[dbservers]
one.example.com
two.example.com
www[03:10].example.com
```


## ansible / ad-hoc command

```
$ ansible all --inventory-file=inventory.ini \
  --module-name ping -u root
$ ansible atlanta -a "/usr/bin/foo" \
  -u username --become --become-user \
  otheruser --ask-become-pass
```

* [docs ad-hoc command](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html)
  * shell
  * packages
  * users / groups
  * déploiement (git)
  * services


## playbook

[docs playbooks](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html)

* ligne de commande
* --check --diff
* verbosité


## variable

* hierarchie
* from env ou Vault
* acces dynamique
* ansible-vault : utiliser vault
* https://docs.ansible.com/ansible/latest/user_guide/playbooks_prompts.html


## task / basic

* debug
* raw
* shell
* command


## task / basic

* register
* loop
* set_fact
* pre_task
* when
* tags


## modules

* file
* infile
* copy
* template
* package
* stat
* get_url
* unarchive
* user
* systemd
* pip
* pexpect (require pexcpect)


## roles


## remote roles

Vincent Mazenod's avatar
Vincent Mazenod committed

### Récupérer les roles nécessaires

* mettre à jour `requirements.yml` avec les rôles nécessaires

* récupérer les rôles

```
ansible-galaxy install -f -r requirements.yml -p ansible/roles/public
```
Vincent Mazenod's avatar
Vincent Mazenod committed


## plugins

* callback
* filter
* lookup
* module_utils


## skeleton
https://github.com/mrjk/ansible-skel


## ansible.cfg