Refactored and tested the "get_instances" method.

This commit is contained in:
Shay Nehmad 2019-04-10 20:03:12 +03:00
parent 66b90f6bfe
commit 84960d13db
2 changed files with 75 additions and 12 deletions

View File

@ -6,6 +6,21 @@ from common.cloud.aws_instance import AwsInstance
__author__ = 'itay.mizeretz' __author__ = 'itay.mizeretz'
INSTANCE_INFORMATION_LIST_KEY = 'InstanceInformationList'
INSTANCE_ID_KEY = 'InstanceId'
COMPUTER_NAME_KEY = 'ComputerName'
PLATFORM_TYPE_KEY = 'PlatformType'
IP_ADDRESS_KEY = 'IPAddress'
def filter_instance_data_from_aws_response(response):
return [{
'instance_id': x[INSTANCE_ID_KEY],
'name': x[COMPUTER_NAME_KEY],
'os': x[PLATFORM_TYPE_KEY].lower(),
'ip_address': x[IP_ADDRESS_KEY]
} for x in response[INSTANCE_INFORMATION_LIST_KEY]]
class AwsService(object): class AwsService(object):
""" """
@ -56,24 +71,16 @@ class AwsService(object):
""" """
This function will assume that it's running on an EC2 instance with the correct IAM role. This function will assume that it's running on an EC2 instance with the correct IAM role.
See https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#iam-role for details. See https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#iam-role for details.
:return:
:return: All visible instances from this instance
""" """
# local_ssm_client = boto3.client("ssm", region_name=AwsService.region)
current_instance = AwsInstance() current_instance = AwsInstance()
local_ssm_client = boto3.client("ssm", region_name=current_instance.get_region()) local_ssm_client = boto3.client("ssm", region_name=current_instance.get_region())
try: try:
response = local_ssm_client.describe_instance_information() response = local_ssm_client.describe_instance_information()
return \ filtered_instances_data = filter_instance_data_from_aws_response(response)
[ return filtered_instances_data
{
'instance_id': x['InstanceId'],
'name': x['ComputerName'],
'os': x['PlatformType'].lower(),
'ip_address': x['IPAddress']
}
for x in response['InstanceInformationList']
]
except botocore.exceptions.ClientError as e: except botocore.exceptions.ClientError as e:
print e.response + " " + e.message + " ... " + e.operation_name print e.response + " " + e.message + " ... " + e.operation_name
raise e raise e

View File

@ -0,0 +1,56 @@
from unittest import TestCase
from aws_service import filter_instance_data_from_aws_response
import json
class TestFilter_instance_data_from_aws_response(TestCase):
def test_filter_instance_data_from_aws_response(self):
json_response_full = """
{
"InstanceInformationList": [
{
"ActivationId": "string",
"AgentVersion": "string",
"AssociationOverview": {
"DetailedStatus": "string",
"InstanceAssociationStatusAggregatedCount": {
"string" : 6
}
},
"AssociationStatus": "string",
"ComputerName": "string",
"IamRole": "string",
"InstanceId": "string",
"IPAddress": "string",
"IsLatestVersion": "True",
"LastAssociationExecutionDate": 6,
"LastPingDateTime": 6,
"LastSuccessfulAssociationExecutionDate": 6,
"Name": "string",
"PingStatus": "string",
"PlatformName": "string",
"PlatformType": "string",
"PlatformVersion": "string",
"RegistrationDate": 6,
"ResourceType": "string"
}
],
"NextToken": "string"
}
"""
json_response_empty = """
{
"InstanceInformationList": [],
"NextToken": "string"
}
"""
self.assertEqual(filter_instance_data_from_aws_response(json.loads(json_response_empty)), [])
self.assertEqual(
filter_instance_data_from_aws_response(json.loads(json_response_full)),
[{'instance_id': u'string',
'ip_address': u'string',
'name': u'string',
'os': u'string'}])