ansible-experiments/cleanup_ami_snapshots/cleanup-ami-snapshots.yaml

77 lines
2.1 KiB
YAML

- name: Remove the oldest AMI and associated snapshots
hosts: localhost
connection: local
gather_facts: True
vars:
enable_debug: False
aws_profile: aws-ansible
log_destination: /tmp/ansible-ami-cleanup.log
ami_tag:
"tag:DestroyImage": 'true'
tasks:
- name: Register the AWS_REGION environment variable.
set_fact:
aws_region_env_var: "{{ lookup('env', 'AWS_REGION') }}"
register: aws_region_env_var
- name: Fail if the AWS_REGION environment var is not set
fail:
msg: "The AWS_REGION environment variable is not set"
when: not aws_region_env_var
- name: Gather facts about all AMIs with given tag.
ec2_ami_info:
profile: "{{ aws_profile }}"
owners: self
filters: "{{ ami_tag }}"
register: ami_list
- name: Check if log file already exists
stat:
path: "{{ log_destination }}"
register: logfile
- name: Create log file
file:
state: touch
path: "{{ log_destination }}"
when: logfile.stat.exists == False
- name: debug
debug:
msg: "{{ ami_list }}"
when: enable_debug
- name: oldest ami
set_fact:
oldest_ami: "{{ ami_list.images | sort(attribute='creation_date') | first}}"
when: ami_list.images
- name: debug
debug:
msg: "{{ oldest_ami }}"
when: enable_debug and ami_list.images
- name: Deregister AMI.
ec2_ami:
profile: "{{ aws_profile }}"
image_id: "{{ oldest_ami.image_id }}"
state: absent
delete_snapshot: yes
when: ami_list.images
- name: LOG action
lineinfile:
line: "{{ ansible_date_time.iso8601 }} AMI CLEANUP - Deregistered AMI: {{ oldest_ami.image_id }}"
dest: "{{ log_destination }}"
when: ami_list.images
- name: LOG action
lineinfile:
line: "{{ ansible_date_time.iso8601 }} AMI CLEANUP - Removed snapshots: {{ item.ebs.snapshot_id }}"
dest: "{{ log_destination }}"
with_items: "{{ oldest_ami.block_device_mappings }}"
when: ami_list.images