pimvh.cloud_init

Test de molécule

Exigences

  1. Ansible installé :
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
  1. requirements.yaml installé (ce rôle utilise pimvh.ssh_keygen) :
ansible-galaxy install -r requirements.yaml

Variables requises

Vérifiez les variables indiquées dans les valeurs par défaut.

cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # le hash du mot de passe pour l'utilisateur ansible
cloud_init_github_token: ""

cloud_init_userdata:
  hostname: nom_d_hôte
  fqdn: nom_d_hôte.example.com
  groups: []
  users:
    - name: mon utilisateur
      gecos: Description de mon utilisateur
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL # sudo sans mot de passe
      groups: sudo                 # membre de sudo
      lock_passwd: false           # déverrouiller le mot de passe
      passwd: "{{ password_here |  password_hash('sha512') }}"
      ssh_authorized_keys: []      # clé autorisée optionnelle
  runcmd: []                       # commande supplémentaire à exécuter dans cloud-init
  writefiles: []                   # fichiers supplémentaires à écrire
  packages: []                     # paquets supplémentaires à installer

cloud_init_networkdata:
    # définir les IP et utiliser les `routes par défaut` et `serveurs de noms` ci-dessous
    ipv4: << ipv4 >>
    ipv6: << ipv6 >>
    # --- OU ---
    # déduire un netplan entier
    # comme le suivant
    netplan:
      network:
        version: 2
        ethernets:
          enp1s0:
            dhcp4: false
            addresses:
              - << addr >>
            gateway4: << addr >>
            gateway6: << addr >>
            nameservers:
              addresses:
              - << ip_serveur_dns >>

cloud_init_netplan_routes:
  - to: default
    via: 1.0.0.1
  - to: default
    via: 2001:db8::11

cloud_init_netplan_nameservers:
  addresses:
    - 1.1.1.1
    - 1.0.0.1

cloud_init_add_to_known_hosts: true
cloud_init_reboot_on_finish: true
cloud_init_enable_ssh_ca: true

# Ma recommandation est d'utiliser des plugins de recherche comme ceci :
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'votre_ca') }}"
# ou des recherches de vars comme ceci :
# "{{ lookup('ansible.builtin.vars', 'votre_ca') }}"
cloud_init_ssh_host_ca_privatekey: ""
cloud_init_ssh_host_ca_privatekey_pass: ""
cloud_init_ssh_host_ca_publickey: ""
cloud_init_ssh_user_ca_publickeys: []

cloud_init_enable_ansible_pull: false
cloud_init_ansible_pull_repo_owner: ""
cloud_init_ansible_pull_repo_name: ""
cloud_init_ansible_pull_playbook_name: ""
cloud_init_ansible_pull_deploy_key_name: "Clé de déploiement Ansible-pull"

cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
  # configurer l'utilisation de CA sur le serveur
  - echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
  # juste supprimer la clé publique du CA hôte
  - rm -f /etc/ssh/host_ca.pub
  # configurer une nouvelle clé TrustedUserCAkey en ajoutant la configuration ssh cloud-init
  - echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
  # redémarrer sshd pour appliquer les modifications
  - systemctl restart sshd

Exemple de playbook

hosts:
  - foo
roles:
  - pimvh.cloud_init

Résumé - Que va-t-il se passer si je lance ceci

  • Vérifier que les variables requises sont définies
  • Créer un répertoire pour démarrer les fichiers cloud-init
  • Récupérer les clés d'hôte GitHub (lorsque demandé)
  • Générer une paire de clés SSH pour Ansible pull (lorsque demandé)
  • Configurer les CAs hôtes SSH et les CAs utilisateurs (lorsque demandé)
    • Signer les clés de certificat sur le contrôleur
  • Configurer Ansible-pull en mettant requirements.yaml du repo_url dans la configuration cloud-init (lorsque demandé)
  • Modèle cloud_init
    • Modèle des certificats signés dans la configuration cloud-init
    • Modèle des userdata requises pour cloud-init
    • Modèle des données réseau cloud-init
    • Modèle des requirements.yaml pour Ansible pull
  • Ajouter la clé de déploiement GitHub au dépôt Ansiblepull demandé (lorsque demandé)
  • Exécuter Ansible-pull en tant qu'utilisateur ansible sur le système (lorsque demandé)
  • Ajouter le CA SSH aux hôtes connus (lorsque demandé)

Améliorations futures

  • Trouver un meilleur moyen d'obtenir un accès temporaire à GitHub en utilisant une méthode d'authentification différente.

Sources

Une partie de la logique du CA SSH est basée sur le blog suivant

À propos du projet

Role to configure cloud-init.

Installer
ansible-galaxy install pimvh.cloud_init
Licence
gpl-3.0
Téléchargements
1.5k
Propriétaire