pimvh.cloud_init

Prueba de molécula

Requisitos

  1. Ansible instalado:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
  1. requirements.yaml instalado (este rol usa pimvh.ssh_keygen):
ansible-galaxy install -r requirements.yaml

Variables requeridas

Revisa las variables como se muestra en los valores predeterminados.

cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # el hash de la contraseña para el usuario ansible
cloud_init_github_token: ""

cloud_init_userdata:
  hostname: hostname
  fqdn: hostname.example.com
  groups: []
  users:
    - name: mi usuario
      gecos: Descripción de mi usuario
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL # sudo sin contraseña
      groups: sudo                 # miembro de sudo
      lock_passwd: false           # desbloquear contraseña
      passwd: "{{ password_here |  password_hash('sha512') }}"
      ssh_authorized_keys: []      # clave autorizada opcional
  runcmd: []                       # comandos adicionales para ejecutar en cloudinit
  writefiles: []                   # archivos adicionales para escribir
  packages: []                     # paquetes adicionales para instalar

cloud_init_networkdata:
    # define IPs y utiliza las `default routes` y `nameservers` a continuación
    ipv4: << ipv4 >>
    ipv6: << ipv6 >>
    # --- O ---
    # volcar un netplan completo
    # como el siguiente
    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

# Mi recomendación es usar plugins de búsqueda como este:
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'tu_ca') }}"
# o búsquedas de vars como esta:
# "{{ lookup('ansible.builtin.vars', 'tu_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: "Clave de despliegue de Ansible-pull"

cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
  # configurar el uso de ca en el servidor
  - echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
  # simplemente eliminar la clave pública de CAs de host
  - rm -f /etc/ssh/host_ca.pub
  # configurar nueva clave TrustedUserCAkey añadiendo la configuración de ssh de cloud-init creada
  - echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
  # reiniciar sshd para que los cambios tengan efecto
  - systemctl restart sshd

Ejemplo de playbook

hosts:
  - foo
roles:
  - pimvh.cloud_init

Resumen - ¿Qué pasará si ejecuto esto?

  • Afirmar que las variables requeridas están definidas
  • Crear un directorio para comenzar los archivos de cloud-init
  • Obtener las claves de host de Github (cuando se solicita)
  • Generar un par de claves SSH para Ansible pull (cuando se solicita)
  • Configurar las CAs de Host SSH y las CAs de Usuario (cuando se solicita)
    • Firmar claves de certificados en el controlador
  • Configurar Ansible-pull colocando requirements.yaml del repo_url en la configuración de cloud-init (cuando se solicita)
  • Plantillar cloud_init
    • Plantillar certificados firmados a la configuración de cloud-init
    • Plantillar los userdata requeridos de cloud-init
    • Plantillar networkdata de cloud-init
    • Plantillar requirements.yaml de Ansible pull
  • Añadir clave de despliegue de Github al repositorio solicitado de Ansible-pull (cuando se solicita)
  • Ejecutar Ansible-pull como el usuario ansible en el sistema (cuando se solicita)
  • Añadir CA SSH a hosts conocidos (cuando se solicita)

Futuras Mejoras

  • Encontrar una mejor manera de obtener acceso temporal a Github utilizando un método de autenticación diferente.

Fuentes

Parte de la lógica de CA de SSH se basa en el siguiente blog

Acerca del proyecto

Role to configure cloud-init.

Instalar
ansible-galaxy install pimvh.cloud_init
Licencia
gpl-3.0
Descargas
1.5k
Propietario