// *** 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 IKE global attributes. Applies to FortiOS Version `&gt;= 7.0.1`.
    /// 
    /// ## Import
    /// 
    /// System Ike can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemIke:SystemIke labelname SystemIke
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemIke:SystemIke labelname SystemIke
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemIke:SystemIke")]
    public partial class SystemIke : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Diffie-Hellman group 1 (MODP-768). The structure of `dh_group_1` block is documented below.
        /// </summary>
        [Output("dhGroup1")]
        public Output<Outputs.SystemIkeDhGroup1> DhGroup1 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 14 (MODP-2048). The structure of `dh_group_14` block is documented below.
        /// </summary>
        [Output("dhGroup14")]
        public Output<Outputs.SystemIkeDhGroup14> DhGroup14 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 15 (MODP-3072). The structure of `dh_group_15` block is documented below.
        /// </summary>
        [Output("dhGroup15")]
        public Output<Outputs.SystemIkeDhGroup15> DhGroup15 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 16 (MODP-4096). The structure of `dh_group_16` block is documented below.
        /// </summary>
        [Output("dhGroup16")]
        public Output<Outputs.SystemIkeDhGroup16> DhGroup16 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 17 (MODP-6144). The structure of `dh_group_17` block is documented below.
        /// </summary>
        [Output("dhGroup17")]
        public Output<Outputs.SystemIkeDhGroup17> DhGroup17 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 18 (MODP-8192). The structure of `dh_group_18` block is documented below.
        /// </summary>
        [Output("dhGroup18")]
        public Output<Outputs.SystemIkeDhGroup18> DhGroup18 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 19 (EC-P256). The structure of `dh_group_19` block is documented below.
        /// </summary>
        [Output("dhGroup19")]
        public Output<Outputs.SystemIkeDhGroup19> DhGroup19 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 2 (MODP-1024). The structure of `dh_group_2` block is documented below.
        /// </summary>
        [Output("dhGroup2")]
        public Output<Outputs.SystemIkeDhGroup2> DhGroup2 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 20 (EC-P384). The structure of `dh_group_20` block is documented below.
        /// </summary>
        [Output("dhGroup20")]
        public Output<Outputs.SystemIkeDhGroup20> DhGroup20 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 21 (EC-P521). The structure of `dh_group_21` block is documented below.
        /// </summary>
        [Output("dhGroup21")]
        public Output<Outputs.SystemIkeDhGroup21> DhGroup21 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 27 (EC-P224BP). The structure of `dh_group_27` block is documented below.
        /// </summary>
        [Output("dhGroup27")]
        public Output<Outputs.SystemIkeDhGroup27> DhGroup27 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 28 (EC-P256BP). The structure of `dh_group_28` block is documented below.
        /// </summary>
        [Output("dhGroup28")]
        public Output<Outputs.SystemIkeDhGroup28> DhGroup28 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 29 (EC-P384BP). The structure of `dh_group_29` block is documented below.
        /// </summary>
        [Output("dhGroup29")]
        public Output<Outputs.SystemIkeDhGroup29> DhGroup29 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 30 (EC-P512BP). The structure of `dh_group_30` block is documented below.
        /// </summary>
        [Output("dhGroup30")]
        public Output<Outputs.SystemIkeDhGroup30> DhGroup30 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 31 (EC-X25519). The structure of `dh_group_31` block is documented below.
        /// </summary>
        [Output("dhGroup31")]
        public Output<Outputs.SystemIkeDhGroup31> DhGroup31 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 32 (EC-X448). The structure of `dh_group_32` block is documented below.
        /// </summary>
        [Output("dhGroup32")]
        public Output<Outputs.SystemIkeDhGroup32> DhGroup32 { get; private set; } = null!;

        /// <summary>
        /// Diffie-Hellman group 5 (MODP-1536). The structure of `dh_group_5` block is documented below.
        /// </summary>
        [Output("dhGroup5")]
        public Output<Outputs.SystemIkeDhGroup5> DhGroup5 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable Diffie-Hellman key pair cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dhKeypairCache")]
        public Output<string> DhKeypairCache { get; private set; } = null!;

        /// <summary>
        /// Number of key pairs to pre-generate for each Diffie-Hellman group (per-worker).
        /// </summary>
        [Output("dhKeypairCount")]
        public Output<int> DhKeypairCount { get; private set; } = null!;

        /// <summary>
        /// Enable/disable Diffie-Hellman key pair cache CPU throttling. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dhKeypairThrottle")]
        public Output<string> DhKeypairThrottle { get; private set; } = null!;

        /// <summary>
        /// Use software (CPU) or hardware (CPX) to perform Diffie-Hellman calculations. Valid values: `software`, `hardware`.
        /// </summary>
        [Output("dhMode")]
        public Output<string> DhMode { get; private set; } = null!;

        /// <summary>
        /// Enable/disable multiprocess Diffie-Hellman daemon for IKE. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dhMultiprocess")]
        public Output<string> DhMultiprocess { get; private set; } = null!;

        /// <summary>
        /// Number of Diffie-Hellman workers to start.
        /// </summary>
        [Output("dhWorkerCount")]
        public Output<int> DhWorkerCount { get; private set; } = null!;

        /// <summary>
        /// Maximum number of IPsec tunnels to negotiate simultaneously.
        /// </summary>
        [Output("embryonicLimit")]
        public Output<int> EmbryonicLimit { 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.
        /// 
        /// The `dh_group_1` block supports:
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;


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

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

    public sealed class SystemIkeArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Diffie-Hellman group 1 (MODP-768). The structure of `dh_group_1` block is documented below.
        /// </summary>
        [Input("dhGroup1")]
        public Input<Inputs.SystemIkeDhGroup1Args>? DhGroup1 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 14 (MODP-2048). The structure of `dh_group_14` block is documented below.
        /// </summary>
        [Input("dhGroup14")]
        public Input<Inputs.SystemIkeDhGroup14Args>? DhGroup14 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 15 (MODP-3072). The structure of `dh_group_15` block is documented below.
        /// </summary>
        [Input("dhGroup15")]
        public Input<Inputs.SystemIkeDhGroup15Args>? DhGroup15 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 16 (MODP-4096). The structure of `dh_group_16` block is documented below.
        /// </summary>
        [Input("dhGroup16")]
        public Input<Inputs.SystemIkeDhGroup16Args>? DhGroup16 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 17 (MODP-6144). The structure of `dh_group_17` block is documented below.
        /// </summary>
        [Input("dhGroup17")]
        public Input<Inputs.SystemIkeDhGroup17Args>? DhGroup17 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 18 (MODP-8192). The structure of `dh_group_18` block is documented below.
        /// </summary>
        [Input("dhGroup18")]
        public Input<Inputs.SystemIkeDhGroup18Args>? DhGroup18 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 19 (EC-P256). The structure of `dh_group_19` block is documented below.
        /// </summary>
        [Input("dhGroup19")]
        public Input<Inputs.SystemIkeDhGroup19Args>? DhGroup19 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 2 (MODP-1024). The structure of `dh_group_2` block is documented below.
        /// </summary>
        [Input("dhGroup2")]
        public Input<Inputs.SystemIkeDhGroup2Args>? DhGroup2 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 20 (EC-P384). The structure of `dh_group_20` block is documented below.
        /// </summary>
        [Input("dhGroup20")]
        public Input<Inputs.SystemIkeDhGroup20Args>? DhGroup20 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 21 (EC-P521). The structure of `dh_group_21` block is documented below.
        /// </summary>
        [Input("dhGroup21")]
        public Input<Inputs.SystemIkeDhGroup21Args>? DhGroup21 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 27 (EC-P224BP). The structure of `dh_group_27` block is documented below.
        /// </summary>
        [Input("dhGroup27")]
        public Input<Inputs.SystemIkeDhGroup27Args>? DhGroup27 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 28 (EC-P256BP). The structure of `dh_group_28` block is documented below.
        /// </summary>
        [Input("dhGroup28")]
        public Input<Inputs.SystemIkeDhGroup28Args>? DhGroup28 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 29 (EC-P384BP). The structure of `dh_group_29` block is documented below.
        /// </summary>
        [Input("dhGroup29")]
        public Input<Inputs.SystemIkeDhGroup29Args>? DhGroup29 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 30 (EC-P512BP). The structure of `dh_group_30` block is documented below.
        /// </summary>
        [Input("dhGroup30")]
        public Input<Inputs.SystemIkeDhGroup30Args>? DhGroup30 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 31 (EC-X25519). The structure of `dh_group_31` block is documented below.
        /// </summary>
        [Input("dhGroup31")]
        public Input<Inputs.SystemIkeDhGroup31Args>? DhGroup31 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 32 (EC-X448). The structure of `dh_group_32` block is documented below.
        /// </summary>
        [Input("dhGroup32")]
        public Input<Inputs.SystemIkeDhGroup32Args>? DhGroup32 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 5 (MODP-1536). The structure of `dh_group_5` block is documented below.
        /// </summary>
        [Input("dhGroup5")]
        public Input<Inputs.SystemIkeDhGroup5Args>? DhGroup5 { get; set; }

        /// <summary>
        /// Enable/disable Diffie-Hellman key pair cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhKeypairCache")]
        public Input<string>? DhKeypairCache { get; set; }

        /// <summary>
        /// Number of key pairs to pre-generate for each Diffie-Hellman group (per-worker).
        /// </summary>
        [Input("dhKeypairCount")]
        public Input<int>? DhKeypairCount { get; set; }

        /// <summary>
        /// Enable/disable Diffie-Hellman key pair cache CPU throttling. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhKeypairThrottle")]
        public Input<string>? DhKeypairThrottle { get; set; }

        /// <summary>
        /// Use software (CPU) or hardware (CPX) to perform Diffie-Hellman calculations. Valid values: `software`, `hardware`.
        /// </summary>
        [Input("dhMode")]
        public Input<string>? DhMode { get; set; }

        /// <summary>
        /// Enable/disable multiprocess Diffie-Hellman daemon for IKE. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhMultiprocess")]
        public Input<string>? DhMultiprocess { get; set; }

        /// <summary>
        /// Number of Diffie-Hellman workers to start.
        /// </summary>
        [Input("dhWorkerCount")]
        public Input<int>? DhWorkerCount { get; set; }

        /// <summary>
        /// Maximum number of IPsec tunnels to negotiate simultaneously.
        /// </summary>
        [Input("embryonicLimit")]
        public Input<int>? EmbryonicLimit { 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.
        /// 
        /// The `dh_group_1` block supports:
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

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

    public sealed class SystemIkeState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Diffie-Hellman group 1 (MODP-768). The structure of `dh_group_1` block is documented below.
        /// </summary>
        [Input("dhGroup1")]
        public Input<Inputs.SystemIkeDhGroup1GetArgs>? DhGroup1 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 14 (MODP-2048). The structure of `dh_group_14` block is documented below.
        /// </summary>
        [Input("dhGroup14")]
        public Input<Inputs.SystemIkeDhGroup14GetArgs>? DhGroup14 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 15 (MODP-3072). The structure of `dh_group_15` block is documented below.
        /// </summary>
        [Input("dhGroup15")]
        public Input<Inputs.SystemIkeDhGroup15GetArgs>? DhGroup15 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 16 (MODP-4096). The structure of `dh_group_16` block is documented below.
        /// </summary>
        [Input("dhGroup16")]
        public Input<Inputs.SystemIkeDhGroup16GetArgs>? DhGroup16 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 17 (MODP-6144). The structure of `dh_group_17` block is documented below.
        /// </summary>
        [Input("dhGroup17")]
        public Input<Inputs.SystemIkeDhGroup17GetArgs>? DhGroup17 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 18 (MODP-8192). The structure of `dh_group_18` block is documented below.
        /// </summary>
        [Input("dhGroup18")]
        public Input<Inputs.SystemIkeDhGroup18GetArgs>? DhGroup18 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 19 (EC-P256). The structure of `dh_group_19` block is documented below.
        /// </summary>
        [Input("dhGroup19")]
        public Input<Inputs.SystemIkeDhGroup19GetArgs>? DhGroup19 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 2 (MODP-1024). The structure of `dh_group_2` block is documented below.
        /// </summary>
        [Input("dhGroup2")]
        public Input<Inputs.SystemIkeDhGroup2GetArgs>? DhGroup2 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 20 (EC-P384). The structure of `dh_group_20` block is documented below.
        /// </summary>
        [Input("dhGroup20")]
        public Input<Inputs.SystemIkeDhGroup20GetArgs>? DhGroup20 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 21 (EC-P521). The structure of `dh_group_21` block is documented below.
        /// </summary>
        [Input("dhGroup21")]
        public Input<Inputs.SystemIkeDhGroup21GetArgs>? DhGroup21 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 27 (EC-P224BP). The structure of `dh_group_27` block is documented below.
        /// </summary>
        [Input("dhGroup27")]
        public Input<Inputs.SystemIkeDhGroup27GetArgs>? DhGroup27 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 28 (EC-P256BP). The structure of `dh_group_28` block is documented below.
        /// </summary>
        [Input("dhGroup28")]
        public Input<Inputs.SystemIkeDhGroup28GetArgs>? DhGroup28 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 29 (EC-P384BP). The structure of `dh_group_29` block is documented below.
        /// </summary>
        [Input("dhGroup29")]
        public Input<Inputs.SystemIkeDhGroup29GetArgs>? DhGroup29 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 30 (EC-P512BP). The structure of `dh_group_30` block is documented below.
        /// </summary>
        [Input("dhGroup30")]
        public Input<Inputs.SystemIkeDhGroup30GetArgs>? DhGroup30 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 31 (EC-X25519). The structure of `dh_group_31` block is documented below.
        /// </summary>
        [Input("dhGroup31")]
        public Input<Inputs.SystemIkeDhGroup31GetArgs>? DhGroup31 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 32 (EC-X448). The structure of `dh_group_32` block is documented below.
        /// </summary>
        [Input("dhGroup32")]
        public Input<Inputs.SystemIkeDhGroup32GetArgs>? DhGroup32 { get; set; }

        /// <summary>
        /// Diffie-Hellman group 5 (MODP-1536). The structure of `dh_group_5` block is documented below.
        /// </summary>
        [Input("dhGroup5")]
        public Input<Inputs.SystemIkeDhGroup5GetArgs>? DhGroup5 { get; set; }

        /// <summary>
        /// Enable/disable Diffie-Hellman key pair cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhKeypairCache")]
        public Input<string>? DhKeypairCache { get; set; }

        /// <summary>
        /// Number of key pairs to pre-generate for each Diffie-Hellman group (per-worker).
        /// </summary>
        [Input("dhKeypairCount")]
        public Input<int>? DhKeypairCount { get; set; }

        /// <summary>
        /// Enable/disable Diffie-Hellman key pair cache CPU throttling. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhKeypairThrottle")]
        public Input<string>? DhKeypairThrottle { get; set; }

        /// <summary>
        /// Use software (CPU) or hardware (CPX) to perform Diffie-Hellman calculations. Valid values: `software`, `hardware`.
        /// </summary>
        [Input("dhMode")]
        public Input<string>? DhMode { get; set; }

        /// <summary>
        /// Enable/disable multiprocess Diffie-Hellman daemon for IKE. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhMultiprocess")]
        public Input<string>? DhMultiprocess { get; set; }

        /// <summary>
        /// Number of Diffie-Hellman workers to start.
        /// </summary>
        [Input("dhWorkerCount")]
        public Input<int>? DhWorkerCount { get; set; }

        /// <summary>
        /// Maximum number of IPsec tunnels to negotiate simultaneously.
        /// </summary>
        [Input("embryonicLimit")]
        public Input<int>? EmbryonicLimit { 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.
        /// 
        /// The `dh_group_1` block supports:
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

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