// *** 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 central management.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Fortios = Pulumiverse.Fortios;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var trname1 = new Fortios.SystemCentralmanagement("trname1", new()
    ///     {
    ///         AllowMonitor = "enable",
    ///         AllowPushConfiguration = "enable",
    ///         AllowPushFirmware = "enable",
    ///         AllowRemoteFirmwareUpgrade = "enable",
    ///         EncAlgorithm = "high",
    ///         Fmg = "0.0.0.0",
    ///         FmgSourceIp6 = "::",
    ///         IncludeDefaultServers = "enable",
    ///         Mode = "normal",
    ///         ScheduleConfigRestore = "enable",
    ///         ScheduleScriptRestore = "enable",
    ///         Type = "fortimanager",
    ///         Vdom = "root",
    ///     });
    /// 
    ///     var trname2 = new Fortios.SystemCentralmanagement("trname2", new()
    ///     {
    ///         AllowMonitor = "enable",
    ///         AllowPushConfiguration = "enable",
    ///         AllowPushFirmware = "enable",
    ///         AllowRemoteFirmwareUpgrade = "enable",
    ///         EncAlgorithm = "high",
    ///         Fmg = "\"192.168.52.177\"",
    ///         IncludeDefaultServers = "enable",
    ///         Mode = "normal",
    ///         Type = "fortimanager",
    ///         Vdom = "root",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System CentralManagement can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemCentralmanagement:SystemCentralmanagement labelname SystemCentralManagement
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemCentralmanagement:SystemCentralmanagement labelname SystemCentralManagement
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemCentralmanagement:SystemCentralmanagement")]
    public partial class SystemCentralmanagement : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable allowing the central management server to remotely monitor this FortiGate Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowMonitor")]
        public Output<string> AllowMonitor { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowing the central management server to push configuration changes to this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowPushConfiguration")]
        public Output<string> AllowPushConfiguration { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowing the central management server to push firmware updates to this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowPushFirmware")]
        public Output<string> AllowPushFirmware { get; private set; } = null!;

        /// <summary>
        /// Enable/disable remotely upgrading the firmware on this FortiGate from the central management server. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowRemoteFirmwareUpgrade")]
        public Output<string> AllowRemoteFirmwareUpgrade { get; private set; } = null!;

        /// <summary>
        /// CA certificate to be used by FGFM protocol.
        /// </summary>
        [Output("caCert")]
        public Output<string> CaCert { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// Encryption strength for communications between the FortiGate and central management. Valid values: `default`, `high`, `low`.
        /// </summary>
        [Output("encAlgorithm")]
        public Output<string> EncAlgorithm { get; private set; } = null!;

        /// <summary>
        /// IP address or FQDN of the FortiManager.
        /// </summary>
        [Output("fmg")]
        public Output<string> Fmg { get; private set; } = null!;

        /// <summary>
        /// IPv4 source address that this FortiGate uses when communicating with FortiManager.
        /// </summary>
        [Output("fmgSourceIp")]
        public Output<string> FmgSourceIp { get; private set; } = null!;

        /// <summary>
        /// IPv6 source address that this FortiGate uses when communicating with FortiManager.
        /// </summary>
        [Output("fmgSourceIp6")]
        public Output<string> FmgSourceIp6 { get; private set; } = null!;

        /// <summary>
        /// Port used to communicate with FortiManager that is acting as a FortiGuard update server. Valid values: `8890`, `443`.
        /// </summary>
        [Output("fmgUpdatePort")]
        public Output<string> FmgUpdatePort { get; private set; } = null!;

        /// <summary>
        /// Enable/disable inclusion of public FortiGuard servers in the override server list. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("includeDefaultServers")]
        public Output<string> IncludeDefaultServers { 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>
        /// Certificate to be used by FGFM protocol.
        /// </summary>
        [Output("localCert")]
        public Output<string> LocalCert { get; private set; } = null!;

        /// <summary>
        /// Central management mode. Valid values: `normal`, `backup`.
        /// </summary>
        [Output("mode")]
        public Output<string> Mode { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowing the central management server to restore the configuration of this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("scheduleConfigRestore")]
        public Output<string> ScheduleConfigRestore { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowing the central management server to restore the scripts stored on this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("scheduleScriptRestore")]
        public Output<string> ScheduleScriptRestore { get; private set; } = null!;

        /// <summary>
        /// Serial number.
        /// </summary>
        [Output("serialNumber")]
        public Output<string> SerialNumber { get; private set; } = null!;

        /// <summary>
        /// Additional severs that the FortiGate can use for updates (for AV, IPS, updates) and ratings (for web filter and antispam ratings) servers. The structure of `server_list` block is documented below.
        /// </summary>
        [Output("serverLists")]
        public Output<ImmutableArray<Outputs.SystemCentralmanagementServerList>> ServerLists { get; private set; } = null!;

        /// <summary>
        /// Central management type. Valid values: `fortimanager`, `fortiguard`, `none`.
        /// </summary>
        [Output("type")]
        public Output<string> Type { get; private set; } = null!;

        /// <summary>
        /// Virtual domain (VDOM) name to use when communicating with FortiManager.
        /// </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>
        /// Create a SystemCentralmanagement 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 SystemCentralmanagement(string name, SystemCentralmanagementArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemCentralmanagement:SystemCentralmanagement", name, args ?? new SystemCentralmanagementArgs(), MakeResourceOptions(options, ""))
        {
        }

        private SystemCentralmanagement(string name, Input<string> id, SystemCentralmanagementState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemCentralmanagement:SystemCentralmanagement", 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",
            };
            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 SystemCentralmanagement 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 SystemCentralmanagement Get(string name, Input<string> id, SystemCentralmanagementState? state = null, CustomResourceOptions? options = null)
        {
            return new SystemCentralmanagement(name, id, state, options);
        }
    }

    public sealed class SystemCentralmanagementArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable allowing the central management server to remotely monitor this FortiGate Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowMonitor")]
        public Input<string>? AllowMonitor { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to push configuration changes to this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowPushConfiguration")]
        public Input<string>? AllowPushConfiguration { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to push firmware updates to this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowPushFirmware")]
        public Input<string>? AllowPushFirmware { get; set; }

        /// <summary>
        /// Enable/disable remotely upgrading the firmware on this FortiGate from the central management server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowRemoteFirmwareUpgrade")]
        public Input<string>? AllowRemoteFirmwareUpgrade { get; set; }

        /// <summary>
        /// CA certificate to be used by FGFM protocol.
        /// </summary>
        [Input("caCert")]
        public Input<string>? CaCert { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Encryption strength for communications between the FortiGate and central management. Valid values: `default`, `high`, `low`.
        /// </summary>
        [Input("encAlgorithm")]
        public Input<string>? EncAlgorithm { get; set; }

        /// <summary>
        /// IP address or FQDN of the FortiManager.
        /// </summary>
        [Input("fmg")]
        public Input<string>? Fmg { get; set; }

        /// <summary>
        /// IPv4 source address that this FortiGate uses when communicating with FortiManager.
        /// </summary>
        [Input("fmgSourceIp")]
        public Input<string>? FmgSourceIp { get; set; }

        /// <summary>
        /// IPv6 source address that this FortiGate uses when communicating with FortiManager.
        /// </summary>
        [Input("fmgSourceIp6")]
        public Input<string>? FmgSourceIp6 { get; set; }

        /// <summary>
        /// Port used to communicate with FortiManager that is acting as a FortiGuard update server. Valid values: `8890`, `443`.
        /// </summary>
        [Input("fmgUpdatePort")]
        public Input<string>? FmgUpdatePort { get; set; }

        /// <summary>
        /// Enable/disable inclusion of public FortiGuard servers in the override server list. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("includeDefaultServers")]
        public Input<string>? IncludeDefaultServers { 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>
        /// Certificate to be used by FGFM protocol.
        /// </summary>
        [Input("localCert")]
        public Input<string>? LocalCert { get; set; }

        /// <summary>
        /// Central management mode. Valid values: `normal`, `backup`.
        /// </summary>
        [Input("mode")]
        public Input<string>? Mode { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to restore the configuration of this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("scheduleConfigRestore")]
        public Input<string>? ScheduleConfigRestore { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to restore the scripts stored on this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("scheduleScriptRestore")]
        public Input<string>? ScheduleScriptRestore { get; set; }

        /// <summary>
        /// Serial number.
        /// </summary>
        [Input("serialNumber")]
        public Input<string>? SerialNumber { get; set; }

        [Input("serverLists")]
        private InputList<Inputs.SystemCentralmanagementServerListArgs>? _serverLists;

        /// <summary>
        /// Additional severs that the FortiGate can use for updates (for AV, IPS, updates) and ratings (for web filter and antispam ratings) servers. The structure of `server_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemCentralmanagementServerListArgs> ServerLists
        {
            get => _serverLists ?? (_serverLists = new InputList<Inputs.SystemCentralmanagementServerListArgs>());
            set => _serverLists = value;
        }

        /// <summary>
        /// Central management type. Valid values: `fortimanager`, `fortiguard`, `none`.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Virtual domain (VDOM) name to use when communicating with FortiManager.
        /// </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; }

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

    public sealed class SystemCentralmanagementState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable allowing the central management server to remotely monitor this FortiGate Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowMonitor")]
        public Input<string>? AllowMonitor { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to push configuration changes to this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowPushConfiguration")]
        public Input<string>? AllowPushConfiguration { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to push firmware updates to this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowPushFirmware")]
        public Input<string>? AllowPushFirmware { get; set; }

        /// <summary>
        /// Enable/disable remotely upgrading the firmware on this FortiGate from the central management server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowRemoteFirmwareUpgrade")]
        public Input<string>? AllowRemoteFirmwareUpgrade { get; set; }

        /// <summary>
        /// CA certificate to be used by FGFM protocol.
        /// </summary>
        [Input("caCert")]
        public Input<string>? CaCert { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Encryption strength for communications between the FortiGate and central management. Valid values: `default`, `high`, `low`.
        /// </summary>
        [Input("encAlgorithm")]
        public Input<string>? EncAlgorithm { get; set; }

        /// <summary>
        /// IP address or FQDN of the FortiManager.
        /// </summary>
        [Input("fmg")]
        public Input<string>? Fmg { get; set; }

        /// <summary>
        /// IPv4 source address that this FortiGate uses when communicating with FortiManager.
        /// </summary>
        [Input("fmgSourceIp")]
        public Input<string>? FmgSourceIp { get; set; }

        /// <summary>
        /// IPv6 source address that this FortiGate uses when communicating with FortiManager.
        /// </summary>
        [Input("fmgSourceIp6")]
        public Input<string>? FmgSourceIp6 { get; set; }

        /// <summary>
        /// Port used to communicate with FortiManager that is acting as a FortiGuard update server. Valid values: `8890`, `443`.
        /// </summary>
        [Input("fmgUpdatePort")]
        public Input<string>? FmgUpdatePort { get; set; }

        /// <summary>
        /// Enable/disable inclusion of public FortiGuard servers in the override server list. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("includeDefaultServers")]
        public Input<string>? IncludeDefaultServers { 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>
        /// Certificate to be used by FGFM protocol.
        /// </summary>
        [Input("localCert")]
        public Input<string>? LocalCert { get; set; }

        /// <summary>
        /// Central management mode. Valid values: `normal`, `backup`.
        /// </summary>
        [Input("mode")]
        public Input<string>? Mode { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to restore the configuration of this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("scheduleConfigRestore")]
        public Input<string>? ScheduleConfigRestore { get; set; }

        /// <summary>
        /// Enable/disable allowing the central management server to restore the scripts stored on this FortiGate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("scheduleScriptRestore")]
        public Input<string>? ScheduleScriptRestore { get; set; }

        /// <summary>
        /// Serial number.
        /// </summary>
        [Input("serialNumber")]
        public Input<string>? SerialNumber { get; set; }

        [Input("serverLists")]
        private InputList<Inputs.SystemCentralmanagementServerListGetArgs>? _serverLists;

        /// <summary>
        /// Additional severs that the FortiGate can use for updates (for AV, IPS, updates) and ratings (for web filter and antispam ratings) servers. The structure of `server_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemCentralmanagementServerListGetArgs> ServerLists
        {
            get => _serverLists ?? (_serverLists = new InputList<Inputs.SystemCentralmanagementServerListGetArgs>());
            set => _serverLists = value;
        }

        /// <summary>
        /// Central management type. Valid values: `fortimanager`, `fortiguard`, `none`.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Virtual domain (VDOM) name to use when communicating with FortiManager.
        /// </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; }

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