Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ec2_instance should still return instance details when instances already exist #963

Closed
1 task done
nethershaw opened this issue Aug 10, 2022 · 6 comments · Fixed by #964
Closed
1 task done

ec2_instance should still return instance details when instances already exist #963

nethershaw opened this issue Aug 10, 2022 · 6 comments · Fixed by #964
Labels
bug This issue/PR relates to a bug has_pr module module plugins plugin (any type) python3

Comments

@nethershaw
Copy link
Contributor

nethershaw commented Aug 10, 2022

Summary

I am duplicating issue #859 because it was incorrectly closed.

Idempotency -- the core design pattern and expectation on which Ansible is built -- requires that the module's return data be complete and consistent whether a change occurs or not. Any instances that matched filters passed to the module because they already exist must be included in the module's instances return key.

It is an anti-pattern to suggest inserting a second task to cover a fault in idempotency of the first, especially after breaking the expectation set by the original "ec2" module. In Linux design philosophy, any such breaking change is automatically a bug.

Issue Type

Bug Report

Component Name

ec2_instance

Ansible Version

$ ansible --version
ansible [core 2.13.2]
  config file = /home/mvaughn/Documents/git/ansible/ansible.cfg
  configured module search path = ['/home/mvaughn/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.10/site-packages/ansible
  ansible collection location = /home/mvaughn/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/lib/python-exec/python3.10/ansible
  python version = 3.10.5 (main, Jun 30 2022, 16:31:10) [GCC 11.3.0]
  jinja version = 3.1.2
  libyaml = True

Collection Versions

$ ansible-galaxy collection list
# /usr/lib/python3.10/site-packages/ansible_collections
Collection                    Version
----------------------------- -------
amazon.aws                    3.3.1  
ansible.netcommon             3.0.1  
ansible.posix                 1.4.0  
ansible.utils                 2.6.1  
ansible.windows               1.10.0 
arista.eos                    5.0.1  
awx.awx                       21.2.0 
azure.azcollection            1.13.0 
check_point.mgmt              2.3.0  
chocolatey.chocolatey         1.3.0  
cisco.aci                     2.2.0  
cisco.asa                     3.1.0                     
cisco.dnac                    6.5.0  
cisco.intersight              1.0.19 
cisco.ios                     3.2.0  
cisco.iosxr                   3.2.0  
cisco.ise                     2.5.0  
cisco.meraki                  2.10.0 
cisco.mso                     2.0.0  
cisco.nso                     1.0.3  
cisco.nxos                    3.1.0                                                                                                                                                                                                                                                                                                                                                           
cisco.ucs                     1.8.0  
cloud.common                  2.1.2  
cloudscale_ch.cloud           2.2.2  
community.aws                 3.4.0  
community.azure               1.1.0  
community.ciscosmb            1.0.5  
community.crypto              2.4.0  
community.digitalocean        1.21.0 
community.dns                 2.2.1  
community.docker              2.7.0  
community.fortios             1.0.0  
community.general             5.3.0  
community.google              1.0.0  
community.grafana             1.5.0  
community.hashi_vault         3.0.0  
community.hrobot              1.4.0  
community.libvirt             1.1.0  
community.mongodb             1.4.1  
community.mysql               3.3.0  
community.network             4.0.1  
community.okd                 2.2.0  
community.postgresql          2.1.5  
community.proxysql            1.4.0  
community.rabbitmq            1.2.1  
community.routeros            2.1.0  
community.sap                 1.0.0  
community.sap_libs            1.1.0  
community.skydive             1.0.0  
community.sops                1.2.3  
community.vmware              2.7.0  
community.windows             1.10.0 
community.zabbix              1.7.0  
containers.podman             1.9.4  
cyberark.conjur               1.1.0  
cyberark.pas                  1.0.14 
dellemc.enterprise_sonic      1.1.1  
dellemc.openmanage            5.5.0  
dellemc.os10                  1.1.1  
dellemc.os6                   1.0.7  
dellemc.os9                   1.0.4  
f5networks.f5_modules         1.18.0 
fortinet.fortimanager         2.1.5  
fortinet.fortios              2.1.6  
frr.frr                       2.0.0  
gluster.gluster               1.0.2  
google.cloud                  1.0.2  
hetzner.hcloud                1.8.1  
hpe.nimble                    1.1.4  
ibm.qradar                    2.0.0  
infinidat.infinibox           1.3.3  
infoblox.nios_modules         1.3.0  
inspur.sm                     2.0.0  
junipernetworks.junos         3.1.0  
kubernetes.core               2.3.2  
mellanox.onyx                 1.0.0  
netapp.aws                    21.7.0 
netapp.azure                  21.10.0
netapp.cloudmanager           21.18.0
netapp.elementsw              21.7.0 
netapp.ontap                  21.20.0
netapp.storagegrid            21.10.0
netapp.um_info                21.8.0 
netapp_eseries.santricity     1.3.0  
netbox.netbox                 3.7.1  
ngine_io.cloudstack           2.2.4  
ngine_io.exoscale             1.0.0  
ngine_io.vultr                1.1.2  
openstack.cloud               1.8.0
openvswitch.openvswitch       2.1.0  
ovirt.ovirt                   2.1.0  
purestorage.flasharray        1.13.0 
purestorage.flashblade        1.9.0  
purestorage.fusion            1.0.2  
sensu.sensu_go                1.13.1 
servicenow.servicenow         1.0.6  
splunk.es                     2.0.0  
t_systems_mms.icinga_director 1.30.0 
theforeman.foreman            3.4.0  
vmware.vmware_rest            2.2.0  
vyos.vyos                     3.0.1  
wti.remote                    1.0.4

# /home/mvaughn/.ansible/collections/ansible_collections
Collection           Version
-------------------- -------
amazon.aws           4.1.0  
ansible.netcommon    1.1.2  
ansible.posix        1.3.0  
community.aws        4.0.0  
community.kubernetes 2.0.0  
kubernetes.core      2.3.2

AWS SDK versions

$ pip show boto boto3 botocore
Name: boto
Version: 2.49.0
Summary: Amazon Web Services Library
Home-page: https://github.com/boto/boto/
Author: Mitch Garnaat
Author-email: [email protected]
License: MIT
Location: /usr/lib/python3.10/site-packages
Requires: 
Required-by: 
---
Name: boto3
Version: 1.21.36
Summary: The AWS SDK for Python
Home-page: https://github.com/boto/boto3
Author: Amazon Web Services
Author-email: 
License: Apache License 2.0
Location: /home/mvaughn/.local/lib/python3.10/site-packages
Requires: s3transfer, jmespath, botocore
Required-by: 
---
Name: botocore
Version: 1.24.36
Summary: Low-level, data-driven core of boto 3.
Home-page: https://github.com/boto/botocore
Author: Amazon Web Services
Author-email: 
License: Apache License 2.0
Location: /home/mvaughn/.local/lib/python3.10/site-packages
Requires: jmespath, urllib3, python-dateutil
Required-by: s3transfer, boto3, awscli

Configuration

$ ansible-config dump --only-changed
CACHE_PLUGIN(/home/mvaughn/Documents/git/ansible/ansible.cfg) = redis
CACHE_PLUGIN_CONNECTION(/home/mvaughn/Documents/git/ansible/ansible.cfg) = localhost:6379:0
CALLBACKS_ENABLED(/home/mvaughn/Documents/git/ansible/ansible.cfg) = ['ansible.posix.profile_tasks']
DEFAULT_FORKS(/home/mvaughn/Documents/git/ansible/ansible.cfg) = 32
DEFAULT_GATHER_TIMEOUT(/home/mvaughn/Documents/git/ansible/ansible.cfg) = 30
DEFAULT_LOG_PATH(/home/mvaughn/Documents/git/ansible/ansible.cfg) = /var/log/ansible.log
DEFAULT_LOOKUP_PLUGIN_PATH(/home/mvaughn/Documents/git/ansible/ansible.cfg) = ['/home/mvaughn/.ansible/plugins/lookup', '/home/mvaughn/Documents/git/ansible/plugins/lookup', '/usr/share/ansible/plugins/lookup']
DEFAULT_MANAGED_STR(/home/mvaughn/Documents/git/ansible/ansible.cfg) = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
DEFAULT_REMOTE_USER(/home/mvaughn/Documents/git/ansible/ansible.cfg) = ansible
HOST_KEY_CHECKING(/home/mvaughn/Documents/git/ansible/ansible.cfg) = False
INVENTORY_ENABLED(/home/mvaughn/Documents/git/ansible/ansible.cfg) = ['amazon.aws.aws_ec2', 'host_list', 'script', 'auto', 'yaml', 'ini', 'toml']

OS / Environment

Gentoo Linux

Steps to Reproduce

- Launch an instance that already exists.

Expected Results

- Module return includes `[instances]`.

Actual Results

- Module return does not include `[instances]`.

Code of Conduct

  • I agree to follow the Ansible Code of Conduct
@ansibullbot
Copy link

Files identified in the description:

If these files are inaccurate, please update the component name section of the description or use the !component bot command.

click here for bot help

@ansibullbot
Copy link

@ansibullbot ansibullbot added bug This issue/PR relates to a bug module module needs_triage plugins plugin (any type) python3 labels Aug 10, 2022
@tremble tremble changed the title ec2_instance module not idempotent if instances list not returned when instances already exist ec2_instance should still return instance details when instances already exist Aug 11, 2022
@tremble
Copy link
Contributor

tremble commented Aug 11, 2022

@nethershaw,

Thanks for taking the time to open this issue. I personally prefer to consistently return details of the resource, even when no changes are made. I've tweaked the subject line a little, to reflect the desired change as this makes it easier for other people to find the issue.

goneri pushed a commit that referenced this issue Sep 20, 2022
elb_application_lb - support alb attributes

SUMMARY

Support modifying different alb specific attributes
Fixes #571
Depends-On #696

ISSUE TYPE

Feature Pull Request

COMPONENT NAME
elb_application_lb

Reviewed-by: Jill R <None>
Reviewed-by: Markus Bergholz <[email protected]>
Reviewed-by: Alina Buzachis <None>
Reviewed-by: Joseph Torcasso <None>

This commit was initially merged in https://github.com/ansible-collections/community.aws
See: ansible-collections/community.aws@85bfce4
GomathiselviS pushed a commit to GomathiselviS/amazon.aws that referenced this issue Sep 20, 2022
elb_application_lb - support alb attributes

SUMMARY

Support modifying different alb specific attributes
Fixes ansible-collections#571
Depends-On ansible-collections#696

ISSUE TYPE

Feature Pull Request

COMPONENT NAME
elb_application_lb

Reviewed-by: Jill R <None>
Reviewed-by: Markus Bergholz <[email protected]>
Reviewed-by: Alina Buzachis <None>
Reviewed-by: Joseph Torcasso <None>

This commit was initially merged in https://github.com/ansible-collections/community.aws
See: ansible-collections/community.aws@85bfce4
@daraul
Copy link

daraul commented Dec 21, 2022

So, is there a recommended workaround for the moment? I've just taught myself how to debug tasks because I expected this pattern to work, when it didn't.

The documentation even leads me to believe that the 'instances' key would be present if 'wait == true' -- it isn't:

Screenshot 2022-12-21 at 8 22 06 AM

@tremble
Copy link
Contributor

tremble commented Dec 21, 2022

So, is there a recommended workaround for the moment? I've just taught myself how to debug tasks because I expected this pattern to work, when it didn't.

ec2_instance_info:
https://docs.ansible.com/ansible/devel/collections/amazon/aws/ec2_instance_info_module.html

@daraul
Copy link

daraul commented Dec 21, 2022

FTR: this works, but shouldn't be necessary:

    - name: Create EC2 instances
      amazon.aws.ec2_instance:
        instance_type: t2.nano
        state: running
        image:
          id: ami-f2b39792
        region: us-west-1
        name: myinstance
        exact_count: 2

    - name: Gather information about EC2 instances
      amazon.aws.ec2_instance_info:
        region: us-west-1
        filters:
          "tag:Name": myinstance
          instance-state-name: ["running"]
      register: ec2_instances

softwarefactory-project-zuul bot pushed a commit that referenced this issue Feb 24, 2023
fix incomplete enforce_count() return values

SUMMARY

This is the Ansible way.
Since a call to enforce_count() requires that a call to find_instances() has already been made, the information required to populate the instances return key is already held by the variable existing_matches. There are zero use cases where it makes sense not to output this information; if I want exactly one such instance and an existing instance matches the filter, I definitely always want to know its details.

Fixes #963, #859
ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

ec2_instance
ADDITIONAL INFORMATION


See linked issues.

Before:
{                                                                                                                                                                                                                                                                                                                                                                          
    "changed": false,                                                                                                                                                                                                                                                                                                                                                                         
    "invocation": {                                                                                                                                                                                                                                                                                                                                                                           
        "module_args": {                                                                                                                                                                                                                                                                                                                                                                      
            "availability_zone": null,                                                                                                                                                                                                                                                                                                                                                        
            "aws_access_key": null,                                                                                                                                                                                                                                                                                                                                                           
            "aws_ca_bundle": null,                                                                                                                                                                                                                                                                                                                                                            
            "aws_config": null,                                                                                                                                                                                                                                                                                                                                                               
            "aws_secret_key": null,                                                                                                                                                                                                                                                                                                                                                           
            "count": null,                                                                                                                                                                                                                                                                                                                                                                    
            "cpu_credit_specification": null,                                                                                                                                                                                                                                                                                                                                                 
            "cpu_options": null,                                                                                                                                                                                                                                                                                                                                                              
            "debug_botocore_endpoint_logs": false,                                                                                                                                                                                                                                                                                                                                            
            "detailed_monitoring": false,                                                                                                                                                                                                                                                                                                                                                     
            "ebs_optimized": true,                                                                                                                                                                                                                                                                                                                                                            
            "ec2_url": null,                                                                                                                                                                                                                                                                                                                                                                  
            "exact_count": 1,                                                                                                                                                                                                                                                                                                                                                                 
            "filters": {                                                                                                                                                                                                                                                                                                                                                                      
                "tag:Name": "something",                                                                                                                                                                                                                                                                                                                                             
                "tag:env": "prod"                                                                                                                                                                                                                                                                                                                                                             
            },
            "image": null,                                                                                                                                                                                                                                                                                                                                                                    
            "image_id": "REDACTED",                                                                                                                                                                                                                                                                                                                                              
            "instance_ids": [],                                                                                                                                                                                                                                                                                                                                                               
            "instance_initiated_shutdown_behavior": null,                                                                                                                                                                                                                                                                                                                                     
            "instance_role": "REDACTED",                                                                                                                                                                                                                                                                                                                                                       
            "instance_type": "m5.2xlarge",                                                                                                                                                                                                                                                                                                                                                    
            "key_name": "REDACTED",                                                                                                                                                                                                                                                                                                                                                          
            "launch_template": null,                                                                                                                                                                                                                                                                                                                                                          
            "metadata_options": null,                                                                                                                                                                                                                                                                                                                                                         
            "name": null,                                                                                                                                                                                                                                                                                                                                                                     
            "network": {                                                                                                                                                                                                                                                                                                                                                                      
                "source_dest_check": true                                                                                                                                                                                                                                                                                                                                                     
            },                                                                                                                                                                                                                                                                                                                                                                                
            "placement_group": null,                                                                                                                                                                                                                                                                                                                                                          
            "profile": null,                                                                                                                                                                                                                                                                                                                                                                  
            "purge_tags": false,                                                                                                                                                                                                                                                                                                                                                              
            "region": "us-west-2",                                                                                                                                                                                                                                                                                                                                                            
            "security_group": null,                                                                                                                                                                                                                                                                                                                                                           
            "security_groups": [                                                                                                                                                                                                                                                                                                                                                              
                "default"                                                                                                                                                                                                                                                                                                                                                                     
            ],                                                                                                                                                                                                                                                                                                                                                                                
            "security_token": null,                                                                                                                                                                                                                                                                                                                                                           
            "state": "present",                                                                                                                                                                
            "tags": {                                                                                                                                                                                                                                                                                                                                                                         
                "Name": "something",                                                                                                                                                                                                                                                                                                                                                         
                "env": "prod",
            },
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": "REDACTED",
            "validate_certs": true,
            "volumes": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 10,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 100,
                        "volume_type": "gp3"
                    }
                }
            ],
            "vpc_subnet_id": "REDACTED",
            "wait": true,
            "wait_timeout": 300
        }
    },
    "msg": "1 instances already running, nothing to do."
}
After:
{                                                                                                                                                                                                                                                                                                                                                                          
    "changed": false,                                                                                                                                                                                                                                                                                                                                                                         
    "instance_ids": [                                                                                                                                                                                                                                                                                                                                                                         
        "REDACTED"                                                                                                                                                                                                                                                                                                                                                                 
    ],
    "instances": [
        {
            "ami_launch_index": 0,
            "architecture": "x86_64",
            "block_device_mappings": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                }
            ],
            "capacity_reservation_specification": {
                "capacity_reservation_preference": "open"
            },
            "client_token": "REDACTED",
            "cpu_options": {
                "core_count": 4,
                "threads_per_core": 2
            },
            "ebs_optimized": true,
            "ena_support": true,
            "enclave_options": {
                "enabled": false
            },
            "hibernation_options": {
                "configured": false
            },
            "hypervisor": "xen",
            "iam_instance_profile": {
                "arn": "REDACTED",
                "id": "REDACTED"
            },
            "image_id": "REDACTED",
            "instance_id": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_time": "2022-08-10T19:50:23+00:00",
            "maintenance_options": {
                "auto_recovery": "default"
            },
            "metadata_options": {
                "http_endpoint": "enabled",
                "http_protocol_ipv6": "disabled",
                "http_put_response_hop_limit": 1,
                "http_tokens": "optional",
                "instance_metadata_tags": "disabled",
                "state": "applied"
            },
            "monitoring": {
                "state": "disabled"
            },
            "network_interfaces": [
                {
                    "attachment": {
                        "attach_time": "2022-08-10T19:50:23+00:00",
                        "attachment_id": "REDACTED",
                        "delete_on_termination": true,
                        "device_index": 0,
                        "network_card_index": 0,
                        "status": "attached"
                    },
                    "description": "",
                    "groups": [
                        {
                            "group_id": "REDACTED",
                            "group_name": "REDACTED"
                        }
                    ],
                    "interface_type": "interface",
                    "ipv6_addresses": [],
                    "mac_address": "REDACTED",
                    "network_interface_id": "REDACTED",
                    "owner_id": "REDACTED",
                    "private_dns_name": "REDACTED",
                    "private_ip_address": "REDACTED",
                    "private_ip_addresses": [
                        {
                            "primary": true,
                            "private_dns_name": "REDACTED",
                            "private_ip_address": "REDACTED"
                        }
                    ],
                    "source_dest_check": true,
                    "status": "in-use",
                    "subnet_id": "REDACTED",
                    "vpc_id": "REDACTED"
                }
            ],
            "placement": {
                "availability_zone": "us-west-2a",
                "group_name": "",
                "tenancy": "default"
            },
            "platform_details": "Linux/UNIX",
            "private_dns_name": "REDACTED",
            "private_dns_name_options": {
                "enable_resource_name_dns_a_record": false,
                "enable_resource_name_dns_aaaa_record": false,
                "hostname_type": "ip-name"
            },
            "private_ip_address": "REDACTED",
            "product_codes": [],
            "public_dns_name": "",
            "root_device_name": "/dev/sda1",
            "root_device_type": "ebs",
            "security_groups": [
                {
                    "group_id": "REDACTED",
                    "group_name": "REDACTED"
                }
            ],
            "source_dest_check": true,
            "state": {
                "code": 16,
                "name": "running"
            },
            "state_transition_reason": "",
            "subnet_id": "REDACTED",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "usage_operation": "RunInstances",
            "usage_operation_update_time": "2022-08-10T19:50:23+00:00",
            "virtualization_type": "hvm",
            "vpc_id": "REDACTED"
        }
    ],
    "invocation": {                                                                                                                                                                                                                                                                                                                                                                           
        "module_args": {                                                                                                                                                                                                                                                                                                                                                                      
            "availability_zone": null,                                                                                                                                                                                                                                                                                                                                                        
            "aws_access_key": null,                                                                                                                                                                                                                                                                                                                                                           
            "aws_ca_bundle": null,                                                                                                                                                                                                                                                                                                                                                            
            "aws_config": null,                                                                                                                                                                                                                                                                                                                                                               
            "aws_secret_key": null,                                                                                                                                                                                                                                                                                                                                                           
            "count": null,                                                                                                                                                                                                                                                                                                                                                                    
            "cpu_credit_specification": null,                                                                                                                                                                                                                                                                                                                                                 
            "cpu_options": null,                                                                                                                                                                                                                                                                                                                                                              
            "debug_botocore_endpoint_logs": false,                                                                                                                                                                                                                                                                                                                                            
            "detailed_monitoring": false,                                                                                                                                                                                                                                                                                                                                                     
            "ebs_optimized": true,                                                                                                                                                                                                                                                                                                                                                            
            "ec2_url": null,                                                                                                                                                                                                                                                                                                                                                                  
            "exact_count": 1,                                                                                                                                                                                                                                                                                                                                                                 
            "filters": {                                                                                                                                                                                                                                                                                                                                                                      
                "tag:Name": "something",                                                                                                                                                                                                                                                                                                                                             
                "tag:env": "prod"                                                                                                                                                                                                                                                                                                                                                             
            },
            "image": null,                                                                                                                                                                                                                                                                                                                                                                    
            "image_id": "REDACTED",                                                                                                                                                                                                                                                                                                                                              
            "instance_ids": [],                                                                                                                                                                                                                                                                                                                                                               
            "instance_initiated_shutdown_behavior": null,                                                                                                                                                                                                                                                                                                                                     
            "instance_role": "REDACTED",                                                                                                                                                                                                                                                                                                                                                       
            "instance_type": "m5.2xlarge",                                                                                                                                                                                                                                                                                                                                                    
            "key_name": "REDACTED",                                                                                                                                                                                                                                                                                                                                                          
            "launch_template": null,                                                                                                                                                                                                                                                                                                                                                          
            "metadata_options": null,                                                                                                                                                                                                                                                                                                                                                         
            "name": null,                                                                                                                                                                                                                                                                                                                                                                     
            "network": {                                                                                                                                                                                                                                                                                                                                                                      
                "source_dest_check": true                                                                                                                                                                                                                                                                                                                                                     
            },                                                                                                                                                                                                                                                                                                                                                                                
            "placement_group": null,                                                                                                                                                                                                                                                                                                                                                          
            "profile": null,                                                                                                                                                                                                                                                                                                                                                                  
            "purge_tags": false,                                                                                                                                                                                                                                                                                                                                                              
            "region": "us-west-2",                                                                                                                                                                                                                                                                                                                                                            
            "security_group": null,                                                                                                                                                                                                                                                                                                                                                           
            "security_groups": [                                                                                                                                                                                                                                                                                                                                                              
                "default"                                                                                                                                                                                                                                                                                                                                                                     
            ],                                                                                                                                                                                                                                                                                                                                                                                
            "security_token": null,                                                                                                                                                                                                                                                                                                                                                           
            "state": "present",                                                                                                                                                                
            "tags": {                                                                                                                                                                                                                                                                                                                                                                         
                "Name": "something",                                                                                                                                                                                                                                                                                                                                                         
                "env": "prod",
            },
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": "REDACTED",
            "validate_certs": true,
            "volumes": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 10,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 100,
                        "volume_type": "gp3"
                    }
                }
            ],
            "vpc_subnet_id": "REDACTED",
            "wait": true,
            "wait_timeout": 300
        }
    },
    "msg": "1 instances already running, nothing to do."
}

Reviewed-by: Alina Buzachis
Reviewed-by: Mark Chappell
tremble pushed a commit to tremble/amazon.aws that referenced this issue Feb 24, 2023
fix incomplete enforce_count() return values

SUMMARY

This is the Ansible way.
Since a call to enforce_count() requires that a call to find_instances() has already been made, the information required to populate the instances return key is already held by the variable existing_matches. There are zero use cases where it makes sense not to output this information; if I want exactly one such instance and an existing instance matches the filter, I definitely always want to know its details.

Fixes ansible-collections#963, ansible-collections#859
ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME

ec2_instance
ADDITIONAL INFORMATION

See linked issues.

Before:
{
    "changed": false,
    "invocation": {
        "module_args": {
            "availability_zone": null,
            "aws_access_key": null,
            "aws_ca_bundle": null,
            "aws_config": null,
            "aws_secret_key": null,
            "count": null,
            "cpu_credit_specification": null,
            "cpu_options": null,
            "debug_botocore_endpoint_logs": false,
            "detailed_monitoring": false,
            "ebs_optimized": true,
            "ec2_url": null,
            "exact_count": 1,
            "filters": {
                "tag:Name": "something",
                "tag:env": "prod"
            },
            "image": null,
            "image_id": "REDACTED",
            "instance_ids": [],
            "instance_initiated_shutdown_behavior": null,
            "instance_role": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_template": null,
            "metadata_options": null,
            "name": null,
            "network": {
                "source_dest_check": true
            },
            "placement_group": null,
            "profile": null,
            "purge_tags": false,
            "region": "us-west-2",
            "security_group": null,
            "security_groups": [
                "default"
            ],
            "security_token": null,
            "state": "present",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": "REDACTED",
            "validate_certs": true,
            "volumes": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 10,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 100,
                        "volume_type": "gp3"
                    }
                }
            ],
            "vpc_subnet_id": "REDACTED",
            "wait": true,
            "wait_timeout": 300
        }
    },
    "msg": "1 instances already running, nothing to do."
}
After:
{
    "changed": false,
    "instance_ids": [
        "REDACTED"
    ],
    "instances": [
        {
            "ami_launch_index": 0,
            "architecture": "x86_64",
            "block_device_mappings": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                }
            ],
            "capacity_reservation_specification": {
                "capacity_reservation_preference": "open"
            },
            "client_token": "REDACTED",
            "cpu_options": {
                "core_count": 4,
                "threads_per_core": 2
            },
            "ebs_optimized": true,
            "ena_support": true,
            "enclave_options": {
                "enabled": false
            },
            "hibernation_options": {
                "configured": false
            },
            "hypervisor": "xen",
            "iam_instance_profile": {
                "arn": "REDACTED",
                "id": "REDACTED"
            },
            "image_id": "REDACTED",
            "instance_id": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_time": "2022-08-10T19:50:23+00:00",
            "maintenance_options": {
                "auto_recovery": "default"
            },
            "metadata_options": {
                "http_endpoint": "enabled",
                "http_protocol_ipv6": "disabled",
                "http_put_response_hop_limit": 1,
                "http_tokens": "optional",
                "instance_metadata_tags": "disabled",
                "state": "applied"
            },
            "monitoring": {
                "state": "disabled"
            },
            "network_interfaces": [
                {
                    "attachment": {
                        "attach_time": "2022-08-10T19:50:23+00:00",
                        "attachment_id": "REDACTED",
                        "delete_on_termination": true,
                        "device_index": 0,
                        "network_card_index": 0,
                        "status": "attached"
                    },
                    "description": "",
                    "groups": [
                        {
                            "group_id": "REDACTED",
                            "group_name": "REDACTED"
                        }
                    ],
                    "interface_type": "interface",
                    "ipv6_addresses": [],
                    "mac_address": "REDACTED",
                    "network_interface_id": "REDACTED",
                    "owner_id": "REDACTED",
                    "private_dns_name": "REDACTED",
                    "private_ip_address": "REDACTED",
                    "private_ip_addresses": [
                        {
                            "primary": true,
                            "private_dns_name": "REDACTED",
                            "private_ip_address": "REDACTED"
                        }
                    ],
                    "source_dest_check": true,
                    "status": "in-use",
                    "subnet_id": "REDACTED",
                    "vpc_id": "REDACTED"
                }
            ],
            "placement": {
                "availability_zone": "us-west-2a",
                "group_name": "",
                "tenancy": "default"
            },
            "platform_details": "Linux/UNIX",
            "private_dns_name": "REDACTED",
            "private_dns_name_options": {
                "enable_resource_name_dns_a_record": false,
                "enable_resource_name_dns_aaaa_record": false,
                "hostname_type": "ip-name"
            },
            "private_ip_address": "REDACTED",
            "product_codes": [],
            "public_dns_name": "",
            "root_device_name": "/dev/sda1",
            "root_device_type": "ebs",
            "security_groups": [
                {
                    "group_id": "REDACTED",
                    "group_name": "REDACTED"
                }
            ],
            "source_dest_check": true,
            "state": {
                "code": 16,
                "name": "running"
            },
            "state_transition_reason": "",
            "subnet_id": "REDACTED",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "usage_operation": "RunInstances",
            "usage_operation_update_time": "2022-08-10T19:50:23+00:00",
            "virtualization_type": "hvm",
            "vpc_id": "REDACTED"
        }
    ],
    "invocation": {
        "module_args": {
            "availability_zone": null,
            "aws_access_key": null,
            "aws_ca_bundle": null,
            "aws_config": null,
            "aws_secret_key": null,
            "count": null,
            "cpu_credit_specification": null,
            "cpu_options": null,
            "debug_botocore_endpoint_logs": false,
            "detailed_monitoring": false,
            "ebs_optimized": true,
            "ec2_url": null,
            "exact_count": 1,
            "filters": {
                "tag:Name": "something",
                "tag:env": "prod"
            },
            "image": null,
            "image_id": "REDACTED",
            "instance_ids": [],
            "instance_initiated_shutdown_behavior": null,
            "instance_role": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_template": null,
            "metadata_options": null,
            "name": null,
            "network": {
                "source_dest_check": true
            },
            "placement_group": null,
            "profile": null,
            "purge_tags": false,
            "region": "us-west-2",
            "security_group": null,
            "security_groups": [
                "default"
            ],
            "security_token": null,
            "state": "present",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": "REDACTED",
            "validate_certs": true,
            "volumes": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 10,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 100,
                        "volume_type": "gp3"
                    }
                }
            ],
            "vpc_subnet_id": "REDACTED",
            "wait": true,
            "wait_timeout": 300
        }
    },
    "msg": "1 instances already running, nothing to do."
}

Reviewed-by: Alina Buzachis
Reviewed-by: Mark Chappell
tremble added a commit that referenced this issue Feb 27, 2023
SUMMARY

This is the Ansible way.
Since a call to enforce_count() requires that a call to find_instances() has already been made, the information required to populate the instances return key is already held by the variable existing_matches. There are zero use cases where it makes sense not to output this information; if I want exactly one such instance and an existing instance matches the filter, I definitely always want to know its details.

Fixes #963, #859

ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME

ec2_instance

ADDITIONAL INFORMATION

See linked issues.

Before:
{
    "changed": false,
    "invocation": {
        "module_args": {
            "availability_zone": null,
            "aws_access_key": null,
            "aws_ca_bundle": null,
            "aws_config": null,
            "aws_secret_key": null,
            "count": null,
            "cpu_credit_specification": null,
            "cpu_options": null,
            "debug_botocore_endpoint_logs": false,
            "detailed_monitoring": false,
            "ebs_optimized": true,
            "ec2_url": null,
            "exact_count": 1,
            "filters": {
                "tag:Name": "something",
                "tag:env": "prod"
            },
            "image": null,
            "image_id": "REDACTED",
            "instance_ids": [],
            "instance_initiated_shutdown_behavior": null,
            "instance_role": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_template": null,
            "metadata_options": null,
            "name": null,
            "network": {
                "source_dest_check": true
            },
            "placement_group": null,
            "profile": null,
            "purge_tags": false,
            "region": "us-west-2",
            "security_group": null,
            "security_groups": [
                "default"
            ],
            "security_token": null,
            "state": "present",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": "REDACTED",
            "validate_certs": true,
            "volumes": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 10,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 100,
                        "volume_type": "gp3"
                    }
                }
            ],
            "vpc_subnet_id": "REDACTED",
            "wait": true,
            "wait_timeout": 300
        }
    },
    "msg": "1 instances already running, nothing to do."
}
After:
{
    "changed": false,
    "instance_ids": [
        "REDACTED"
    ],
    "instances": [
        {
            "ami_launch_index": 0,
            "architecture": "x86_64",
            "block_device_mappings": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "attach_time": "2022-08-10T19:50:24+00:00",
                        "delete_on_termination": true,
                        "status": "attached",
                        "volume_id": "REDACTED"
                    }
                }
            ],
            "capacity_reservation_specification": {
                "capacity_reservation_preference": "open"
            },
            "client_token": "REDACTED",
            "cpu_options": {
                "core_count": 4,
                "threads_per_core": 2
            },
            "ebs_optimized": true,
            "ena_support": true,
            "enclave_options": {
                "enabled": false
            },
            "hibernation_options": {
                "configured": false
            },
            "hypervisor": "xen",
            "iam_instance_profile": {
                "arn": "REDACTED",
                "id": "REDACTED"
            },
            "image_id": "REDACTED",
            "instance_id": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_time": "2022-08-10T19:50:23+00:00",
            "maintenance_options": {
                "auto_recovery": "default"
            },
            "metadata_options": {
                "http_endpoint": "enabled",
                "http_protocol_ipv6": "disabled",
                "http_put_response_hop_limit": 1,
                "http_tokens": "optional",
                "instance_metadata_tags": "disabled",
                "state": "applied"
            },
            "monitoring": {
                "state": "disabled"
            },
            "network_interfaces": [
                {
                    "attachment": {
                        "attach_time": "2022-08-10T19:50:23+00:00",
                        "attachment_id": "REDACTED",
                        "delete_on_termination": true,
                        "device_index": 0,
                        "network_card_index": 0,
                        "status": "attached"
                    },
                    "description": "",
                    "groups": [
                        {
                            "group_id": "REDACTED",
                            "group_name": "REDACTED"
                        }
                    ],
                    "interface_type": "interface",
                    "ipv6_addresses": [],
                    "mac_address": "REDACTED",
                    "network_interface_id": "REDACTED",
                    "owner_id": "REDACTED",
                    "private_dns_name": "REDACTED",
                    "private_ip_address": "REDACTED",
                    "private_ip_addresses": [
                        {
                            "primary": true,
                            "private_dns_name": "REDACTED",
                            "private_ip_address": "REDACTED"
                        }
                    ],
                    "source_dest_check": true,
                    "status": "in-use",
                    "subnet_id": "REDACTED",
                    "vpc_id": "REDACTED"
                }
            ],
            "placement": {
                "availability_zone": "us-west-2a",
                "group_name": "",
                "tenancy": "default"
            },
            "platform_details": "Linux/UNIX",
            "private_dns_name": "REDACTED",
            "private_dns_name_options": {
                "enable_resource_name_dns_a_record": false,
                "enable_resource_name_dns_aaaa_record": false,
                "hostname_type": "ip-name"
            },
            "private_ip_address": "REDACTED",
            "product_codes": [],
            "public_dns_name": "",
            "root_device_name": "/dev/sda1",
            "root_device_type": "ebs",
            "security_groups": [
                {
                    "group_id": "REDACTED",
                    "group_name": "REDACTED"
                }
            ],
            "source_dest_check": true,
            "state": {
                "code": 16,
                "name": "running"
            },
            "state_transition_reason": "",
            "subnet_id": "REDACTED",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "usage_operation": "RunInstances",
            "usage_operation_update_time": "2022-08-10T19:50:23+00:00",
            "virtualization_type": "hvm",
            "vpc_id": "REDACTED"
        }
    ],
    "invocation": {
        "module_args": {
            "availability_zone": null,
            "aws_access_key": null,
            "aws_ca_bundle": null,
            "aws_config": null,
            "aws_secret_key": null,
            "count": null,
            "cpu_credit_specification": null,
            "cpu_options": null,
            "debug_botocore_endpoint_logs": false,
            "detailed_monitoring": false,
            "ebs_optimized": true,
            "ec2_url": null,
            "exact_count": 1,
            "filters": {
                "tag:Name": "something",
                "tag:env": "prod"
            },
            "image": null,
            "image_id": "REDACTED",
            "instance_ids": [],
            "instance_initiated_shutdown_behavior": null,
            "instance_role": "REDACTED",
            "instance_type": "m5.2xlarge",
            "key_name": "REDACTED",
            "launch_template": null,
            "metadata_options": null,
            "name": null,
            "network": {
                "source_dest_check": true
            },
            "placement_group": null,
            "profile": null,
            "purge_tags": false,
            "region": "us-west-2",
            "security_group": null,
            "security_groups": [
                "default"
            ],
            "security_token": null,
            "state": "present",
            "tags": {
                "Name": "something",
                "env": "prod",
            },
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": "REDACTED",
            "validate_certs": true,
            "volumes": [
                {
                    "device_name": "/dev/sda1",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdo",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 20,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdp",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 10,
                        "volume_type": "gp3"
                    }
                },
                {
                    "device_name": "/dev/xvdi",
                    "ebs": {
                        "delete_on_termination": true,
                        "encrypted": true,
                        "volume_size": 100,
                        "volume_type": "gp3"
                    }
                }
            ],
            "vpc_subnet_id": "REDACTED",
            "wait": true,
            "wait_timeout": 300
        }
    },
    "msg": "1 instances already running, nothing to do."
}

Reviewed-by: Alina Buzachis
Reviewed-by: Mark Chappell

Co-authored-by: Matt 'Archer' Vaughn <[email protected]>
abikouo pushed a commit to abikouo/amazon.aws that referenced this issue Sep 18, 2023
elb_application_lb - support alb attributes

SUMMARY

Support modifying different alb specific attributes
Fixes ansible-collections#571
Depends-On ansible-collections#696

ISSUE TYPE

Feature Pull Request

COMPONENT NAME
elb_application_lb

Reviewed-by: Jill R <None>
Reviewed-by: Markus Bergholz <[email protected]>
Reviewed-by: Alina Buzachis <None>
Reviewed-by: Joseph Torcasso <None>
abikouo pushed a commit to abikouo/amazon.aws that referenced this issue Sep 18, 2023
elb_application_lb - support alb attributes

SUMMARY

Support modifying different alb specific attributes
Fixes ansible-collections#571
Depends-On ansible-collections#696

ISSUE TYPE

Feature Pull Request

COMPONENT NAME
elb_application_lb

Reviewed-by: Jill R <None>
Reviewed-by: Markus Bergholz <[email protected]>
Reviewed-by: Alina Buzachis <None>
Reviewed-by: Joseph Torcasso <None>
abikouo pushed a commit to abikouo/amazon.aws that referenced this issue Oct 24, 2023
elb_application_lb - support alb attributes

SUMMARY

Support modifying different alb specific attributes
Fixes ansible-collections#571
Depends-On ansible-collections#696

ISSUE TYPE

Feature Pull Request

COMPONENT NAME
elb_application_lb

Reviewed-by: Jill R <None>
Reviewed-by: Markus Bergholz <[email protected]>
Reviewed-by: Alina Buzachis <None>
Reviewed-by: Joseph Torcasso <None>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug This issue/PR relates to a bug has_pr module module plugins plugin (any type) python3
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants