ppouliot.ansible_bootstrap
Rol de Ansible: ansible-bootstrap
Para ejecutar Ansible de manera efectiva, la máquina objetivo necesita tener un intérprete de Python. Las máquinas CoreOS y Flatcar Linux son mínimas y no vienen con ninguna versión de Python. Además, al usar jumpboxes que son gestionadas por otra persona, tienes acceso limitado para instalar software y es posible que solo puedas instalar en una única estructura de directorios.
Para sortear esta limitación, se instala una versión portable de pypy, un intérprete de Python ligero. El rol de ansible-bootstrap instalará pypy, incluido pip, en el directorio home del usuario, creará enlaces simbólicos para un uso más fácil de la nueva pila de Python y ajustará las rutas. Luego, puedes actualizar tu archivo de inventario para usar el intérprete de Python instalado en tus nodos de Container Linux con Ansible.
Además, se vuelve extremadamente útil configurar una estructura de controlador Ansible contenida en este modelo. Por lo tanto, se han agregado características adicionales tanto para configurar pypy para el control de Ansible como para Ansible como un controlador con el proxy SSH a través de un host bastión habilitado.
Variables del rol:
Habilitar PIP
Configurar este valor controla la instalación de PIP y las herramientas necesarias en el directorio home del usuario. El valor predeterminado está configurado como 'True'.
enable_pip: True
Habilitar Ansible
Configurar este valor controla la instalación de Ansible utilizando el nuevo entorno pypy desplegado. Además, se crean enlaces simbólicos en ~/bin para la aplicación y se añaden para usar en la declaración de ruta del usuario en .bashrc. El valor predeterminado está configurado como 'False'.
enable_ansible: True
Habilitar Carpetas de Ansible
Configurar este valor crea la infraestructura de carpetas y los archivos de configuración para un controlador Ansible desplegado en el directorio home, junto con el resto de las herramientas. El valor predeterminado está configurado como 'False'.
enable_ansible_folders: True
Habilitar Carpetas de Rol Común de Ansible
Configurar este valor crea la infraestructura de carpetas para un rol común en ~/ansible/roles/common usando ansible-galaxy. El valor predeterminado está configurado como 'False'.
enable_ansible_common_role: True
Habilitar Bastión (para Proxy SSH Ansible)
Configurar este valor crea una configuración de Ansible para usar Ansible con proxy SSH a través de un host bastión en el archivo ansible/ssh.cfg. El valor predeterminado está configurado como 'False'.
enable_bastion: True
bastion_hostname: bastion.contoso.ltd # FQDN del Host Bastión
bastion_user: bwayne # Usuario del Host Bastión
bastion_ip: 172.168.1.10 # Dirección IP del Host Bastión
bastion_ansible_host: 192.168.1.* # Hosts al otro lado del Bastión
Instalación
Usa ansible-galaxy para instalar el último módulo.
ansible-galaxy install ppouliot.ansible-bootstrap
Configura tu proyecto
A diferencia de un rol típico, necesitas configurar Ansible para usar un intérprete de Python alternativo para los hosts container-linux. Esto se puede hacer agregando un grupo de container-linux a tu archivo de inventario y configurando las variables del grupo para usar el nuevo intérprete de Python. De esta manera, puedes usar Ansible para gestionar hosts CoreOS y no-CoreOS. Simplemente coloca cada host que tenga CoreOS en el grupo de inventario de container-linux y automáticamente usará el intérprete de Python especificado.
[container-linux]
host-01
host-02
[container-linux:vars]
enable_pip=True
ansible_ssh_user=core
ansible_python_interpreter=/home/core/bin/python
ansible_connection=ssh
ansible_ssh_private_key_file=/etc/ansible/keys/id_rsa
enable_ansible=True
enable_ansible_folders=True
enable_bastion=True
bastion_hostname=bastion.contoso.ltd
bastion_user=bwayne
bastion_ip=172.168.1.10
bastion_ansible_host=192.168.1.*
Esto configurará Ansible para usar el intérprete de Python en /home/core/bin/python, que será creado por el rol de ansible-bootstrap.
Playbook de Bootstrap
Ahora simplemente puedes añadir lo siguiente a tu archivo de playbook e incluirlo en tu site.yml para que se ejecute en todos los hosts del grupo container-linux.
- hosts: container-linux
gather_facts: False
remote_user: core
roles:
- ppouliot.ansible-bootstrap
Asegúrate de que gather_facts esté configurado como false, de lo contrario, Ansible intentará primero recopilar información del sistema usando Python, que aún no está instalado.
Colaboradores
- Peter Pouliot peter@pouliot.net
Copyright y Licencia
Copyright (C) 2018 Peter J. Pouliot
Peter Pouliot se puede contactar en: peter@pouliot.net
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en cumplimiento con la Licencia. Puedes obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que la ley aplicable lo requiera o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye en una base "COMO ESTÁ", SIN GARANTÍAS O CONDICIONES DE NINGÚN TIPO, ni explícitas ni implícitas. Consulta la Licencia para obtener la información específica que rige los permisos y limitaciones bajo la Licencia.
A PYPY (and pip) deployment for bootstrapping Ansible resources.
ansible-galaxy install ppouliot.ansible_bootstrap