Find a file
2020-10-24 13:14:47 +02:00
ansible.cfg add ansible playbook example 2020-10-24 13:14:47 +02:00
aws_ec2.yml add ansible playbook example 2020-10-24 13:14:47 +02:00
README.md add ansible playbook example 2020-10-24 13:14:47 +02:00
site.yml add ansible playbook example 2020-10-24 13:14:47 +02:00

ansible-target-practice

This repository is an example that accomplishes the following:

  • stop/start based on a variable (targetpractice)
  • If instances need to be started they are registered in a targetgroup when they become reachable
  • If instances need to be stopped the are first removed from the targetgroup

Dependencies

ansible-galaxy collection install amazon.aws
ansible-galaxy collection install community.aws

EC2 credentials

Make sure you have a profile that can access the necessary AWS resources. Configure your AWS cli as described here

You can use Environment Variables to specify configuration options of the AWS cli. More info here:

Minimal example:

~/.aws/credentials

[zoolite/vincent]
aws_access_key_id=AKIAWNB2RT65DGTW
aws_secret_access_key=Yhdg280zGg3U7CQVcyLAqLEs9/Wv6cYb7UYB6L0

~/.aws/config

[profile zoolite/vincent]
region=eu-west-1
output=text

You can use this profile by setting the AWS_PROFILE environment variable

export AWS_PROFILE=zoolite/vincent

Run aws sts get-caller-identity to test authentication

Ansible EC2 inventory plugin

The Ansible EC2 inventory plugin allows you to create groups based on tags defined on resources. The configuration of this inventory plugin can be done through a configuration file.

In this example we wan to create a group dev and should contain all instance that have a tag env=dev. We also create a group tag_dev_env which contains the same hosts.

Create a file aws_ec2.yml with the following content

plugin: aws_ec2
regions:
  - eu-west-1
filters:
  tag:env:
    - dev
    - prod
hostnames:
  - private-dns-name
  - ip-address
  - network-interface.addresses.private-ip-address
keyed_groups:
  - key: tags.env
    separator: ""
  - prefix: tag
    key: tags

Filters

In the example we apply a filter so we only end up with resources who have a tag env with a value of either dev or prod

Hostnames

In this example we only want to use the private ip addresses, private dns record or the public ip address in our inventory. This can be defined in the hostnames section.

This list uses the order as preference. Example: If you prefer to use the prive dns records you need to put the private-dns-name option above all alse in the list.

You can use the options defined in the AWS CLI --filter section.

Test the inventory

Testing the inventory can be done using ansible-inventory

ansible-inventory -i aws_ec2.yml --list

Testing

ansible-playbook -i aws_ec2.yml site.yml --extra-vars '{"targetpractice": "false"}'