No description
Find a file
2021-10-02 18:06:10 +02:00
docker-ansible-lint ⬆️ Update CI: ansible-lint version 2021-04-12 22:30:52 +02:00
group_vars Add PDU snmp credentials 2021-08-20 13:28:19 +02:00
host_vars Merge pull request 'Add kanboard.auro.re to proxy-ovh.adm.auro.re' (#45) from kanboard into master 2021-03-15 13:16:36 +01:00
roles Merge branch 'master' into prometheus-ipmi-exporter 2021-10-02 18:06:10 +02:00
utils [utils] move the sudo_upgrade playbook with other utils 2021-03-12 01:59:03 +01:00
.ansible-lint No need to only warm for unnamed task anymore 2021-04-17 17:43:49 +02:00
.drone.yml rename ci task 2021-02-16 16:43:11 +01:00
.gitignore add gs dhcp, dns, routing 2020-07-06 18:40:54 +02:00
.yamllint.yml 👷 do not ansible-lint the vault and fix useless rules 2021-02-16 18:18:50 +01:00
ansible.cfg enable SSH pipelining (THE SPEED!) 2020-08-02 12:14:57 +02:00
backups.yml [borgbackup_client] ignore some Strech machines 2021-03-15 01:03:34 +01:00
base.yml fix host syntax 2021-01-23 15:12:28 +01:00
bdd.yml [borgbackup_client] precedence rules and sain defaults for borg config 2021-03-14 22:02:34 +01:00
copy-keys.sh Decomment hosts 2020-05-03 18:40:26 +02:00
deploy_postfix_non_mailhost.yml Repect ansible-lint [106] for role names 2021-02-16 02:45:35 +01:00
hosts Add new wireless ap 2021-09-09 17:50:28 +02:00
ldap_replica.yml Use underscore instead of dashes 2020-11-04 19:36:40 +01:00
log.yml Don't try to configure rsyslog on Wi-Fi APs 2021-03-30 10:06:36 +02:00
matrix.yml Use underscore instead of dashes 2020-11-04 19:36:40 +01:00
monitoring.yml Deploy ipmi monitoring for all prometheus 2021-09-08 12:19:48 +02:00
network.yml fix re2o-service -> re2o_service role name 2021-02-07 17:39:04 +01:00
proxmox.yml BangShebang! 2020-05-03 18:45:07 +02:00
README.md 📝 add CI badge 2021-02-16 18:22:19 +01:00
services_web.yml [nginx/certbot] Clone roles from Crans 2021-02-24 11:46:37 +01:00
xxx.log Add ipmi-sel as command used for ipmi exporter 2021-09-08 18:43:00 +02:00

Linter Status

Recettes Ansible d'Aurore

Ensemble des recettes de déploiement Ansible pour les serveurs d'Aurore. Pour les utiliser, vérifiez que vous avez au moins Ansible 2.7.

Ansible 101

Si vous n'avez jamais touché à Ansible avant, voilà une rapide introduction.

Inventory : c'est le fichier hosts d'inventaire. Il contient la définition de chaque machine et le regroupement.

Quand on regroupe avec un :children en réalité on groupe des groupes.

Chaque machine est annoncée avec son hostname. Il faut pouvoir SSH sur cette machine avec ce hostname, car c'est ce qu'Ansible fera.

Playbook : c'est une politique de déploiement. Il contient les associations des rôles avec les machines.

L'idée au Crans est de regrouper par thème. Exemple, le playbook monitoring.yml va contenir toutes les définitions machines-rôles qui touchent au monitoring. Cela permet de déployer manuellement tout le monitoring sans toucher au reste.

Rôle : un playbook donne des rôles à des machines. Ces rôles sont tous dans le dossier roles/. Un rôle installe un service précis sur un serveur.

Il est préférable d'être atomique sur les rôles plutôt d'en coder un énorme qui sera difficilement maintenable.

Exemples de rôle : activer les backports pour ma version de Debian, installer NodeJS, déployer un serveur prometheus, déployer une node prometheus…

Tâche : un rôle est composé de tâches. Une tâche effectue une et une seule action. Elle est associée à un module Ansible.

Exemples de tâche : installer un paquet avec le module apt, ajouter une ligne dans un fichier avec le module lineinfile, copier une template avec le module template

Une tâche peut avoir des paramètres supplémentaires pour la réessayer quand elle plante, récupérer son résultat dans une varible, mettre une boucle dessus, mettre des conditions…

N'oubliez pas d'aller lire l'excellent documentation de RedHat sur tous les modules d'Ansible !

Gestion des groupes de machines

Pour la liste complète, je vous invite à lire le fichier hosts.

  • pour tester les versions de Debian,

    ansible_lsb.codename == 'stretch'
    
  • pour tester si c'est un CPU Intel x86_64,

    ansible_processor[0].find('Intel') != -1
    and ansible_architecture == 'x86_64'
    

Pour les fonctions (proxy-server, dhcp-dynamique…) il a été choisi de ne pas faire de groupe particulier mais plutôt de sélectionner/enlever les machines pertinentes directement dans les playbooks.

Lister tout ce que sait Ansible sur un hôte

Lors du lancement d'Ansible, il collecte un ensemble de faits sur les serveurs qui peuvent ensuite être utilisés dans des variables. Pour lister tous les faits qu'Ansible collecte nativement d'un serveur on peut exécuter le module setup manuellement.

ansible proxy.adm.auro.re -m setup --ask-vault-pass

Exécution d'Ansible

Configurer la connexion au vlan adm

Envoyer son agent SSH peut être dangereux (source).

On va utiliser plutôt ProxyJump. Dans la configuration SSH :

# Use a proxy jump server to log on all Aurore inventory
Host 10.128.0.* *.adm.auro.re
    ProxyJump passerelle.auro.re

Il faut sa clé SSH configurée sur le serveur que l'on déploit.

ssh-copy-id proxy.adm.auro.re

Lancer Ansible

Il faut python3-netaddr sur sa machine.

Pour tester le playbook base.yml :

ansible-playbook --ask-vault-pass base.yml --check

Vous pouvez ensuite enlever --check si vous voulez appliquer les changements !

Si vous avez des soucis de fingerprint ECDSA, vous pouvez ignorer une première fois (dangereux !) : ANSIBLE_HOST_KEY_CHECKING=0 ansible-playbook....

Ajouter tous les empruntes de serveur

#!/bin/bash
for ip in `cat hosts|grep .adm.auro.re`; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done

Passage à Ansible 2.10 (release: 30 juillet)

Installez la version de développement d'ansible pour faire fonctionner les playbooks de ce repo, ainsi que les collections suivantes :

ansible-galaxy collection install community.general
ansible-galaxy collection install ansible.posix

Si vous n'arrivez pas à entrer votre become password (bug dans ansible?), un workaround est le suivant :

$ export ANSIBLE_BECOME_PASS='<votre mot de passe LDAP>'

Notez l'espace au début pour ne pas log la commande dans votre historique shell.