in control-tower-account-factory/src/common.py [0:0]
def _get_product_id(self, product_name, product_version, portfolio_name):
"""Return product id , artifact id and path id for porvided product and porfolio name"""
product_id = None
artifact_id = None
path_id = None
version = None
# add lamda role to portfolio
if not self.__add_lambda_to_portfolio_principal(portfolio_name):
return product_id, artifact_id, path_id
self._log_info(f'Searching product name: {product_name}')
try:
sc_response = self.sc_client.search_products_as_admin(
SortBy='Title',
SortOrder='ASCENDING',
ProductSource='ACCOUNT',
Filters={
'FullTextSearch': [
product_name
]
}
)
product_list = []
#Iterate through all return products
for product in sc_response['ProductViewDetails']:
# find product
if product_name in product['ProductViewSummary']['Name']:
product_list.append({'ProductId': product['ProductViewSummary']['ProductId'], 'CreatedTime': product['CreatedTime']})
# if product found
if product_list:
# if more the on product get the latest one based on the date/time
last_product_id = max(product_list, key=lambda item: item['CreatedTime'])
product_id = last_product_id['ProductId']
# search artifacts (versions) of product
product_artifacts = self.sc_client.list_provisioning_artifacts(
AcceptLanguage='en',
ProductId=product_id
)
if product_version:
version = product_version
for artifact in product_artifacts['ProvisioningArtifactDetails']:
# find product that match provided version
if artifact['Name'] == product_version:
artifact_id = artifact['Id']
else:
# get last product version by creation date
last_artifact_id = max(product_artifacts['ProvisioningArtifactDetails'], key=lambda item: item['CreatedTime'])
artifact_id = last_artifact_id['Id']
version = last_artifact_id['Name']
# get product launch path id
launch_paths_list = self.sc_client.list_launch_paths(
ProductId=product_id
)
for launch_path in launch_paths_list['LaunchPathSummaries']:
if launch_path['Name'] == portfolio_name:
path_id = launch_path['Id']
except ClientError as error:
self._log_error(f'Error obtain id for product: {product_name}. Error: {error.response["Error"]}')
self._send_notification('Error obtain product id', f'Product name: {product_name}. Error: {error.response["Error"]}')
return product_id, artifact_id, path_id, version