// *** 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 GetSystemDns
    {
        /// <summary>
        /// Use this data source to get information on fortios system dns
        /// </summary>
        public static Task<GetSystemDnsResult> InvokeAsync(GetSystemDnsArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.InvokeAsync<GetSystemDnsResult>("fortios:index/getSystemDns:getSystemDns", args ?? new GetSystemDnsArgs(), options.WithDefaults());

        /// <summary>
        /// Use this data source to get information on fortios system dns
        /// </summary>
        public static Output<GetSystemDnsResult> Invoke(GetSystemDnsInvokeArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.Invoke<GetSystemDnsResult>("fortios:index/getSystemDns:getSystemDns", args ?? new GetSystemDnsInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetSystemDnsArgs : global::Pulumi.InvokeArgs
    {
        /// <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 GetSystemDnsArgs()
        {
        }
        public static new GetSystemDnsArgs Empty => new GetSystemDnsArgs();
    }

    public sealed class GetSystemDnsInvokeArgs : global::Pulumi.InvokeArgs
    {
        /// <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 GetSystemDnsInvokeArgs()
        {
        }
        public static new GetSystemDnsInvokeArgs Empty => new GetSystemDnsInvokeArgs();
    }


    [OutputType]
    public sealed class GetSystemDnsResult
    {
        /// <summary>
        /// Alternate primary DNS server. (This is not used as a failover DNS server.)
        /// </summary>
        public readonly string AltPrimary;
        /// <summary>
        /// Alternate secondary DNS server. (This is not used as a failover DNS server.)
        /// </summary>
        public readonly string AltSecondary;
        /// <summary>
        /// Enable/disable response from the DNS server when a record is not in cache.
        /// </summary>
        public readonly string CacheNotfoundResponses;
        /// <summary>
        /// Maximum number of records in the DNS cache.
        /// </summary>
        public readonly int DnsCacheLimit;
        /// <summary>
        /// Duration in seconds that the DNS cache retains information.
        /// </summary>
        public readonly int DnsCacheTtl;
        /// <summary>
        /// Enable/disable/enforce DNS over TLS.
        /// </summary>
        public readonly string DnsOverTls;
        /// <summary>
        /// DNS search domain list separated by space (maximum 8 domains)
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemDnsDomainResult> Domains;
        /// <summary>
        /// FQDN cache time to live in seconds (0 - 86400, default = 0).
        /// </summary>
        public readonly int FqdnCacheTtl;
        /// <summary>
        /// FQDN cache minimum refresh time in seconds (10 - 3600, default = 60).
        /// </summary>
        public readonly int FqdnMinRefresh;
        /// <summary>
        /// The provider-assigned unique ID for this managed resource.
        /// </summary>
        public readonly string Id;
        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        public readonly string Interface;
        /// <summary>
        /// Specify how to select outgoing interface to reach server.
        /// </summary>
        public readonly string InterfaceSelectMethod;
        /// <summary>
        /// Primary DNS server IPv6 address.
        /// </summary>
        public readonly string Ip6Primary;
        /// <summary>
        /// Secondary DNS server IPv6 address.
        /// </summary>
        public readonly string Ip6Secondary;
        /// <summary>
        /// Local DNS log setting.
        /// </summary>
        public readonly string Log;
        /// <summary>
        /// Primary DNS server IP address.
        /// </summary>
        public readonly string Primary;
        /// <summary>
        /// DNS protocols.
        /// </summary>
        public readonly string Protocol;
        /// <summary>
        /// Number of times to retry (0 - 5).
        /// </summary>
        public readonly int Retry;
        /// <summary>
        /// Secondary DNS server IP address.
        /// </summary>
        public readonly string Secondary;
        /// <summary>
        /// DNS server host name list. The structure of `server_hostname` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetSystemDnsServerHostnameResult> ServerHostnames;
        /// <summary>
        /// Specify how configured servers are prioritized.
        /// </summary>
        public readonly string ServerSelectMethod;
        /// <summary>
        /// IP address used by the DNS server as its source IP.
        /// </summary>
        public readonly string SourceIp;
        /// <summary>
        /// Name of local certificate for SSL connections.
        /// </summary>
        public readonly string SslCertificate;
        /// <summary>
        /// DNS query timeout interval in seconds (1 - 10).
        /// </summary>
        public readonly int Timeout;
        public readonly string? Vdomparam;

        [OutputConstructor]
        private GetSystemDnsResult(
            string altPrimary,

            string altSecondary,

            string cacheNotfoundResponses,

            int dnsCacheLimit,

            int dnsCacheTtl,

            string dnsOverTls,

            ImmutableArray<Outputs.GetSystemDnsDomainResult> domains,

            int fqdnCacheTtl,

            int fqdnMinRefresh,

            string id,

            string @interface,

            string interfaceSelectMethod,

            string ip6Primary,

            string ip6Secondary,

            string log,

            string primary,

            string protocol,

            int retry,

            string secondary,

            ImmutableArray<Outputs.GetSystemDnsServerHostnameResult> serverHostnames,

            string serverSelectMethod,

            string sourceIp,

            string sslCertificate,

            int timeout,

            string? vdomparam)
        {
            AltPrimary = altPrimary;
            AltSecondary = altSecondary;
            CacheNotfoundResponses = cacheNotfoundResponses;
            DnsCacheLimit = dnsCacheLimit;
            DnsCacheTtl = dnsCacheTtl;
            DnsOverTls = dnsOverTls;
            Domains = domains;
            FqdnCacheTtl = fqdnCacheTtl;
            FqdnMinRefresh = fqdnMinRefresh;
            Id = id;
            Interface = @interface;
            InterfaceSelectMethod = interfaceSelectMethod;
            Ip6Primary = ip6Primary;
            Ip6Secondary = ip6Secondary;
            Log = log;
            Primary = primary;
            Protocol = protocol;
            Retry = retry;
            Secondary = secondary;
            ServerHostnames = serverHostnames;
            ServerSelectMethod = serverSelectMethod;
            SourceIp = sourceIp;
            SslCertificate = sslCertificate;
            Timeout = timeout;
            Vdomparam = vdomparam;
        }
    }
}
