def createProduct()

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)