<filename>sdk/dotnet/Project/GetProject.cs// *** 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! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace Pulumiverse.Vra.Project
{
    public static class GetProject
    {
        /// <summary>
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// ### S
        /// This is an example of how to create a project data source.
        /// 
        /// **Project data source by its id:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var @this = Vra.Project.GetProject.Invoke(new()
        ///     {
        ///         Id = vra_project.My_project.Id,
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// **Project data source filter by name:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var test_project = Vra.Project.GetProject.Invoke(new()
        ///     {
        ///         Name = vra_project.My_project.Name,
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// A project data source supports the following arguments:
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Task<GetProjectResult> InvokeAsync(GetProjectArgs? args = null, InvokeOptions? options = null)
            => Pulumi.Deployment.Instance.InvokeAsync<GetProjectResult>("vra:project/getProject:getProject", args ?? new GetProjectArgs(), options.WithDefaults());

        /// <summary>
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// ### S
        /// This is an example of how to create a project data source.
        /// 
        /// **Project data source by its id:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var @this = Vra.Project.GetProject.Invoke(new()
        ///     {
        ///         Id = vra_project.My_project.Id,
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// **Project data source filter by name:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var test_project = Vra.Project.GetProject.Invoke(new()
        ///     {
        ///         Name = vra_project.My_project.Name,
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// A project data source supports the following arguments:
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Output<GetProjectResult> Invoke(GetProjectInvokeArgs? args = null, InvokeOptions? options = null)
            => Pulumi.Deployment.Instance.Invoke<GetProjectResult>("vra:project/getProject:getProject", args ?? new GetProjectInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetProjectArgs : global::Pulumi.InvokeArgs
    {
        [Input("administratorRoles")]
        private List<Inputs.GetProjectAdministratorRoleArgs>? _administratorRoles;

        /// <summary>
        /// Administrator users or groups associated with the project. Only administrators can manage project's configuration.
        /// </summary>
        public List<Inputs.GetProjectAdministratorRoleArgs> AdministratorRoles
        {
            get => _administratorRoles ?? (_administratorRoles = new List<Inputs.GetProjectAdministratorRoleArgs>());
            set => _administratorRoles = value;
        }

        [Input("administrators")]
        private List<string>? _administrators;

        /// <summary>
        /// A list of administrator users associated with the project. Only administrators can manage project's configuration.
        /// </summary>
        public List<string> Administrators
        {
            get => _administrators ?? (_administrators = new List<string>());
            set => _administrators = value;
        }

        /// <summary>
        /// A list of storage, network and extensibility constraints to be applied when provisioning through this project.
        /// </summary>
        [Input("constraints")]
        public Inputs.GetProjectConstraintsArgs? Constraints { get; set; }

        [Input("customProperties")]
        private Dictionary<string, object>? _customProperties;

        /// <summary>
        /// The project custom properties which are added to all requests in this project.
        /// </summary>
        public Dictionary<string, object> CustomProperties
        {
            get => _customProperties ?? (_customProperties = new Dictionary<string, object>());
            set => _customProperties = value;
        }

        /// <summary>
        /// A human-friendly description.
        /// </summary>
        [Input("description")]
        public string? Description { get; set; }

        /// <summary>
        /// The id of the image profile instance.
        /// </summary>
        [Input("id")]
        public string? Id { get; set; }

        /// <summary>
        /// The naming template to be used for resources provisioned in this project.
        /// </summary>
        [Input("machineNamingTemplate")]
        public string? MachineNamingTemplate { get; set; }

        [Input("memberRoles")]
        private List<Inputs.GetProjectMemberRoleArgs>? _memberRoles;

        /// <summary>
        /// Member users or groups associated with the project.
        /// </summary>
        public List<Inputs.GetProjectMemberRoleArgs> MemberRoles
        {
            get => _memberRoles ?? (_memberRoles = new List<Inputs.GetProjectMemberRoleArgs>());
            set => _memberRoles = value;
        }

        [Input("members")]
        private List<string>? _members;

        /// <summary>
        /// A list of member users associated with the project.
        /// </summary>
        public List<string> Members
        {
            get => _members ?? (_members = new List<string>());
            set => _members = value;
        }

        /// <summary>
        /// A human-friendly name used as an identifier in APIs that support this option.
        /// </summary>
        [Input("name")]
        public string? Name { get; set; }

        /// <summary>
        /// The timeout that should be used for Blueprint operations and Provisioning tasks. The timeout is in seconds.
        /// </summary>
        [Input("operationTimeout")]
        public int? OperationTimeout { get; set; }

        /// <summary>
        /// The placement policy that will be applied when selecting a cloud zone for provisioning. Must be one of `DEFAULT` or `SPREAD`.
        /// </summary>
        [Input("placementPolicy")]
        public string? PlacementPolicy { get; set; }

        /// <summary>
        /// The id of the organization this entity belongs to.
        /// </summary>
        [Input("sharedResources")]
        public bool? SharedResources { get; set; }

        [Input("viewerRoles")]
        private List<Inputs.GetProjectViewerRoleArgs>? _viewerRoles;

        /// <summary>
        /// Viewer users or groups associated with the project.
        /// </summary>
        public List<Inputs.GetProjectViewerRoleArgs> ViewerRoles
        {
            get => _viewerRoles ?? (_viewerRoles = new List<Inputs.GetProjectViewerRoleArgs>());
            set => _viewerRoles = value;
        }

        [Input("viewers")]
        private List<string>? _viewers;

        /// <summary>
        /// A list of viewer users associated with the project.
        /// </summary>
        public List<string> Viewers
        {
            get => _viewers ?? (_viewers = new List<string>());
            set => _viewers = value;
        }

        [Input("zoneAssignments")]
        private List<Inputs.GetProjectZoneAssignmentArgs>? _zoneAssignments;

        /// <summary>
        /// A list of configurations for zone assignment to a project.
        /// </summary>
        public List<Inputs.GetProjectZoneAssignmentArgs> ZoneAssignments
        {
            get => _zoneAssignments ?? (_zoneAssignments = new List<Inputs.GetProjectZoneAssignmentArgs>());
            set => _zoneAssignments = value;
        }

        public GetProjectArgs()
        {
        }
        public static new GetProjectArgs Empty => new GetProjectArgs();
    }

    public sealed class GetProjectInvokeArgs : global::Pulumi.InvokeArgs
    {
        [Input("administratorRoles")]
        private InputList<Inputs.GetProjectAdministratorRoleInputArgs>? _administratorRoles;

        /// <summary>
        /// Administrator users or groups associated with the project. Only administrators can manage project's configuration.
        /// </summary>
        public InputList<Inputs.GetProjectAdministratorRoleInputArgs> AdministratorRoles
        {
            get => _administratorRoles ?? (_administratorRoles = new InputList<Inputs.GetProjectAdministratorRoleInputArgs>());
            set => _administratorRoles = value;
        }

        [Input("administrators")]
        private InputList<string>? _administrators;

        /// <summary>
        /// A list of administrator users associated with the project. Only administrators can manage project's configuration.
        /// </summary>
        public InputList<string> Administrators
        {
            get => _administrators ?? (_administrators = new InputList<string>());
            set => _administrators = value;
        }

        /// <summary>
        /// A list of storage, network and extensibility constraints to be applied when provisioning through this project.
        /// </summary>
        [Input("constraints")]
        public Input<Inputs.GetProjectConstraintsInputArgs>? Constraints { get; set; }

        [Input("customProperties")]
        private InputMap<object>? _customProperties;

        /// <summary>
        /// The project custom properties which are added to all requests in this project.
        /// </summary>
        public InputMap<object> CustomProperties
        {
            get => _customProperties ?? (_customProperties = new InputMap<object>());
            set => _customProperties = value;
        }

        /// <summary>
        /// A human-friendly description.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// The id of the image profile instance.
        /// </summary>
        [Input("id")]
        public Input<string>? Id { get; set; }

        /// <summary>
        /// The naming template to be used for resources provisioned in this project.
        /// </summary>
        [Input("machineNamingTemplate")]
        public Input<string>? MachineNamingTemplate { get; set; }

        [Input("memberRoles")]
        private InputList<Inputs.GetProjectMemberRoleInputArgs>? _memberRoles;

        /// <summary>
        /// Member users or groups associated with the project.
        /// </summary>
        public InputList<Inputs.GetProjectMemberRoleInputArgs> MemberRoles
        {
            get => _memberRoles ?? (_memberRoles = new InputList<Inputs.GetProjectMemberRoleInputArgs>());
            set => _memberRoles = value;
        }

        [Input("members")]
        private InputList<string>? _members;

        /// <summary>
        /// A list of member users associated with the project.
        /// </summary>
        public InputList<string> Members
        {
            get => _members ?? (_members = new InputList<string>());
            set => _members = value;
        }

        /// <summary>
        /// A human-friendly name used as an identifier in APIs that support this option.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The timeout that should be used for Blueprint operations and Provisioning tasks. The timeout is in seconds.
        /// </summary>
        [Input("operationTimeout")]
        public Input<int>? OperationTimeout { get; set; }

        /// <summary>
        /// The placement policy that will be applied when selecting a cloud zone for provisioning. Must be one of `DEFAULT` or `SPREAD`.
        /// </summary>
        [Input("placementPolicy")]
        public Input<string>? PlacementPolicy { get; set; }

        /// <summary>
        /// The id of the organization this entity belongs to.
        /// </summary>
        [Input("sharedResources")]
        public Input<bool>? SharedResources { get; set; }

        [Input("viewerRoles")]
        private InputList<Inputs.GetProjectViewerRoleInputArgs>? _viewerRoles;

        /// <summary>
        /// Viewer users or groups associated with the project.
        /// </summary>
        public InputList<Inputs.GetProjectViewerRoleInputArgs> ViewerRoles
        {
            get => _viewerRoles ?? (_viewerRoles = new InputList<Inputs.GetProjectViewerRoleInputArgs>());
            set => _viewerRoles = value;
        }

        [Input("viewers")]
        private InputList<string>? _viewers;

        /// <summary>
        /// A list of viewer users associated with the project.
        /// </summary>
        public InputList<string> Viewers
        {
            get => _viewers ?? (_viewers = new InputList<string>());
            set => _viewers = value;
        }

        [Input("zoneAssignments")]
        private InputList<Inputs.GetProjectZoneAssignmentInputArgs>? _zoneAssignments;

        /// <summary>
        /// A list of configurations for zone assignment to a project.
        /// </summary>
        public InputList<Inputs.GetProjectZoneAssignmentInputArgs> ZoneAssignments
        {
            get => _zoneAssignments ?? (_zoneAssignments = new InputList<Inputs.GetProjectZoneAssignmentInputArgs>());
            set => _zoneAssignments = value;
        }

        public GetProjectInvokeArgs()
        {
        }
        public static new GetProjectInvokeArgs Empty => new GetProjectInvokeArgs();
    }


    [OutputType]
    public sealed class GetProjectResult
    {
        public readonly ImmutableArray<Outputs.GetProjectAdministratorRoleResult> AdministratorRoles;
        public readonly ImmutableArray<string> Administrators;
        public readonly Outputs.GetProjectConstraintsResult? Constraints;
        public readonly ImmutableDictionary<string, object>? CustomProperties;
        public readonly string Description;
        public readonly string Id;
        public readonly string? MachineNamingTemplate;
        public readonly ImmutableArray<Outputs.GetProjectMemberRoleResult> MemberRoles;
        public readonly ImmutableArray<string> Members;
        public readonly string Name;
        public readonly int? OperationTimeout;
        public readonly string? PlacementPolicy;
        public readonly bool SharedResources;
        public readonly ImmutableArray<Outputs.GetProjectViewerRoleResult> ViewerRoles;
        public readonly ImmutableArray<string> Viewers;
        public readonly ImmutableArray<Outputs.GetProjectZoneAssignmentResult> ZoneAssignments;

        [OutputConstructor]
        private GetProjectResult(
            ImmutableArray<Outputs.GetProjectAdministratorRoleResult> administratorRoles,

            ImmutableArray<string> administrators,

            Outputs.GetProjectConstraintsResult? constraints,

            ImmutableDictionary<string, object>? customProperties,

            string description,

            string id,

            string? machineNamingTemplate,

            ImmutableArray<Outputs.GetProjectMemberRoleResult> memberRoles,

            ImmutableArray<string> members,

            string name,

            int? operationTimeout,

            string? placementPolicy,

            bool sharedResources,

            ImmutableArray<Outputs.GetProjectViewerRoleResult> viewerRoles,

            ImmutableArray<string> viewers,

            ImmutableArray<Outputs.GetProjectZoneAssignmentResult> zoneAssignments)
        {
            AdministratorRoles = administratorRoles;
            Administrators = administrators;
            Constraints = constraints;
            CustomProperties = customProperties;
            Description = description;
            Id = id;
            MachineNamingTemplate = machineNamingTemplate;
            MemberRoles = memberRoles;
            Members = members;
            Name = name;
            OperationTimeout = operationTimeout;
            PlacementPolicy = placementPolicy;
            SharedResources = sharedResources;
            ViewerRoles = viewerRoles;
            Viewers = viewers;
            ZoneAssignments = zoneAssignments;
        }
    }
}
