Saltar al contenido

ansible y recargando el inventario dinámico de AWS

Haz todo lo posible por comprender el código de forma correcta previamente a utilizarlo a tu proyecto si tdeseas aportar algo puedes compartirlo con nosotros.

Solución:

Probablemente usaría el script de inventario dinámico EC2 en su lugar, que puede emplear configurando ec2.ini y pasando -i ec2.py para ansible-playbook.

Consulte http://docs.ansible.com/ansible/intro_dynamic_inventory.html#example-aws-ec2-external-inventory-script para obtener más información.

Tenga en cuenta que hay muchas opciones en ec2.ini. Asegúrese de echar un vistazo a esos, por ejemplo cache_max_age. También puede acelerar la generación de inventario filtrando recursos innecesarios (por ejemplo, establecer rds = False si solo está interesado en las instancias EC2).

ACTUALIZAR: Con Ansible 2.x+ también puede usar - meta: refresh_inventory a mitad de juego.

Mientras que la meta: refresh_inventory es el “método preferido”, tiendo a gustarme la propuesta de OP de usar ec2_remote_facts junto con add_host. He configurado un libro de jugadas de este tipo y tiene la fuerza para ser 100% dinámico sin fallas en el almacenamiento en caché.

Asumiendo tu ASG encendió instancias con el env: cool_asg_instance etiqueta, simplemente agregue lo siguiente debajo de ec2_asg llamada del libro de jugadas:

- ec2_remote_facts:
    filters:
      "tag:env": "cool_asg_instance"
  register: instance_facts

A continuación, reunirá un completo JSON conjunto de datos que contiene toda la información necesaria, desde allí puede usar Jinja2 capacidades dentro del libro de jugadas para extraer direcciones IP recién creadas, es decir:

- name: group hosts
  add_host: hostname= item  groups=launched
  with_items: "map(attribute='private_ip_address')"

El filtro es cortesía de esta maravillosa publicación de blog: https://bonovoxly.github.io/2016-02-11-ansible-stuffs-ec2_remote_facts_instead_of_ec2_py

A partir de ahora puedes utilizar el launched grupo en su implementación principal YAML archivo como este:

- hosts: launched
  gather_facts: no

  tasks: 
    - name: wait for SSH
      wait_for: port=22 host=" inventory_hostname " search_regex=OpenSSH delay=5

Algunos pueden preguntarse por qué el dolor de cabeza, pues imagínense que en vez de tener un espantoso userdata que lo hará git clone tanto Ansible como un libro de jugadas de Internet, puede activar la configuración de la instancia desde su propio centro de implementación configurando un simple redes sociales tema que se publicará en un SQS cola, supervisada por un código Python de 10 líneas (https://github.com/alexandregama/python-sqs-consumer/blob/master/sqs-message-consumer-polling.py) que activará Ansible cuando aparezca una nueva instancia .

Recuerda algo, que te concedemos aclarar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *