// *** 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.Fortios
{
    public static class GetSystemdhcpServer
    {
        /// <summary>
        /// Use this data source to get information on an fortios systemdhcp server
        /// </summary>
        public static Task<GetSystemdhcpServerResult> InvokeAsync(GetSystemdhcpServerArgs args, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.InvokeAsync<GetSystemdhcpServerResult>("fortios:index/getSystemdhcpServer:getSystemdhcpServer", args ?? new GetSystemdhcpServerArgs(), options.WithDefaults());

        /// <summary>
        /// Use this data source to get information on an fortios systemdhcp server
        /// </summary>
        public static Output<GetSystemdhcpServerResult> Invoke(GetSystemdhcpServerInvokeArgs args, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.Invoke<GetSystemdhcpServerResult>("fortios:index/getSystemdhcpServer:getSystemdhcpServer", args ?? new GetSystemdhcpServerInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetSystemdhcpServerArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// Specify the fosid of the desired systemdhcp server.
        /// </summary>
        [Input("fosid", required: true)]
        public int Fosid { get; set; }

        /// <summary>
        /// Specifies the vdom to which the data source will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public string? Vdomparam { get; set; }

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

    public sealed class GetSystemdhcpServerInvokeArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// Specify the fosid of the desired systemdhcp server.
        /// </summary>
        [Input("fosid", required: true)]
        public Input<int> Fosid { get; set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the data source will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

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


    [OutputType]
    public sealed class GetSystemdhcpServerResult
    {
        /// <summary>
        /// Enable/disable auto configuration.
        /// </summary>
        public readonly string AutoConfiguration;
        /// <summary>
        /// Enable/disable use of this DHCP server once this interface has been assigned an IP address from FortiIPAM.
        /// </summary>
        public readonly string AutoManagedStatus;
        /// <summary>
        /// Time in seconds to wait after a conflicted IP address is removed from the DHCP range before it can be reused.
        /// </summary>
        public readonly int ConflictedIpTimeout;
        /// <summary>
        /// DDNS authentication mode.
        /// </summary>
        public readonly string DdnsAuth;
        /// <summary>
        /// DDNS update key (base 64 encoding).
        /// </summary>
        public readonly string DdnsKey;
        /// <summary>
        /// DDNS update key name.
        /// </summary>
        public readonly string DdnsKeyname;
        /// <summary>
        /// DDNS server IP.
        /// </summary>
        public readonly string DdnsServerIp;
        /// <summary>
        /// TTL.
        /// </summary>
        public readonly int DdnsTtl;
        /// <summary>
        /// Enable/disable DDNS update for DHCP.
        /// </summary>
        public readonly string DdnsUpdate;
        /// <summary>
        /// Enable/disable DDNS update override for DHCP.
        /// </summary>
        public readonly string DdnsUpdateOverride;
        /// <summary>
        /// Zone of your domain name (ex. DDNS.com).
        /// </summary>
        public readonly string DdnsZone;
        /// <summary>
        /// Default gateway IP address assigned by the DHCP server.
        /// </summary>
        public readonly string DefaultGateway;
        /// <summary>
        /// Enable/disable populating of DHCP server settings from FortiIPAM.
        /// </summary>
        public readonly string DhcpSettingsFromFortiipam;
        /// <summary>
        /// DNS server 1.
        /// </summary>
        public readonly string DnsServer1;
        /// <summary>
        /// DNS server 2.
        /// </summary>
        public readonly string DnsServer2;
        /// <summary>
        /// DNS server 3.
        /// </summary>
        public readonly string DnsServer3;
        /// <summary>
        /// DNS server 4.
        /// </summary>
        public readonly string DnsServer4;
        /// <summary>
        /// Options for assigning DNS servers to DHCP clients.
        /// </summary>
        public readonly string DnsService;
        /// <summary>
        /// Domain name suffix for the IP addresses that the DHCP server assigns to clients.
        /// </summary>
        public readonly string Domain;
        /// <summary>
        /// Exclude one or more ranges of IP addresses from being assigned to clients. The structure of `exclude_range` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemdhcpServerExcludeRangeResult> ExcludeRanges;
        /// <summary>
        /// Name of the boot file on the TFTP server.
        /// </summary>
        public readonly string Filename;
        /// <summary>
        /// Enable/disable FortiClient-On-Net service for this DHCP server.
        /// </summary>
        public readonly string ForticlientOnNetStatus;
        /// <summary>
        /// ID.
        /// </summary>
        public readonly int Fosid;
        /// <summary>
        /// The provider-assigned unique ID for this managed resource.
        /// </summary>
        public readonly string Id;
        /// <summary>
        /// DHCP server can assign IP configurations to clients connected to this interface.
        /// </summary>
        public readonly string Interface;
        /// <summary>
        /// Method used to assign client IP.
        /// </summary>
        public readonly string IpMode;
        /// <summary>
        /// DHCP IP range configuration. The structure of `ip_range` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemdhcpServerIpRangeResult> IpRanges;
        /// <summary>
        /// DHCP over IPsec leases expire this many seconds after tunnel down (0 to disable forced-expiry).
        /// </summary>
        public readonly int IpsecLeaseHold;
        /// <summary>
        /// Lease time in seconds, 0 means unlimited.
        /// </summary>
        public readonly int LeaseTime;
        /// <summary>
        /// MAC access control default action (allow or block assigning IP settings).
        /// </summary>
        public readonly string MacAclDefaultAction;
        /// <summary>
        /// Netmask assigned by the DHCP server.
        /// </summary>
        public readonly string Netmask;
        /// <summary>
        /// IP address of a server (for example, a TFTP sever) that DHCP clients can download a boot file from.
        /// </summary>
        public readonly string NextServer;
        /// <summary>
        /// NTP server 1.
        /// </summary>
        public readonly string NtpServer1;
        /// <summary>
        /// NTP server 2.
        /// </summary>
        public readonly string NtpServer2;
        /// <summary>
        /// NTP server 3.
        /// </summary>
        public readonly string NtpServer3;
        /// <summary>
        /// Options for assigning Network Time Protocol (NTP) servers to DHCP clients.
        /// </summary>
        public readonly string NtpService;
        /// <summary>
        /// DHCP options. The structure of `options` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemdhcpServerOptionResult> Options;
        /// <summary>
        /// Options for the DHCP server to assign IP settings to specific MAC addresses. The structure of `reserved_address` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemdhcpServerReservedAddressResult> ReservedAddresses;
        /// <summary>
        /// DHCP server can be a normal DHCP server or an IPsec DHCP server.
        /// </summary>
        public readonly string ServerType;
        /// <summary>
        /// Enable/disable this DHCP configuration.
        /// </summary>
        public readonly string Status;
        /// <summary>
        /// TFTP server.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemdhcpServerTftpServerResult> TftpServers;
        /// <summary>
        /// Select the time zone to be assigned to DHCP clients.
        /// </summary>
        public readonly string Timezone;
        /// <summary>
        /// Options for the DHCP server to set the client's time zone.
        /// </summary>
        public readonly string TimezoneOption;
        /// <summary>
        /// Enable/disable vendor class identifier (VCI) matching. When enabled only DHCP requests with a matching VCI are served with this range.
        /// </summary>
        public readonly string VciMatch;
        /// <summary>
        /// VCI strings.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemdhcpServerVciStringResult> VciStrings;
        public readonly string? Vdomparam;
        /// <summary>
        /// WiFi Access Controller 1 IP address (DHCP option 138, RFC 5417).
        /// </summary>
        public readonly string WifiAc1;
        /// <summary>
        /// WiFi Access Controller 2 IP address (DHCP option 138, RFC 5417).
        /// </summary>
        public readonly string WifiAc2;
        /// <summary>
        /// WiFi Access Controller 3 IP address (DHCP option 138, RFC 5417).
        /// </summary>
        public readonly string WifiAc3;
        /// <summary>
        /// Options for assigning WiFi Access Controllers to DHCP clients
        /// </summary>
        public readonly string WifiAcService;
        /// <summary>
        /// WINS server 1.
        /// </summary>
        public readonly string WinsServer1;
        /// <summary>
        /// WINS server 2.
        /// </summary>
        public readonly string WinsServer2;

        [OutputConstructor]
        private GetSystemdhcpServerResult(
            string autoConfiguration,

            string autoManagedStatus,

            int conflictedIpTimeout,

            string ddnsAuth,

            string ddnsKey,

            string ddnsKeyname,

            string ddnsServerIp,

            int ddnsTtl,

            string ddnsUpdate,

            string ddnsUpdateOverride,

            string ddnsZone,

            string defaultGateway,

            string dhcpSettingsFromFortiipam,

            string dnsServer1,

            string dnsServer2,

            string dnsServer3,

            string dnsServer4,

            string dnsService,

            string domain,

            ImmutableArray<Outputs.GetSystemdhcpServerExcludeRangeResult> excludeRanges,

            string filename,

            string forticlientOnNetStatus,

            int fosid,

            string id,

            string @interface,

            string ipMode,

            ImmutableArray<Outputs.GetSystemdhcpServerIpRangeResult> ipRanges,

            int ipsecLeaseHold,

            int leaseTime,

            string macAclDefaultAction,

            string netmask,

            string nextServer,

            string ntpServer1,

            string ntpServer2,

            string ntpServer3,

            string ntpService,

            ImmutableArray<Outputs.GetSystemdhcpServerOptionResult> options,

            ImmutableArray<Outputs.GetSystemdhcpServerReservedAddressResult> reservedAddresses,

            string serverType,

            string status,

            ImmutableArray<Outputs.GetSystemdhcpServerTftpServerResult> tftpServers,

            string timezone,

            string timezoneOption,

            string vciMatch,

            ImmutableArray<Outputs.GetSystemdhcpServerVciStringResult> vciStrings,

            string? vdomparam,

            string wifiAc1,

            string wifiAc2,

            string wifiAc3,

            string wifiAcService,

            string winsServer1,

            string winsServer2)
        {
            AutoConfiguration = autoConfiguration;
            AutoManagedStatus = autoManagedStatus;
            ConflictedIpTimeout = conflictedIpTimeout;
            DdnsAuth = ddnsAuth;
            DdnsKey = ddnsKey;
            DdnsKeyname = ddnsKeyname;
            DdnsServerIp = ddnsServerIp;
            DdnsTtl = ddnsTtl;
            DdnsUpdate = ddnsUpdate;
            DdnsUpdateOverride = ddnsUpdateOverride;
            DdnsZone = ddnsZone;
            DefaultGateway = defaultGateway;
            DhcpSettingsFromFortiipam = dhcpSettingsFromFortiipam;
            DnsServer1 = dnsServer1;
            DnsServer2 = dnsServer2;
            DnsServer3 = dnsServer3;
            DnsServer4 = dnsServer4;
            DnsService = dnsService;
            Domain = domain;
            ExcludeRanges = excludeRanges;
            Filename = filename;
            ForticlientOnNetStatus = forticlientOnNetStatus;
            Fosid = fosid;
            Id = id;
            Interface = @interface;
            IpMode = ipMode;
            IpRanges = ipRanges;
            IpsecLeaseHold = ipsecLeaseHold;
            LeaseTime = leaseTime;
            MacAclDefaultAction = macAclDefaultAction;
            Netmask = netmask;
            NextServer = nextServer;
            NtpServer1 = ntpServer1;
            NtpServer2 = ntpServer2;
            NtpServer3 = ntpServer3;
            NtpService = ntpService;
            Options = options;
            ReservedAddresses = reservedAddresses;
            ServerType = serverType;
            Status = status;
            TftpServers = tftpServers;
            Timezone = timezone;
            TimezoneOption = timezoneOption;
            VciMatch = vciMatch;
            VciStrings = vciStrings;
            Vdomparam = vdomparam;
            WifiAc1 = wifiAc1;
            WifiAc2 = wifiAc2;
            WifiAc3 = wifiAc3;
            WifiAcService = wifiAcService;
            WinsServer1 = winsServer1;
            WinsServer2 = winsServer2;
        }
    }
}
