Skip to content

Commit

Permalink
add uptime parameter for ec2_instance_info module in minutes (ansible…
Browse files Browse the repository at this point in the history
…-collections#356)

* syncing module and tests for uptime

with tons of help from Yanis, we now have uptime in there

* updating pr with fixes from suggestions

adding to ansible-collections/community.aws#356 with comments from @tremble and @duderamos

* Create 356_add_minimum_uptime_parameter.yaml

adding changelog fragment per @gravesm suggestion

* Update 356_add_minimum_uptime_parameter.yaml

last comment from @tremble

Co-authored-by: Sean Cavanaugh <[email protected]>
  • Loading branch information
2 people authored and abikouo committed Sep 18, 2023
1 parent 32977cc commit 2dc4bab
Showing 1 changed file with 30 additions and 3 deletions.
33 changes: 30 additions & 3 deletions ec2_instance_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
required: false
default: {}
type: dict
minimum_uptime:
description:
- Minimum running uptime in minutes of instances. For example if I(uptime) is C(60) return all instances that have run more than 60 minutes.
required: false
aliases: ['uptime']
type: int
extends_documentation_fragment:
- amazon.aws.aws
Expand Down Expand Up @@ -66,6 +73,15 @@
filters:
instance-state-name: [ "shutting-down", "stopping", "stopped" ]
- name: Gather information about any instance with Name beginning with RHEL and an uptime of at least 60 minutes
community.aws.ec2_instance_info:
region: "{{ ec2_region }}"
uptime: 60
filters:
"tag:Name": "RHEL-*"
instance-state-name: [ "running"]
register: ec2_node_info
'''

RETURN = r'''
Expand Down Expand Up @@ -492,6 +508,8 @@
'''

import traceback
import datetime


try:
import boto3
Expand All @@ -509,6 +527,7 @@
def list_ec2_instances(connection, module):

instance_ids = module.params.get("instance_ids")
uptime = module.params.get('minimum_uptime')
filters = ansible_dict_to_boto3_filter_list(module.params.get("filters"))

try:
Expand All @@ -517,10 +536,17 @@ def list_ec2_instances(connection, module):
except ClientError as e:
module.fail_json_aws(e, msg="Failed to list ec2 instances")

# Get instances from reservations
instances = []
for reservation in reservations['Reservations']:
instances = instances + reservation['Instances']

if uptime:
timedelta = int(uptime) if uptime else 0
oldest_launch_time = datetime.datetime.utcnow() - datetime.timedelta(minutes=timedelta)
# Get instances from reservations
for reservation in reservations['Reservations']:
instances += [instance for instance in reservation['Instances'] if instance['LaunchTime'].replace(tzinfo=None) < oldest_launch_time]
else:
for reservation in reservations['Reservations']:
instances = instances + reservation['Instances']

# Turn the boto3 result in to ansible_friendly_snaked_names
snaked_instances = [camel_dict_to_snake_dict(instance) for instance in instances]
Expand All @@ -535,6 +561,7 @@ def list_ec2_instances(connection, module):
def main():

argument_spec = dict(
minimum_uptime=dict(required=False, type='int', default=None, aliases=['uptime']),
instance_ids=dict(default=[], type='list', elements='str'),
filters=dict(default={}, type='dict')
)
Expand Down

0 comments on commit 2dc4bab

Please sign in to comment.