pimvh.cloud_init
Exigences
- Ansible installé :
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
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