add ansible playbook example
This commit is contained in:
parent
c19d75b530
commit
b295ca88d1
22
README.md
22
README.md
|
@ -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
2
ansible.cfg
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[defaults]
|
||||||
|
deprecation_warnings=False
|
|
@ -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
49
site.yml
Normal 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"
|
||||||
|
|
Loading…
Reference in a new issue