Я пытаюсь найти неиспользуемые ресурсы (экземпляры ec2, группы автоматического масштабирования, балансировщики нагрузки).
Я объявляю это неиспользованным, если идентификатор стека ресурса
1. ни в одном из стеков, которые я получил от list_stacks ().
2. в одном из стеков, которые я получил в качестве ответа от list_stacks (), но его StackStatus имеет значение «DELETE_COMPLETE».
Для группы автоматического масштабирования я создал класс:
class AutoScalingGroup:
def __init__(self):
self.asgName=''
self.validity='vikas'
self.asgTags={}
self.asgStackId=''
self.asgStackName=''
Я нахожу все детали класса, используя следующий код:
asg = session.client('autoscaling', region_name='us-west-2')
asg_groups = asg.describe_auto_scaling_groups()
asgs = []
for asgroup in asg_groups['AutoScalingGroups']:
asg = AutoScalingGroup()
asg.asgName = asgroup['AutoScalingGroupName']
for tag in asgroup['Tags']:
if (tag['Key'] == 'aws:cloudformation:stack-name'):
asg.asgStackName = tag['Value']
if(tag['Key'] == 'aws:cloudformation:stack-id'):
asg.asgStackName = tag['Value']
asgs.append(asg)
У меня есть атрибут валидности для группы. Ниже мой код, чтобы найти, если группа "notinuse". Ниже мой исходный код:
for asg in asgs:
if (stack['StackId']==asg.asgStackId for stack in stacks['StackSummaries']):
if stack['StackStatus'] == 'DELETE_COMPLETE':
asg.validity = 'notinuse'
else:
asg.validity = 'notinuse'
Но приведенный выше код дал мне сообщение об ошибке, что в третьей строке: if stack['StackStatus'] == 'DELETE_COMPLETE'
стек не определен. Я понимаю, что поскольку стек является локальным только для цикла for выше.
Я также попробовал следующий код
for asg in asgs:
if (stack['StackId']==asg.asgStackId for stack in stacks['StackSummaries']):
a = '1'
else:
asg.validity = 'notinuse'
for asg in asgs:
for stack in stacks['StackSummaries']:
if stack['StackId']==asg.asgStackId:
if stack['StackStatus'] == 'DELETE_COMPLETE':
asg.validity = 'notinuse'
else:
asg.validity = 'inuse'
Но это не дает мне правильных результатов. Я хочу найти, что у asg эти стековые идентификаторы не присутствуют в стековых идентификаторах (list-stacks from cloudformation), и если они присутствуют и их статус равен «DELETE-COMPLETE». Пожалуйста, дайте мне знать, где я получаю это неправильно.
Код, который я использовал для получения списка стеков:
stacks = cf.list_stacks()
Ниже показано, как выглядят стеки:
{
'StackSummaries': [{
'StackId': 'arn:aws:cloudformation:us-west-2:****************************:stack/PSSIdataEXTRscripts-PROD-West/****************************',
'StackName': 'PSSIdataEXTRscripts-PROD-West',
'TemplateDescription': 'COFI PSSI EXTR CFT',
'CreationTime': datetime.datetime(2018, 10, 26, 22, 50, 14, 113000, tzinfo = tzutc()),
'DeletionTime': datetime.datetime(2018, 10, 26, 23, 3, 3, 739000, tzinfo = tzutc()),
'StackStatus': 'DELETE_COMPLETE'
}, {
'StackId': 'arn:aws:cloudformation:us-west-2:*************:stack/ASVBROKERAGEWEBMOBILE-West-a/****************************',
'StackName': 'ASVBROKERAGEWEBMOBILE-West-a',
'TemplateDescription': '****************************',
'CreationTime': datetime.datetime(2018, 10, 26, 21, 4, 26, 469000, tzinfo = tzutc()),
'DeletionTime': datetime.datetime(2018, 10, 26, 21, 22, 14, 707000, tzinfo = tzutc()),
'StackStatus': 'DELETE_COMPLETE'
}],
'NextToken': '**********************************',
'ResponseMetadata': {
'RequestId': '*****************************',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'x-amzn-requestid': '**************************',
'content-type': 'text/xml',
'content-length': '40907',
'vary': 'Accept-Encoding',
'date': 'Mon, 05 Nov 2018 01:47:31 GMT'
},
'RetryAttempts': 0
}
}