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