<reponame>pulumiverse/pulumi-vra<filename>sdk/dotnet/Network/GetProfile.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.Network
{
    public static class GetProfile
    {
        /// <summary>
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// ### S
        /// This is an example of how to create a network profile resource.
        /// 
        /// **Network profile data source by its id:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var @this = Vra.Network.GetProfile.Invoke(new()
        ///     {
        ///         Filter = $"name eq '{vra_network_profile.This.Name}'",
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// **Vra network profile data source filter by region id:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var @this = Vra.Network.GetProfile.Invoke(new()
        ///     {
        ///         Filter = $"regionId eq '{data.Vra_region.This.Id}'",
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// A network profile data source supports the following arguments:
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Task<GetProfileResult> InvokeAsync(GetProfileArgs? args = null, InvokeOptions? options = null)
            => Pulumi.Deployment.Instance.InvokeAsync<GetProfileResult>("vra:network/getProfile:getProfile", args ?? new GetProfileArgs(), options.WithDefaults());

        /// <summary>
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// ### S
        /// This is an example of how to create a network profile resource.
        /// 
        /// **Network profile data source by its id:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var @this = Vra.Network.GetProfile.Invoke(new()
        ///     {
        ///         Filter = $"name eq '{vra_network_profile.This.Name}'",
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// **Vra network profile data source filter by region id:**
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Vra = Pulumi.Vra;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var @this = Vra.Network.GetProfile.Invoke(new()
        ///     {
        ///         Filter = $"regionId eq '{data.Vra_region.This.Id}'",
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// A network profile data source supports the following arguments:
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Output<GetProfileResult> Invoke(GetProfileInvokeArgs? args = null, InvokeOptions? options = null)
            => Pulumi.Deployment.Instance.Invoke<GetProfileResult>("vra:network/getProfile:getProfile", args ?? new GetProfileInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetProfileArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// Filter query string that is supported by vRA multi-cloud IaaS API. Example: regionId eq '&lt;regionId&gt;' and cloudAccountId eq '&lt;cloudAccountId&gt;'.
        /// </summary>
        [Input("filter")]
        public string? Filter { get; set; }

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

        /// <summary>
        /// The Id of the fabric network used for outbound access.
        /// </summary>
        [Input("isolatedExternalFabricNetworkId")]
        public string? IsolatedExternalFabricNetworkId { get; set; }

        /// <summary>
        /// The Id of the network domain used for creating isolated networks.
        /// </summary>
        [Input("isolatedNetworkDomainId")]
        public string? IsolatedNetworkDomainId { get; set; }

        [Input("tags")]
        private List<Inputs.GetProfileTagArgs>? _tags;

        /// <summary>
        /// A set of tag keys and optional values that were set on this Network Profile.
        /// example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
        /// </summary>
        public List<Inputs.GetProfileTagArgs> Tags
        {
            get => _tags ?? (_tags = new List<Inputs.GetProfileTagArgs>());
            set => _tags = value;
        }

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

    public sealed class GetProfileInvokeArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// Filter query string that is supported by vRA multi-cloud IaaS API. Example: regionId eq '&lt;regionId&gt;' and cloudAccountId eq '&lt;cloudAccountId&gt;'.
        /// </summary>
        [Input("filter")]
        public Input<string>? Filter { get; set; }

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

        /// <summary>
        /// The Id of the fabric network used for outbound access.
        /// </summary>
        [Input("isolatedExternalFabricNetworkId")]
        public Input<string>? IsolatedExternalFabricNetworkId { get; set; }

        /// <summary>
        /// The Id of the network domain used for creating isolated networks.
        /// </summary>
        [Input("isolatedNetworkDomainId")]
        public Input<string>? IsolatedNetworkDomainId { get; set; }

        [Input("tags")]
        private InputList<Inputs.GetProfileTagInputArgs>? _tags;

        /// <summary>
        /// A set of tag keys and optional values that were set on this Network Profile.
        /// example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
        /// </summary>
        public InputList<Inputs.GetProfileTagInputArgs> Tags
        {
            get => _tags ?? (_tags = new InputList<Inputs.GetProfileTagInputArgs>());
            set => _tags = value;
        }

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


    [OutputType]
    public sealed class GetProfileResult
    {
        /// <summary>
        /// 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.
        /// </summary>
        public readonly ImmutableDictionary<string, object> CustomProperties;
        /// <summary>
        /// A human-friendly description.
        /// </summary>
        public readonly string Description;
        /// <summary>
        /// The external regionId of the resource.
        /// </summary>
        public readonly string ExternalRegionId;
        /// <summary>
        /// A list of fabric network Ids which are assigned to the network profile.
        /// example:[ "6543" ]
        /// </summary>
        public readonly ImmutableArray<string> FabricNetworkIds;
        public readonly string? Filter;
        public readonly string Id;
        public readonly string? IsolatedExternalFabricNetworkId;
        /// <summary>
        /// The CIDR prefix length to be used for the isolated networks that are created with the network profile.
        /// </summary>
        public readonly int IsolatedNetworkCidrPrefix;
        /// <summary>
        /// CIDR of the isolation network domain.
        /// </summary>
        public readonly string IsolatedNetworkDomainCidr;
        public readonly string? IsolatedNetworkDomainId;
        /// <summary>
        /// Specifies the isolation type e.g. none, subnet or security group
        /// </summary>
        public readonly string IsolationType;
        /// <summary>
        /// HATEOAS of the entity
        /// </summary>
        public readonly ImmutableArray<Outputs.GetProfileLinkResult> Links;
        /// <summary>
        /// A human-friendly name used as an identifier in APIs that support this option.
        /// </summary>
        public readonly string Name;
        /// <summary>
        /// The id of the organization this entity belongs to.
        /// </summary>
        public readonly string OrganizationId;
        /// <summary>
        /// Email of the user that owns the entity.
        /// </summary>
        public readonly string Owner;
        /// <summary>
        /// The id of the region for which this profile is defined as in vRealize Automation(vRA).
        /// </summary>
        public readonly string RegionId;
        /// <summary>
        /// A list of security group Ids which are assigned to the network profile.
        /// example:[ "6545" ]
        /// </summary>
        public readonly ImmutableArray<string> SecurityGroupIds;
        /// <summary>
        /// A set of tag keys and optional values that were set on this Network Profile.
        /// example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
        /// </summary>
        public readonly ImmutableArray<Outputs.GetProfileTagResult> Tags;
        /// <summary>
        /// Date when the entity was last updated. The date is ISO 8601 and UTC.
        /// </summary>
        public readonly string UpdatedAt;

        [OutputConstructor]
        private GetProfileResult(
            ImmutableDictionary<string, object> customProperties,

            string description,

            string externalRegionId,

            ImmutableArray<string> fabricNetworkIds,

            string? filter,

            string id,

            string? isolatedExternalFabricNetworkId,

            int isolatedNetworkCidrPrefix,

            string isolatedNetworkDomainCidr,

            string? isolatedNetworkDomainId,

            string isolationType,

            ImmutableArray<Outputs.GetProfileLinkResult> links,

            string name,

            string organizationId,

            string owner,

            string regionId,

            ImmutableArray<string> securityGroupIds,

            ImmutableArray<Outputs.GetProfileTagResult> tags,

            string updatedAt)
        {
            CustomProperties = customProperties;
            Description = description;
            ExternalRegionId = externalRegionId;
            FabricNetworkIds = fabricNetworkIds;
            Filter = filter;
            Id = id;
            IsolatedExternalFabricNetworkId = isolatedExternalFabricNetworkId;
            IsolatedNetworkCidrPrefix = isolatedNetworkCidrPrefix;
            IsolatedNetworkDomainCidr = isolatedNetworkDomainCidr;
            IsolatedNetworkDomainId = isolatedNetworkDomainId;
            IsolationType = isolationType;
            Links = links;
            Name = name;
            OrganizationId = organizationId;
            Owner = owner;
            RegionId = regionId;
            SecurityGroupIds = securityGroupIds;
            Tags = tags;
            UpdatedAt = updatedAt;
        }
    }
}
