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ó.