Skip to content

Commit 100845e

Browse files
authored
Fix account map creation (#1218)
1 parent 50be15a commit 100845e

File tree

4 files changed

+34
-24
lines changed

4 files changed

+34
-24
lines changed

cfn-templates/cid-cfn.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# https://github.com/aws-samples/aws-cudos-framework-deployment/blob/main/cfn-templates/cid-cfn.yml
22
AWSTemplateFormatVersion: '2010-09-09'
3-
Description: Deployment of Cloud Intelligence Dashboards v4.2.2 - AWS Solution SO9011
3+
Description: Deployment of Cloud Intelligence Dashboards v4.2.3 - AWS Solution SO9011
44
Metadata:
55
AWS::CloudFormation::Interface:
66
ParameterGroups:
@@ -2070,7 +2070,7 @@ Resources:
20702070
SourceBucket: !Ref ReferenceAssetsBucket
20712071
DestinationBucket: !Ref LocalAssetsBucket
20722072
Keys:
2073-
- 'cid-resource-lambda-layer/cid-4.2.2.zip' #replace version here if needed
2073+
- 'cid-resource-lambda-layer/cid-4.2.3.zip' #replace version here if needed
20742074

20752075
CidResourceLambdaLayer:
20762076
Type: AWS::Lambda::LayerVersion
@@ -2085,7 +2085,7 @@ Resources:
20852085
- LambdaLayerBucketPrefixIsManaged
20862086
- !FindInMap [RegionMap, !Ref 'AWS::Region', BucketName]
20872087
- !Sub '${LambdaLayerBucketPrefix}-${AWS::Region}' # Region added for backward compatibility
2088-
S3Key: 'cid-resource-lambda-layer/cid-4.2.2.zip' #replace version here if needed
2088+
S3Key: 'cid-resource-lambda-layer/cid-4.2.3.zip' #replace version here if needed
20892089
CompatibleRuntimes:
20902090
- python3.10
20912091
- python3.11

cid/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = '4.2.2'
1+
__version__ = '4.2.3'
22

cid/common.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,10 @@ def parameters_controller(self):
131131
""" get/create parameters_controller """
132132
return ParametersController(self.athena)
133133

134-
def get_cur(self, target_cur_version):
134+
def get_cur(self, target_cur_version=None):
135135
""" get a cur """
136136
cur_version = self.cur.version
137-
if cur_version != target_cur_version or get_parameters().get('use-cur-proxy'):
137+
if (target_cur_version and cur_version != target_cur_version) or get_parameters().get('use-cur-proxy'):
138138
return ProxyCUR(self.cur, target_cur_version=target_cur_version)
139139
return self.cur
140140

@@ -170,7 +170,7 @@ def create_or_update_account_map(self, name):
170170
account_map = AccountMap(
171171
self.base.session,
172172
self.athena,
173-
self.cur, # can be any CUR. But it is only needed for trends and dummy
173+
self.get_cur, # can be any CUR. But it is only needed for trends and dummy
174174
)
175175
return account_map.create_or_update(name)
176176

@@ -1605,9 +1605,15 @@ def create_or_update_dataset(self, dataset_definition: dict, dataset_id: str=Non
16051605
# patch dataset for tags
16061606
cur_tags_json_required = False
16071607
for dep_view_name in dataset_definition.get('dependsOn', {}).get('views', []):
1608-
cur_tags_json_required = 'tags_json' in str()
1609-
if self.resources['views'].get(dep_view_name, {}).get('dependsOn',{}).get('tags') == 'json' \
1610-
or self.resources['views'].get(dep_view_name, {}).get('parameters',{}).get('resource-tags'):
1608+
try:
1609+
tags_type = self.resources['views'][dep_view_name]['dependsOn']['tags']
1610+
except (KeyError, TypeError, AttributeError):
1611+
tags_type = None
1612+
try:
1613+
param_res_tag = self.resources['views'][dep_view_name]['parameters']['resource-tags']
1614+
except (KeyError, TypeError, AttributeError):
1615+
param_res_tag = None
1616+
if tags_type == 'json' or param_res_tag:
16111617
cur_tags_json_required = True
16121618
break
16131619
custom_fields = {}

cid/helpers/account_map.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ class AccountMap(CidBase):
6565
}
6666
}
6767

68-
def __init__(self, session: Session, athena: Athena, cur=None) -> None:
69-
self.cur = cur # Only for trends and dummy
68+
def __init__(self, session: Session, athena: Athena, get_cur=None) -> None:
69+
self.get_cur = get_cur # get_cur callback Only for trends and dummy
7070
self.athena = athena
7171
super().__init__(session)
7272

@@ -121,7 +121,7 @@ def create_sql_from_metadata(self, name, metadata_table):
121121
template = Template(
122122
resource_string(
123123
view_definition.get('providedBy'),
124-
f'data/queries/{view_file}'
124+
f'data/{view_file}'
125125
).decode('utf-8')
126126
)
127127
elif view_definition.get('data'):
@@ -133,8 +133,8 @@ def create_sql_from_metadata(self, name, metadata_table):
133133
vars = {
134134
'metadata_table_name': metadata_table['Name'],
135135
'metadata_database_name': metadata_table['Database'],
136-
'cur_database': self.cur.database, # only for trends in metadata
137-
'cur_table_name': self.cur.table_name, # only for trends in metadata
136+
'cur_database': self.get_cur().database if name == 'aws_accounts' and self.get_cur else None, # only for trends in metadata
137+
'cur_table_name': self.get_cur().table_name if name == 'aws_accounts' and self.get_cur else None, # only for trends in metadata
138138
}
139139
for key, val in self.mappings.get(name).get(metadata_table['Name']).items():
140140
logger.debug(f'Mapping field {key} to {val}')
@@ -151,7 +151,8 @@ def create_or_update(self, name) -> bool:
151151
def get_dummy_account_mapping_sql(self, name) -> list:
152152
"""Create dummy account mapping"""
153153
logger.info(f'Creating dummy account mapping for {name}')
154-
if self.cur.version.startswith('2'):
154+
cur = self.get_cur()
155+
if cur.version.startswith('2'):
155156
sql_file = 'data/queries/shared/account_map_cur2.sql'
156157
else:
157158
sql_file = 'data/queries/shared/account_map_dummy.sql'
@@ -161,8 +162,8 @@ def get_dummy_account_mapping_sql(self, name) -> list:
161162
).decode('utf-8'))
162163
columns_tpl = {
163164
'athena_view_name': name,
164-
'cur_table_name': self.cur.table_name,
165-
'cur_database': self.cur.database,
165+
'cur_table_name': cur.table_name,
166+
'cur_database': cur.database,
166167
}
167168
compiled_query = template.safe_substitute(columns_tpl)
168169
return compiled_query
@@ -278,20 +279,23 @@ def create_account_mapping_sql(self, name) -> str:
278279
except CidError as exc:
279280
logger.debug(exc)
280281

281-
if self.cur.version.startswith('2'):
282+
if self.get_cur and self.get_cur().version.startswith('2'):
282283
cid_print('Looks like CUR2 is used. Will use it for account map.')
283284
set_parameters({'account-map-source': 'dummy'})
284285

285286
for attempt in range(3):
286287
try:
288+
choices = {
289+
'AWS Organizations (one time account listing)': 'organization',
290+
'CSV file (relative path required)': 'csv',
291+
}
292+
if self.get_cur:
293+
choices['Dummy (CUR account data, no names for CUR1)'] = 'dummy'
294+
287295
metadata_source = get_parameter(
288296
param_name='account-map-source',
289297
message="Please select account metadata collection method",
290-
choices={
291-
'Dummy (CUR account data, no names for CUR1)': 'dummy',
292-
'AWS Organizations (one time account listing)': 'organization',
293-
'CSV file (relative path required)': 'csv',
294-
},
298+
choices=choices,
295299
)
296300
logger.info(f'Attempt {attempt + 2}' )
297301
# Collect account list from different sources of user choice

0 commit comments

Comments
 (0)