(Backport) ec2_instance, ebs_optimized not sub-option of network (#48467)

* ec2_instance: ebs_optimized is not sub-option of 'network' (#48341)

* ebs_optimized is not suboption of 'network'

* Add Shaps as ec2_instance maintainer

* Added workaround-backward compatible check for ebs_optimized

* Added ebs_optimized test

* CI fixes, dynamic select of ENA-enabled AMI

(cherry picked from commit b7d9feb7dc)

* Added changlog fragment for PR #48341

* fixed yaml errors in changelog
This commit is contained in:
Andrea Tartaglia 2018-11-13 03:23:31 +00:00 committed by Toshio Kuratomi
parent 483226cdce
commit 50e6361c3f
7 changed files with 66 additions and 5 deletions

1
.github/BOTMETA.yml vendored
View file

@ -48,6 +48,7 @@ files:
$modules/cloud/amazon/ec2_asg.py: $team_ansible s-hertel ryansb
$modules/cloud/amazon/ec2_group.py: $team_ansible
$modules/cloud/amazon/ec2_group_facts.py: willthames
$modules/cloud/amazon/ec2_instance.py: Shaps
$modules/cloud/amazon/ec2_instance_facts.py: willthames
$modules/cloud/amazon/ec2_key.py: $team_ansible
$modules/cloud/amazon/ec2_lc.py: $team_ansible

View file

@ -0,0 +1,2 @@
bugfixes:
- "ec2_instance: - Fixed issue where ebs_optimized was considered sub-option of the network parameter. (https://github.com/ansible/ansible/issues/48159)"

View file

@ -1054,7 +1054,10 @@ def build_top_level_options(params):
spec['CreditSpecification'] = {'CpuCredits': params.get('cpu_credit_specification')}
if params.get('tenancy') is not None:
spec['Placement'] = {'Tenancy': params.get('tenancy')}
if (params.get('network') or {}).get('ebs_optimized') is not None:
if params.get('ebs_optimized') is not None:
spec['EbsOptimized'] = params.get('ebs_optimized')
elif (params.get('network') or {}).get('ebs_optimized') is not None:
# Backward compatibility for workaround described in https://github.com/ansible/ansible/issues/48159
spec['EbsOptimized'] = params['network'].get('ebs_optimized')
if params.get('instance_initiated_shutdown_behavior'):
spec['InstanceInitiatedShutdownBehavior'] = params.get('instance_initiated_shutdown_behavior')
@ -1516,6 +1519,9 @@ def main():
)
if module.params.get('network'):
if 'ebs_optimized' in module.params['network']:
module.deprecate("network.ebs_optimized is deprecated."
"Use the top level ebs_optimized parameter instead", 2.9)
if module.params.get('network').get('interfaces'):
if module.params.get('security_group'):
module.fail_json(msg="Parameter network.interfaces can't be used with security_group")
@ -1565,7 +1571,7 @@ def main():
module.params['filters'] = filters
if module.params.get('cpu_options') and not module.botocore_at_least('1.10.16'):
module.fail_json(msg="cpu_options is only supported with botocore >= 1.10.16")
module.fail_json(msg="cpu_options is only supported with botocore >= 1.10.16")
existing_matches = find_instances(ec2, filters=module.params.get('filters'))
changed = False

View file

@ -18,3 +18,19 @@ ec2_ami_image:
us-east-2: ami-9cbf9bf9
us-west-1: ami-7c280d1c
us-west-2: ami-0c2aba6c
# We need to use ENA enabled AMIs to get EBS optimized instances.
ec2_ebs_optimized_ami_image:
ap-northeast-1: ami-00f9d04b3b3092052
ap-northeast-2: ami-0c764df09c35858b8
ap-south-1: ami-00796998f258969fd
ap-southeast-1: ami-085fd1bd447be68e8
ap-southeast-2: ami-0b8dea0e70b969adc
ca-central-1: ami-05cac140c6a1fb960
eu-central-1: ami-02ea8f348fa28c108
eu-west-1: ami-0a5e707736615003c
eu-west-2: ami-017b0e29fac27906b
sa-east-1: ami-0160a8b6087883cb6
us-east-1: ami-013be31976ca2c322
us-east-2: ami-0350c5670171b5391
us-west-1: ami-01beb64058d271bc4
us-west-2: ami-061e7ebbc234015fe

View file

@ -0,0 +1,34 @@
- name: set connection information for all tasks
set_fact:
aws_connection_info: &aws_connection_info
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
security_token: "{{ security_token }}"
region: "{{ aws_region }}"
no_log: true
- name: Make EBS optimized instance in the testing subnet of the test VPC
ec2_instance:
name: "{{ resource_prefix }}-test-ebs-optimized-instance-in-vpc"
image_id: "{{ ec2_ebs_optimized_ami_image[aws_region] }}"
tags:
TestId: "{{ resource_prefix }}"
security_groups: "{{ sg.group_id }}"
vpc_subnet_id: "{{ testing_subnet_b.subnet.id }}"
ebs_optimized: true
instance_type: t3.nano
<<: *aws_connection_info
register: ebs_opt_in_vpc
- name: Get ec2 instance facts
ec2_instance_facts:
filters:
"tag:Name": "{{ resource_prefix }}-test-ebs-optimized-instance-in-vpc"
"instance-state-name": "running"
<<: *aws_connection_info
register: ebs_opt_instance_fact
- name: Assert instance is ebs_optimized
assert:
that:
- "{{ ebs_opt_instance_fact.instances.0.ebs_optimized }}"

View file

@ -96,6 +96,8 @@
- include_tasks: block_devices.yml
- include_tasks: default_vpc_tests.yml
- include_tasks: iam_instance_role.yml
- include_tasks: checkmode_tests.yml
- include_tasks: ebs_optimized.yml
# ============================================================

View file

@ -13,7 +13,7 @@
security_token: "{{ security_token }}"
region: "{{ aws_region }}"
no_log: True
- name: Include vars file in roles/ec2_instance/defaults/main.yml
include_vars:
file: 'roles/ec2_instance/defaults/main.yml'
@ -31,8 +31,8 @@
register: ec2_instance_cpu_options_creation
ignore_errors: yes
- name: check that graceful error message is returned when creation with cpu_options and old botocore
- name: check that graceful error message is returned when creation with cpu_options and old botocore
assert:
that:
- ec2_instance_cpu_options_creation.failed
- 'ec2_instance_cpu_options_creation.msg == "cpu_options is only supported with botocore >= 1.10.16"'
- 'ec2_instance_cpu_options_creation.msg == "cpu_options is only supported with botocore >= 1.10.16"'