Patch EC2 Workflow (#75)
Co-authored-by: zjleblanc <zjleblanc3@gmail.com> Co-authored-by: willtome <wtome@redhat.com>
This commit is contained in:
@@ -21,3 +21,4 @@ aws_env_tag: prod
|
||||
aws_purpose_tag: ansible_demo
|
||||
aws_ansiblegroup_tag: cloud
|
||||
aws_ec2_wait: true
|
||||
aws_snapshots: {}
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
- name: AWS | RESTORE VM
|
||||
delegate_to: localhost
|
||||
block:
|
||||
- name: AWS | RESTORE VM | stop vm
|
||||
amazon.aws.ec2_instance:
|
||||
region: "{{ aws_region }}"
|
||||
instance_ids: "{{ instance_id }}"
|
||||
state: stopped
|
||||
wait: true
|
||||
|
||||
- name: AWS | RESTORE VM | get volumes
|
||||
register: r_vol_info
|
||||
amazon.aws.ec2_vol_info:
|
||||
region: "{{ aws_region }}"
|
||||
filters:
|
||||
attachment.instance-id: "{{ instance_id }}"
|
||||
|
||||
- name: AWS | RESTORE VM | detach volumes
|
||||
loop: "{{ r_vol_info.volumes }}"
|
||||
loop_control:
|
||||
loop_var: volume
|
||||
label: "{{ volume.id }}"
|
||||
amazon.aws.ec2_vol:
|
||||
region: "{{ aws_region }}"
|
||||
id: "{{ volume.id }}"
|
||||
instance: None
|
||||
|
||||
- name: AWS | RESTORE VM | attach snapshots from stat
|
||||
when: inventory_hostname in aws_snapshots
|
||||
loop: "{{ aws_snapshots[inventory_hostname] }}"
|
||||
loop_control:
|
||||
loop_var: snap
|
||||
label: "{{ snap.snapshot_id }}"
|
||||
amazon.aws.ec2_vol:
|
||||
region: "{{ aws_region }}"
|
||||
instance: "{{ instance_id }}"
|
||||
snapshot: "{{ snap.snapshot_id }}"
|
||||
device_name: "{{ snap.device }}"
|
||||
|
||||
- name: AWS | RESTORE VM | get all snapshots
|
||||
when: inventory_hostname not in aws_snapshots
|
||||
register: r_snapshots
|
||||
amazon.aws.ec2_snapshot_info:
|
||||
region: "{{ aws_region }}"
|
||||
filters:
|
||||
"tag:Name": "{{ inventory_hostname }}"
|
||||
|
||||
- name: AWS | RESTORE VM | create volume from latest snapshot
|
||||
when: inventory_hostname not in aws_snapshots
|
||||
amazon.aws.ec2_vol:
|
||||
region: "{{ aws_region }}"
|
||||
instance: "{{ instance_id }}"
|
||||
snapshot: "{{ r_snapshots.snapshots[0].snapshot_id }}"
|
||||
device_name: "/dev/sda1"
|
||||
|
||||
- name: AWS | RESTORE VM | start vm
|
||||
amazon.aws.ec2_instance:
|
||||
region: "{{ aws_region }}"
|
||||
instance_ids: "{{ instance_id }}"
|
||||
state: started
|
||||
wait: true
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
- name: AWS | SNAPSHOT VM
|
||||
delegate_to: localhost
|
||||
block:
|
||||
- name: AWS | SNAPSHOT VM | assert id
|
||||
ansible.builtin.assert:
|
||||
that: instance_id is defined
|
||||
fail_msg: "instance_id is required for snapshot operations"
|
||||
|
||||
- name: AWS | SNAPSHOT VM | include vars
|
||||
ansible.builtin.include_vars:
|
||||
file: snapshot_vm.yml
|
||||
|
||||
- name: AWS | SNAPSHOT VM | get volumes
|
||||
register: r_vol_info
|
||||
amazon.aws.ec2_vol_info:
|
||||
region: "{{ aws_region }}"
|
||||
filters:
|
||||
attachment.instance-id: "{{ instance_id }}"
|
||||
|
||||
- name: AWS | SNAPSHOT VM | take snapshots
|
||||
loop: "{{ r_vol_info.volumes }}"
|
||||
loop_control:
|
||||
loop_var: volume
|
||||
label: "{{ volume.id }}"
|
||||
register: r_snapshots
|
||||
amazon.aws.ec2_snapshot:
|
||||
region: "{{ aws_region }}"
|
||||
volume_id: "{{ volume.id }}"
|
||||
description: "Snapshot taken by Red Hat Product demos"
|
||||
snapshot_tags: "{{ tags }}"
|
||||
|
||||
- name: AWS | SNAPSHOT VM | format snapshot stat
|
||||
ansible.builtin.set_fact:
|
||||
snapshot_stat:
|
||||
- key: "{{ inventory_hostname }}"
|
||||
value: "{{ r_snapshots.results | json_query(aws_ec2_snapshot_query) }}"
|
||||
|
||||
- name: AWS | SNAPSHOT VM | record snapshot with host key
|
||||
ansible.builtin.set_stats:
|
||||
data:
|
||||
aws_snapshots: "{{ snapshot_stat | items2dict }}"
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# Set stat_snapshots with model:
|
||||
# [
|
||||
# {
|
||||
# "snapshot_id": "snap-0e981f05704e19ffd",
|
||||
# "vol_id": "vol-0bd55f313bb7bcdd8",
|
||||
# "device": "/dev/sda1"
|
||||
# },
|
||||
# ...
|
||||
# ]
|
||||
aws_ec2_snapshot_query: "[].{snapshot_id: snapshot_id, vol_id: volume.id, device: volume.attachment_set[?instance_id=='{{ instance_id }}'].device | [0]}"
|
||||
Reference in New Issue
Block a user