# 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
from ._inputs import *

__all__ = [
    'GetProfileResult',
    'AwaitableGetProfileResult',
    'get_profile',
    'get_profile_output',
]

@pulumi.output_type
class GetProfileResult:
    """
    A collection of values returned by getProfile.
    """
    def __init__(__self__, custom_properties=None, description=None, external_region_id=None, fabric_network_ids=None, filter=None, id=None, isolated_external_fabric_network_id=None, isolated_network_cidr_prefix=None, isolated_network_domain_cidr=None, isolated_network_domain_id=None, isolation_type=None, links=None, name=None, organization_id=None, owner=None, region_id=None, security_group_ids=None, tags=None, updated_at=None):
        if custom_properties and not isinstance(custom_properties, dict):
            raise TypeError("Expected argument 'custom_properties' to be a dict")
        pulumi.set(__self__, "custom_properties", custom_properties)
        if description and not isinstance(description, str):
            raise TypeError("Expected argument 'description' to be a str")
        pulumi.set(__self__, "description", description)
        if external_region_id and not isinstance(external_region_id, str):
            raise TypeError("Expected argument 'external_region_id' to be a str")
        pulumi.set(__self__, "external_region_id", external_region_id)
        if fabric_network_ids and not isinstance(fabric_network_ids, list):
            raise TypeError("Expected argument 'fabric_network_ids' to be a list")
        pulumi.set(__self__, "fabric_network_ids", fabric_network_ids)
        if filter and not isinstance(filter, str):
            raise TypeError("Expected argument 'filter' to be a str")
        pulumi.set(__self__, "filter", filter)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if isolated_external_fabric_network_id and not isinstance(isolated_external_fabric_network_id, str):
            raise TypeError("Expected argument 'isolated_external_fabric_network_id' to be a str")
        pulumi.set(__self__, "isolated_external_fabric_network_id", isolated_external_fabric_network_id)
        if isolated_network_cidr_prefix and not isinstance(isolated_network_cidr_prefix, int):
            raise TypeError("Expected argument 'isolated_network_cidr_prefix' to be a int")
        pulumi.set(__self__, "isolated_network_cidr_prefix", isolated_network_cidr_prefix)
        if isolated_network_domain_cidr and not isinstance(isolated_network_domain_cidr, str):
            raise TypeError("Expected argument 'isolated_network_domain_cidr' to be a str")
        pulumi.set(__self__, "isolated_network_domain_cidr", isolated_network_domain_cidr)
        if isolated_network_domain_id and not isinstance(isolated_network_domain_id, str):
            raise TypeError("Expected argument 'isolated_network_domain_id' to be a str")
        pulumi.set(__self__, "isolated_network_domain_id", isolated_network_domain_id)
        if isolation_type and not isinstance(isolation_type, str):
            raise TypeError("Expected argument 'isolation_type' to be a str")
        pulumi.set(__self__, "isolation_type", isolation_type)
        if links and not isinstance(links, list):
            raise TypeError("Expected argument 'links' to be a list")
        pulumi.set(__self__, "links", links)
        if name and not isinstance(name, str):
            raise TypeError("Expected argument 'name' to be a str")
        pulumi.set(__self__, "name", name)
        if organization_id and not isinstance(organization_id, str):
            raise TypeError("Expected argument 'organization_id' to be a str")
        pulumi.set(__self__, "organization_id", organization_id)
        if owner and not isinstance(owner, str):
            raise TypeError("Expected argument 'owner' to be a str")
        pulumi.set(__self__, "owner", owner)
        if region_id and not isinstance(region_id, str):
            raise TypeError("Expected argument 'region_id' to be a str")
        pulumi.set(__self__, "region_id", region_id)
        if security_group_ids and not isinstance(security_group_ids, list):
            raise TypeError("Expected argument 'security_group_ids' to be a list")
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        if tags and not isinstance(tags, list):
            raise TypeError("Expected argument 'tags' to be a list")
        pulumi.set(__self__, "tags", tags)
        if updated_at and not isinstance(updated_at, str):
            raise TypeError("Expected argument 'updated_at' to be a str")
        pulumi.set(__self__, "updated_at", updated_at)

    @property
    @pulumi.getter(name="customProperties")
    def custom_properties(self) -> Mapping[str, Any]:
        """
        Additional properties that may be used to extend the Network Profile object that is produced from this specification. For isolationType security group, datastoreId identifies the Compute Resource Edge datastore. computeCluster and resourcePoolId identify the Compute Resource Edge cluster. For isolationType subnet, distributedLogicalRouterStateLink identifies the on-demand network distributed local router. onDemandNetworkIPAssignmentType identifies the on-demand network IP range assignment type static, dynamic, or mixed.
        """
        return pulumi.get(self, "custom_properties")

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

    @property
    @pulumi.getter(name="externalRegionId")
    def external_region_id(self) -> str:
        """
        The external regionId of the resource.
        """
        return pulumi.get(self, "external_region_id")

    @property
    @pulumi.getter(name="fabricNetworkIds")
    def fabric_network_ids(self) -> Sequence[str]:
        """
        A list of fabric network Ids which are assigned to the network profile.
        example:[ "6543" ]
        """
        return pulumi.get(self, "fabric_network_ids")

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

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

    @property
    @pulumi.getter(name="isolatedExternalFabricNetworkId")
    def isolated_external_fabric_network_id(self) -> Optional[str]:
        return pulumi.get(self, "isolated_external_fabric_network_id")

    @property
    @pulumi.getter(name="isolatedNetworkCidrPrefix")
    def isolated_network_cidr_prefix(self) -> int:
        """
        The CIDR prefix length to be used for the isolated networks that are created with the network profile.
        """
        return pulumi.get(self, "isolated_network_cidr_prefix")

    @property
    @pulumi.getter(name="isolatedNetworkDomainCidr")
    def isolated_network_domain_cidr(self) -> str:
        """
        CIDR of the isolation network domain.
        """
        return pulumi.get(self, "isolated_network_domain_cidr")

    @property
    @pulumi.getter(name="isolatedNetworkDomainId")
    def isolated_network_domain_id(self) -> Optional[str]:
        return pulumi.get(self, "isolated_network_domain_id")

    @property
    @pulumi.getter(name="isolationType")
    def isolation_type(self) -> str:
        """
        Specifies the isolation type e.g. none, subnet or security group
        """
        return pulumi.get(self, "isolation_type")

    @property
    @pulumi.getter
    def links(self) -> Sequence['outputs.GetProfileLinkResult']:
        """
        HATEOAS of the entity
        """
        return pulumi.get(self, "links")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A human-friendly name used as an identifier in APIs that support this option.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> str:
        """
        The id of the organization this entity belongs to.
        """
        return pulumi.get(self, "organization_id")

    @property
    @pulumi.getter
    def owner(self) -> str:
        """
        Email of the user that owns the entity.
        """
        return pulumi.get(self, "owner")

    @property
    @pulumi.getter(name="regionId")
    def region_id(self) -> str:
        """
        The id of the region for which this profile is defined as in vRealize Automation(vRA).
        """
        return pulumi.get(self, "region_id")

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> Sequence[str]:
        """
        A list of security group Ids which are assigned to the network profile.
        example:[ "6545" ]
        """
        return pulumi.get(self, "security_group_ids")

    @property
    @pulumi.getter
    def tags(self) -> Sequence['outputs.GetProfileTagResult']:
        """
        A set of tag keys and optional values that were set on this Network Profile.
        example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> str:
        """
        Date when the entity was last updated. The date is ISO 8601 and UTC.
        """
        return pulumi.get(self, "updated_at")


class AwaitableGetProfileResult(GetProfileResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetProfileResult(
            custom_properties=self.custom_properties,
            description=self.description,
            external_region_id=self.external_region_id,
            fabric_network_ids=self.fabric_network_ids,
            filter=self.filter,
            id=self.id,
            isolated_external_fabric_network_id=self.isolated_external_fabric_network_id,
            isolated_network_cidr_prefix=self.isolated_network_cidr_prefix,
            isolated_network_domain_cidr=self.isolated_network_domain_cidr,
            isolated_network_domain_id=self.isolated_network_domain_id,
            isolation_type=self.isolation_type,
            links=self.links,
            name=self.name,
            organization_id=self.organization_id,
            owner=self.owner,
            region_id=self.region_id,
            security_group_ids=self.security_group_ids,
            tags=self.tags,
            updated_at=self.updated_at)


def get_profile(filter: Optional[str] = None,
                id: Optional[str] = None,
                isolated_external_fabric_network_id: Optional[str] = None,
                isolated_network_domain_id: Optional[str] = None,
                tags: Optional[Sequence[pulumi.InputType['GetProfileTagArgs']]] = None,
                opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetProfileResult:
    """
    ## Example Usage
    ### S
    This is an example of how to create a network profile resource.

    **Network profile data source by its id:**

    ```python
    import pulumi
    import pulumi_vra as vra

    this = vra.network.get_profile(filter=f"name eq '{vra_network_profile['this']['name']}'")
    ```

    **Vra network profile data source filter by region id:**

    ```python
    import pulumi
    import pulumi_vra as vra

    this = vra.network.get_profile(filter=f"regionId eq '{data['vra_region']['this']['id']}'")
    ```

    A network profile data source supports the following arguments:


    :param str filter: Filter query string that is supported by vRA multi-cloud IaaS API. Example: regionId eq '<regionId>' and cloudAccountId eq '<cloudAccountId>'.
    :param str id: The id of the image profile instance.
    :param str isolated_external_fabric_network_id: The Id of the fabric network used for outbound access.
    :param str isolated_network_domain_id: The Id of the network domain used for creating isolated networks.
    :param Sequence[pulumi.InputType['GetProfileTagArgs']] tags: A set of tag keys and optional values that were set on this Network Profile.
           example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
    """
    __args__ = dict()
    __args__['filter'] = filter
    __args__['id'] = id
    __args__['isolatedExternalFabricNetworkId'] = isolated_external_fabric_network_id
    __args__['isolatedNetworkDomainId'] = isolated_network_domain_id
    __args__['tags'] = tags
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('vra:network/getProfile:getProfile', __args__, opts=opts, typ=GetProfileResult).value

    return AwaitableGetProfileResult(
        custom_properties=__ret__.custom_properties,
        description=__ret__.description,
        external_region_id=__ret__.external_region_id,
        fabric_network_ids=__ret__.fabric_network_ids,
        filter=__ret__.filter,
        id=__ret__.id,
        isolated_external_fabric_network_id=__ret__.isolated_external_fabric_network_id,
        isolated_network_cidr_prefix=__ret__.isolated_network_cidr_prefix,
        isolated_network_domain_cidr=__ret__.isolated_network_domain_cidr,
        isolated_network_domain_id=__ret__.isolated_network_domain_id,
        isolation_type=__ret__.isolation_type,
        links=__ret__.links,
        name=__ret__.name,
        organization_id=__ret__.organization_id,
        owner=__ret__.owner,
        region_id=__ret__.region_id,
        security_group_ids=__ret__.security_group_ids,
        tags=__ret__.tags,
        updated_at=__ret__.updated_at)


@_utilities.lift_output_func(get_profile)
def get_profile_output(filter: Optional[pulumi.Input[Optional[str]]] = None,
                       id: Optional[pulumi.Input[Optional[str]]] = None,
                       isolated_external_fabric_network_id: Optional[pulumi.Input[Optional[str]]] = None,
                       isolated_network_domain_id: Optional[pulumi.Input[Optional[str]]] = None,
                       tags: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetProfileTagArgs']]]]] = None,
                       opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetProfileResult]:
    """
    ## Example Usage
    ### S
    This is an example of how to create a network profile resource.

    **Network profile data source by its id:**

    ```python
    import pulumi
    import pulumi_vra as vra

    this = vra.network.get_profile(filter=f"name eq '{vra_network_profile['this']['name']}'")
    ```

    **Vra network profile data source filter by region id:**

    ```python
    import pulumi
    import pulumi_vra as vra

    this = vra.network.get_profile(filter=f"regionId eq '{data['vra_region']['this']['id']}'")
    ```

    A network profile data source supports the following arguments:


    :param str filter: Filter query string that is supported by vRA multi-cloud IaaS API. Example: regionId eq '<regionId>' and cloudAccountId eq '<cloudAccountId>'.
    :param str id: The id of the image profile instance.
    :param str isolated_external_fabric_network_id: The Id of the fabric network used for outbound access.
    :param str isolated_network_domain_id: The Id of the network domain used for creating isolated networks.
    :param Sequence[pulumi.InputType['GetProfileTagArgs']] tags: A set of tag keys and optional values that were set on this Network Profile.
           example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
    """
    ...
