# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs

__all__ = [
    'ProvisionedProductOutput',
    'ProvisionedProductParameter',
    'GetEndUserProductsEndUserProductResult',
    'GetLaunchOptionsLaunchOptionResult',
    'GetLaunchOptionsLaunchOptionConstraintSummaryResult',
    'GetLaunchOptionsOptionResult',
    'GetLaunchOptionsOptionConstraintSummaryResult',
    'GetPortfoliosPortfolioResult',
    'GetProductAsEndUsersUserResult',
    'GetProductVersionsProductVersionResult',
    'GetProductVersionsVersionResult',
    'GetProvisionedProductsProductResult',
    'GetProvisionedProductsProductOutputResult',
    'GetProvisionedProductsProductParameterResult',
    'GetProvisionedProductsProvisionedProductResult',
    'GetProvisionedProductsProvisionedProductOutputResult',
    'GetProvisionedProductsProvisionedProductParameterResult',
]

@pulumi.output_type
class ProvisionedProductOutput(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "outputKey":
            suggest = "output_key"
        elif key == "outputValue":
            suggest = "output_value"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProvisionedProductOutput. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProvisionedProductOutput.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProvisionedProductOutput.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 description: Optional[str] = None,
                 output_key: Optional[str] = None,
                 output_value: Optional[str] = None):
        """
        :param str description: Description of the output value defined in the template.
        :param str output_key: The name of the output value defined in the template.
        :param str output_value: The content of the output value defined in the template.
        """
        if description is not None:
            pulumi.set(__self__, "description", description)
        if output_key is not None:
            pulumi.set(__self__, "output_key", output_key)
        if output_value is not None:
            pulumi.set(__self__, "output_value", output_value)

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        Description of the output value defined in the template.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="outputKey")
    def output_key(self) -> Optional[str]:
        """
        The name of the output value defined in the template.
        """
        return pulumi.get(self, "output_key")

    @property
    @pulumi.getter(name="outputValue")
    def output_value(self) -> Optional[str]:
        """
        The content of the output value defined in the template.
        """
        return pulumi.get(self, "output_value")


@pulumi.output_type
class ProvisionedProductParameter(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "parameterKey":
            suggest = "parameter_key"
        elif key == "parameterValue":
            suggest = "parameter_value"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProvisionedProductParameter. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProvisionedProductParameter.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProvisionedProductParameter.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 parameter_key: Optional[str] = None,
                 parameter_value: Optional[str] = None):
        """
        :param str parameter_key: The name of the parameter defined in the template.
        :param str parameter_value: The Template parameter value entered by the user.
        """
        if parameter_key is not None:
            pulumi.set(__self__, "parameter_key", parameter_key)
        if parameter_value is not None:
            pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterKey")
    def parameter_key(self) -> Optional[str]:
        """
        The name of the parameter defined in the template.
        """
        return pulumi.get(self, "parameter_key")

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> Optional[str]:
        """
        The Template parameter value entered by the user.
        """
        return pulumi.get(self, "parameter_value")


@pulumi.output_type
class GetEndUserProductsEndUserProductResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 description: str,
                 has_default_launch_option: bool,
                 id: str,
                 product_arn: str,
                 product_id: str,
                 product_name: str,
                 product_type: str,
                 provider_name: str):
        """
        :param str create_time: Product creation time.According to ISO8601 standard, UTC time is used in the format: YYYY-MM-DDThh:mm:ssZ.
        :param str description: Product description.
        :param bool has_default_launch_option: Whether there is a default Startup option. Value:-true: There is a default Startup option, and there is no need to fill in the portfolio when starting the product or updating the instance.-false: there is no default Startup option. You must fill in the portfolio when starting the product or updating the instance. For more information about how to obtain the portfolio, see ListLaunchOptions.> If the product is added to only one product portfolio, there will be a default Startup option. If the product is added to multiple product combinations, there will be multiple startup options at the same time, but there is no default Startup option at this time.
        :param str id: ID of product, Its value is the same as `product_id`.
        :param str product_arn: Product ARN.
        :param str product_id: Product ID.
        :param str product_name: Product name.
        :param str product_type: Type of product.The value is Ros, which indicates the resource orchestration service (ROS).
        :param str provider_name: Product provider.
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "has_default_launch_option", has_default_launch_option)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "product_arn", product_arn)
        pulumi.set(__self__, "product_id", product_id)
        pulumi.set(__self__, "product_name", product_name)
        pulumi.set(__self__, "product_type", product_type)
        pulumi.set(__self__, "provider_name", provider_name)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        Product creation time.According to ISO8601 standard, UTC time is used in the format: YYYY-MM-DDThh:mm:ssZ.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Product description.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="hasDefaultLaunchOption")
    def has_default_launch_option(self) -> bool:
        """
        Whether there is a default Startup option. Value:-true: There is a default Startup option, and there is no need to fill in the portfolio when starting the product or updating the instance.-false: there is no default Startup option. You must fill in the portfolio when starting the product or updating the instance. For more information about how to obtain the portfolio, see ListLaunchOptions.> If the product is added to only one product portfolio, there will be a default Startup option. If the product is added to multiple product combinations, there will be multiple startup options at the same time, but there is no default Startup option at this time.
        """
        return pulumi.get(self, "has_default_launch_option")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        ID of product, Its value is the same as `product_id`.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="productArn")
    def product_arn(self) -> str:
        """
        Product ARN.
        """
        return pulumi.get(self, "product_arn")

    @property
    @pulumi.getter(name="productId")
    def product_id(self) -> str:
        """
        Product ID.
        """
        return pulumi.get(self, "product_id")

    @property
    @pulumi.getter(name="productName")
    def product_name(self) -> str:
        """
        Product name.
        """
        return pulumi.get(self, "product_name")

    @property
    @pulumi.getter(name="productType")
    def product_type(self) -> str:
        """
        Type of product.The value is Ros, which indicates the resource orchestration service (ROS).
        """
        return pulumi.get(self, "product_type")

    @property
    @pulumi.getter(name="providerName")
    def provider_name(self) -> str:
        """
        Product provider.
        """
        return pulumi.get(self, "provider_name")


@pulumi.output_type
class GetLaunchOptionsLaunchOptionResult(dict):
    def __init__(__self__, *,
                 constraint_summaries: Sequence['outputs.GetLaunchOptionsLaunchOptionConstraintSummaryResult'],
                 id: str,
                 portfolio_id: str,
                 portfolio_name: str):
        """
        :param Sequence['GetLaunchOptionsLaunchOptionConstraintSummaryArgs'] constraint_summaries: List of constraints.
        :param str id: ID of Service Catalog Launch Option.
        :param str portfolio_id: Product mix ID.
        :param str portfolio_name: Product portfolio name.
        """
        pulumi.set(__self__, "constraint_summaries", constraint_summaries)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "portfolio_id", portfolio_id)
        pulumi.set(__self__, "portfolio_name", portfolio_name)

    @property
    @pulumi.getter(name="constraintSummaries")
    def constraint_summaries(self) -> Sequence['outputs.GetLaunchOptionsLaunchOptionConstraintSummaryResult']:
        """
        List of constraints.
        """
        return pulumi.get(self, "constraint_summaries")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        ID of Service Catalog Launch Option.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="portfolioId")
    def portfolio_id(self) -> str:
        """
        Product mix ID.
        """
        return pulumi.get(self, "portfolio_id")

    @property
    @pulumi.getter(name="portfolioName")
    def portfolio_name(self) -> str:
        """
        Product portfolio name.
        """
        return pulumi.get(self, "portfolio_name")


@pulumi.output_type
class GetLaunchOptionsLaunchOptionConstraintSummaryResult(dict):
    def __init__(__self__, *,
                 constraint_type: str,
                 description: str):
        """
        :param str constraint_type: Constraint type.The value is Launch, which indicates that the constraint is started.
        :param str description: Constraint description.
        """
        pulumi.set(__self__, "constraint_type", constraint_type)
        pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter(name="constraintType")
    def constraint_type(self) -> str:
        """
        Constraint type.The value is Launch, which indicates that the constraint is started.
        """
        return pulumi.get(self, "constraint_type")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Constraint description.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetLaunchOptionsOptionResult(dict):
    def __init__(__self__, *,
                 constraint_summaries: Sequence['outputs.GetLaunchOptionsOptionConstraintSummaryResult'],
                 id: str,
                 portfolio_id: str,
                 portfolio_name: str):
        """
        :param Sequence['GetLaunchOptionsOptionConstraintSummaryArgs'] constraint_summaries: List of constraints.
        :param str id: ID of Service Catalog Launch Option.
        :param str portfolio_id: Product mix ID.
        :param str portfolio_name: Product portfolio name.
        """
        pulumi.set(__self__, "constraint_summaries", constraint_summaries)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "portfolio_id", portfolio_id)
        pulumi.set(__self__, "portfolio_name", portfolio_name)

    @property
    @pulumi.getter(name="constraintSummaries")
    def constraint_summaries(self) -> Sequence['outputs.GetLaunchOptionsOptionConstraintSummaryResult']:
        """
        List of constraints.
        """
        return pulumi.get(self, "constraint_summaries")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        ID of Service Catalog Launch Option.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="portfolioId")
    def portfolio_id(self) -> str:
        """
        Product mix ID.
        """
        return pulumi.get(self, "portfolio_id")

    @property
    @pulumi.getter(name="portfolioName")
    def portfolio_name(self) -> str:
        """
        Product portfolio name.
        """
        return pulumi.get(self, "portfolio_name")


@pulumi.output_type
class GetLaunchOptionsOptionConstraintSummaryResult(dict):
    def __init__(__self__, *,
                 constraint_type: str,
                 description: str):
        """
        :param str constraint_type: Constraint type.The value is Launch, which indicates that the constraint is started.
        :param str description: Constraint description.
        """
        pulumi.set(__self__, "constraint_type", constraint_type)
        pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter(name="constraintType")
    def constraint_type(self) -> str:
        """
        Constraint type.The value is Launch, which indicates that the constraint is started.
        """
        return pulumi.get(self, "constraint_type")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Constraint description.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetPortfoliosPortfolioResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 description: str,
                 id: str,
                 portfolio_arn: str,
                 portfolio_id: str,
                 portfolio_name: str,
                 provider_name: str):
        """
        :param str create_time: The creation time of the portfolio
        :param str description: The description of the portfolio
        :param str id: The ID of the portfolio
        :param str portfolio_arn: The ARN of the portfolio
        :param str portfolio_id: The ID of the portfolio
        :param str portfolio_name: The name of the portfolio
        :param str provider_name: The provider name of the portfolio
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "portfolio_arn", portfolio_arn)
        pulumi.set(__self__, "portfolio_id", portfolio_id)
        pulumi.set(__self__, "portfolio_name", portfolio_name)
        pulumi.set(__self__, "provider_name", provider_name)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The creation time of the portfolio
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        The description of the portfolio
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID of the portfolio
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="portfolioArn")
    def portfolio_arn(self) -> str:
        """
        The ARN of the portfolio
        """
        return pulumi.get(self, "portfolio_arn")

    @property
    @pulumi.getter(name="portfolioId")
    def portfolio_id(self) -> str:
        """
        The ID of the portfolio
        """
        return pulumi.get(self, "portfolio_id")

    @property
    @pulumi.getter(name="portfolioName")
    def portfolio_name(self) -> str:
        """
        The name of the portfolio
        """
        return pulumi.get(self, "portfolio_name")

    @property
    @pulumi.getter(name="providerName")
    def provider_name(self) -> str:
        """
        The provider name of the portfolio
        """
        return pulumi.get(self, "provider_name")


@pulumi.output_type
class GetProductAsEndUsersUserResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 description: str,
                 has_default_launch_option: bool,
                 id: str,
                 product_arn: str,
                 product_id: str,
                 product_name: str,
                 product_type: str,
                 provider_name: str):
        """
        :param str create_time: Product creation time.According to ISO8601 standard, UTC time is used in the format: YYYY-MM-DDThh:mm:ssZ.
        :param str description: Product description.
        :param bool has_default_launch_option: Whether there is a default Startup option. Value:-true: There is a default Startup option, and there is no need to fill in the portfolio when starting the product or updating the instance.-false: there is no default Startup option. You must fill in the portfolio when starting the product or updating the instance. > If the product is added to only one product portfolio, there will be a default Startup option. If the product is added to multiple product combinations, there will be multiple startup options at the same time, but there is no default Startup option at this time.
        :param str id: ID of product, Its value is the same as `product_id`.
        :param str product_arn: Product ARN.
        :param str product_id: Product ID.
        :param str product_name: Product name.
        :param str product_type: Type of product.The value is Ros, which indicates the resource orchestration service (ROS).
        :param str provider_name: Product provider.
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "has_default_launch_option", has_default_launch_option)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "product_arn", product_arn)
        pulumi.set(__self__, "product_id", product_id)
        pulumi.set(__self__, "product_name", product_name)
        pulumi.set(__self__, "product_type", product_type)
        pulumi.set(__self__, "provider_name", provider_name)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        Product creation time.According to ISO8601 standard, UTC time is used in the format: YYYY-MM-DDThh:mm:ssZ.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Product description.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="hasDefaultLaunchOption")
    def has_default_launch_option(self) -> bool:
        """
        Whether there is a default Startup option. Value:-true: There is a default Startup option, and there is no need to fill in the portfolio when starting the product or updating the instance.-false: there is no default Startup option. You must fill in the portfolio when starting the product or updating the instance. > If the product is added to only one product portfolio, there will be a default Startup option. If the product is added to multiple product combinations, there will be multiple startup options at the same time, but there is no default Startup option at this time.
        """
        return pulumi.get(self, "has_default_launch_option")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        ID of product, Its value is the same as `product_id`.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="productArn")
    def product_arn(self) -> str:
        """
        Product ARN.
        """
        return pulumi.get(self, "product_arn")

    @property
    @pulumi.getter(name="productId")
    def product_id(self) -> str:
        """
        Product ID.
        """
        return pulumi.get(self, "product_id")

    @property
    @pulumi.getter(name="productName")
    def product_name(self) -> str:
        """
        Product name.
        """
        return pulumi.get(self, "product_name")

    @property
    @pulumi.getter(name="productType")
    def product_type(self) -> str:
        """
        Type of product.The value is Ros, which indicates the resource orchestration service (ROS).
        """
        return pulumi.get(self, "product_type")

    @property
    @pulumi.getter(name="providerName")
    def provider_name(self) -> str:
        """
        Product provider.
        """
        return pulumi.get(self, "provider_name")


@pulumi.output_type
class GetProductVersionsProductVersionResult(dict):
    def __init__(__self__, *,
                 active: bool,
                 create_time: str,
                 description: str,
                 guidance: str,
                 id: str,
                 product_id: str,
                 product_version_id: str,
                 product_version_name: str,
                 template_type: str,
                 template_url: str):
        """
        :param bool active: Whether the version is activated
        :param str create_time: The creation time of the resource
        :param str description: Version description
        :param str guidance: Administrator guidance
        :param str id: ID of product version.
        :param str product_id: Product ID
        :param str product_version_id: The first ID of the resource
        :param str product_version_name: The name of the resource
        :param str template_type: Template Type
        :param str template_url: Template URL
        """
        pulumi.set(__self__, "active", active)
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "guidance", guidance)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "product_id", product_id)
        pulumi.set(__self__, "product_version_id", product_version_id)
        pulumi.set(__self__, "product_version_name", product_version_name)
        pulumi.set(__self__, "template_type", template_type)
        pulumi.set(__self__, "template_url", template_url)

    @property
    @pulumi.getter
    def active(self) -> bool:
        """
        Whether the version is activated
        """
        return pulumi.get(self, "active")

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The creation time of the resource
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Version description
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def guidance(self) -> str:
        """
        Administrator guidance
        """
        return pulumi.get(self, "guidance")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        ID of product version.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="productId")
    def product_id(self) -> str:
        """
        Product ID
        """
        return pulumi.get(self, "product_id")

    @property
    @pulumi.getter(name="productVersionId")
    def product_version_id(self) -> str:
        """
        The first ID of the resource
        """
        return pulumi.get(self, "product_version_id")

    @property
    @pulumi.getter(name="productVersionName")
    def product_version_name(self) -> str:
        """
        The name of the resource
        """
        return pulumi.get(self, "product_version_name")

    @property
    @pulumi.getter(name="templateType")
    def template_type(self) -> str:
        """
        Template Type
        """
        return pulumi.get(self, "template_type")

    @property
    @pulumi.getter(name="templateUrl")
    def template_url(self) -> str:
        """
        Template URL
        """
        return pulumi.get(self, "template_url")


@pulumi.output_type
class GetProductVersionsVersionResult(dict):
    def __init__(__self__, *,
                 active: bool,
                 create_time: str,
                 description: str,
                 guidance: str,
                 id: str,
                 product_id: str,
                 product_version_id: str,
                 product_version_name: str,
                 template_type: str,
                 template_url: str):
        """
        :param bool active: Whether the version is activated
        :param str create_time: The creation time of the resource
        :param str description: Version description
        :param str guidance: Administrator guidance
        :param str id: ID of product version.
        :param str product_id: Product ID
        :param str product_version_id: The first ID of the resource
        :param str product_version_name: The name of the resource
        :param str template_type: Template Type
        :param str template_url: Template URL
        """
        pulumi.set(__self__, "active", active)
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "guidance", guidance)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "product_id", product_id)
        pulumi.set(__self__, "product_version_id", product_version_id)
        pulumi.set(__self__, "product_version_name", product_version_name)
        pulumi.set(__self__, "template_type", template_type)
        pulumi.set(__self__, "template_url", template_url)

    @property
    @pulumi.getter
    def active(self) -> bool:
        """
        Whether the version is activated
        """
        return pulumi.get(self, "active")

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The creation time of the resource
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Version description
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def guidance(self) -> str:
        """
        Administrator guidance
        """
        return pulumi.get(self, "guidance")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        ID of product version.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="productId")
    def product_id(self) -> str:
        """
        Product ID
        """
        return pulumi.get(self, "product_id")

    @property
    @pulumi.getter(name="productVersionId")
    def product_version_id(self) -> str:
        """
        The first ID of the resource
        """
        return pulumi.get(self, "product_version_id")

    @property
    @pulumi.getter(name="productVersionName")
    def product_version_name(self) -> str:
        """
        The name of the resource
        """
        return pulumi.get(self, "product_version_name")

    @property
    @pulumi.getter(name="templateType")
    def template_type(self) -> str:
        """
        Template Type
        """
        return pulumi.get(self, "template_type")

    @property
    @pulumi.getter(name="templateUrl")
    def template_url(self) -> str:
        """
        Template URL
        """
        return pulumi.get(self, "template_url")


@pulumi.output_type
class GetProvisionedProductsProductResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 id: str,
                 last_provisioning_task_id: str,
                 last_successful_provisioning_task_id: str,
                 last_task_id: str,
                 outputs: Sequence['outputs.GetProvisionedProductsProductOutputResult'],
                 owner_principal_id: str,
                 owner_principal_type: str,
                 parameters: Sequence['outputs.GetProvisionedProductsProductParameterResult'],
                 portfolio_id: str,
                 product_id: str,
                 product_name: str,
                 product_version_id: str,
                 product_version_name: str,
                 provisioned_product_arn: str,
                 provisioned_product_id: str,
                 provisioned_product_name: str,
                 provisioned_product_type: str,
                 stack_id: str,
                 stack_region_id: str,
                 status: str,
                 status_message: str,
                 tags: Optional[Mapping[str, Any]] = None):
        """
        :param str create_time: The creation time of the product instance
        :param str last_provisioning_task_id: The ID of the last instance operation task
        :param str last_successful_provisioning_task_id: The ID of the last successful instance operation task
        :param str last_task_id: The ID of the last task
        :param str owner_principal_id: The RAM entity ID of the owner
        :param str owner_principal_type: The RAM entity type of the owner
        :param str portfolio_id: Product mix ID.> When there is a default Startup option, there is no need to fill in the portfolio. When there is no default Startup option, you must fill in the portfolio.
        :param str product_id: Product ID.
        :param str product_name: The name of the product
        :param str product_version_id: Product version ID.
        :param str product_version_name: The name of the product version
        :param str provisioned_product_arn: The ARN of the product instance
        :param str provisioned_product_id: The ID of the instance.
        :param str provisioned_product_name: The name of the instance.The length is 1~128 characters.
        :param str provisioned_product_type: Instance type.The value is RosStack, which indicates the stack of Alibaba Cloud resource orchestration service (ROS).
        :param str stack_id: The ID of the ROS stack
        :param str stack_region_id: The ID of the region to which the resource stack of the Alibaba Cloud resource orchestration service (ROS) belongs.
        :param str status: Instance status
        :param str status_message: The status message of the product instance
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "last_provisioning_task_id", last_provisioning_task_id)
        pulumi.set(__self__, "last_successful_provisioning_task_id", last_successful_provisioning_task_id)
        pulumi.set(__self__, "last_task_id", last_task_id)
        pulumi.set(__self__, "outputs", outputs)
        pulumi.set(__self__, "owner_principal_id", owner_principal_id)
        pulumi.set(__self__, "owner_principal_type", owner_principal_type)
        pulumi.set(__self__, "parameters", parameters)
        pulumi.set(__self__, "portfolio_id", portfolio_id)
        pulumi.set(__self__, "product_id", product_id)
        pulumi.set(__self__, "product_name", product_name)
        pulumi.set(__self__, "product_version_id", product_version_id)
        pulumi.set(__self__, "product_version_name", product_version_name)
        pulumi.set(__self__, "provisioned_product_arn", provisioned_product_arn)
        pulumi.set(__self__, "provisioned_product_id", provisioned_product_id)
        pulumi.set(__self__, "provisioned_product_name", provisioned_product_name)
        pulumi.set(__self__, "provisioned_product_type", provisioned_product_type)
        pulumi.set(__self__, "stack_id", stack_id)
        pulumi.set(__self__, "stack_region_id", stack_region_id)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "status_message", status_message)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The creation time of the product instance
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def id(self) -> str:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lastProvisioningTaskId")
    def last_provisioning_task_id(self) -> str:
        """
        The ID of the last instance operation task
        """
        return pulumi.get(self, "last_provisioning_task_id")

    @property
    @pulumi.getter(name="lastSuccessfulProvisioningTaskId")
    def last_successful_provisioning_task_id(self) -> str:
        """
        The ID of the last successful instance operation task
        """
        return pulumi.get(self, "last_successful_provisioning_task_id")

    @property
    @pulumi.getter(name="lastTaskId")
    def last_task_id(self) -> str:
        """
        The ID of the last task
        """
        return pulumi.get(self, "last_task_id")

    @property
    @pulumi.getter
    def outputs(self) -> Sequence['outputs.GetProvisionedProductsProductOutputResult']:
        return pulumi.get(self, "outputs")

    @property
    @pulumi.getter(name="ownerPrincipalId")
    def owner_principal_id(self) -> str:
        """
        The RAM entity ID of the owner
        """
        return pulumi.get(self, "owner_principal_id")

    @property
    @pulumi.getter(name="ownerPrincipalType")
    def owner_principal_type(self) -> str:
        """
        The RAM entity type of the owner
        """
        return pulumi.get(self, "owner_principal_type")

    @property
    @pulumi.getter
    def parameters(self) -> Sequence['outputs.GetProvisionedProductsProductParameterResult']:
        return pulumi.get(self, "parameters")

    @property
    @pulumi.getter(name="portfolioId")
    def portfolio_id(self) -> str:
        """
        Product mix ID.> When there is a default Startup option, there is no need to fill in the portfolio. When there is no default Startup option, you must fill in the portfolio.
        """
        return pulumi.get(self, "portfolio_id")

    @property
    @pulumi.getter(name="productId")
    def product_id(self) -> str:
        """
        Product ID.
        """
        return pulumi.get(self, "product_id")

    @property
    @pulumi.getter(name="productName")
    def product_name(self) -> str:
        """
        The name of the product
        """
        return pulumi.get(self, "product_name")

    @property
    @pulumi.getter(name="productVersionId")
    def product_version_id(self) -> str:
        """
        Product version ID.
        """
        return pulumi.get(self, "product_version_id")

    @property
    @pulumi.getter(name="productVersionName")
    def product_version_name(self) -> str:
        """
        The name of the product version
        """
        return pulumi.get(self, "product_version_name")

    @property
    @pulumi.getter(name="provisionedProductArn")
    def provisioned_product_arn(self) -> str:
        """
        The ARN of the product instance
        """
        return pulumi.get(self, "provisioned_product_arn")

    @property
    @pulumi.getter(name="provisionedProductId")
    def provisioned_product_id(self) -> str:
        """
        The ID of the instance.
        """
        return pulumi.get(self, "provisioned_product_id")

    @property
    @pulumi.getter(name="provisionedProductName")
    def provisioned_product_name(self) -> str:
        """
        The name of the instance.The length is 1~128 characters.
        """
        return pulumi.get(self, "provisioned_product_name")

    @property
    @pulumi.getter(name="provisionedProductType")
    def provisioned_product_type(self) -> str:
        """
        Instance type.The value is RosStack, which indicates the stack of Alibaba Cloud resource orchestration service (ROS).
        """
        return pulumi.get(self, "provisioned_product_type")

    @property
    @pulumi.getter(name="stackId")
    def stack_id(self) -> str:
        """
        The ID of the ROS stack
        """
        return pulumi.get(self, "stack_id")

    @property
    @pulumi.getter(name="stackRegionId")
    def stack_region_id(self) -> str:
        """
        The ID of the region to which the resource stack of the Alibaba Cloud resource orchestration service (ROS) belongs.
        """
        return pulumi.get(self, "stack_region_id")

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        Instance status
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="statusMessage")
    def status_message(self) -> str:
        """
        The status message of the product instance
        """
        return pulumi.get(self, "status_message")

    @property
    @pulumi.getter
    def tags(self) -> Optional[Mapping[str, Any]]:
        return pulumi.get(self, "tags")


@pulumi.output_type
class GetProvisionedProductsProductOutputResult(dict):
    def __init__(__self__, *,
                 description: str,
                 output_key: str,
                 output_value: str):
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "output_key", output_key)
        pulumi.set(__self__, "output_value", output_value)

    @property
    @pulumi.getter
    def description(self) -> str:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="outputKey")
    def output_key(self) -> str:
        return pulumi.get(self, "output_key")

    @property
    @pulumi.getter(name="outputValue")
    def output_value(self) -> str:
        return pulumi.get(self, "output_value")


@pulumi.output_type
class GetProvisionedProductsProductParameterResult(dict):
    def __init__(__self__, *,
                 parameter_key: str,
                 parameter_value: str):
        pulumi.set(__self__, "parameter_key", parameter_key)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterKey")
    def parameter_key(self) -> str:
        return pulumi.get(self, "parameter_key")

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> str:
        return pulumi.get(self, "parameter_value")


@pulumi.output_type
class GetProvisionedProductsProvisionedProductResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 id: str,
                 last_provisioning_task_id: str,
                 last_successful_provisioning_task_id: str,
                 last_task_id: str,
                 outputs: Sequence['outputs.GetProvisionedProductsProvisionedProductOutputResult'],
                 owner_principal_id: str,
                 owner_principal_type: str,
                 parameters: Sequence['outputs.GetProvisionedProductsProvisionedProductParameterResult'],
                 portfolio_id: str,
                 product_id: str,
                 product_name: str,
                 product_version_id: str,
                 product_version_name: str,
                 provisioned_product_arn: str,
                 provisioned_product_id: str,
                 provisioned_product_name: str,
                 provisioned_product_type: str,
                 stack_id: str,
                 stack_region_id: str,
                 status: str,
                 status_message: str,
                 tags: Optional[Mapping[str, Any]] = None):
        """
        :param str create_time: The creation time of the product instance
        :param str last_provisioning_task_id: The ID of the last instance operation task
        :param str last_successful_provisioning_task_id: The ID of the last successful instance operation task
        :param str last_task_id: The ID of the last task
        :param str owner_principal_id: The RAM entity ID of the owner
        :param str owner_principal_type: The RAM entity type of the owner
        :param str portfolio_id: Product mix ID.> When there is a default Startup option, there is no need to fill in the portfolio. When there is no default Startup option, you must fill in the portfolio.
        :param str product_id: Product ID.
        :param str product_name: The name of the product
        :param str product_version_id: Product version ID.
        :param str product_version_name: The name of the product version
        :param str provisioned_product_arn: The ARN of the product instance
        :param str provisioned_product_id: The ID of the instance.
        :param str provisioned_product_name: The name of the instance.The length is 1~128 characters.
        :param str provisioned_product_type: Instance type.The value is RosStack, which indicates the stack of Alibaba Cloud resource orchestration service (ROS).
        :param str stack_id: The ID of the ROS stack
        :param str stack_region_id: The ID of the region to which the resource stack of the Alibaba Cloud resource orchestration service (ROS) belongs.
        :param str status: Instance status
        :param str status_message: The status message of the product instance
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "last_provisioning_task_id", last_provisioning_task_id)
        pulumi.set(__self__, "last_successful_provisioning_task_id", last_successful_provisioning_task_id)
        pulumi.set(__self__, "last_task_id", last_task_id)
        pulumi.set(__self__, "outputs", outputs)
        pulumi.set(__self__, "owner_principal_id", owner_principal_id)
        pulumi.set(__self__, "owner_principal_type", owner_principal_type)
        pulumi.set(__self__, "parameters", parameters)
        pulumi.set(__self__, "portfolio_id", portfolio_id)
        pulumi.set(__self__, "product_id", product_id)
        pulumi.set(__self__, "product_name", product_name)
        pulumi.set(__self__, "product_version_id", product_version_id)
        pulumi.set(__self__, "product_version_name", product_version_name)
        pulumi.set(__self__, "provisioned_product_arn", provisioned_product_arn)
        pulumi.set(__self__, "provisioned_product_id", provisioned_product_id)
        pulumi.set(__self__, "provisioned_product_name", provisioned_product_name)
        pulumi.set(__self__, "provisioned_product_type", provisioned_product_type)
        pulumi.set(__self__, "stack_id", stack_id)
        pulumi.set(__self__, "stack_region_id", stack_region_id)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "status_message", status_message)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The creation time of the product instance
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def id(self) -> str:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lastProvisioningTaskId")
    def last_provisioning_task_id(self) -> str:
        """
        The ID of the last instance operation task
        """
        return pulumi.get(self, "last_provisioning_task_id")

    @property
    @pulumi.getter(name="lastSuccessfulProvisioningTaskId")
    def last_successful_provisioning_task_id(self) -> str:
        """
        The ID of the last successful instance operation task
        """
        return pulumi.get(self, "last_successful_provisioning_task_id")

    @property
    @pulumi.getter(name="lastTaskId")
    def last_task_id(self) -> str:
        """
        The ID of the last task
        """
        return pulumi.get(self, "last_task_id")

    @property
    @pulumi.getter
    def outputs(self) -> Sequence['outputs.GetProvisionedProductsProvisionedProductOutputResult']:
        return pulumi.get(self, "outputs")

    @property
    @pulumi.getter(name="ownerPrincipalId")
    def owner_principal_id(self) -> str:
        """
        The RAM entity ID of the owner
        """
        return pulumi.get(self, "owner_principal_id")

    @property
    @pulumi.getter(name="ownerPrincipalType")
    def owner_principal_type(self) -> str:
        """
        The RAM entity type of the owner
        """
        return pulumi.get(self, "owner_principal_type")

    @property
    @pulumi.getter
    def parameters(self) -> Sequence['outputs.GetProvisionedProductsProvisionedProductParameterResult']:
        return pulumi.get(self, "parameters")

    @property
    @pulumi.getter(name="portfolioId")
    def portfolio_id(self) -> str:
        """
        Product mix ID.> When there is a default Startup option, there is no need to fill in the portfolio. When there is no default Startup option, you must fill in the portfolio.
        """
        return pulumi.get(self, "portfolio_id")

    @property
    @pulumi.getter(name="productId")
    def product_id(self) -> str:
        """
        Product ID.
        """
        return pulumi.get(self, "product_id")

    @property
    @pulumi.getter(name="productName")
    def product_name(self) -> str:
        """
        The name of the product
        """
        return pulumi.get(self, "product_name")

    @property
    @pulumi.getter(name="productVersionId")
    def product_version_id(self) -> str:
        """
        Product version ID.
        """
        return pulumi.get(self, "product_version_id")

    @property
    @pulumi.getter(name="productVersionName")
    def product_version_name(self) -> str:
        """
        The name of the product version
        """
        return pulumi.get(self, "product_version_name")

    @property
    @pulumi.getter(name="provisionedProductArn")
    def provisioned_product_arn(self) -> str:
        """
        The ARN of the product instance
        """
        return pulumi.get(self, "provisioned_product_arn")

    @property
    @pulumi.getter(name="provisionedProductId")
    def provisioned_product_id(self) -> str:
        """
        The ID of the instance.
        """
        return pulumi.get(self, "provisioned_product_id")

    @property
    @pulumi.getter(name="provisionedProductName")
    def provisioned_product_name(self) -> str:
        """
        The name of the instance.The length is 1~128 characters.
        """
        return pulumi.get(self, "provisioned_product_name")

    @property
    @pulumi.getter(name="provisionedProductType")
    def provisioned_product_type(self) -> str:
        """
        Instance type.The value is RosStack, which indicates the stack of Alibaba Cloud resource orchestration service (ROS).
        """
        return pulumi.get(self, "provisioned_product_type")

    @property
    @pulumi.getter(name="stackId")
    def stack_id(self) -> str:
        """
        The ID of the ROS stack
        """
        return pulumi.get(self, "stack_id")

    @property
    @pulumi.getter(name="stackRegionId")
    def stack_region_id(self) -> str:
        """
        The ID of the region to which the resource stack of the Alibaba Cloud resource orchestration service (ROS) belongs.
        """
        return pulumi.get(self, "stack_region_id")

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        Instance status
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="statusMessage")
    def status_message(self) -> str:
        """
        The status message of the product instance
        """
        return pulumi.get(self, "status_message")

    @property
    @pulumi.getter
    def tags(self) -> Optional[Mapping[str, Any]]:
        return pulumi.get(self, "tags")


@pulumi.output_type
class GetProvisionedProductsProvisionedProductOutputResult(dict):
    def __init__(__self__, *,
                 description: str,
                 output_key: str,
                 output_value: str):
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "output_key", output_key)
        pulumi.set(__self__, "output_value", output_value)

    @property
    @pulumi.getter
    def description(self) -> str:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="outputKey")
    def output_key(self) -> str:
        return pulumi.get(self, "output_key")

    @property
    @pulumi.getter(name="outputValue")
    def output_value(self) -> str:
        return pulumi.get(self, "output_value")


@pulumi.output_type
class GetProvisionedProductsProvisionedProductParameterResult(dict):
    def __init__(__self__, *,
                 parameter_key: str,
                 parameter_value: str):
        pulumi.set(__self__, "parameter_key", parameter_key)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterKey")
    def parameter_key(self) -> str:
        return pulumi.get(self, "parameter_key")

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> str:
        return pulumi.get(self, "parameter_value")


