# 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__ = [
    'GetProjectResult',
    'AwaitableGetProjectResult',
    'get_project',
    'get_project_output',
]

@pulumi.output_type
class GetProjectResult:
    """
    A collection of values returned by getProject.
    """
    def __init__(__self__, administrator_roles=None, administrators=None, constraints=None, custom_properties=None, description=None, id=None, machine_naming_template=None, member_roles=None, members=None, name=None, operation_timeout=None, placement_policy=None, shared_resources=None, viewer_roles=None, viewers=None, zone_assignments=None):
        if administrator_roles and not isinstance(administrator_roles, list):
            raise TypeError("Expected argument 'administrator_roles' to be a list")
        pulumi.set(__self__, "administrator_roles", administrator_roles)
        if administrators and not isinstance(administrators, list):
            raise TypeError("Expected argument 'administrators' to be a list")
        pulumi.set(__self__, "administrators", administrators)
        if constraints and not isinstance(constraints, dict):
            raise TypeError("Expected argument 'constraints' to be a dict")
        pulumi.set(__self__, "constraints", constraints)
        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 id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if machine_naming_template and not isinstance(machine_naming_template, str):
            raise TypeError("Expected argument 'machine_naming_template' to be a str")
        pulumi.set(__self__, "machine_naming_template", machine_naming_template)
        if member_roles and not isinstance(member_roles, list):
            raise TypeError("Expected argument 'member_roles' to be a list")
        pulumi.set(__self__, "member_roles", member_roles)
        if members and not isinstance(members, list):
            raise TypeError("Expected argument 'members' to be a list")
        pulumi.set(__self__, "members", members)
        if name and not isinstance(name, str):
            raise TypeError("Expected argument 'name' to be a str")
        pulumi.set(__self__, "name", name)
        if operation_timeout and not isinstance(operation_timeout, int):
            raise TypeError("Expected argument 'operation_timeout' to be a int")
        pulumi.set(__self__, "operation_timeout", operation_timeout)
        if placement_policy and not isinstance(placement_policy, str):
            raise TypeError("Expected argument 'placement_policy' to be a str")
        pulumi.set(__self__, "placement_policy", placement_policy)
        if shared_resources and not isinstance(shared_resources, bool):
            raise TypeError("Expected argument 'shared_resources' to be a bool")
        pulumi.set(__self__, "shared_resources", shared_resources)
        if viewer_roles and not isinstance(viewer_roles, list):
            raise TypeError("Expected argument 'viewer_roles' to be a list")
        pulumi.set(__self__, "viewer_roles", viewer_roles)
        if viewers and not isinstance(viewers, list):
            raise TypeError("Expected argument 'viewers' to be a list")
        pulumi.set(__self__, "viewers", viewers)
        if zone_assignments and not isinstance(zone_assignments, list):
            raise TypeError("Expected argument 'zone_assignments' to be a list")
        pulumi.set(__self__, "zone_assignments", zone_assignments)

    @property
    @pulumi.getter(name="administratorRoles")
    def administrator_roles(self) -> Optional[Sequence['outputs.GetProjectAdministratorRoleResult']]:
        return pulumi.get(self, "administrator_roles")

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

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

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

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

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

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

    @property
    @pulumi.getter(name="memberRoles")
    def member_roles(self) -> Optional[Sequence['outputs.GetProjectMemberRoleResult']]:
        return pulumi.get(self, "member_roles")

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

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

    @property
    @pulumi.getter(name="operationTimeout")
    def operation_timeout(self) -> Optional[int]:
        return pulumi.get(self, "operation_timeout")

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

    @property
    @pulumi.getter(name="sharedResources")
    def shared_resources(self) -> bool:
        return pulumi.get(self, "shared_resources")

    @property
    @pulumi.getter(name="viewerRoles")
    def viewer_roles(self) -> Optional[Sequence['outputs.GetProjectViewerRoleResult']]:
        return pulumi.get(self, "viewer_roles")

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

    @property
    @pulumi.getter(name="zoneAssignments")
    def zone_assignments(self) -> Optional[Sequence['outputs.GetProjectZoneAssignmentResult']]:
        return pulumi.get(self, "zone_assignments")


class AwaitableGetProjectResult(GetProjectResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetProjectResult(
            administrator_roles=self.administrator_roles,
            administrators=self.administrators,
            constraints=self.constraints,
            custom_properties=self.custom_properties,
            description=self.description,
            id=self.id,
            machine_naming_template=self.machine_naming_template,
            member_roles=self.member_roles,
            members=self.members,
            name=self.name,
            operation_timeout=self.operation_timeout,
            placement_policy=self.placement_policy,
            shared_resources=self.shared_resources,
            viewer_roles=self.viewer_roles,
            viewers=self.viewers,
            zone_assignments=self.zone_assignments)


def get_project(administrator_roles: Optional[Sequence[pulumi.InputType['GetProjectAdministratorRoleArgs']]] = None,
                administrators: Optional[Sequence[str]] = None,
                constraints: Optional[pulumi.InputType['GetProjectConstraintsArgs']] = None,
                custom_properties: Optional[Mapping[str, Any]] = None,
                description: Optional[str] = None,
                id: Optional[str] = None,
                machine_naming_template: Optional[str] = None,
                member_roles: Optional[Sequence[pulumi.InputType['GetProjectMemberRoleArgs']]] = None,
                members: Optional[Sequence[str]] = None,
                name: Optional[str] = None,
                operation_timeout: Optional[int] = None,
                placement_policy: Optional[str] = None,
                shared_resources: Optional[bool] = None,
                viewer_roles: Optional[Sequence[pulumi.InputType['GetProjectViewerRoleArgs']]] = None,
                viewers: Optional[Sequence[str]] = None,
                zone_assignments: Optional[Sequence[pulumi.InputType['GetProjectZoneAssignmentArgs']]] = None,
                opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetProjectResult:
    """
    ## Example Usage
    ### S
    This is an example of how to create a project data source.

    **Project data source by its id:**

    ```python
    import pulumi
    import pulumi_vra as vra

    this = vra.project.get_project(id=vra_project["my-project"]["id"])
    ```

    **Project data source filter by name:**

    ```python
    import pulumi
    import pulumi_vra as vra

    test_project = vra.project.get_project(name=vra_project["my-project"]["name"])
    ```

    A project data source supports the following arguments:


    :param Sequence[pulumi.InputType['GetProjectAdministratorRoleArgs']] administrator_roles: Administrator users or groups associated with the project. Only administrators can manage project's configuration.
    :param Sequence[str] administrators: A list of administrator users associated with the project. Only administrators can manage project's configuration.
    :param pulumi.InputType['GetProjectConstraintsArgs'] constraints: A list of storage, network and extensibility constraints to be applied when provisioning through this project.
    :param Mapping[str, Any] custom_properties: The project custom properties which are added to all requests in this project.
    :param str description: A human-friendly description.
    :param str id: The id of the image profile instance.
    :param str machine_naming_template: The naming template to be used for resources provisioned in this project.
    :param Sequence[pulumi.InputType['GetProjectMemberRoleArgs']] member_roles: Member users or groups associated with the project.
    :param Sequence[str] members: A list of member users associated with the project.
    :param str name: A human-friendly name used as an identifier in APIs that support this option.
    :param int operation_timeout: The timeout that should be used for Blueprint operations and Provisioning tasks. The timeout is in seconds.
    :param str placement_policy: The placement policy that will be applied when selecting a cloud zone for provisioning. Must be one of `DEFAULT` or `SPREAD`.
    :param bool shared_resources: The id of the organization this entity belongs to.
    :param Sequence[pulumi.InputType['GetProjectViewerRoleArgs']] viewer_roles: Viewer users or groups associated with the project.
    :param Sequence[str] viewers: A list of viewer users associated with the project.
    :param Sequence[pulumi.InputType['GetProjectZoneAssignmentArgs']] zone_assignments: A list of configurations for zone assignment to a project.
    """
    __args__ = dict()
    __args__['administratorRoles'] = administrator_roles
    __args__['administrators'] = administrators
    __args__['constraints'] = constraints
    __args__['customProperties'] = custom_properties
    __args__['description'] = description
    __args__['id'] = id
    __args__['machineNamingTemplate'] = machine_naming_template
    __args__['memberRoles'] = member_roles
    __args__['members'] = members
    __args__['name'] = name
    __args__['operationTimeout'] = operation_timeout
    __args__['placementPolicy'] = placement_policy
    __args__['sharedResources'] = shared_resources
    __args__['viewerRoles'] = viewer_roles
    __args__['viewers'] = viewers
    __args__['zoneAssignments'] = zone_assignments
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('vra:project/getProject:getProject', __args__, opts=opts, typ=GetProjectResult).value

    return AwaitableGetProjectResult(
        administrator_roles=__ret__.administrator_roles,
        administrators=__ret__.administrators,
        constraints=__ret__.constraints,
        custom_properties=__ret__.custom_properties,
        description=__ret__.description,
        id=__ret__.id,
        machine_naming_template=__ret__.machine_naming_template,
        member_roles=__ret__.member_roles,
        members=__ret__.members,
        name=__ret__.name,
        operation_timeout=__ret__.operation_timeout,
        placement_policy=__ret__.placement_policy,
        shared_resources=__ret__.shared_resources,
        viewer_roles=__ret__.viewer_roles,
        viewers=__ret__.viewers,
        zone_assignments=__ret__.zone_assignments)


@_utilities.lift_output_func(get_project)
def get_project_output(administrator_roles: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetProjectAdministratorRoleArgs']]]]] = None,
                       administrators: Optional[pulumi.Input[Optional[Sequence[str]]]] = None,
                       constraints: Optional[pulumi.Input[Optional[pulumi.InputType['GetProjectConstraintsArgs']]]] = None,
                       custom_properties: Optional[pulumi.Input[Optional[Mapping[str, Any]]]] = None,
                       description: Optional[pulumi.Input[Optional[str]]] = None,
                       id: Optional[pulumi.Input[Optional[str]]] = None,
                       machine_naming_template: Optional[pulumi.Input[Optional[str]]] = None,
                       member_roles: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetProjectMemberRoleArgs']]]]] = None,
                       members: Optional[pulumi.Input[Optional[Sequence[str]]]] = None,
                       name: Optional[pulumi.Input[Optional[str]]] = None,
                       operation_timeout: Optional[pulumi.Input[Optional[int]]] = None,
                       placement_policy: Optional[pulumi.Input[Optional[str]]] = None,
                       shared_resources: Optional[pulumi.Input[Optional[bool]]] = None,
                       viewer_roles: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetProjectViewerRoleArgs']]]]] = None,
                       viewers: Optional[pulumi.Input[Optional[Sequence[str]]]] = None,
                       zone_assignments: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetProjectZoneAssignmentArgs']]]]] = None,
                       opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetProjectResult]:
    """
    ## Example Usage
    ### S
    This is an example of how to create a project data source.

    **Project data source by its id:**

    ```python
    import pulumi
    import pulumi_vra as vra

    this = vra.project.get_project(id=vra_project["my-project"]["id"])
    ```

    **Project data source filter by name:**

    ```python
    import pulumi
    import pulumi_vra as vra

    test_project = vra.project.get_project(name=vra_project["my-project"]["name"])
    ```

    A project data source supports the following arguments:


    :param Sequence[pulumi.InputType['GetProjectAdministratorRoleArgs']] administrator_roles: Administrator users or groups associated with the project. Only administrators can manage project's configuration.
    :param Sequence[str] administrators: A list of administrator users associated with the project. Only administrators can manage project's configuration.
    :param pulumi.InputType['GetProjectConstraintsArgs'] constraints: A list of storage, network and extensibility constraints to be applied when provisioning through this project.
    :param Mapping[str, Any] custom_properties: The project custom properties which are added to all requests in this project.
    :param str description: A human-friendly description.
    :param str id: The id of the image profile instance.
    :param str machine_naming_template: The naming template to be used for resources provisioned in this project.
    :param Sequence[pulumi.InputType['GetProjectMemberRoleArgs']] member_roles: Member users or groups associated with the project.
    :param Sequence[str] members: A list of member users associated with the project.
    :param str name: A human-friendly name used as an identifier in APIs that support this option.
    :param int operation_timeout: The timeout that should be used for Blueprint operations and Provisioning tasks. The timeout is in seconds.
    :param str placement_policy: The placement policy that will be applied when selecting a cloud zone for provisioning. Must be one of `DEFAULT` or `SPREAD`.
    :param bool shared_resources: The id of the organization this entity belongs to.
    :param Sequence[pulumi.InputType['GetProjectViewerRoleArgs']] viewer_roles: Viewer users or groups associated with the project.
    :param Sequence[str] viewers: A list of viewer users associated with the project.
    :param Sequence[pulumi.InputType['GetProjectZoneAssignmentArgs']] zone_assignments: A list of configurations for zone assignment to a project.
    """
    ...
