Logo Khaganat

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:ansible [2018/02/05 13:55] – Inclusion et nom des fichiers zatalyzfr:ansible [2021/12/03 19:19] (Version actuelle) – modification externe 127.0.0.1
Ligne 5: Ligne 5:
 C'est donc de la doc pour noob avec probablement des erreurs. C'est donc de la doc pour noob avec probablement des erreurs.
  
- --- //[[wiki:user:zatalyz|zatalyz]] 2017/10/13 11:26//+ --- //[[user:zatalyz|zatalyz]] 2017/10/13 11:26//
 </WRAP> </WRAP>
  
-Ansible s'installe sur sa machine à soi (pas sur un serveur), afin d'administrer ses serveurs en automatisant pleins de choses. C'est sensé simplifier le boulot du sysadmin((En attendant ça fait un truc de plus à apprendre. En même temps si l'outil permet vraiment de faire gagner du temps ensuite, ça vaut le coup)). +Ansible s'installe sur sa machine à soi (pas sur un serveur), afin d'administrer ses serveurs en automatisant pleins de choses. C'est censé simplifier le boulot du sysadmin((En attendant ça fait un truc de plus à apprendre. En même temps si l'outil permet vraiment de faire gagner du temps ensuite, ça vaut le coup)). 
  
 Donc, suivant votre système : Donc, suivant votre système :
Ligne 24: Ligne 24:
 Ensuite on va renseigner ses serveurs. Ensuite on va renseigner ses serveurs.
  
-Par défaut, Ansible les cherchent dans ''/etc/ansible/hosts'' (à créer et paramétrer). Mais on peut créer le fichier du nom qu'on veut à l'emplacement qu'on veut ; il suffira soit de le renseigner dans ''/etc/ansible/ansible.cfg'' <wrap help> probablement en renseignant la variable ''inventory      = /chemin/fichier''</wrap>, soit de lancer Ansible avec la variable ''-i'' en indiquant le chemin.+Par défaut, Ansible les cherche dans ''/etc/ansible/hosts'' (à créer et paramétrer). Mais on peut créer le fichier du nom qu'on veut à l'emplacement qu'on veut ; il suffira soit de le renseigner dans ''/etc/ansible/ansible.cfg'' <wrap help> probablement en renseignant la variable ''inventory      = /chemin/fichier''</wrap>, soit de lancer Ansible avec la variable ''-i'' en indiquant le chemin.
   ansible -i /chemin/fichier   ansible -i /chemin/fichier
  
Ligne 33: Ligne 33:
 ===== Renseigner le fichier ansible/hosts ===== ===== Renseigner le fichier ansible/hosts =====
  
-Il y a visiblement plusieurs syntaxes possibles (peut-etre à paramétrer dans ''/etc/ansible/ansible.cfg'' ?), on va rester au truc par défaut qui est la syntaxe de type INI, c'est à dire avec des crochets pour les sections, dans ce genre-là :+Il y a visiblement plusieurs syntaxes possibles (peut-être à paramétrer dans ''/etc/ansible/ansible.cfg'' ?), on va rester au truc par défaut qui est la syntaxe de type INI, c'est à dire avec des crochets pour les sections, dans ce genre-là :
  
 <code ini>mail.example.com <code ini>mail.example.com
Ligne 47: Ligne 47:
 </code> </code>
  
-Ce qui est entre crochet est le nom donné à un groupe et ce nom est libre, mais il ne doit pas reprendre un de noms des serveurs géré dessous. Ici par exemple, il y a un groupe de serveur qui concerne le web, un autre groupe avec les machines hébergeant les databases ; les noms ont été choisis pour être parlant+Ce qui est entre crochets est le nom donné à un groupe et ce nom est libre, mais il ne doit pas reprendre un nom des serveurs gérés dessous. Ici par exemple, il y a un groupe de serveurs qui concerne le web, un autre groupe avec les machines hébergeant les bases de données ; les noms ont été choisis pour être parlants.
  
 Les serveurs renseignés dessous peuvent l'être suivant diverses syntaxes : Les serveurs renseignés dessous peuvent l'être suivant diverses syntaxes :
   * d'après le nom de domaine qui leur est lié (par exemple foo.example.com)   * d'après le nom de domaine qui leur est lié (par exemple foo.example.com)
-  * d'après leur ip (par exemple 8.8.8.8)+  * d'après leur ip (par exemple 9.9.9.9)
   * d'après leur raccourci renseigné dans ''.ssh/config'' (le plus pratique car cela précise le port, l'utilisateur...)   * d'après leur raccourci renseigné dans ''.ssh/config'' (le plus pratique car cela précise le port, l'utilisateur...)
  
Ligne 57: Ligne 57:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Pensez à activer [[fr:ssh#se_connecter_sans_retaper_trop_souvent_son_mot_de_passe_methode_securiseel_agent_ssh|l'agent ssh]] qui va se souvenir du mot de passe de votre clé ssh le temps de la session, sinon vous aurez du mal à vous connecter aux serveurs. +Pensez à activer [[fr:ssh#se_connecter_sans_retaper_trop_souvent_son_mot_de_passe_methode_securiseel_agent_ssh|l'agent ssh]] qui va se souvenir de la passphrase de votre clé ssh le temps de la session, sinon vous aurez du mal à vous connecter aux serveurs. 
  
-L'agent ssh est un passage **obligé** avec ansible. +L'agent ssh est un passage **obligé** avec ansible (à moins d'utiliser une paire de clefs sans passphrase, ce qui est déconseillé)
  
   eval "$(ssh-agent -s)"   eval "$(ssh-agent -s)"
Ligne 92: Ligne 92:
 </WRAP> </WRAP>
  
-==== Suite de commandes : playbooks ==== +===== Suite de commandes : playbooks ===== 
-L'une des grandes forces d'Ansible va être d'automatiser des opérations qu'on répète sur plusieurs serveurs.+L'une des grandes forces d'Ansible va être d'automatiser des opérations qu'on répète sur plusieurs serveurs ; dit autrement, Ansible permet (entre autres) de faire des opérations sur plusieurs serveurs et ce en parallèle.
  
-Un exemple très bête : la mise à jour des dépôts, le téléchargement et déployement des nouveaux paquets. Le tout en gardant un oeil quand même si tout se passe bien... Cette action est à faire régulièrement sur les serveurs : elle peut se scripter via ansible+Un exemple très bête : la mise à jour des dépôts, le téléchargement et déployement de nouveaux paquets. Le tout en gardant un œil quand même pour voir si tout se passe bien... Cette action est à faire régulièrement sur les serveurs : elle peut se scripter via Ansible
  
-La première manipulation de cet article permet d'envoyer une commande sur plusieurs serveurs (un ping dans l'exemple). Pour passer plusieurs commandes, on créé des "playbooks". Ce sont des fichiers écrits au format [[http://docs.ansible.com/ansible/latest/YAMLSyntax.html|YAML]]. À noter qu'Ansible a pour but de favoriser la lecture par des êtres humains : il y a donc beaucoup de façon d'écrire ces playbooks...+La première manipulation de cet article permet d'envoyer une commande sur plusieurs serveurs (un ping dans l'exemple). Pour passer plusieurs commandes, on crée des "playbooks". Ce sont des fichiers écrits au format [[http://docs.ansible.com/ansible/latest/YAMLSyntax.html|YAML]]. À noter qu'Ansible a pour but de favoriser la lecture par des êtres humains : il y a donc beaucoup de façons d'écrire ces playbooks...
  
 Créez un répertoire dans lequel seront stockés vos playbooks, puis un playbook : Créez un répertoire dans lequel seront stockés vos playbooks, puis un playbook :
Ligne 109: Ligne 109:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-YAML est assez strict sur les indentations. Si vous avez des erreurs lors de vos premiers palybooks, c'est peut-être à cause d'un espace manquant...+YAML est assez strict sur les indentations. Si vous avez des erreurs lors de vos premiers palybooks, c'est peut-être à cause d'une espace manquante...
 </WRAP> </WRAP>
  
  
-=== Écrire un playbook === +==== Écrire un playbook ==== 
-Pour la rédaction des playbook, les possibilités sont nombreuses et il vaut mieux se référerer à la [[http://docs.ansible.com/ansible/latest/playbooks.html|doc officielle]]. Pour les options de base : +Pour la rédaction des playbooks, les possibilités sont nombreuses et il vaut mieux se référerer à la [[http://docs.ansible.com/ansible/latest/playbooks.html|documentation officielle]]. Pour les options de base : 
   - Nous renseignons les hosts où le playbook sera lancé   - Nous renseignons les hosts où le playbook sera lancé
   - Nous listons les tâches qui seront exécutées dessus   - Nous listons les tâches qui seront exécutées dessus
Ligne 120: Ligne 120:
 Il est possible de renseigner des variables et diverses options. Il est possible de renseigner des variables et diverses options.
  
-Chaque tâche (task) démarre par un tiret ''-'' après lequel on peut spécifier un ensemble d'options. On peut renseigner une variable "name", qui nous indiquera, lors du lancement du playbook, à quel stade il en est. On peut faire appel au shell, ou même directement à un programme. On peut passer sudo, ou devenir un autre utilisateur (pour peu qu'on aie les droits), le temps d'une commande. On peut avoir des retours si un reboot est nécessaire... etc.+Chaque tâche (task) démarre par un tiret ''-'' après lequel on peut spécifier un ensemble d'options. On peut renseigner une variable "name", qui nous indiquera, lors du lancement du playbook, à quel stade il en est. On peut faire appel au shell, ou même directement à un programme. On peut passer root via sudo, ou devenir un autre utilisateur (pour peu qu'on aie les droits), le temps d'une commande. On peut avoir des retours si un reboot est nécessaireetc.
  
 <code> <code>
Ligne 137: Ligne 137:
 </code> </code>
  
-Lors de l'exécution de ''ansible-playbook -i ./khanat_host ./ansible/playbooks/khanatping.yml'', la réponse est affiché différement de la commande ''ansible -i ./khanat_host -m ping khanat'' mais le résultat est le même : ça marche.+Lors de l'exécution de ''ansible-playbook -i ./khanat_host ./ansible/playbooks/khanatping.yml'', la réponse est affichée différemment de la commande ''ansible -i ./khanat_host -m ping khanat'' mais le résultat est le même : ça marche.
  
 Allons un peu plus loin et créons un playbook pour mettre à jour un serveur Debian. La lecture des [[http://docs.ansible.com/ansible/latest/apt_module.html|possibilités offerte par les modules apt sous ansible]] est utile.  Allons un peu plus loin et créons un playbook pour mettre à jour un serveur Debian. La lecture des [[http://docs.ansible.com/ansible/latest/apt_module.html|possibilités offerte par les modules apt sous ansible]] est utile. 
  
-Les mises à jour doivent se faire avec les droits root. Mais comme on respecte les règles de sécurité, on ne se connecte jamais directement en root... mais via un utilisateur ayant le droit de faire sudo. Et toujours pour des questions de sécurité, cet utilisateur doit taper un mot de passe pour faire du sudo. On ajoutera donc la commande ''--ask-become-pass'' en appelant le script. On va aussi ajouter dans le playbook de quoi passer en sudo quand nécessaire.+Les mises à jour doivent se faire avec les droits root. Mais comme on respecte les règles de sécurité, on ne se connecte jamais directement en root mais via un utilisateur ayant le droit de devenir root via sudo. Et toujours pour des questions de sécurité, cet utilisateur doit taper son mot de passe pour devenir root. On ajoutera donc la commande ''--ask-become-pass'' en appelant le script. On va aussi ajouter dans le playbook de quoi passer en root quand nécessaire.
  
 <code yml maj_base.yml> <code yml maj_base.yml>
 # Nos hôtes concernés par le playbook # Nos hôtes concernés par le playbook
 - hosts: khanat - hosts: khanat
-# On préviens que sur cet host et pour ce playbook, on va utiliser sudo.+# On prévient que sur cet host et pour ce playbook, on va utiliser sudo.
   become: yes   become: yes
   become_method: sudo   become_method: sudo
Ligne 162: Ligne 162:
  
 </code> </code>
 +
 Puis lancer : Puis lancer :
   ansible-playbook -i ./khanat_host ./ansible/playbooks/maj_base.yml --ask-become-pass   ansible-playbook -i ./khanat_host ./ansible/playbooks/maj_base.yml --ask-become-pass
  
-=== Insérer des playbooks dans des playbooks ===+==== Insérer des playbooks dans des playbooks ====
 Imbriquer les playbooks peut être utile. Par exemple, vous avez un playbook bien fait pour les mises à jour, mais vous souhaitez le lancer parfois pour un groupe de serveur, parfois pour un autre((Typiquement chez nous, on met à jour les hyperviseurs, puis on fait des snapshots des VM, puis on passe aux MàJ des VM, donc des mises à jour en deux temps.)). Imbriquer les playbooks peut être utile. Par exemple, vous avez un playbook bien fait pour les mises à jour, mais vous souhaitez le lancer parfois pour un groupe de serveur, parfois pour un autre((Typiquement chez nous, on met à jour les hyperviseurs, puis on fait des snapshots des VM, puis on passe aux MàJ des VM, donc des mises à jour en deux temps.)).
  
Ligne 185: Ligne 186:
   * [[https://linuxfr.org/news/presentation-d-ansible-et-version-2-a-venir|Présentation d'Ansible et version 2 à venir]] //(Linuxfr.org)//   * [[https://linuxfr.org/news/presentation-d-ansible-et-version-2-a-venir|Présentation d'Ansible et version 2 à venir]] //(Linuxfr.org)//
   * https://www.abyssproject.net/2016/09/gerer-mises-a-jour-de-bsd-linux-windows-ansible/   * https://www.abyssproject.net/2016/09/gerer-mises-a-jour-de-bsd-linux-windows-ansible/
 +  * [[http://www.ageekslab.com/ansible/ansible3/|Utilisation avancée]] : piste pour utiliser des boucles, en français. Le détail dans [[http://docs.ansible.com/ansible/latest/playbooks_loops.html|la documentation officielle en anglais]]
 +  * [[https://galaxy.ansible.com/|Galaxy : exemples de playbooks]]
  
  
-{{tag>Serveur Administration}}+{{tag>Serveur Sysadmin}}
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/ansible.1517835357.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact