cloud-governance 1.1.363__py3-none-any.whl → 1.1.364__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cloud_governance/common/clouds/aws/ec2/ec2_operations.py +18 -9
- cloud_governance/common/clouds/aws/utils/utils.py +22 -0
- cloud_governance/main/environment_variables.py +11 -1
- cloud_governance/policy/aws/zombie_cluster_resource.py +75 -62
- cloud_governance/policy/policy_operations/aws/zombie_cluster/run_zombie_cluster_resources.py +2 -2
- {cloud_governance-1.1.363.dist-info → cloud_governance-1.1.364.dist-info}/METADATA +1 -1
- {cloud_governance-1.1.363.dist-info → cloud_governance-1.1.364.dist-info}/RECORD +10 -10
- {cloud_governance-1.1.363.dist-info → cloud_governance-1.1.364.dist-info}/WHEEL +0 -0
- {cloud_governance-1.1.363.dist-info → cloud_governance-1.1.364.dist-info}/licenses/LICENSE +0 -0
- {cloud_governance-1.1.363.dist-info → cloud_governance-1.1.364.dist-info}/top_level.txt +0 -0
|
@@ -27,6 +27,7 @@ class EC2Operations:
|
|
|
27
27
|
self.ec2_client = get_boto3_client('ec2', region_name=region)
|
|
28
28
|
self.get_full_list = Utils().get_details_resource_list
|
|
29
29
|
self.utils = Utils(region=region)
|
|
30
|
+
self.cluster_prefix = self.__environment_variables_dict.get('CLUSTER_PREFIX')
|
|
30
31
|
|
|
31
32
|
@logger_time_stamp
|
|
32
33
|
@typeguard.typechecked
|
|
@@ -292,7 +293,8 @@ class EC2Operations:
|
|
|
292
293
|
for item in resource:
|
|
293
294
|
if item.get('Tags'):
|
|
294
295
|
for tag in item.get('Tags'):
|
|
295
|
-
|
|
296
|
+
ok, _ = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix, tag=tag)
|
|
297
|
+
if ok:
|
|
296
298
|
found = True
|
|
297
299
|
break
|
|
298
300
|
if found:
|
|
@@ -315,7 +317,8 @@ class EC2Operations:
|
|
|
315
317
|
found = False
|
|
316
318
|
if resource.get(tags):
|
|
317
319
|
for tag in resource.get(tags):
|
|
318
|
-
|
|
320
|
+
ok, _ = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix, tag=tag)
|
|
321
|
+
if ok:
|
|
319
322
|
found = True
|
|
320
323
|
break
|
|
321
324
|
if found:
|
|
@@ -462,20 +465,21 @@ class EC2Operations:
|
|
|
462
465
|
|
|
463
466
|
def is_cluster_resource(self, resource_id: str):
|
|
464
467
|
"""
|
|
465
|
-
This method checks tags have cluster key, if cluster return True else False
|
|
468
|
+
This method checks tags have a cluster key, if cluster return True else False
|
|
466
469
|
@param resource_id:
|
|
467
470
|
@return:
|
|
468
471
|
"""
|
|
469
472
|
resource_tags = self.ec2_client.describe_tags(Filters=[{'Name': 'resource-id', 'Values': [resource_id]}])
|
|
470
473
|
if resource_tags.get('Tags'):
|
|
471
474
|
for tag in resource_tags['Tags']:
|
|
472
|
-
|
|
475
|
+
ok, _ = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix, tag=tag)
|
|
476
|
+
if ok:
|
|
473
477
|
return True
|
|
474
478
|
return False
|
|
475
479
|
|
|
476
480
|
def get_ec2_list(self, instances_list: list):
|
|
477
481
|
"""
|
|
478
|
-
This method
|
|
482
|
+
This method returns all instances in one list by taking instances_list
|
|
479
483
|
@param instances_list:
|
|
480
484
|
@return:
|
|
481
485
|
"""
|
|
@@ -487,7 +491,7 @@ class EC2Operations:
|
|
|
487
491
|
|
|
488
492
|
def get_tag(self, name: str, tags: list):
|
|
489
493
|
"""
|
|
490
|
-
This method get tag name
|
|
494
|
+
This method get tag name from the tags
|
|
491
495
|
@param name:
|
|
492
496
|
@param tags:
|
|
493
497
|
@return:
|
|
@@ -527,7 +531,12 @@ class EC2Operations:
|
|
|
527
531
|
def get_tag_value_from_tags(self, tags: list, tag_name: str, cast_type: str = 'str',
|
|
528
532
|
default_value: any = '') -> any:
|
|
529
533
|
"""
|
|
530
|
-
This method
|
|
534
|
+
This method returns the tag value inputted by tag_name
|
|
535
|
+
:param tags:
|
|
536
|
+
:param tag_name:
|
|
537
|
+
:param cast_type:
|
|
538
|
+
:param default_value:
|
|
539
|
+
:return:
|
|
531
540
|
"""
|
|
532
541
|
if tags:
|
|
533
542
|
for tag in tags:
|
|
@@ -589,7 +598,7 @@ class EC2Operations:
|
|
|
589
598
|
|
|
590
599
|
def tag_ec2_resources(self, client_method: Callable, tags: list, resource_ids: list):
|
|
591
600
|
"""
|
|
592
|
-
This method
|
|
601
|
+
This method tags the ec2 resources with batch wise of 10
|
|
593
602
|
:param client_method:
|
|
594
603
|
:param tags:
|
|
595
604
|
:param resource_ids:
|
|
@@ -604,7 +613,7 @@ class EC2Operations:
|
|
|
604
613
|
|
|
605
614
|
def get_attached_time(self, volume_list: list):
|
|
606
615
|
"""
|
|
607
|
-
This method
|
|
616
|
+
This method returns the root volume attached time
|
|
608
617
|
:param volume_list:
|
|
609
618
|
:return:
|
|
610
619
|
"""
|
|
@@ -107,3 +107,25 @@ class Utils:
|
|
|
107
107
|
resources = func_name(Marker=resources[iter_tag_name], **kwargs)
|
|
108
108
|
resource_list.extend(resources[output_tag])
|
|
109
109
|
return resource_list
|
|
110
|
+
|
|
111
|
+
@staticmethod
|
|
112
|
+
def is_cluster_resource(cluster_prefix: list, tags: list = None, tag: dict = None):
|
|
113
|
+
"""
|
|
114
|
+
This method checks if the resource i.e: EC2, IAM is a cluster resource
|
|
115
|
+
Resources have the tags
|
|
116
|
+
:param tag:
|
|
117
|
+
:param cluster_prefix:
|
|
118
|
+
:param tags:
|
|
119
|
+
:return:
|
|
120
|
+
"""
|
|
121
|
+
for prefix in cluster_prefix:
|
|
122
|
+
prefix = prefix.strip()
|
|
123
|
+
if tag:
|
|
124
|
+
if tag.get('Key').startswith(prefix):
|
|
125
|
+
return True, tag.get('Key')
|
|
126
|
+
else:
|
|
127
|
+
if tags:
|
|
128
|
+
for tag in tags:
|
|
129
|
+
if tag.get('Key').startswith(prefix):
|
|
130
|
+
return True, tag.get('Key')
|
|
131
|
+
return False, None
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import argparse
|
|
2
|
+
import json
|
|
2
3
|
import os
|
|
3
4
|
|
|
4
5
|
from ast import literal_eval
|
|
@@ -126,7 +127,16 @@ class EnvironmentVariables:
|
|
|
126
127
|
'{}')
|
|
127
128
|
self._environment_variables_dict['DAYS_TO_DELETE_RESOURCE'] = int(
|
|
128
129
|
EnvironmentVariables.get_env('DAYS_TO_DELETE_RESOURCE', '7'))
|
|
129
|
-
|
|
130
|
+
try:
|
|
131
|
+
self._environment_variables_dict['CLUSTER_PREFIX'] = json.loads(EnvironmentVariables.get_env(
|
|
132
|
+
'CLUSTER_PREFIX',
|
|
133
|
+
'["kubernetes.io/cluster", "sigs.k8s.io/cluster-api-provider-aws/cluster"]'
|
|
134
|
+
))
|
|
135
|
+
except json.JSONDecodeError as err:
|
|
136
|
+
self._environment_variables_dict['CLUSTER_PREFIX'] = [
|
|
137
|
+
"kubernetes.io/cluster",
|
|
138
|
+
"sigs.k8s.io/cluster-api-provider-aws/cluster"
|
|
139
|
+
]
|
|
130
140
|
# AWS Cost Explorer tags
|
|
131
141
|
self._environment_variables_dict['cost_metric'] = EnvironmentVariables.get_env('cost_metric', 'UnblendedCost')
|
|
132
142
|
self._environment_variables_dict['start_date'] = EnvironmentVariables.get_env('start_date', '')
|
|
@@ -6,12 +6,6 @@ from cloud_governance.common.clouds.aws.ec2.ec2_operations import EC2Operations
|
|
|
6
6
|
from cloud_governance.common.logger.init_logger import logger
|
|
7
7
|
from cloud_governance.common.clouds.aws.utils.utils import Utils
|
|
8
8
|
|
|
9
|
-
# @todo add next token
|
|
10
|
-
# response = client.get_servers()
|
|
11
|
-
# results = response["serverList"]
|
|
12
|
-
# while "NextToken" in response:
|
|
13
|
-
# response = client.get_servers(NextToken=response["NextToken"])
|
|
14
|
-
# results.extend(response["serverList"])
|
|
15
9
|
from cloud_governance.policy.policy_operations.aws.zombie_cluster.delete_ec2_resources import DeleteEC2Resources
|
|
16
10
|
from cloud_governance.policy.policy_operations.aws.zombie_cluster.delete_iam_resources import DeleteIAMResources
|
|
17
11
|
from cloud_governance.policy.policy_operations.aws.zombie_cluster.delete_s3_resources import DeleteS3Resources
|
|
@@ -23,10 +17,10 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
23
17
|
alert user after 4 days of cluster deleted. and delete the resources after 7 days of cluster deleted.
|
|
24
18
|
"""
|
|
25
19
|
|
|
26
|
-
def __init__(self, cluster_prefix:
|
|
20
|
+
def __init__(self, cluster_prefix: list = None, delete: bool = False, region: str = 'us-east-2',
|
|
27
21
|
cluster_tag: str = '', resource_name: str = '', force_delete: bool = False):
|
|
28
22
|
super().__init__(region=region, force_delete=force_delete)
|
|
29
|
-
self.cluster_prefix = cluster_prefix
|
|
23
|
+
self.cluster_prefix = cluster_prefix if cluster_prefix is not None else []
|
|
30
24
|
self.delete = delete
|
|
31
25
|
self.cluster_tag = cluster_tag
|
|
32
26
|
self.resource_name = resource_name
|
|
@@ -53,13 +47,15 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
53
47
|
if items.get('Instances'):
|
|
54
48
|
instances_list.append(items['Instances'])
|
|
55
49
|
for instance in instances_list:
|
|
50
|
+
|
|
56
51
|
for item in instance:
|
|
57
|
-
|
|
58
|
-
instance_id = item['InstanceId']
|
|
52
|
+
instance_id = item.get('InstanceId')
|
|
59
53
|
if item.get('Tags'):
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
54
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
55
|
+
tags=item.get('Tags', []))
|
|
56
|
+
if ok:
|
|
57
|
+
result_instance[instance_id] = cluster_id
|
|
58
|
+
|
|
63
59
|
return result_instance
|
|
64
60
|
|
|
65
61
|
def _cluster_instance(self):
|
|
@@ -75,12 +71,11 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
75
71
|
instances_list.append(items['Instances'])
|
|
76
72
|
for instance in instances_list:
|
|
77
73
|
for item in instance:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
result_instance[instance_id] = tag['Key']
|
|
74
|
+
instance_id = item['InstanceId']
|
|
75
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
76
|
+
tags=item.get('Tags', []))
|
|
77
|
+
if ok:
|
|
78
|
+
result_instance[instance_id] = cluster_id
|
|
84
79
|
|
|
85
80
|
return result_instance
|
|
86
81
|
|
|
@@ -98,20 +93,21 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
98
93
|
# skip when input_resource_id no found
|
|
99
94
|
else:
|
|
100
95
|
continue
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
96
|
+
tags_list = resource.get(tags, [])
|
|
97
|
+
if tags:
|
|
98
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
99
|
+
tags=tags_list)
|
|
100
|
+
if ok:
|
|
101
|
+
result_resources_key_id[resource_id] = cluster_id
|
|
102
|
+
for tag in tags_list:
|
|
103
|
+
if ok:
|
|
104
|
+
if self.cluster_tag and self.cluster_tag == tag['Key']:
|
|
105
|
+
result_resources_key_id[resource_id] = tag['Key']
|
|
106
|
+
break
|
|
107
|
+
else:
|
|
108
|
+
if self.resource_name and self.resource_name == tag['Value']:
|
|
113
109
|
result_resources_key_id[resource_id] = tag['Key']
|
|
114
|
-
|
|
110
|
+
break
|
|
115
111
|
return result_resources_key_id
|
|
116
112
|
|
|
117
113
|
def __extract_vpc_id_from_resource_data(self, zombie_id: str, resource_data: list, input_tag: str,
|
|
@@ -136,7 +132,7 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
136
132
|
|
|
137
133
|
def __get_cluster_resources_by_vpc_id(self, vpc_id: str, resource_data: list, output_tag: str, input_tag: str = ''):
|
|
138
134
|
"""
|
|
139
|
-
this method
|
|
135
|
+
this method lists all the resources by vpc_id
|
|
140
136
|
:param vpc_id:
|
|
141
137
|
:param resource_data:
|
|
142
138
|
:param output_tag:
|
|
@@ -238,7 +234,7 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
238
234
|
|
|
239
235
|
def zombie_cluster_snapshot(self, vpc_id: str = '', cluster_tag_vpc: str = ''):
|
|
240
236
|
"""
|
|
241
|
-
This method returns list of cluster's snapshot according to cluster tag name and cluster name data
|
|
237
|
+
This method returns the list of cluster's snapshot according to cluster tag name and cluster name data
|
|
242
238
|
"""
|
|
243
239
|
snapshots_data = self.ec2_operations.get_snapshots()
|
|
244
240
|
exist_snapshot = self.__get_cluster_resources(resources_list=snapshots_data, input_resource_id='SnapshotId')
|
|
@@ -463,16 +459,20 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
463
459
|
resource_id = resource['LoadBalancerName']
|
|
464
460
|
tags = self.elb_client.describe_tags(LoadBalancerNames=[resource_id])
|
|
465
461
|
for item in tags['TagDescriptions']:
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
462
|
+
tags = item.get('Tags')
|
|
463
|
+
if tags:
|
|
464
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
465
|
+
tags=tags)
|
|
466
|
+
if ok:
|
|
467
|
+
exist_load_balancer[resource_id] = cluster_id
|
|
468
|
+
for tag in tags:
|
|
469
|
+
if ok:
|
|
469
470
|
# when input a specific cluster, return resource id of the input cluster
|
|
470
471
|
if self.cluster_tag:
|
|
471
472
|
if self.cluster_tag == tag['Key']:
|
|
472
473
|
exist_load_balancer[resource_id] = tag['Key']
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
break
|
|
474
|
+
break
|
|
475
|
+
|
|
476
476
|
zombies = self.__get_zombie_resources(exist_load_balancer)
|
|
477
477
|
resources = self._get_tags_of_zombie_resources(resources=load_balancers_data,
|
|
478
478
|
resource_id_name='LoadBalancerName', zombies=zombies,
|
|
@@ -502,16 +502,20 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
502
502
|
resource_id = resource['LoadBalancerArn']
|
|
503
503
|
tags = self.elbv2_client.describe_tags(ResourceArns=[resource_id])
|
|
504
504
|
for item in tags['TagDescriptions']:
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
505
|
+
tags = item.get('Tags', [])
|
|
506
|
+
if tags:
|
|
507
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
508
|
+
tags=tags)
|
|
509
|
+
if ok:
|
|
510
|
+
exist_load_balancer[resource_id] = cluster_id
|
|
511
|
+
for tag in tags:
|
|
512
|
+
if ok:
|
|
508
513
|
# when input a specific cluster, return resource id of the input cluster
|
|
509
514
|
if self.cluster_tag:
|
|
510
515
|
if self.cluster_tag == tag['Key']:
|
|
511
516
|
exist_load_balancer[resource_id] = tag['Key']
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
break
|
|
517
|
+
break
|
|
518
|
+
|
|
515
519
|
zombies = self.__get_zombie_resources(exist_load_balancer)
|
|
516
520
|
resources = self._get_tags_of_zombie_resources(resources=load_balancers_data,
|
|
517
521
|
resource_id_name='LoadBalancerArn', zombies=zombies,
|
|
@@ -858,16 +862,19 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
858
862
|
if 'worker-role' in role_name or 'master-role' in role_name:
|
|
859
863
|
role_data = self.iam_client.get_role(RoleName=role_name)
|
|
860
864
|
data = role_data['Role']
|
|
861
|
-
|
|
865
|
+
tags = data.get('Tags', [])
|
|
866
|
+
if tags:
|
|
867
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
868
|
+
tags=tags)
|
|
869
|
+
if ok:
|
|
870
|
+
exist_role_name_tag[role_name] = cluster_id
|
|
862
871
|
for tag in data['Tags']:
|
|
863
|
-
if
|
|
872
|
+
if ok:
|
|
864
873
|
# when input a specific cluster, return resource id of the input cluster
|
|
865
874
|
if self.cluster_tag:
|
|
866
875
|
if self.cluster_tag == tag['Key']:
|
|
867
876
|
exist_role_name_tag[role_name] = tag['Key']
|
|
868
|
-
|
|
869
|
-
exist_role_name_tag[role_name] = tag['Key']
|
|
870
|
-
break
|
|
877
|
+
break
|
|
871
878
|
zombies = []
|
|
872
879
|
cluster_left_out_days = {}
|
|
873
880
|
if exist_role_name_tag:
|
|
@@ -900,16 +907,19 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
900
907
|
user_name = user['UserName']
|
|
901
908
|
user_data = self.iam_client.get_user(UserName=user_name)
|
|
902
909
|
data = user_data['User']
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
910
|
+
tags = data.get('Tags', [])
|
|
911
|
+
if tags:
|
|
912
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
913
|
+
tags=tags)
|
|
914
|
+
if ok:
|
|
915
|
+
exist_user_name_tag[user_name] = cluster_id
|
|
916
|
+
for tag in tags:
|
|
917
|
+
if ok:
|
|
906
918
|
# when input a specific cluster, return resource id of the input cluster
|
|
907
919
|
if self.cluster_tag:
|
|
908
920
|
if self.cluster_tag == tag['Key']:
|
|
909
921
|
exist_user_name_tag[user_name] = tag['Key']
|
|
910
|
-
|
|
911
|
-
exist_user_name_tag[user_name] = tag['Key']
|
|
912
|
-
break
|
|
922
|
+
break
|
|
913
923
|
zombies = self.__get_all_zombie_resources(exist_user_name_tag)
|
|
914
924
|
resources = self._get_tags_of_zombie_resources(resources=users_data, resource_id_name='UserName',
|
|
915
925
|
zombies=zombies, aws_service='user')
|
|
@@ -944,15 +954,18 @@ class ZombieClusterResources(ZombieClusterCommonMethods):
|
|
|
944
954
|
tags = self.s3_client.get_bucket_tagging(Bucket=bucket['Name'])
|
|
945
955
|
except Exception as e: # continue when no bucket tags
|
|
946
956
|
continue
|
|
947
|
-
|
|
948
|
-
|
|
957
|
+
tags = tags.get('TagSet', [])
|
|
958
|
+
ok, cluster_id = Utils.is_cluster_resource(cluster_prefix=self.cluster_prefix,
|
|
959
|
+
tags=tags)
|
|
960
|
+
if ok:
|
|
961
|
+
exist_bucket_name_tag[bucket['Name']] = cluster_id
|
|
962
|
+
for tag in tags:
|
|
963
|
+
if ok:
|
|
949
964
|
# when input a specific cluster, return resource id of the input cluster
|
|
950
965
|
if self.cluster_tag:
|
|
951
966
|
if self.cluster_tag == tag['Key']:
|
|
952
967
|
exist_bucket_name_tag[bucket['Name']] = tag['Key']
|
|
953
|
-
|
|
954
|
-
exist_bucket_name_tag[bucket['Name']] = tag['Key']
|
|
955
|
-
break
|
|
968
|
+
break
|
|
956
969
|
zombies = self.__get_all_zombie_resources(exist_bucket_name_tag)
|
|
957
970
|
resources = self._get_tags_of_zombie_resources(resources=response['Buckets'], resource_id_name='Name',
|
|
958
971
|
zombies=zombies, aws_service='bucket', aws_tag='TagSet')
|
cloud_governance/policy/policy_operations/aws/zombie_cluster/run_zombie_cluster_resources.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
|
2
2
|
|
|
3
3
|
import typeguard
|
|
4
4
|
|
|
5
|
-
from cloud_governance.common.clouds.aws.ec2.ec2_operations import EC2Operations
|
|
6
5
|
from cloud_governance.common.clouds.aws.utils.common_methods import get_tag_value_from_tags
|
|
7
6
|
from cloud_governance.common.elasticsearch.elasticsearch_operations import ElasticSearchOperations
|
|
8
7
|
from cloud_governance.main.environment_variables import environment_variables
|
|
@@ -16,7 +15,8 @@ from cloud_governance.policy.aws.zombie_cluster_resource import ZombieClusterRes
|
|
|
16
15
|
@typeguard.typechecked
|
|
17
16
|
def __get_resource_list(region, delete: bool = False, resource: str = '', cluster_tag: str = '',
|
|
18
17
|
resource_name: str = '', service_type: str = ' '):
|
|
19
|
-
|
|
18
|
+
cluster_prefix = environment_variables.environment_variables_dict.get('CLUSTER_PREFIX')
|
|
19
|
+
zombie_cluster_resources = ZombieClusterResources(cluster_prefix=cluster_prefix, delete=delete,
|
|
20
20
|
region=region, cluster_tag=cluster_tag,
|
|
21
21
|
resource_name=resource_name)
|
|
22
22
|
zombie_cluster_resources_dict = {'zombie_cluster_volume': zombie_cluster_resources.zombie_cluster_volume,
|
|
@@ -49,7 +49,7 @@ cloud_governance/common/clouds/aws/cost_explorer/cost_explorer_operations.py,sha
|
|
|
49
49
|
cloud_governance/common/clouds/aws/dynamodb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
cloud_governance/common/clouds/aws/dynamodb/dynamodb_operations.py,sha256=eeV3YgT2bAMwb3UmQjCGdh3ie3-Q8UvKNv4iOypYwNg,4916
|
|
51
51
|
cloud_governance/common/clouds/aws/ec2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
-
cloud_governance/common/clouds/aws/ec2/ec2_operations.py,sha256=
|
|
52
|
+
cloud_governance/common/clouds/aws/ec2/ec2_operations.py,sha256=0ibMvf7nqyK9MCRhxrg11xnOPELqsZIQsZUgd6_neKc,24680
|
|
53
53
|
cloud_governance/common/clouds/aws/iam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
54
|
cloud_governance/common/clouds/aws/iam/iam_operations.py,sha256=ngVh19oIse1UjzvUkImYzs3xBFt74LhdUGbOhI58ZMA,4843
|
|
55
55
|
cloud_governance/common/clouds/aws/price/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -71,7 +71,7 @@ cloud_governance/common/clouds/aws/support/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
|
71
71
|
cloud_governance/common/clouds/aws/support/support_operations.py,sha256=ELXeg8lQ-Jz0jGuGaaT2jMte0lxzIF38VSsYaF95wUk,1364
|
|
72
72
|
cloud_governance/common/clouds/aws/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
73
|
cloud_governance/common/clouds/aws/utils/common_methods.py,sha256=h79by6nD1JnGeCsSP0xLJ86ptbbSLCSRs3JsOE26PEo,1720
|
|
74
|
-
cloud_governance/common/clouds/aws/utils/utils.py,sha256=
|
|
74
|
+
cloud_governance/common/clouds/aws/utils/utils.py,sha256=deKge5ZeijqyXRvUsSnPBwm6a7U9lHI21h9e02rHtYI,4917
|
|
75
75
|
cloud_governance/common/clouds/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
76
|
cloud_governance/common/clouds/azure/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
77
|
cloud_governance/common/clouds/azure/common/common_operations.py,sha256=MPSEXkNyvd7SHRuXNmjby8nK2_UZ__zOvo2H_9T9E_M,3138
|
|
@@ -143,7 +143,7 @@ cloud_governance/common/utils/configs.py,sha256=8ry4UQT9s_GUivhrCdwS0vOWYN6OJIHD
|
|
|
143
143
|
cloud_governance/common/utils/json_datetime_encoder.py,sha256=_-jzRTe0UqAKTn2E9qaU8SYIxHUoRA5ElWuVA0Y54Xw,338
|
|
144
144
|
cloud_governance/common/utils/utils.py,sha256=ZUsi4ax2XhDIV-EQ5kJt5Ppd72kmm2psqcg1cNDZrvc,4349
|
|
145
145
|
cloud_governance/main/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
|
-
cloud_governance/main/environment_variables.py,sha256=
|
|
146
|
+
cloud_governance/main/environment_variables.py,sha256=PzRntrFs4gZepEuTCuqCvjF_NSGLN9M6s0z8GcnszYQ,29028
|
|
147
147
|
cloud_governance/main/environment_variables_exceptions.py,sha256=UR0Ith0P0oshsDZdJRlRq8ZUTt0h8jFvUtrnP4m4AIY,437
|
|
148
148
|
cloud_governance/main/es_uploader.py,sha256=6Ify5CS2NtUF1xXZ-rMwpYxVzDKfEZhv2vogWFltt98,10656
|
|
149
149
|
cloud_governance/main/main.py,sha256=4TBiCBO_1z8KpGXb8brPKBmv3jHBl8fl_-Sb80ctYno,18880
|
|
@@ -166,7 +166,7 @@ cloud_governance/policy/aws/optimize_resources_report.py,sha256=zG7w8KHF7Z25jxYG
|
|
|
166
166
|
cloud_governance/policy/aws/s3_inactive.py,sha256=NXUUGtJhpqohaWYczSebw-q0Q7RKg3XMMj_h7xfGhQ0,2839
|
|
167
167
|
cloud_governance/policy/aws/skipped_resources.py,sha256=D0kbt9dg6Bkl5PgGaqimWvLct6D-JOnerzJ0FkWzGFc,5679
|
|
168
168
|
cloud_governance/policy/aws/spot_savings_analysis.py,sha256=lGG5qtz8pr7xjLo5BrtVSHGTz928MLwYPbSCaDfpTes,5513
|
|
169
|
-
cloud_governance/policy/aws/zombie_cluster_resource.py,sha256=
|
|
169
|
+
cloud_governance/policy/aws/zombie_cluster_resource.py,sha256=pwE8MypeqQfSQs--U1hbk5nk1M6x0R_NLs0x-wmOIjI,59626
|
|
170
170
|
cloud_governance/policy/aws/zombie_snapshots.py,sha256=V48cq4GCG2z-MRwUSE4b5wQcGeI_T1Ah99SiHlTwkvY,3834
|
|
171
171
|
cloud_governance/policy/aws/cleanup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
172
172
|
cloud_governance/policy/aws/cleanup/database_idle.py,sha256=-kITbr5yB1QAi65D6zRO0kdWH1CFPEyd86nJua-dNKM,3632
|
|
@@ -231,7 +231,7 @@ cloud_governance/policy/policy_operations/aws/zombie_cluster/__init__.py,sha256=
|
|
|
231
231
|
cloud_governance/policy/policy_operations/aws/zombie_cluster/delete_ec2_resources.py,sha256=LhT91KCA-POvFbPSp7K_LnVJX6SFJPwysWtfW4O1SWg,27146
|
|
232
232
|
cloud_governance/policy/policy_operations/aws/zombie_cluster/delete_iam_resources.py,sha256=HzHIx_FLRCrlhYi15-Y4vrOmmbBUhm-kAA7FWgRqYN0,3730
|
|
233
233
|
cloud_governance/policy/policy_operations/aws/zombie_cluster/delete_s3_resources.py,sha256=Y0PaOGUEurgizoXjZb8a5qC2MVObcqGwJ4oYGZ-Oyic,1373
|
|
234
|
-
cloud_governance/policy/policy_operations/aws/zombie_cluster/run_zombie_cluster_resources.py,sha256=
|
|
234
|
+
cloud_governance/policy/policy_operations/aws/zombie_cluster/run_zombie_cluster_resources.py,sha256=6ZC-KQpRPpRdqY-QuVI5BYoaaxgTv4QLNDUJ8v7oTiU,12315
|
|
235
235
|
cloud_governance/policy/policy_operations/aws/zombie_cluster/validate_zombies.py,sha256=lOCmOTfrF6M1QZl6to7Y1A13Cvf-taNxBOvvhFswOTo,1164
|
|
236
236
|
cloud_governance/policy/policy_operations/aws/zombie_cluster/zombie_cluster_common_methods.py,sha256=VqXk8A0OLZOxBm422kb-n5zfM8DY4FYdkwZO91xwRxQ,14791
|
|
237
237
|
cloud_governance/policy/policy_operations/aws/zombie_non_cluster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -263,8 +263,8 @@ cloud_governance/policy/policy_runners/elasticsearch/__init__.py,sha256=47DEQpj8
|
|
|
263
263
|
cloud_governance/policy/policy_runners/elasticsearch/upload_elastic_search.py,sha256=pOwUJWXjJbyTy8iv3Ap8xJGnqQe-5lZgoR8-vGfAVos,1881
|
|
264
264
|
cloud_governance/policy/policy_runners/ibm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
265
265
|
cloud_governance/policy/policy_runners/ibm/policy_runner.py,sha256=V0E_f7F3hXit0aSq4BlfX1Jd4vjR2NEvOWsJ5upvZ4o,1302
|
|
266
|
-
cloud_governance-1.1.
|
|
267
|
-
cloud_governance-1.1.
|
|
268
|
-
cloud_governance-1.1.
|
|
269
|
-
cloud_governance-1.1.
|
|
270
|
-
cloud_governance-1.1.
|
|
266
|
+
cloud_governance-1.1.364.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
267
|
+
cloud_governance-1.1.364.dist-info/METADATA,sha256=VXfrBwJvenIoddZji5UmX8g1qtD7NSEGVqY6jx-KQEw,11364
|
|
268
|
+
cloud_governance-1.1.364.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
|
|
269
|
+
cloud_governance-1.1.364.dist-info/top_level.txt,sha256=jfB1fgj7jvx3YZkZA4G6hFeS1RHO7J7XtnbjuMNMRww,17
|
|
270
|
+
cloud_governance-1.1.364.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|