// *** 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 PiersKarsenbarg.Nutanix
{
    public static class GetSubnet
    {
        /// <summary>
        /// Provides a resource to create a subnet based on the input parameters. A subnet is a block of IP addresses.
        /// </summary>
        public static Task<GetSubnetResult> InvokeAsync(GetSubnetArgs? args = null, InvokeOptions? options = null)
            => Pulumi.Deployment.Instance.InvokeAsync<GetSubnetResult>("nutanix:index/getSubnet:getSubnet", args ?? new GetSubnetArgs(), options.WithDefaults());

        /// <summary>
        /// Provides a resource to create a subnet based on the input parameters. A subnet is a block of IP addresses.
        /// </summary>
        public static Output<GetSubnetResult> Invoke(GetSubnetInvokeArgs? args = null, InvokeOptions? options = null)
            => Pulumi.Deployment.Instance.Invoke<GetSubnetResult>("nutanix:index/getSubnet:getSubnet", args ?? new GetSubnetInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetSubnetArgs : Pulumi.InvokeArgs
    {
        [Input("additionalFilters")]
        private List<Inputs.GetSubnetAdditionalFilterArgs>? _additionalFilters;
        public List<Inputs.GetSubnetAdditionalFilterArgs> AdditionalFilters
        {
            get => _additionalFilters ?? (_additionalFilters = new List<Inputs.GetSubnetAdditionalFilterArgs>());
            set => _additionalFilters = value;
        }

        [Input("categories")]
        private List<Inputs.GetSubnetCategoryArgs>? _categories;
        public List<Inputs.GetSubnetCategoryArgs> Categories
        {
            get => _categories ?? (_categories = new List<Inputs.GetSubnetCategoryArgs>());
            set => _categories = value;
        }

        [Input("subnetId")]
        public string? SubnetId { get; set; }

        [Input("subnetName")]
        public string? SubnetName { get; set; }

        public GetSubnetArgs()
        {
        }
    }

    public sealed class GetSubnetInvokeArgs : Pulumi.InvokeArgs
    {
        [Input("additionalFilters")]
        private InputList<Inputs.GetSubnetAdditionalFilterInputArgs>? _additionalFilters;
        public InputList<Inputs.GetSubnetAdditionalFilterInputArgs> AdditionalFilters
        {
            get => _additionalFilters ?? (_additionalFilters = new InputList<Inputs.GetSubnetAdditionalFilterInputArgs>());
            set => _additionalFilters = value;
        }

        [Input("categories")]
        private InputList<Inputs.GetSubnetCategoryInputArgs>? _categories;
        public InputList<Inputs.GetSubnetCategoryInputArgs> Categories
        {
            get => _categories ?? (_categories = new InputList<Inputs.GetSubnetCategoryInputArgs>());
            set => _categories = value;
        }

        [Input("subnetId")]
        public Input<string>? SubnetId { get; set; }

        [Input("subnetName")]
        public Input<string>? SubnetName { get; set; }

        public GetSubnetInvokeArgs()
        {
        }
    }


    [OutputType]
    public sealed class GetSubnetResult
    {
        public readonly ImmutableArray<Outputs.GetSubnetAdditionalFilterResult> AdditionalFilters;
        public readonly string ApiVersion;
        public readonly ImmutableDictionary<string, string> AvailabilityZoneReference;
        public readonly ImmutableArray<Outputs.GetSubnetCategoryResult> Categories;
        public readonly string ClusterName;
        public readonly string ClusterUuid;
        public readonly string DefaultGatewayIp;
        public readonly string Description;
        public readonly ImmutableArray<string> DhcpDomainNameServerLists;
        public readonly ImmutableArray<string> DhcpDomainSearchLists;
        public readonly ImmutableDictionary<string, string> DhcpOptions;
        public readonly ImmutableDictionary<string, string> DhcpServerAddress;
        public readonly int DhcpServerAddressPort;
        public readonly bool EnableNat;
        /// <summary>
        /// The provider-assigned unique ID for this managed resource.
        /// </summary>
        public readonly string Id;
        public readonly ImmutableArray<string> IpConfigPoolListRanges;
        public readonly bool IsExternal;
        public readonly ImmutableArray<Outputs.GetSubnetMessageListResult> MessageLists;
        public readonly ImmutableDictionary<string, string> Metadata;
        public readonly string Name;
        public readonly ImmutableDictionary<string, string> NetworkFunctionChainReference;
        public readonly ImmutableDictionary<string, string> OwnerReference;
        public readonly int PrefixLength;
        public readonly ImmutableDictionary<string, string> ProjectReference;
        public readonly string State;
        public readonly string? SubnetId;
        public readonly string SubnetIp;
        public readonly string? SubnetName;
        public readonly string SubnetType;
        public readonly int VlanId;
        public readonly ImmutableDictionary<string, string> VpcReference;
        public readonly string VswitchName;

        [OutputConstructor]
        private GetSubnetResult(
            ImmutableArray<Outputs.GetSubnetAdditionalFilterResult> additionalFilters,

            string apiVersion,

            ImmutableDictionary<string, string> availabilityZoneReference,

            ImmutableArray<Outputs.GetSubnetCategoryResult> categories,

            string clusterName,

            string clusterUuid,

            string defaultGatewayIp,

            string description,

            ImmutableArray<string> dhcpDomainNameServerLists,

            ImmutableArray<string> dhcpDomainSearchLists,

            ImmutableDictionary<string, string> dhcpOptions,

            ImmutableDictionary<string, string> dhcpServerAddress,

            int dhcpServerAddressPort,

            bool enableNat,

            string id,

            ImmutableArray<string> ipConfigPoolListRanges,

            bool isExternal,

            ImmutableArray<Outputs.GetSubnetMessageListResult> messageLists,

            ImmutableDictionary<string, string> metadata,

            string name,

            ImmutableDictionary<string, string> networkFunctionChainReference,

            ImmutableDictionary<string, string> ownerReference,

            int prefixLength,

            ImmutableDictionary<string, string> projectReference,

            string state,

            string? subnetId,

            string subnetIp,

            string? subnetName,

            string subnetType,

            int vlanId,

            ImmutableDictionary<string, string> vpcReference,

            string vswitchName)
        {
            AdditionalFilters = additionalFilters;
            ApiVersion = apiVersion;
            AvailabilityZoneReference = availabilityZoneReference;
            Categories = categories;
            ClusterName = clusterName;
            ClusterUuid = clusterUuid;
            DefaultGatewayIp = defaultGatewayIp;
            Description = description;
            DhcpDomainNameServerLists = dhcpDomainNameServerLists;
            DhcpDomainSearchLists = dhcpDomainSearchLists;
            DhcpOptions = dhcpOptions;
            DhcpServerAddress = dhcpServerAddress;
            DhcpServerAddressPort = dhcpServerAddressPort;
            EnableNat = enableNat;
            Id = id;
            IpConfigPoolListRanges = ipConfigPoolListRanges;
            IsExternal = isExternal;
            MessageLists = messageLists;
            Metadata = metadata;
            Name = name;
            NetworkFunctionChainReference = networkFunctionChainReference;
            OwnerReference = ownerReference;
            PrefixLength = prefixLength;
            ProjectReference = projectReference;
            State = state;
            SubnetId = subnetId;
            SubnetIp = subnetIp;
            SubnetName = subnetName;
            SubnetType = subnetType;
            VlanId = vlanId;
            VpcReference = vpcReference;
            VswitchName = vswitchName;
        }
    }
}
