def run()

in servicecatalog_factory/workflow/portfolios/create_version_pipeline_template_task.py [0:0]


    def run(self):
        logger_prefix = f"{self.product.get('Name')}-{self.version.get('Name')}"
        logger.info(f"{logger_prefix} - Getting product id")

        product_ids_by_region = {}
        friendly_uid = None

        tags = [
            {"Key": tag.get("Key"), "Value": tag.get("Value"),} for tag in self.tags
        ]

        source = utils.merge(
            self.product.get("Source", {}), self.version.get("Source", {})
        )

        for region, product_details_content in (
            self.input().get("create_products_tasks").items()
        ):
            product_details = json.loads(product_details_content.open("r").read())
            product_ids_by_region[region] = product_details.get("ProductId")
            friendly_uid = product_details.get("uid")

        if self.template.get("Name"):
            with self.client("s3") as s3:
                s3.put_object(
                    Bucket=f"sc-factory-artifacts-{self.factory_account_id}-{self.factory_region}",
                    Key=f"{self.template.get('Name')}/{self.template.get('Version')}/{self.product.get('Name')}/product_ids.json",
                    Body=json.dumps(product_ids_by_region),
                )
                s3.put_object(
                    Bucket=f"sc-factory-artifacts-{self.factory_account_id}-{self.factory_region}",
                    Key=f"{self.template.get('Name')}/{self.template.get('Version')}/{self.product.get('Name')}/{self.version.get('Name')}/template.json",
                    Body=json.dumps(utils.unwrap(self.template)),
                )
            rendered = product_template_factory.get(
                self.template.get("Name"), self.template.get("Version")
            ).render(
                self.template,
                self.product.get("Name"),
                self.version.get("Name"),
                self.version.get("Description", self.product.get("Description")),
                source,
                product_ids_by_region,
                tags,
                friendly_uid,
            )

        elif self.provisioner.get("Type") == "CloudFormation":
            rendered = self.handle_cloudformation_provisioner(
                product_ids_by_region, friendly_uid, tags, source
            )

        elif self.provisioner.get("Type") == "Terraform":
            rendered = self.handle_terraform_provisioner(
                product_ids_by_region, friendly_uid, tags, source
            )

        else:
            raise Exception(f"Unknown type: {self.type}")

        with self.output().open("w") as output_file:
            output_file.write(rendered)