in src/servicecatalog.py [0:0]
def createProduct(self, portFolioId):
"""
This method will be used to create Product in service Catalog
:return:
"""
templateUrl = self.uploadArtifact()
print(templateUrl)
try:
products = self.sc_client.search_products()
for p in products['ProductViewSummaries']:
if (p['Name'] == self.applicationName):
logging.info("==== Product Exist, hence not creating new one ====")
parameterValue = p['ProductId']
self.produtId = p['ProductId']
print(parameterValue)
logging.info("==== Checking if the version exist ====")
response = self.sc_client.describe_product_as_admin(
AcceptLanguage='en',
Id=parameterValue
)
print(response)
a = response['ProvisioningArtifactSummaries']
print(a)
for b in a:
print(b)
if (b['Name'] == self.version):
logging.info(
"==== Version already exist in service catalog, hence not creating the version ==== ")
return
else:
logging.info("==== Uploading the file to S3 bucket ====")
logging.info("==== version does not exist in service catalog, hence registering the version =====")
try:
response = self.sc_client.create_provisioning_artifact(
AcceptLanguage='en',
ProductId=parameterValue,
Parameters={
'Name': self.version,
'Description': 'This is the new version',
'Info': {
"LoadTemplateFromURL": str(templateUrl)
},
'Type': 'CLOUD_FORMATION_TEMPLATE',
'DisableTemplateValidation': True
}
)
if self.check_provisioning_artifact_status(response['ProvisioningArtifactDetail']['Id'], parameterValue) == 'AVAILABLE':
logging.info("==== Product version has been created sucessfully ====")
elif self.check_provisioning_artifact_status(response['ProvisioningArtifactDetail']['Id'], parameterValue) == 'FAILED':
logging.info("==== Product version creation has failed, hence exiting the system ====")
sys.exit(1)
return
except ClientError as e:
logging.info(
"==== There is a problem while registering the version, hence exiting the system ====")
logging.info(e)
sys.exit(1)
else:
logging.info("==== Product does not exist, hence creating new product ====")
response = self.sc_client.create_product(
AcceptLanguage='en',
Name=self.applicationName,
Owner='CCOE',
Description='This is for application',
Distributor='CCOE',
ProductType='CLOUD_FORMATION_TEMPLATE',
Tags=[
{
'Key': 'name',
'Value': 'S3'
},
],
ProvisioningArtifactParameters={
'Name': self.version,
'Description': 'This is initial version',
'Info': {
"LoadTemplateFromURL": templateUrl
},
'Type': 'CLOUD_FORMATION_TEMPLATE',
'DisableTemplateValidation': True
}
)
productId = response['ProductViewDetail']['ProductViewSummary']['ProductId']
productVersionId = response['ProvisioningArtifactDetail']['Id']
version_status = self.check_provisioning_artifact_status(productVersionId, productId)
self.produtId = productId
if (version_status == 'FAILED'):
logger.error("==== Product version artifact creation has failed ====")
sys.exit(1)
elif (version_status == 'AVAILABLE'):
logger.info("==== Product version artifact creation has been created ====")
logging.info("==== Associating product with portfolio ====")
res = self.sc_client.associate_product_with_portfolio(
AcceptLanguage='en',
ProductId=productId,
PortfolioId=portFolioId
)
logging.info("==== Associating principals with portfolio ====")
response = self.sc_client.associate_principal_with_portfolio(
AcceptLanguage='en',
PortfolioId=portFolioId,
PrincipalARN=self.role,
PrincipalType='IAM'
)
logging.info("==== Creating Constraint with portfolio ====")
response = self.sc_client.create_constraint(
AcceptLanguage='en',
PortfolioId=portFolioId,
ProductId=productId,
Parameters=json.dumps({"RoleArn": self.launchArn}),
Type='LAUNCH'
)
except ClientError as e:
logging.info("==== There is a problem creating service catalog product, hence exiting system ====")
logging.info(e)
sys.exit(1)