def __provision_product()

in control-tower-account-factory/src/handler.py [0:0]


    def __provision_product(self, product):
        """provision product to new account"""

        self._log_info(f'Provisioning product {product["product_name"]} - Provision Name: {product["provision_name"]}')
        try:
            if 'parameters' in product:
                parameters = self.__process_paramters(product['parameters'])
                self.sc_client.provision_product(
                    ProductId=product['id'],
                    ProvisioningArtifactId=product['artifact'],
                    ProvisionedProductName=product["provision_name"],
                    ProvisioningParameters=parameters,
                    ProvisioningPreferences={
                        'StackSetAccounts': [
                            self.destination_account
                        ],
                        'StackSetRegions': product['regions']
                    }
                )
            else:
                self.sc_client.provision_product(
                    ProductId=product['id'],
                    ProvisioningArtifactId=product['artifact'],
                    ProvisionedProductName=product["provision_name"],
                    ProvisioningPreferences={
                        'StackSetAccounts': [
                            self.destination_account
                        ],
                        'StackSetRegions': product['regions']
                    }
                )
            self._log_info(f'Provision {product["provision_name"]} started')
            self._track_deployment(product, 'deployment', 'in-progress')
            return True
        except ClientError as error:
            self._log_error(f'Error provision product {product["product_name"]}: {error.response["Error"]}')
            self._send_notification('Error provision product', f'Error provision product {product["product_name"]}: {error.response["Error"]}')
            self._track_deployment(product, 'deployment', 'failed')
            return False