Another newbie questions (second and last for today, I promise)
I have two groups for EC2 instances:
- Test servers
- Loader servers
each with a different tag.
I would like to get the list of the internal_ip of the Test group, and use it to run a command on the Loaders group.
Any pointer will be appreciated!
Thanks
The following AWS CLI command will give you a list of all internal IPs (which you could run only against the Test host group):
aws ec2 describe-instances --query 'Reservations[*].Instances[*].PrivateIpAddress' --output text
Thanks Alex
This works, but my end goal is to use the list in a playbook.
A similar example I’m struggling with:
Terminate all EC2 instances with a specific name.
I come up with the following:
`
Hi Tzach
I usually approach instance termination by matching the instances with ec2 dynamic inventory, then add them to a group and terminate them in another play targeted at the newly created group, based on their instance id (which is automatically added as an inventory variable by the ec2 inventory script).
Note that I specify gather_facts: false
and do not reference the hostvars
dictionary. That way, Ansible does not attempt or need to reach the instances via ssh before it is able to terminate them.
- name: Find sandbox instance(s) with matching name
hosts: tag_Name_Test
gather_facts: false
tasks:
- name: Create group
group_by: key=legacy
- hosts: legacy
connection: local
gather_facts: false
tasks:
- name: Terminate instance(s)
ec2:
instance_ids: "{{ ec2_id }}"
state: absent
Hope this helps.
Tom
Thanks Tom!
It works, but I do not understand how or why
Hi Tzach
I usually approach instance termination by matching the instances with ec2 dynamic inventory, then add them to a group and terminate them in another play targeted at the newly created group, based on their instance id (which is automatically added as an inventory variable by the ec2 inventory script).
Note that I specify gather_facts: false
and do not reference the hostvars
dictionary. That way, Ansible does not attempt or need to reach the instances via ssh before it is able to terminate them.
- name: Find sandbox instance(s) with matching name
hosts: tag_Name_Test
gather_facts: false
tasks:
- name: Create group
group_by: key=legacy
This create a host group called Legacy
- hosts: legacy
This use the legacy group, so why cant I use the tag_Name_Test directly?
connection: local
Why this play have connection: local and first does not?
gather_facts: false
tasks:
- name: Terminate instance(s)
ec2:
instance_ids: "{{ ec2_id }}"
region: {{ region }} is also required
state: absent
Hope this helps.
And last: can I use two different tag name, and merge them somehow?