Start with the the Ansible configuration. This can be set in /etc/ansible/ansible.cfg
or ~/.ansible.cfg
(in the home directory) or ansible.cfg
(in the current directory)
My suggestion is use one of the first 2 (ie. /etc/
or ~/.ansible.cfg
if you’re going to be managing instances from your machine. Update the configuration as needed.
[defaults] inventory = ./ansible_plugins enable_plugins = aws_ec2 host_key_checking = False pipelining = True log_path = /var/log/ansible
You may need other plugins, this one is for aws_ec2
. In the /etc/ansible/ansible_plugins
directory, create the *_aws_ec2.yml
configuration file for your inventory
# /etc/ansible/ansible_plugins/testing_aws_ec2.yml --- plugin: aws_ec2 aws_profile: testing regions: - us-east-1 - us-east-2 filters: tag:Team: testing instance-state-name : running hostnames: - instance-id - dns-name keyed_groups: - prefix: team key: tags['Team']
I’m filtering using a tag:Team
== testing
and showing only running
instances.
I’m also using the instance-id
and dns-name
attributes as hostname
And I’m using the tag['Team']
as a grouping.
So now, I can do the following from any directory (since my configuration is global in /etc/ansible
)
$ ansible-inventory --list --yaml all: children: aws_ec2: hosts: i-xxxxxxxxxxxxxxx: ami_launch_index: 0 architecture: x86_64 block_device_mappings: - device_name: /dev/sda1 ebs: attach_time: 2020-08-10 15:20:58+00:00 delete_on_termination: true status: attached volume_id: vol-xxxxxxxxxxxxxx ... team_testing: hosts: i-xyxyxyxyxyyxyxyy: {} i-xyxyxy2321yxyxyy: {} i-xyxyxyxyxy89yxyy: {} i-xyxy1210xyyxyxyy: {} i-xyxy999999yxyxyy: {} i-xyxyxy44xyyxyxyy: {} i-xyx2323yxyyxyxyy: {} i-xyxyxyxyxy9977yy: {} ungrouped: {}
I can also use the team_testing
or the individual instance_id
in my Ansible hosts
calls.