add ansible playbook example

This commit is contained in:
Vincent Van der Kussen 2020-10-24 13:14:47 +02:00
parent c19d75b530
commit b295ca88d1
4 changed files with 74 additions and 3 deletions

View file

@ -1,4 +1,18 @@
# ansible-target-practice # 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 ## EC2 credentials
Make sure you have a profile that can access the necessary AWS resources. Make sure you have a profile that can access the necessary AWS resources.
@ -84,13 +98,17 @@ You can use the options defined in the AWS CLI `--filter` section.
[](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html#options) [](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html#options)
## Test the inventory
## Run Ansible
Testing the inventory can be done using `ansible-inventory` Testing the inventory can be done using `ansible-inventory`
``` ```
ansible-inventory -i aws_ec2.yml --list ansible-inventory -i aws_ec2.yml --list
``` ```
## Testing
```
ansible-playbook -i aws_ec2.yml site.yml --extra-vars '{"targetpractice": "false"}'
```

2
ansible.cfg Normal file
View file

@ -0,0 +1,2 @@
[defaults]
deprecation_warnings=False

View file

@ -3,12 +3,14 @@ regions:
- eu-west-1 - eu-west-1
filters: filters:
tag:env: tag:env:
- dev
- prod - prod
hostnames: hostnames:
- network-interface.association.public-ip
- network-interface.addresses.private-ip-address
- ip-address - ip-address
- network-interface.addresses.private-ip-address - network-interface.addresses.private-ip-address
- private-dns-name - private-dns-name
- instance-id
keyed_groups: keyed_groups:
- key: tags.env - key: tags.env
separator: "" separator: ""

49
site.yml Normal file
View file

@ -0,0 +1,49 @@
- hosts: tag_env_prod
remote_user: ec2-user
gather_facts: false # of no use
connection: local # prevent from trying to ssh into instance
vars:
target_group_arn: "arn:aws:elasticloadbalancing:eu-west-1:440357826049:targetgroup/TestAnsible/c2afd83500139d9a"
tasks:
- name: DEBUG
debug:
msg: "{{ hostvars[inventory_hostname].instance_id }}"
- name: Start instances
amazon.aws.ec2:
instance_ids: "{{ hostvars[inventory_hostname].instance_id }}"
state: running
when: targetpractice == "true"
- name: Wait for instances to be reachable
wait_for:
host: "{{ inventory_hostname }}"
port: 22
when: targetpractice == "true"
- name: Register targets in TargetGroup
community.aws.elb_target:
target_group_arn: "{{ target_group_arn }}"
state: present
target_id: "{{ hostvars[inventory_hostname].instance_id }}"
target_status: "unused"
when: targetpractice == "true"
- name: Deregister targets in TargetGroup
community.aws.elb_target:
target_group_arn: "{{ target_group_arn }}"
state: absent
target_id: "i-0c6411e58bbaccfad"
target_status: "unused"
deregister_unused: yes
when: targetpractice == "false"
- name: Stop instances
amazon.aws.ec2:
instance_ids: "{{ hostvars[inventory_hostname].instance_id }}"
#instance_ids: "{{ play_hosts }}"
state: running
when: targetpractice == "false"