// *** 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 L2TP.
    /// 
    /// ## Import
    /// 
    /// Vpn L2Tp can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/vpnL2tp:VpnL2tp labelname VpnL2Tp
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/vpnL2tp:VpnL2tp labelname VpnL2Tp
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/vpnL2tp:VpnL2tp")]
    public partial class VpnL2tp : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable data compression. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("compress")]
        public Output<string> Compress { get; private set; } = null!;

        /// <summary>
        /// End IP.
        /// </summary>
        [Output("eip")]
        public Output<string> Eip { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPsec enforcement. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("enforceIpsec")]
        public Output<string> EnforceIpsec { get; private set; } = null!;

        /// <summary>
        /// L2TP hello message interval in seconds (0 - 3600 sec, default = 60).
        /// </summary>
        [Output("helloInterval")]
        public Output<int> HelloInterval { get; private set; } = null!;

        /// <summary>
        /// Time in seconds between PPPoE Link Control Protocol (LCP) echo requests.
        /// </summary>
        [Output("lcpEchoInterval")]
        public Output<int> LcpEchoInterval { get; private set; } = null!;

        /// <summary>
        /// Maximum number of missed LCP echo messages before disconnect.
        /// </summary>
        [Output("lcpMaxEchoFails")]
        public Output<int> LcpMaxEchoFails { get; private set; } = null!;

        /// <summary>
        /// Start IP.
        /// </summary>
        [Output("sip")]
        public Output<string> Sip { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiGate as a L2TP gateway. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// User group.
        /// </summary>
        [Output("usrgrp")]
        public Output<string> Usrgrp { 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 VpnL2tp 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 VpnL2tp(string name, VpnL2tpArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/vpnL2tp:VpnL2tp", name, args ?? new VpnL2tpArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class VpnL2tpArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable data compression. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("compress")]
        public Input<string>? Compress { get; set; }

        /// <summary>
        /// End IP.
        /// </summary>
        [Input("eip")]
        public Input<string>? Eip { get; set; }

        /// <summary>
        /// Enable/disable IPsec enforcement. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("enforceIpsec")]
        public Input<string>? EnforceIpsec { get; set; }

        /// <summary>
        /// L2TP hello message interval in seconds (0 - 3600 sec, default = 60).
        /// </summary>
        [Input("helloInterval")]
        public Input<int>? HelloInterval { get; set; }

        /// <summary>
        /// Time in seconds between PPPoE Link Control Protocol (LCP) echo requests.
        /// </summary>
        [Input("lcpEchoInterval")]
        public Input<int>? LcpEchoInterval { get; set; }

        /// <summary>
        /// Maximum number of missed LCP echo messages before disconnect.
        /// </summary>
        [Input("lcpMaxEchoFails")]
        public Input<int>? LcpMaxEchoFails { get; set; }

        /// <summary>
        /// Start IP.
        /// </summary>
        [Input("sip")]
        public Input<string>? Sip { get; set; }

        /// <summary>
        /// Enable/disable FortiGate as a L2TP gateway. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("status", required: true)]
        public Input<string> Status { get; set; } = null!;

        /// <summary>
        /// User group.
        /// </summary>
        [Input("usrgrp")]
        public Input<string>? Usrgrp { 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 VpnL2tpArgs()
        {
        }
        public static new VpnL2tpArgs Empty => new VpnL2tpArgs();
    }

    public sealed class VpnL2tpState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable data compression. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("compress")]
        public Input<string>? Compress { get; set; }

        /// <summary>
        /// End IP.
        /// </summary>
        [Input("eip")]
        public Input<string>? Eip { get; set; }

        /// <summary>
        /// Enable/disable IPsec enforcement. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("enforceIpsec")]
        public Input<string>? EnforceIpsec { get; set; }

        /// <summary>
        /// L2TP hello message interval in seconds (0 - 3600 sec, default = 60).
        /// </summary>
        [Input("helloInterval")]
        public Input<int>? HelloInterval { get; set; }

        /// <summary>
        /// Time in seconds between PPPoE Link Control Protocol (LCP) echo requests.
        /// </summary>
        [Input("lcpEchoInterval")]
        public Input<int>? LcpEchoInterval { get; set; }

        /// <summary>
        /// Maximum number of missed LCP echo messages before disconnect.
        /// </summary>
        [Input("lcpMaxEchoFails")]
        public Input<int>? LcpMaxEchoFails { get; set; }

        /// <summary>
        /// Start IP.
        /// </summary>
        [Input("sip")]
        public Input<string>? Sip { get; set; }

        /// <summary>
        /// Enable/disable FortiGate as a L2TP gateway. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// User group.
        /// </summary>
        [Input("usrgrp")]
        public Input<string>? Usrgrp { 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 VpnL2tpState()
        {
        }
        public static new VpnL2tpState Empty => new VpnL2tpState();
    }
}
