<filename>sdk/dotnet/Network/Profile.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
{
    /// <summary>
    /// ## Example Usage
    /// ### S
    /// This is an example of how to create a network profile resource.
    /// 
    /// **Network profile:**
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using Vra = Pulumiverse.Vra;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var simple = new Vra.Network.Profile("simple", new()
    ///     {
    ///         Description = "Simple Network Profile with no isolation.",
    ///         RegionId = data.Vra_region.This.Id,
    ///         FabricNetworkIds = new[]
    ///         {
    ///             data.Vra_fabric_network.Subnet_1.Id,
    ///             data.Vra_fabric_network.Subnet_2.Id,
    ///         },
    ///         IsolationType = "NONE",
    ///         Tags = new[]
    ///         {
    ///             new Vra.Network.Inputs.ProfileTagArgs
    ///             {
    ///                 Key = "foo",
    ///                 Value = "bar",
    ///             },
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// A network profile resource supports the following arguments:
    /// </summary>
    [VraResourceType("vra:network/profile:Profile")]
    public partial class Profile : global::Pulumi.CustomResource
    {
        /// <summary>
        /// The ID of the cloud account this entity belongs to.
        /// </summary>
        [Output("cloudAccountId")]
        public Output<string> CloudAccountId { get; private set; } = null!;

        /// <summary>
        /// Date when  entity was created. Date and time format is ISO 8601 and UTC.
        /// </summary>
        [Output("createdAt")]
        public Output<string> CreatedAt { get; private set; } = null!;

        /// <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>
        [Output("customProperties")]
        public Output<ImmutableDictionary<string, object>> CustomProperties { get; private set; } = null!;

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

        /// <summary>
        /// The external regionId of the resource.
        /// </summary>
        [Output("externalRegionId")]
        public Output<string> ExternalRegionId { get; private set; } = null!;

        /// <summary>
        /// A list of fabric network Ids which are assigned to the network profile.
        /// example:[ "6543" ]
        /// </summary>
        [Output("fabricNetworkIds")]
        public Output<ImmutableArray<string>> FabricNetworkIds { get; private set; } = null!;

        /// <summary>
        /// The id of the fabric network used for outbound access.
        /// </summary>
        [Output("isolatedExternalFabricNetworkId")]
        public Output<string?> IsolatedExternalFabricNetworkId { get; private set; } = null!;

        /// <summary>
        /// The CIDR prefix length to be used for the isolated networks that are created with the network profile.
        /// </summary>
        [Output("isolatedNetworkCidrPrefix")]
        public Output<int?> IsolatedNetworkCidrPrefix { get; private set; } = null!;

        /// <summary>
        /// CIDR of the isolation network domain.
        /// </summary>
        [Output("isolatedNetworkDomainCidr")]
        public Output<string?> IsolatedNetworkDomainCidr { get; private set; } = null!;

        /// <summary>
        /// The id of the network domain used for creating isolated networks.
        /// </summary>
        [Output("isolatedNetworkDomainId")]
        public Output<string?> IsolatedNetworkDomainId { get; private set; } = null!;

        /// <summary>
        /// Specifies the isolation type e.g. none, subnet or security group
        /// </summary>
        [Output("isolationType")]
        public Output<string?> IsolationType { get; private set; } = null!;

        /// <summary>
        /// HATEOAS of the entity
        /// </summary>
        [Output("links")]
        public Output<ImmutableArray<Outputs.ProfileLink>> Links { get; private set; } = null!;

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

        /// <summary>
        /// ID of organization that entity belongs to.
        /// </summary>
        [Output("orgId")]
        public Output<string> OrgId { get; private set; } = null!;

        /// <summary>
        /// The id of the organization this entity belongs to. Deprecated, refer to org_id instead.
        /// </summary>
        [Output("organizationId")]
        public Output<string> OrganizationId { get; private set; } = null!;

        /// <summary>
        /// Email of the user that owns the entity.
        /// </summary>
        [Output("owner")]
        public Output<string> Owner { get; private set; } = null!;

        /// <summary>
        /// The id of the region for which this profile is defined as in vRealize Automation(vRA).
        /// </summary>
        [Output("regionId")]
        public Output<string> RegionId { get; private set; } = null!;

        /// <summary>
        /// A list of security group Ids which are assigned to the network profile.
        /// example:[ "6545" ]
        /// </summary>
        [Output("securityGroupIds")]
        public Output<ImmutableArray<string>> SecurityGroupIds { get; private set; } = null!;

        /// <summary>
        /// A set of tag keys and optional values that were set on this Network Profile.
        /// example:[ { "key" : "ownedBy", "value": "Rainpole" } ]
        /// </summary>
        [Output("tags")]
        public Output<ImmutableArray<Outputs.ProfileTag>> Tags { get; private set; } = null!;

        /// <summary>
        /// Date when the entity was last updated. The date is ISO 8601 and UTC.
        /// </summary>
        [Output("updatedAt")]
        public Output<string> UpdatedAt { get; private set; } = null!;


        /// <summary>
        /// Create a Profile resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public Profile(string name, ProfileArgs args, CustomResourceOptions? options = null)
            : base("vra:network/profile:Profile", name, args ?? new ProfileArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Profile(string name, Input<string> id, ProfileState? state = null, CustomResourceOptions? options = null)
            : base("vra:network/profile:Profile", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/pulumiverse",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing Profile resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static Profile Get(string name, Input<string> id, ProfileState? state = null, CustomResourceOptions? options = null)
        {
            return new Profile(name, id, state, options);
        }
    }

    public sealed class ProfileArgs : global::Pulumi.ResourceArgs
    {
        [Input("customProperties")]
        private InputMap<object>? _customProperties;

        /// <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 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; }

        [Input("fabricNetworkIds")]
        private InputList<string>? _fabricNetworkIds;

        /// <summary>
        /// A list of fabric network Ids which are assigned to the network profile.
        /// example:[ "6543" ]
        /// </summary>
        public InputList<string> FabricNetworkIds
        {
            get => _fabricNetworkIds ?? (_fabricNetworkIds = new InputList<string>());
            set => _fabricNetworkIds = value;
        }

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

        /// <summary>
        /// The CIDR prefix length to be used for the isolated networks that are created with the network profile.
        /// </summary>
        [Input("isolatedNetworkCidrPrefix")]
        public Input<int>? IsolatedNetworkCidrPrefix { get; set; }

        /// <summary>
        /// CIDR of the isolation network domain.
        /// </summary>
        [Input("isolatedNetworkDomainCidr")]
        public Input<string>? IsolatedNetworkDomainCidr { get; set; }

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

        /// <summary>
        /// Specifies the isolation type e.g. none, subnet or security group
        /// </summary>
        [Input("isolationType")]
        public Input<string>? IsolationType { get; set; }

        /// <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 id of the region for which this profile is defined as in vRealize Automation(vRA).
        /// </summary>
        [Input("regionId", required: true)]
        public Input<string> RegionId { get; set; } = null!;

        [Input("securityGroupIds")]
        private InputList<string>? _securityGroupIds;

        /// <summary>
        /// A list of security group Ids which are assigned to the network profile.
        /// example:[ "6545" ]
        /// </summary>
        public InputList<string> SecurityGroupIds
        {
            get => _securityGroupIds ?? (_securityGroupIds = new InputList<string>());
            set => _securityGroupIds = value;
        }

        [Input("tags")]
        private InputList<Inputs.ProfileTagArgs>? _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.ProfileTagArgs> Tags
        {
            get => _tags ?? (_tags = new InputList<Inputs.ProfileTagArgs>());
            set => _tags = value;
        }

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

    public sealed class ProfileState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// The ID of the cloud account this entity belongs to.
        /// </summary>
        [Input("cloudAccountId")]
        public Input<string>? CloudAccountId { get; set; }

        /// <summary>
        /// Date when  entity was created. Date and time format is ISO 8601 and UTC.
        /// </summary>
        [Input("createdAt")]
        public Input<string>? CreatedAt { get; set; }

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

        /// <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 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 external regionId of the resource.
        /// </summary>
        [Input("externalRegionId")]
        public Input<string>? ExternalRegionId { get; set; }

        [Input("fabricNetworkIds")]
        private InputList<string>? _fabricNetworkIds;

        /// <summary>
        /// A list of fabric network Ids which are assigned to the network profile.
        /// example:[ "6543" ]
        /// </summary>
        public InputList<string> FabricNetworkIds
        {
            get => _fabricNetworkIds ?? (_fabricNetworkIds = new InputList<string>());
            set => _fabricNetworkIds = value;
        }

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

        /// <summary>
        /// The CIDR prefix length to be used for the isolated networks that are created with the network profile.
        /// </summary>
        [Input("isolatedNetworkCidrPrefix")]
        public Input<int>? IsolatedNetworkCidrPrefix { get; set; }

        /// <summary>
        /// CIDR of the isolation network domain.
        /// </summary>
        [Input("isolatedNetworkDomainCidr")]
        public Input<string>? IsolatedNetworkDomainCidr { get; set; }

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

        /// <summary>
        /// Specifies the isolation type e.g. none, subnet or security group
        /// </summary>
        [Input("isolationType")]
        public Input<string>? IsolationType { get; set; }

        [Input("links")]
        private InputList<Inputs.ProfileLinkGetArgs>? _links;

        /// <summary>
        /// HATEOAS of the entity
        /// </summary>
        public InputList<Inputs.ProfileLinkGetArgs> Links
        {
            get => _links ?? (_links = new InputList<Inputs.ProfileLinkGetArgs>());
            set => _links = 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>
        /// ID of organization that entity belongs to.
        /// </summary>
        [Input("orgId")]
        public Input<string>? OrgId { get; set; }

        /// <summary>
        /// The id of the organization this entity belongs to. Deprecated, refer to org_id instead.
        /// </summary>
        [Input("organizationId")]
        public Input<string>? OrganizationId { get; set; }

        /// <summary>
        /// Email of the user that owns the entity.
        /// </summary>
        [Input("owner")]
        public Input<string>? Owner { get; set; }

        /// <summary>
        /// The id of the region for which this profile is defined as in vRealize Automation(vRA).
        /// </summary>
        [Input("regionId")]
        public Input<string>? RegionId { get; set; }

        [Input("securityGroupIds")]
        private InputList<string>? _securityGroupIds;

        /// <summary>
        /// A list of security group Ids which are assigned to the network profile.
        /// example:[ "6545" ]
        /// </summary>
        public InputList<string> SecurityGroupIds
        {
            get => _securityGroupIds ?? (_securityGroupIds = new InputList<string>());
            set => _securityGroupIds = value;
        }

        [Input("tags")]
        private InputList<Inputs.ProfileTagGetArgs>? _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.ProfileTagGetArgs> Tags
        {
            get => _tags ?? (_tags = new InputList<Inputs.ProfileTagGetArgs>());
            set => _tags = value;
        }

        /// <summary>
        /// Date when the entity was last updated. The date is ISO 8601 and UTC.
        /// </summary>
        [Input("updatedAt")]
        public Input<string>? UpdatedAt { get; set; }

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