pimvh.cloud_init

Molekül-Test

Anforderungen

  1. Ansible installieren:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
  1. requirements.yaml installieren (dieses Rollenspiel nutzt pimvh.ssh_keygen):
ansible-galaxy install -r requirements.yaml

Benötigte Variablen

Überprüfen Sie die Variablen wie im Standard angezeigt.

cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # der Hash des Passworts für den Ansible-Benutzer
cloud_init_github_token: ""

cloud_init_userdata:
  hostname: hostname
  fqdn: hostname.example.com
  groups: []
  users:
    - name: mein Benutzer
      gecos: Beschreibung meines Benutzers
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL # Passwortloses Sudo
      groups: sudo                 # Mitglied von sudo
      lock_passwd: false           # Passwort entsperren
      passwd: "{{ password_here |  password_hash('sha512') }}"
      ssh_authorized_keys: []      # optionale autorisierte Schlüssel
  runcmd: []                       # zusätzliche Befehle, die in cloud-init ausgeführt werden sollen
  writefiles: []                   # zusätzliche Dateien, die geschrieben werden sollen
  packages: []                     # zusätzliche Pakete, die installiert werden sollen

cloud_init_networkdata:
    # IPs definieren und die `default routes` und `nameservers` unten verwenden
    ipv4: << ipv4 >>
    ipv6: << ipv6 >>
    # --- ODER ---
    # einen gesamten Netplan dumpen
    # wie das folgende
    netplan:
      network:
        version: 2
        ethernets:
          enp1s0:
            dhcp4: false
            addresses:
              - << addr >>
            gateway4: << addr >>
            gateway6: << addr >>
            nameservers:
              addresses:
              - << dns_server ip >>

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

# Meine Empfehlung ist, Lookup-Plugins wie folgt zu verwenden:
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'your_ca') }}"
# oder Variablen-Lookups wie folgt:
# "{{ lookup('ansible.builtin.vars', 'your_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: "Ansible-pull Bereitstellungsschlüssel"

cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
  # CA-Nutzung auf dem Server konfigurieren
  - echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
  # den öffentlichen Schlüssel der Host-CA einfach entfernen
  - rm -f /etc/ssh/host_ca.pub
  # den neuen TrustedUserCAkey konfigurieren, indem die erstellte cloud-init ssh-Konfiguration angehängt wird
  - echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
  # sshd neu starten, um die Änderungen wirksam zu machen
  - systemctl restart sshd

Beispiel-Playbook

hosts:
  - foo
roles:
  - pimvh.cloud_init

TLDR - Was passiert, wenn ich das ausführe

  • Überprüfen, ob die erforderlichen Variablen definiert sind
  • Verzeichnis erstellen, um cloud-init-Dateien zu starten
  • Github-Hostschlüssel abrufen (wenn angefordert)
  • SSH-Schlüsselpaar für Ansible-Pull generieren (wenn angefordert)
  • SSH-Host-CA und Benutzer-CA konfigurieren (wenn angefordert)
    • Zertifikatschlüssel auf dem Controller signieren
  • Ansible-Pull konfigurieren, indem requirements.yaml des repo_url in die cloud-init-Konfiguration eingefügt wird (wenn angefordert)
  • cloud_init templatisieren
    • Signierte Zertifikate in die cloud-init-Konfiguration templatisieren
    • Erforderliche cloud-init userdata templatisieren
    • cloud-init networkdata templatisieren
    • Ansible-Pull requirements.yaml templatisieren
  • Github-Bereitstellungsschlüssel zum angeforderten Ansible-Pull-Repository hinzufügen (wenn angefordert)
  • Ansible-Pull als Ansible-Benutzer auf dem System ausführen (wenn angefordert)
  • SSH-CA zu bekannten Hosts hinzufügen (wenn angefordert)

Zukünftige Verbesserungen

  • Einen besseren Weg finden, um kurzfristigen Zugriff auf Github mit einer anderen Authentifizierungsmethode zu erhalten.

Quellen

Ein Teil der SSH-CA-Logik basiert auf dem folgenden Blog

Über das Projekt

Role to configure cloud-init.

Installieren
ansible-galaxy install pimvh.cloud_init
GitHub Repository
Lizenz
gpl-3.0
Downloads
1.5k