<gh_stars>0// *** 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
{
    /// <summary>
    /// Configure FortiGuard services.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Fortios = Pulumiverse.Fortios;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var trname = new Fortios.SystemFortiguard("trname", new()
    ///     {
    ///         AntispamCache = "enable",
    ///         AntispamCacheMpercent = 2,
    ///         AntispamCacheTtl = 1800,
    ///         AntispamExpiration = 1618617600,
    ///         AntispamForceOff = "disable",
    ///         AntispamLicense = 1,
    ///         AntispamTimeout = 7,
    ///         AutoJoinForticloud = "enable",
    ///         DdnsServerIp = "0.0.0.0",
    ///         DdnsServerPort = 443,
    ///         LoadBalanceServers = 1,
    ///         OutbreakPreventionCache = "enable",
    ///         OutbreakPreventionCacheMpercent = 2,
    ///         OutbreakPreventionCacheTtl = 300,
    ///         OutbreakPreventionExpiration = 1618617600,
    ///         OutbreakPreventionForceOff = "disable",
    ///         OutbreakPreventionLicense = 1,
    ///         OutbreakPreventionTimeout = 7,
    ///         Port = "8888",
    ///         SdnsServerIp = "\"208.91.112.220\" ",
    ///         SdnsServerPort = 53,
    ///         SourceIp = "0.0.0.0",
    ///         SourceIp6 = "::",
    ///         UpdateServerLocation = "usa",
    ///         WebfilterCache = "enable",
    ///         WebfilterCacheTtl = 3600,
    ///         WebfilterExpiration = 1618617600,
    ///         WebfilterForceOff = "disable",
    ///         WebfilterLicense = 1,
    ///         WebfilterTimeout = 15,
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System Fortiguard can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemFortiguard:SystemFortiguard labelname SystemFortiguard
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemFortiguard:SystemFortiguard labelname SystemFortiguard
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemFortiguard:SystemFortiguard")]
    public partial class SystemFortiguard : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable FortiGuard antispam request caching. Uses a small amount of memory but improves performance. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("antispamCache")]
        public Output<string> AntispamCache { get; private set; } = null!;

        /// <summary>
        /// Maximum percent of FortiGate memory the antispam cache is allowed to use (1 - 15%).
        /// </summary>
        [Output("antispamCacheMpercent")]
        public Output<int> AntispamCacheMpercent { get; private set; } = null!;

        /// <summary>
        /// Time-to-live for antispam cache entries in seconds (300 - 86400). Lower times reduce the cache size. Higher times may improve performance since the cache will have more entries.
        /// </summary>
        [Output("antispamCacheTtl")]
        public Output<int> AntispamCacheTtl { get; private set; } = null!;

        /// <summary>
        /// Expiration date of the FortiGuard antispam contract.
        /// </summary>
        [Output("antispamExpiration")]
        public Output<int> AntispamExpiration { get; private set; } = null!;

        /// <summary>
        /// Enable/disable turning off the FortiGuard antispam service. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("antispamForceOff")]
        public Output<string> AntispamForceOff { get; private set; } = null!;

        /// <summary>
        /// Interval of time between license checks for the FortiGuard antispam contract.
        /// </summary>
        [Output("antispamLicense")]
        public Output<int> AntispamLicense { get; private set; } = null!;

        /// <summary>
        /// Antispam query time out (1 - 30 sec, default = 7).
        /// </summary>
        [Output("antispamTimeout")]
        public Output<int> AntispamTimeout { get; private set; } = null!;

        /// <summary>
        /// IP address of the FortiGuard anycast DNS rating server.
        /// </summary>
        [Output("anycastSdnsServerIp")]
        public Output<string> AnycastSdnsServerIp { get; private set; } = null!;

        /// <summary>
        /// Port to connect to on the FortiGuard anycast DNS rating server.
        /// </summary>
        [Output("anycastSdnsServerPort")]
        public Output<int> AnycastSdnsServerPort { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic patch-level firmware upgrade from FortiGuard. The FortiGate unit searches for new patches only in the same major and minor version. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("autoFirmwareUpgrade")]
        public Output<string> AutoFirmwareUpgrade { get; private set; } = null!;

        /// <summary>
        /// Allowed day(s) of the week to start automatic patch-level firmware upgrade from FortiGuard. Valid values: `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`.
        /// </summary>
        [Output("autoFirmwareUpgradeDay")]
        public Output<string> AutoFirmwareUpgradeDay { get; private set; } = null!;

        /// <summary>
        /// End time in the designated time window for automatic patch-level firmware upgrade from FortiGuard in 24 hour time (0 ~ 23, default = 4). When the end time is smaller than the start time, the end time is interpreted as the next day. The actual upgrade time is selected randomly within the time window.
        /// </summary>
        [Output("autoFirmwareUpgradeEndHour")]
        public Output<int> AutoFirmwareUpgradeEndHour { get; private set; } = null!;

        /// <summary>
        /// Start time in the designated time window for automatic patch-level firmware upgrade from FortiGuard in 24 hour time (0 ~ 23, default = 2). The actual upgrade time is selected randomly within the time window.
        /// </summary>
        [Output("autoFirmwareUpgradeStartHour")]
        public Output<int> AutoFirmwareUpgradeStartHour { get; private set; } = null!;

        /// <summary>
        /// Automatically connect to and login to FortiCloud. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("autoJoinForticloud")]
        public Output<string> AutoJoinForticloud { get; private set; } = null!;

        /// <summary>
        /// IP address of the FortiDDNS server.
        /// </summary>
        [Output("ddnsServerIp")]
        public Output<string> DdnsServerIp { get; private set; } = null!;

        /// <summary>
        /// IPv6 address of the FortiDDNS server.
        /// </summary>
        [Output("ddnsServerIp6")]
        public Output<string> DdnsServerIp6 { get; private set; } = null!;

        /// <summary>
        /// Port used to communicate with FortiDDNS servers.
        /// </summary>
        [Output("ddnsServerPort")]
        public Output<int> DdnsServerPort { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of FortiGuard's anycast network. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fortiguardAnycast")]
        public Output<string> FortiguardAnycast { get; private set; } = null!;

        /// <summary>
        /// Configure which of Fortinet's servers to provide FortiGuard services in FortiGuard's anycast network. Default is Fortinet. Valid values: `fortinet`, `aws`, `debug`.
        /// </summary>
        [Output("fortiguardAnycastSource")]
        public Output<string> FortiguardAnycastSource { get; private set; } = null!;

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Output("interface")]
        public Output<string> Interface { get; private set; } = null!;

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Output("interfaceSelectMethod")]
        public Output<string> InterfaceSelectMethod { get; private set; } = null!;

        /// <summary>
        /// Number of servers to alternate between as first FortiGuard option.
        /// </summary>
        [Output("loadBalanceServers")]
        public Output<int> LoadBalanceServers { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiGuard Virus Outbreak Prevention cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("outbreakPreventionCache")]
        public Output<string> OutbreakPreventionCache { get; private set; } = null!;

        /// <summary>
        /// Maximum percent of memory FortiGuard Virus Outbreak Prevention cache can use (1 - 15%, default = 2).
        /// </summary>
        [Output("outbreakPreventionCacheMpercent")]
        public Output<int> OutbreakPreventionCacheMpercent { get; private set; } = null!;

        /// <summary>
        /// Time-to-live for FortiGuard Virus Outbreak Prevention cache entries (300 - 86400 sec, default = 300).
        /// </summary>
        [Output("outbreakPreventionCacheTtl")]
        public Output<int> OutbreakPreventionCacheTtl { get; private set; } = null!;

        /// <summary>
        /// Expiration date of FortiGuard Virus Outbreak Prevention contract.
        /// </summary>
        [Output("outbreakPreventionExpiration")]
        public Output<int> OutbreakPreventionExpiration { get; private set; } = null!;

        /// <summary>
        /// Turn off FortiGuard Virus Outbreak Prevention service. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("outbreakPreventionForceOff")]
        public Output<string> OutbreakPreventionForceOff { get; private set; } = null!;

        /// <summary>
        /// Interval of time between license checks for FortiGuard Virus Outbreak Prevention contract.
        /// </summary>
        [Output("outbreakPreventionLicense")]
        public Output<int> OutbreakPreventionLicense { get; private set; } = null!;

        /// <summary>
        /// FortiGuard Virus Outbreak Prevention time out (1 - 30 sec, default = 7).
        /// </summary>
        [Output("outbreakPreventionTimeout")]
        public Output<int> OutbreakPreventionTimeout { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of persistent connection to receive update notification from FortiGuard. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("persistentConnection")]
        public Output<string> PersistentConnection { get; private set; } = null!;

        /// <summary>
        /// Port used to communicate with the FortiGuard servers.
        /// </summary>
        [Output("port")]
        public Output<string> Port { get; private set; } = null!;

        /// <summary>
        /// Protocol used to communicate with the FortiGuard servers. Valid values: `udp`, `http`, `https`.
        /// </summary>
        [Output("protocol")]
        public Output<string> Protocol { get; private set; } = null!;

        /// <summary>
        /// Proxy user password.
        /// </summary>
        [Output("proxyPassword")]
        public Output<string?> ProxyPassword { get; private set; } = null!;

        /// <summary>
        /// IP address of the proxy server.
        /// </summary>
        [Output("proxyServerIp")]
        public Output<string> ProxyServerIp { get; private set; } = null!;

        /// <summary>
        /// Port used to communicate with the proxy server.
        /// </summary>
        [Output("proxyServerPort")]
        public Output<int> ProxyServerPort { get; private set; } = null!;

        /// <summary>
        /// Proxy user name.
        /// </summary>
        [Output("proxyUsername")]
        public Output<string> ProxyUsername { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiCloud Sandbox inline-scan. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sandboxInlineScan")]
        public Output<string> SandboxInlineScan { get; private set; } = null!;

        /// <summary>
        /// Cloud sandbox region.
        /// </summary>
        [Output("sandboxRegion")]
        public Output<string> SandboxRegion { get; private set; } = null!;

        /// <summary>
        /// Customization options for the FortiGuard DNS service. Valid values: `include-question-section`.
        /// </summary>
        [Output("sdnsOptions")]
        public Output<string> SdnsOptions { get; private set; } = null!;

        /// <summary>
        /// IP address of the FortiDNS server.
        /// </summary>
        [Output("sdnsServerIp")]
        public Output<string> SdnsServerIp { get; private set; } = null!;

        /// <summary>
        /// Port used to communicate with FortiDNS servers.
        /// </summary>
        [Output("sdnsServerPort")]
        public Output<int> SdnsServerPort { get; private set; } = null!;

        /// <summary>
        /// Service account ID.
        /// </summary>
        [Output("serviceAccountId")]
        public Output<string> ServiceAccountId { get; private set; } = null!;

        /// <summary>
        /// Source IPv4 address used to communicate with FortiGuard.
        /// </summary>
        [Output("sourceIp")]
        public Output<string> SourceIp { get; private set; } = null!;

        /// <summary>
        /// Source IPv6 address used to communicate with FortiGuard.
        /// </summary>
        [Output("sourceIp6")]
        public Output<string> SourceIp6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable proxy dictionary rebuild. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("updateBuildProxy")]
        public Output<string> UpdateBuildProxy { get; private set; } = null!;

        /// <summary>
        /// Enable/disable external resource update. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("updateExtdb")]
        public Output<string> UpdateExtdb { get; private set; } = null!;

        /// <summary>
        /// Enable/disable Internet Service Database update. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("updateFfdb")]
        public Output<string> UpdateFfdb { get; private set; } = null!;

        /// <summary>
        /// Signature update server location.
        /// </summary>
        [Output("updateServerLocation")]
        public Output<string> UpdateServerLocation { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowlist update. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("updateUwdb")]
        public Output<string> UpdateUwdb { get; private set; } = null!;

        /// <summary>
        /// FortiGuard Service virtual domain name.
        /// </summary>
        [Output("vdom")]
        public Output<string> Vdom { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource 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>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;

        /// <summary>
        /// Expiration date of the FortiGuard video filter contract.
        /// </summary>
        [Output("videofilterExpiration")]
        public Output<int> VideofilterExpiration { get; private set; } = null!;

        /// <summary>
        /// Interval of time between license checks for the FortiGuard video filter contract.
        /// </summary>
        [Output("videofilterLicense")]
        public Output<int> VideofilterLicense { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiGuard web filter caching. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("webfilterCache")]
        public Output<string> WebfilterCache { get; private set; } = null!;

        /// <summary>
        /// Time-to-live for web filter cache entries in seconds (300 - 86400).
        /// </summary>
        [Output("webfilterCacheTtl")]
        public Output<int> WebfilterCacheTtl { get; private set; } = null!;

        /// <summary>
        /// Expiration date of the FortiGuard web filter contract.
        /// </summary>
        [Output("webfilterExpiration")]
        public Output<int> WebfilterExpiration { get; private set; } = null!;

        /// <summary>
        /// Enable/disable turning off the FortiGuard web filtering service. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("webfilterForceOff")]
        public Output<string> WebfilterForceOff { get; private set; } = null!;

        /// <summary>
        /// Interval of time between license checks for the FortiGuard web filter contract.
        /// </summary>
        [Output("webfilterLicense")]
        public Output<int> WebfilterLicense { get; private set; } = null!;

        /// <summary>
        /// Web filter query time out (1 - 30 sec, default = 7).
        /// </summary>
        [Output("webfilterTimeout")]
        public Output<int> WebfilterTimeout { get; private set; } = null!;


        /// <summary>
        /// Create a SystemFortiguard 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 SystemFortiguard(string name, SystemFortiguardArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/systemFortiguard:SystemFortiguard", name, args ?? new SystemFortiguardArgs(), MakeResourceOptions(options, ""))
        {
        }

        private SystemFortiguard(string name, Input<string> id, SystemFortiguardState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemFortiguard:SystemFortiguard", 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/pulumi-fortios",
                AdditionalSecretOutputs =
                {
                    "proxyPassword",
                },
            };
            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 SystemFortiguard 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 SystemFortiguard Get(string name, Input<string> id, SystemFortiguardState? state = null, CustomResourceOptions? options = null)
        {
            return new SystemFortiguard(name, id, state, options);
        }
    }

    public sealed class SystemFortiguardArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable FortiGuard antispam request caching. Uses a small amount of memory but improves performance. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("antispamCache")]
        public Input<string>? AntispamCache { get; set; }

        /// <summary>
        /// Maximum percent of FortiGate memory the antispam cache is allowed to use (1 - 15%).
        /// </summary>
        [Input("antispamCacheMpercent")]
        public Input<int>? AntispamCacheMpercent { get; set; }

        /// <summary>
        /// Time-to-live for antispam cache entries in seconds (300 - 86400). Lower times reduce the cache size. Higher times may improve performance since the cache will have more entries.
        /// </summary>
        [Input("antispamCacheTtl")]
        public Input<int>? AntispamCacheTtl { get; set; }

        /// <summary>
        /// Expiration date of the FortiGuard antispam contract.
        /// </summary>
        [Input("antispamExpiration")]
        public Input<int>? AntispamExpiration { get; set; }

        /// <summary>
        /// Enable/disable turning off the FortiGuard antispam service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("antispamForceOff")]
        public Input<string>? AntispamForceOff { get; set; }

        /// <summary>
        /// Interval of time between license checks for the FortiGuard antispam contract.
        /// </summary>
        [Input("antispamLicense")]
        public Input<int>? AntispamLicense { get; set; }

        /// <summary>
        /// Antispam query time out (1 - 30 sec, default = 7).
        /// </summary>
        [Input("antispamTimeout", required: true)]
        public Input<int> AntispamTimeout { get; set; } = null!;

        /// <summary>
        /// IP address of the FortiGuard anycast DNS rating server.
        /// </summary>
        [Input("anycastSdnsServerIp")]
        public Input<string>? AnycastSdnsServerIp { get; set; }

        /// <summary>
        /// Port to connect to on the FortiGuard anycast DNS rating server.
        /// </summary>
        [Input("anycastSdnsServerPort")]
        public Input<int>? AnycastSdnsServerPort { get; set; }

        /// <summary>
        /// Enable/disable automatic patch-level firmware upgrade from FortiGuard. The FortiGate unit searches for new patches only in the same major and minor version. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoFirmwareUpgrade")]
        public Input<string>? AutoFirmwareUpgrade { get; set; }

        /// <summary>
        /// Allowed day(s) of the week to start automatic patch-level firmware upgrade from FortiGuard. Valid values: `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`.
        /// </summary>
        [Input("autoFirmwareUpgradeDay")]
        public Input<string>? AutoFirmwareUpgradeDay { get; set; }

        /// <summary>
        /// End time in the designated time window for automatic patch-level firmware upgrade from FortiGuard in 24 hour time (0 ~ 23, default = 4). When the end time is smaller than the start time, the end time is interpreted as the next day. The actual upgrade time is selected randomly within the time window.
        /// </summary>
        [Input("autoFirmwareUpgradeEndHour")]
        public Input<int>? AutoFirmwareUpgradeEndHour { get; set; }

        /// <summary>
        /// Start time in the designated time window for automatic patch-level firmware upgrade from FortiGuard in 24 hour time (0 ~ 23, default = 2). The actual upgrade time is selected randomly within the time window.
        /// </summary>
        [Input("autoFirmwareUpgradeStartHour")]
        public Input<int>? AutoFirmwareUpgradeStartHour { get; set; }

        /// <summary>
        /// Automatically connect to and login to FortiCloud. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoJoinForticloud")]
        public Input<string>? AutoJoinForticloud { get; set; }

        /// <summary>
        /// IP address of the FortiDDNS server.
        /// </summary>
        [Input("ddnsServerIp")]
        public Input<string>? DdnsServerIp { get; set; }

        /// <summary>
        /// IPv6 address of the FortiDDNS server.
        /// </summary>
        [Input("ddnsServerIp6")]
        public Input<string>? DdnsServerIp6 { get; set; }

        /// <summary>
        /// Port used to communicate with FortiDDNS servers.
        /// </summary>
        [Input("ddnsServerPort")]
        public Input<int>? DdnsServerPort { get; set; }

        /// <summary>
        /// Enable/disable use of FortiGuard's anycast network. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortiguardAnycast")]
        public Input<string>? FortiguardAnycast { get; set; }

        /// <summary>
        /// Configure which of Fortinet's servers to provide FortiGuard services in FortiGuard's anycast network. Default is Fortinet. Valid values: `fortinet`, `aws`, `debug`.
        /// </summary>
        [Input("fortiguardAnycastSource")]
        public Input<string>? FortiguardAnycastSource { get; set; }

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Input("interfaceSelectMethod")]
        public Input<string>? InterfaceSelectMethod { get; set; }

        /// <summary>
        /// Number of servers to alternate between as first FortiGuard option.
        /// </summary>
        [Input("loadBalanceServers")]
        public Input<int>? LoadBalanceServers { get; set; }

        /// <summary>
        /// Enable/disable FortiGuard Virus Outbreak Prevention cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("outbreakPreventionCache")]
        public Input<string>? OutbreakPreventionCache { get; set; }

        /// <summary>
        /// Maximum percent of memory FortiGuard Virus Outbreak Prevention cache can use (1 - 15%, default = 2).
        /// </summary>
        [Input("outbreakPreventionCacheMpercent")]
        public Input<int>? OutbreakPreventionCacheMpercent { get; set; }

        /// <summary>
        /// Time-to-live for FortiGuard Virus Outbreak Prevention cache entries (300 - 86400 sec, default = 300).
        /// </summary>
        [Input("outbreakPreventionCacheTtl")]
        public Input<int>? OutbreakPreventionCacheTtl { get; set; }

        /// <summary>
        /// Expiration date of FortiGuard Virus Outbreak Prevention contract.
        /// </summary>
        [Input("outbreakPreventionExpiration")]
        public Input<int>? OutbreakPreventionExpiration { get; set; }

        /// <summary>
        /// Turn off FortiGuard Virus Outbreak Prevention service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("outbreakPreventionForceOff")]
        public Input<string>? OutbreakPreventionForceOff { get; set; }

        /// <summary>
        /// Interval of time between license checks for FortiGuard Virus Outbreak Prevention contract.
        /// </summary>
        [Input("outbreakPreventionLicense")]
        public Input<int>? OutbreakPreventionLicense { get; set; }

        /// <summary>
        /// FortiGuard Virus Outbreak Prevention time out (1 - 30 sec, default = 7).
        /// </summary>
        [Input("outbreakPreventionTimeout", required: true)]
        public Input<int> OutbreakPreventionTimeout { get; set; } = null!;

        /// <summary>
        /// Enable/disable use of persistent connection to receive update notification from FortiGuard. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("persistentConnection")]
        public Input<string>? PersistentConnection { get; set; }

        /// <summary>
        /// Port used to communicate with the FortiGuard servers.
        /// </summary>
        [Input("port")]
        public Input<string>? Port { get; set; }

        /// <summary>
        /// Protocol used to communicate with the FortiGuard servers. Valid values: `udp`, `http`, `https`.
        /// </summary>
        [Input("protocol")]
        public Input<string>? Protocol { get; set; }

        [Input("proxyPassword")]
        private Input<string>? _proxyPassword;

        /// <summary>
        /// Proxy user password.
        /// </summary>
        public Input<string>? ProxyPassword
        {
            get => _proxyPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _proxyPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// IP address of the proxy server.
        /// </summary>
        [Input("proxyServerIp")]
        public Input<string>? ProxyServerIp { get; set; }

        /// <summary>
        /// Port used to communicate with the proxy server.
        /// </summary>
        [Input("proxyServerPort")]
        public Input<int>? ProxyServerPort { get; set; }

        /// <summary>
        /// Proxy user name.
        /// </summary>
        [Input("proxyUsername")]
        public Input<string>? ProxyUsername { get; set; }

        /// <summary>
        /// Enable/disable FortiCloud Sandbox inline-scan. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sandboxInlineScan")]
        public Input<string>? SandboxInlineScan { get; set; }

        /// <summary>
        /// Cloud sandbox region.
        /// </summary>
        [Input("sandboxRegion")]
        public Input<string>? SandboxRegion { get; set; }

        /// <summary>
        /// Customization options for the FortiGuard DNS service. Valid values: `include-question-section`.
        /// </summary>
        [Input("sdnsOptions")]
        public Input<string>? SdnsOptions { get; set; }

        /// <summary>
        /// IP address of the FortiDNS server.
        /// </summary>
        [Input("sdnsServerIp")]
        public Input<string>? SdnsServerIp { get; set; }

        /// <summary>
        /// Port used to communicate with FortiDNS servers.
        /// </summary>
        [Input("sdnsServerPort")]
        public Input<int>? SdnsServerPort { get; set; }

        /// <summary>
        /// Service account ID.
        /// </summary>
        [Input("serviceAccountId")]
        public Input<string>? ServiceAccountId { get; set; }

        /// <summary>
        /// Source IPv4 address used to communicate with FortiGuard.
        /// </summary>
        [Input("sourceIp")]
        public Input<string>? SourceIp { get; set; }

        /// <summary>
        /// Source IPv6 address used to communicate with FortiGuard.
        /// </summary>
        [Input("sourceIp6")]
        public Input<string>? SourceIp6 { get; set; }

        /// <summary>
        /// Enable/disable proxy dictionary rebuild. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateBuildProxy")]
        public Input<string>? UpdateBuildProxy { get; set; }

        /// <summary>
        /// Enable/disable external resource update. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateExtdb")]
        public Input<string>? UpdateExtdb { get; set; }

        /// <summary>
        /// Enable/disable Internet Service Database update. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateFfdb")]
        public Input<string>? UpdateFfdb { get; set; }

        /// <summary>
        /// Signature update server location.
        /// </summary>
        [Input("updateServerLocation")]
        public Input<string>? UpdateServerLocation { get; set; }

        /// <summary>
        /// Enable/disable allowlist update. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateUwdb")]
        public Input<string>? UpdateUwdb { get; set; }

        /// <summary>
        /// FortiGuard Service virtual domain name.
        /// </summary>
        [Input("vdom")]
        public Input<string>? Vdom { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource 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; }

        /// <summary>
        /// Expiration date of the FortiGuard video filter contract.
        /// </summary>
        [Input("videofilterExpiration")]
        public Input<int>? VideofilterExpiration { get; set; }

        /// <summary>
        /// Interval of time between license checks for the FortiGuard video filter contract.
        /// </summary>
        [Input("videofilterLicense")]
        public Input<int>? VideofilterLicense { get; set; }

        /// <summary>
        /// Enable/disable FortiGuard web filter caching. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webfilterCache")]
        public Input<string>? WebfilterCache { get; set; }

        /// <summary>
        /// Time-to-live for web filter cache entries in seconds (300 - 86400).
        /// </summary>
        [Input("webfilterCacheTtl")]
        public Input<int>? WebfilterCacheTtl { get; set; }

        /// <summary>
        /// Expiration date of the FortiGuard web filter contract.
        /// </summary>
        [Input("webfilterExpiration")]
        public Input<int>? WebfilterExpiration { get; set; }

        /// <summary>
        /// Enable/disable turning off the FortiGuard web filtering service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webfilterForceOff")]
        public Input<string>? WebfilterForceOff { get; set; }

        /// <summary>
        /// Interval of time between license checks for the FortiGuard web filter contract.
        /// </summary>
        [Input("webfilterLicense")]
        public Input<int>? WebfilterLicense { get; set; }

        /// <summary>
        /// Web filter query time out (1 - 30 sec, default = 7).
        /// </summary>
        [Input("webfilterTimeout", required: true)]
        public Input<int> WebfilterTimeout { get; set; } = null!;

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

    public sealed class SystemFortiguardState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable FortiGuard antispam request caching. Uses a small amount of memory but improves performance. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("antispamCache")]
        public Input<string>? AntispamCache { get; set; }

        /// <summary>
        /// Maximum percent of FortiGate memory the antispam cache is allowed to use (1 - 15%).
        /// </summary>
        [Input("antispamCacheMpercent")]
        public Input<int>? AntispamCacheMpercent { get; set; }

        /// <summary>
        /// Time-to-live for antispam cache entries in seconds (300 - 86400). Lower times reduce the cache size. Higher times may improve performance since the cache will have more entries.
        /// </summary>
        [Input("antispamCacheTtl")]
        public Input<int>? AntispamCacheTtl { get; set; }

        /// <summary>
        /// Expiration date of the FortiGuard antispam contract.
        /// </summary>
        [Input("antispamExpiration")]
        public Input<int>? AntispamExpiration { get; set; }

        /// <summary>
        /// Enable/disable turning off the FortiGuard antispam service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("antispamForceOff")]
        public Input<string>? AntispamForceOff { get; set; }

        /// <summary>
        /// Interval of time between license checks for the FortiGuard antispam contract.
        /// </summary>
        [Input("antispamLicense")]
        public Input<int>? AntispamLicense { get; set; }

        /// <summary>
        /// Antispam query time out (1 - 30 sec, default = 7).
        /// </summary>
        [Input("antispamTimeout")]
        public Input<int>? AntispamTimeout { get; set; }

        /// <summary>
        /// IP address of the FortiGuard anycast DNS rating server.
        /// </summary>
        [Input("anycastSdnsServerIp")]
        public Input<string>? AnycastSdnsServerIp { get; set; }

        /// <summary>
        /// Port to connect to on the FortiGuard anycast DNS rating server.
        /// </summary>
        [Input("anycastSdnsServerPort")]
        public Input<int>? AnycastSdnsServerPort { get; set; }

        /// <summary>
        /// Enable/disable automatic patch-level firmware upgrade from FortiGuard. The FortiGate unit searches for new patches only in the same major and minor version. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoFirmwareUpgrade")]
        public Input<string>? AutoFirmwareUpgrade { get; set; }

        /// <summary>
        /// Allowed day(s) of the week to start automatic patch-level firmware upgrade from FortiGuard. Valid values: `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`.
        /// </summary>
        [Input("autoFirmwareUpgradeDay")]
        public Input<string>? AutoFirmwareUpgradeDay { get; set; }

        /// <summary>
        /// End time in the designated time window for automatic patch-level firmware upgrade from FortiGuard in 24 hour time (0 ~ 23, default = 4). When the end time is smaller than the start time, the end time is interpreted as the next day. The actual upgrade time is selected randomly within the time window.
        /// </summary>
        [Input("autoFirmwareUpgradeEndHour")]
        public Input<int>? AutoFirmwareUpgradeEndHour { get; set; }

        /// <summary>
        /// Start time in the designated time window for automatic patch-level firmware upgrade from FortiGuard in 24 hour time (0 ~ 23, default = 2). The actual upgrade time is selected randomly within the time window.
        /// </summary>
        [Input("autoFirmwareUpgradeStartHour")]
        public Input<int>? AutoFirmwareUpgradeStartHour { get; set; }

        /// <summary>
        /// Automatically connect to and login to FortiCloud. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoJoinForticloud")]
        public Input<string>? AutoJoinForticloud { get; set; }

        /// <summary>
        /// IP address of the FortiDDNS server.
        /// </summary>
        [Input("ddnsServerIp")]
        public Input<string>? DdnsServerIp { get; set; }

        /// <summary>
        /// IPv6 address of the FortiDDNS server.
        /// </summary>
        [Input("ddnsServerIp6")]
        public Input<string>? DdnsServerIp6 { get; set; }

        /// <summary>
        /// Port used to communicate with FortiDDNS servers.
        /// </summary>
        [Input("ddnsServerPort")]
        public Input<int>? DdnsServerPort { get; set; }

        /// <summary>
        /// Enable/disable use of FortiGuard's anycast network. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortiguardAnycast")]
        public Input<string>? FortiguardAnycast { get; set; }

        /// <summary>
        /// Configure which of Fortinet's servers to provide FortiGuard services in FortiGuard's anycast network. Default is Fortinet. Valid values: `fortinet`, `aws`, `debug`.
        /// </summary>
        [Input("fortiguardAnycastSource")]
        public Input<string>? FortiguardAnycastSource { get; set; }

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Input("interfaceSelectMethod")]
        public Input<string>? InterfaceSelectMethod { get; set; }

        /// <summary>
        /// Number of servers to alternate between as first FortiGuard option.
        /// </summary>
        [Input("loadBalanceServers")]
        public Input<int>? LoadBalanceServers { get; set; }

        /// <summary>
        /// Enable/disable FortiGuard Virus Outbreak Prevention cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("outbreakPreventionCache")]
        public Input<string>? OutbreakPreventionCache { get; set; }

        /// <summary>
        /// Maximum percent of memory FortiGuard Virus Outbreak Prevention cache can use (1 - 15%, default = 2).
        /// </summary>
        [Input("outbreakPreventionCacheMpercent")]
        public Input<int>? OutbreakPreventionCacheMpercent { get; set; }

        /// <summary>
        /// Time-to-live for FortiGuard Virus Outbreak Prevention cache entries (300 - 86400 sec, default = 300).
        /// </summary>
        [Input("outbreakPreventionCacheTtl")]
        public Input<int>? OutbreakPreventionCacheTtl { get; set; }

        /// <summary>
        /// Expiration date of FortiGuard Virus Outbreak Prevention contract.
        /// </summary>
        [Input("outbreakPreventionExpiration")]
        public Input<int>? OutbreakPreventionExpiration { get; set; }

        /// <summary>
        /// Turn off FortiGuard Virus Outbreak Prevention service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("outbreakPreventionForceOff")]
        public Input<string>? OutbreakPreventionForceOff { get; set; }

        /// <summary>
        /// Interval of time between license checks for FortiGuard Virus Outbreak Prevention contract.
        /// </summary>
        [Input("outbreakPreventionLicense")]
        public Input<int>? OutbreakPreventionLicense { get; set; }

        /// <summary>
        /// FortiGuard Virus Outbreak Prevention time out (1 - 30 sec, default = 7).
        /// </summary>
        [Input("outbreakPreventionTimeout")]
        public Input<int>? OutbreakPreventionTimeout { get; set; }

        /// <summary>
        /// Enable/disable use of persistent connection to receive update notification from FortiGuard. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("persistentConnection")]
        public Input<string>? PersistentConnection { get; set; }

        /// <summary>
        /// Port used to communicate with the FortiGuard servers.
        /// </summary>
        [Input("port")]
        public Input<string>? Port { get; set; }

        /// <summary>
        /// Protocol used to communicate with the FortiGuard servers. Valid values: `udp`, `http`, `https`.
        /// </summary>
        [Input("protocol")]
        public Input<string>? Protocol { get; set; }

        [Input("proxyPassword")]
        private Input<string>? _proxyPassword;

        /// <summary>
        /// Proxy user password.
        /// </summary>
        public Input<string>? ProxyPassword
        {
            get => _proxyPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _proxyPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// IP address of the proxy server.
        /// </summary>
        [Input("proxyServerIp")]
        public Input<string>? ProxyServerIp { get; set; }

        /// <summary>
        /// Port used to communicate with the proxy server.
        /// </summary>
        [Input("proxyServerPort")]
        public Input<int>? ProxyServerPort { get; set; }

        /// <summary>
        /// Proxy user name.
        /// </summary>
        [Input("proxyUsername")]
        public Input<string>? ProxyUsername { get; set; }

        /// <summary>
        /// Enable/disable FortiCloud Sandbox inline-scan. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sandboxInlineScan")]
        public Input<string>? SandboxInlineScan { get; set; }

        /// <summary>
        /// Cloud sandbox region.
        /// </summary>
        [Input("sandboxRegion")]
        public Input<string>? SandboxRegion { get; set; }

        /// <summary>
        /// Customization options for the FortiGuard DNS service. Valid values: `include-question-section`.
        /// </summary>
        [Input("sdnsOptions")]
        public Input<string>? SdnsOptions { get; set; }

        /// <summary>
        /// IP address of the FortiDNS server.
        /// </summary>
        [Input("sdnsServerIp")]
        public Input<string>? SdnsServerIp { get; set; }

        /// <summary>
        /// Port used to communicate with FortiDNS servers.
        /// </summary>
        [Input("sdnsServerPort")]
        public Input<int>? SdnsServerPort { get; set; }

        /// <summary>
        /// Service account ID.
        /// </summary>
        [Input("serviceAccountId")]
        public Input<string>? ServiceAccountId { get; set; }

        /// <summary>
        /// Source IPv4 address used to communicate with FortiGuard.
        /// </summary>
        [Input("sourceIp")]
        public Input<string>? SourceIp { get; set; }

        /// <summary>
        /// Source IPv6 address used to communicate with FortiGuard.
        /// </summary>
        [Input("sourceIp6")]
        public Input<string>? SourceIp6 { get; set; }

        /// <summary>
        /// Enable/disable proxy dictionary rebuild. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateBuildProxy")]
        public Input<string>? UpdateBuildProxy { get; set; }

        /// <summary>
        /// Enable/disable external resource update. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateExtdb")]
        public Input<string>? UpdateExtdb { get; set; }

        /// <summary>
        /// Enable/disable Internet Service Database update. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateFfdb")]
        public Input<string>? UpdateFfdb { get; set; }

        /// <summary>
        /// Signature update server location.
        /// </summary>
        [Input("updateServerLocation")]
        public Input<string>? UpdateServerLocation { get; set; }

        /// <summary>
        /// Enable/disable allowlist update. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("updateUwdb")]
        public Input<string>? UpdateUwdb { get; set; }

        /// <summary>
        /// FortiGuard Service virtual domain name.
        /// </summary>
        [Input("vdom")]
        public Input<string>? Vdom { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource 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; }

        /// <summary>
        /// Expiration date of the FortiGuard video filter contract.
        /// </summary>
        [Input("videofilterExpiration")]
        public Input<int>? VideofilterExpiration { get; set; }

        /// <summary>
        /// Interval of time between license checks for the FortiGuard video filter contract.
        /// </summary>
        [Input("videofilterLicense")]
        public Input<int>? VideofilterLicense { get; set; }

        /// <summary>
        /// Enable/disable FortiGuard web filter caching. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webfilterCache")]
        public Input<string>? WebfilterCache { get; set; }

        /// <summary>
        /// Time-to-live for web filter cache entries in seconds (300 - 86400).
        /// </summary>
        [Input("webfilterCacheTtl")]
        public Input<int>? WebfilterCacheTtl { get; set; }

        /// <summary>
        /// Expiration date of the FortiGuard web filter contract.
        /// </summary>
        [Input("webfilterExpiration")]
        public Input<int>? WebfilterExpiration { get; set; }

        /// <summary>
        /// Enable/disable turning off the FortiGuard web filtering service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webfilterForceOff")]
        public Input<string>? WebfilterForceOff { get; set; }

        /// <summary>
        /// Interval of time between license checks for the FortiGuard web filter contract.
        /// </summary>
        [Input("webfilterLicense")]
        public Input<int>? WebfilterLicense { get; set; }

        /// <summary>
        /// Web filter query time out (1 - 30 sec, default = 7).
        /// </summary>
        [Input("webfilterTimeout")]
        public Input<int>? WebfilterTimeout { get; set; }

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