Last active
July 6, 2018 14:10
-
-
Save SolomonHD/4f7ee46ff91e2b82142c2f00f76db7d7 to your computer and use it in GitHub Desktop.
EC2 Name Mapping
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- name: Build list of instance IDs by instance name | |
ec2_instance_facts: | |
region: "{{ region }}" | |
filters: | |
"tag:NightlyBackup": "Yes" | |
# "tag:Name": "{{ groups['backup'] }}" | |
register: ec2_facts | |
- debug: | |
var: ec2_facts | |
- name: Set fact instances | |
set_fact: | |
instances: "{{ ec2_facts.instances | map(attribute='instance_id') | list }}" | |
- name: Map Name | |
set_fact: | |
map_name: "{{ ec2_facts.instances | map(attribute='tags.Name') | list }}" | |
- debug: | |
var: map_name | |
#- name: Replace undefined | |
# set_fact: | |
# "{{ item[0] }}": "{{ item[1] }}" | |
# when: item[0] == "Undefined" | |
# with_together: | |
# - "{{ map_name }}" | |
# - "{{ instances }}" | |
- debug: | |
var: instances | |
- meta: end_play | |
- name: List of instance IDs to be backed up | |
debug: | |
msg: "{{ item }}" | |
loop: "{{ instances }}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"ec2_facts": { | |
"changed": false, | |
"failed": false, | |
"instances": [ | |
{ | |
"ami_launch_index": 0, | |
"architecture": "x86_64", | |
"block_device_mappings": [ | |
{ | |
"device_name": "/dev/sda1", | |
"ebs": { | |
"attach_time": "2018-06-07T23:24:18+00:00", | |
"delete_on_termination": true, | |
"status": "attached", | |
"volume_id": "vol-046b2e520c788971d" | |
} | |
} | |
], | |
"client_token": "", | |
"ebs_optimized": false, | |
"ena_support": true, | |
"hypervisor": "xen", | |
"iam_instance_profile": { | |
"arn": "arn:aws:iam::229792048549:instance-profile/ec2-s3-full-access", | |
"id": "AIPAID3GG2QMCRY7TOW56" | |
}, | |
"image_id": "ami-43a15f3e", | |
"instance_id": "i-0468fc479c884d8b7", | |
"instance_type": "t2.medium", | |
"key_name": "general_key", | |
"launch_time": "2018-07-01T01:48:30+00:00", | |
"monitoring": { | |
"state": "disabled" | |
}, | |
"network_interfaces": [ | |
{ | |
"attachment": { | |
"attach_time": "2018-06-07T23:24:16+00:00", | |
"attachment_id": "eni-attach-4a27dcef", | |
"delete_on_termination": true, | |
"device_index": 0, | |
"status": "attached" | |
}, | |
"description": "Primary network interface", | |
"groups": [ | |
{ | |
"group_id": "sg-99882ad1", | |
"group_name": "sshd" | |
}, | |
{ | |
"group_id": "sg-fc64c6b4", | |
"group_name": "http+https" | |
} | |
], | |
"ipv6_addresses": [], | |
"mac_address": "12:e6:a5:c2:d9:8a", | |
"network_interface_id": "eni-117ea387", | |
"owner_id": "229792048549", | |
"private_dns_name": "ip-172-31-95-229.ec2.internal", | |
"private_ip_address": "172.31.95.229", | |
"private_ip_addresses": [ | |
{ | |
"primary": true, | |
"private_dns_name": "ip-172-31-95-229.ec2.internal", | |
"private_ip_address": "172.31.95.229" | |
} | |
], | |
"source_dest_check": true, | |
"status": "in-use", | |
"subnet_id": "subnet-66f7984a", | |
"vpc_id": "vpc-bc7408c5" | |
} | |
], | |
"placement": { | |
"availability_zone": "us-east-1a", | |
"group_name": "", | |
"tenancy": "default" | |
}, | |
"private_dns_name": "ip-172-31-95-229.ec2.internal", | |
"private_ip_address": "172.31.95.229", | |
"product_codes": [], | |
"public_dns_name": "", | |
"root_device_name": "/dev/sda1", | |
"root_device_type": "ebs", | |
"security_groups": [ | |
{ | |
"group_id": "sg-99882ad1", | |
"group_name": "sshd" | |
}, | |
{ | |
"group_id": "sg-fc64c6b4", | |
"group_name": "http+https" | |
} | |
], | |
"source_dest_check": true, | |
"state": { | |
"code": 80, | |
"name": "stopped" | |
}, | |
"state_reason": { | |
"code": "Client.UserInitiatedShutdown", | |
"message": "Client.UserInitiatedShutdown: User initiated shutdown" | |
}, | |
"state_transition_reason": "User initiated (2018-07-01 01:49:14 GMT)", | |
"subnet_id": "subnet-66f7984a", | |
"tags": { | |
"Name": "solomon-test-2", | |
"NightlyBackup": "Yes" | |
}, | |
"virtualization_type": "hvm", | |
"vpc_id": "vpc-bc7408c5" | |
}, | |
{ | |
"ami_launch_index": 0, | |
"architecture": "x86_64", | |
"block_device_mappings": [ | |
{ | |
"device_name": "/dev/sda1", | |
"ebs": { | |
"attach_time": "2018-06-12T19:45:14+00:00", | |
"delete_on_termination": true, | |
"status": "attached", | |
"volume_id": "vol-0d7fc053396341fbc" | |
} | |
} | |
], | |
"client_token": "", | |
"ebs_optimized": false, | |
"ena_support": true, | |
"hypervisor": "xen", | |
"iam_instance_profile": { | |
"arn": "arn:aws:iam::229792048549:instance-profile/ec2-s3-full-access", | |
"id": "AIPAID3GG2QMCRY7TOW56" | |
}, | |
"image_id": "ami-43a15f3e", | |
"instance_id": "i-04ff7bb389bdf86f0", | |
"instance_type": "t2.xlarge", | |
"key_name": "general_key", | |
"launch_time": "2018-07-01T01:48:31+00:00", | |
"monitoring": { | |
"state": "disabled" | |
}, | |
"network_interfaces": [ | |
{ | |
"attachment": { | |
"attach_time": "2018-06-12T19:45:14+00:00", | |
"attachment_id": "eni-attach-140c66ab", | |
"delete_on_termination": true, | |
"device_index": 0, | |
"status": "attached" | |
}, | |
"description": "", | |
"groups": [ | |
{ | |
"group_id": "sg-99882ad1", | |
"group_name": "sshd" | |
}, | |
{ | |
"group_id": "sg-fc64c6b4", | |
"group_name": "http+https" | |
} | |
], | |
"ipv6_addresses": [], | |
"mac_address": "0e:2a:97:0c:aa:9a", | |
"network_interface_id": "eni-ce1c7154", | |
"owner_id": "229792048549", | |
"private_dns_name": "ip-172-31-32-142.ec2.internal", | |
"private_ip_address": "172.31.32.142", | |
"private_ip_addresses": [ | |
{ | |
"primary": true, | |
"private_dns_name": "ip-172-31-32-142.ec2.internal", | |
"private_ip_address": "172.31.32.142" | |
} | |
], | |
"source_dest_check": true, | |
"status": "in-use", | |
"subnet_id": "subnet-9a2543c0", | |
"vpc_id": "vpc-bc7408c5" | |
} | |
], | |
"placement": { | |
"availability_zone": "us-east-1c", | |
"group_name": "", | |
"tenancy": "default" | |
}, | |
"private_dns_name": "ip-172-31-32-142.ec2.internal", | |
"private_ip_address": "172.31.32.142", | |
"product_codes": [], | |
"public_dns_name": "", | |
"root_device_name": "/dev/sda1", | |
"root_device_type": "ebs", | |
"security_groups": [ | |
{ | |
"group_id": "sg-99882ad1", | |
"group_name": "sshd" | |
}, | |
{ | |
"group_id": "sg-fc64c6b4", | |
"group_name": "http+https" | |
} | |
], | |
"source_dest_check": true, | |
"state": { | |
"code": 80, | |
"name": "stopped" | |
}, | |
"state_reason": { | |
"code": "Client.UserInitiatedShutdown", | |
"message": "Client.UserInitiatedShutdown: User initiated shutdown" | |
}, | |
"state_transition_reason": "User initiated (2018-07-01 01:49:14 GMT)", | |
"subnet_id": "subnet-9a2543c0", | |
"tags": { | |
"Name": "solomon-test", | |
"NightlyBackup": "Yes" | |
}, | |
"virtualization_type": "hvm", | |
"vpc_id": "vpc-bc7408c5" | |
}, | |
{ | |
"ami_launch_index": 0, | |
"architecture": "x86_64", | |
"block_device_mappings": [ | |
{ | |
"device_name": "/dev/xvda", | |
"ebs": { | |
"attach_time": "2018-07-04T19:54:52+00:00", | |
"delete_on_termination": true, | |
"status": "attached", | |
"volume_id": "vol-0d6dbd54eeffd74e9" | |
} | |
} | |
], | |
"client_token": "", | |
"ebs_optimized": false, | |
"ena_support": true, | |
"hypervisor": "xen", | |
"iam_instance_profile": { | |
"arn": "arn:aws:iam::229792048549:instance-profile/ec2-s3-full-access", | |
"id": "AIPAID3GG2QMCRY7TOW56" | |
}, | |
"image_id": "ami-b70554c8", | |
"instance_id": "i-05736d2c52da72184", | |
"instance_type": "t2.micro", | |
"key_name": "general_key", | |
"launch_time": "2018-07-04T19:54:51+00:00", | |
"monitoring": { | |
"state": "disabled" | |
}, | |
"network_interfaces": [ | |
{ | |
"attachment": { | |
"attach_time": "2018-07-04T19:54:51+00:00", | |
"attachment_id": "eni-attach-444ae1fe", | |
"delete_on_termination": true, | |
"device_index": 0, | |
"status": "attached" | |
}, | |
"description": "", | |
"groups": [ | |
{ | |
"group_id": "sg-99882ad1", | |
"group_name": "sshd" | |
}, | |
{ | |
"group_id": "sg-fc64c6b4", | |
"group_name": "http+https" | |
} | |
], | |
"ipv6_addresses": [], | |
"mac_address": "12:90:09:b0:58:c6", | |
"network_interface_id": "eni-487c11eb", | |
"owner_id": "229792048549", | |
"private_dns_name": "ip-172-31-91-170.ec2.internal", | |
"private_ip_address": "172.31.91.170", | |
"private_ip_addresses": [ | |
{ | |
"primary": true, | |
"private_dns_name": "ip-172-31-91-170.ec2.internal", | |
"private_ip_address": "172.31.91.170" | |
} | |
], | |
"source_dest_check": true, | |
"status": "in-use", | |
"subnet_id": "subnet-66f7984a", | |
"vpc_id": "vpc-bc7408c5" | |
} | |
], | |
"placement": { | |
"availability_zone": "us-east-1a", | |
"group_name": "", | |
"tenancy": "default" | |
}, | |
"private_dns_name": "ip-172-31-91-170.ec2.internal", | |
"private_ip_address": "172.31.91.170", | |
"product_codes": [], | |
"public_dns_name": "", | |
"root_device_name": "/dev/xvda", | |
"root_device_type": "ebs", | |
"security_groups": [ | |
{ | |
"group_id": "sg-99882ad1", | |
"group_name": "sshd" | |
}, | |
{ | |
"group_id": "sg-fc64c6b4", | |
"group_name": "http+https" | |
} | |
], | |
"source_dest_check": true, | |
"state": { | |
"code": 80, | |
"name": "stopped" | |
}, | |
"state_reason": { | |
"code": "Client.UserInitiatedShutdown", | |
"message": "Client.UserInitiatedShutdown: User initiated shutdown" | |
}, | |
"state_transition_reason": "User initiated (2018-07-05 04:27:10 GMT)", | |
"subnet_id": "subnet-66f7984a", | |
"tags": { | |
"NightlyBackup": "Yes" | |
}, | |
"virtualization_type": "hvm", | |
"vpc_id": "vpc-bc7408c5" | |
} | |
] | |
} | |
} | |
TASK [gather-ec2-facts : Set fact instances] ********************************************************************************************************************************************************************** | |
ok: [localhost] => {"ansible_facts": {"instances": ["i-0468fc479c884d8b7", "i-04ff7bb389bdf86f0", "i-05736d2c52da72184"]}, "changed": false} | |
TASK [gather-ec2-facts : Map Name] ******************************************************************************************************************************************************************************** | |
ok: [localhost] => {"ansible_facts": {"map_name": "[u'solomon-test-2', u'solomon-test', Undefined]"}, "changed": false} | |
TASK [gather-ec2-facts : debug] *********************************************************************************************************************************************************************************** | |
ok: [localhost] => { | |
"map_name": "[u'solomon-test-2', u'solomon-test', Undefined]" | |
} | |
TASK [gather-ec2-facts : debug] *********************************************************************************************************************************************************************************** | |
ok: [localhost] => { | |
"instances": [ | |
"i-0468fc479c884d8b7", | |
"i-04ff7bb389bdf86f0", | |
"i-05736d2c52da72184" | |
] | |
} |
Hey thanks for the help! It's a good step forward but I really wanted to replace undefined with some sort of placeholder. Then I can iterate through the list and replace the placeholder with the corresponding i-#.
The end result I want is a list that says: [solomon-test-2, solomon-test, i-05736d2c52da72184]
Oh, that's simple too. There are filters map
and default
.
map_name: "{{ ec2_facts.instances | map(attribute='tags.Name') | map('default', 'foobar')|list }}"
That's what I needed! I can manipulate the list like I wanted now! I looked up defaults in ansible and did not see this command. Thanks a lot.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for bringing up an interesting puzzle.
My solution (without analyzing why you are doing and what) is:
It uses
select
filter which passes only those element of the list which are match for an argument. I pass 'defined' filter to reject all undefined elements.I hope this will help. Anyway, nice puzzle, thanks.