Newer
Older
# ansible
<!-- .element width="30%" -->
## 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
## ansible
* prérequis
* sur la machine pilote (mgmt node)
* ansible
* sur le(s) noeud(s)
* une connextion ssh ou PowerShell
* python
## ansible
[](https://medium.com/formcept/configuration-management-and-continuous-deployment-cd0892dce998)
## terminologie
* **mgmt node** (machine pilote) machine surlaquelle ansible est installé et responsable de la configuration de toutes les machines gérées.
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
* **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
### 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
```