<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 the PPPoE interfaces.
    /// 
    /// ## 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.SystemPppoeinterface("trname", new()
    ///     {
    ///         AuthType = "auto",
    ///         Device = "port3",
    ///         DialOnDemand = "disable",
    ///         DiscRetryTimeout = 1,
    ///         IdleTimeout = 0,
    ///         Ipunnumbered = "0.0.0.0",
    ///         Ipv6 = "disable",
    ///         LcpEchoInterval = 5,
    ///         LcpMaxEchoFails = 3,
    ///         PadtRetryTimeout = 1,
    ///         PppoeUnnumberedNegotiate = "enable",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System PppoeInterface can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemPppoeinterface:SystemPppoeinterface labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemPppoeinterface:SystemPppoeinterface labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemPppoeinterface:SystemPppoeinterface")]
    public partial class SystemPppoeinterface : global::Pulumi.CustomResource
    {
        /// <summary>
        /// PPPoE AC name.
        /// </summary>
        [Output("acName")]
        public Output<string> AcName { get; private set; } = null!;

        /// <summary>
        /// PPP authentication type to use. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Output("authType")]
        public Output<string> AuthType { get; private set; } = null!;

        /// <summary>
        /// Name for the physical interface.
        /// </summary>
        [Output("device")]
        public Output<string> Device { get; private set; } = null!;

        /// <summary>
        /// Enable/disable dial on demand to dial the PPPoE interface when packets are routed to the PPPoE interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dialOnDemand")]
        public Output<string> DialOnDemand { get; private set; } = null!;

        /// <summary>
        /// PPPoE discovery init timeout value in (0-4294967295 sec).
        /// </summary>
        [Output("discRetryTimeout")]
        public Output<int> DiscRetryTimeout { get; private set; } = null!;

        /// <summary>
        /// PPPoE auto disconnect after idle timeout (0-4294967295 sec).
        /// </summary>
        [Output("idleTimeout")]
        public Output<int> IdleTimeout { get; private set; } = null!;

        /// <summary>
        /// PPPoE unnumbered IP.
        /// </summary>
        [Output("ipunnumbered")]
        public Output<string> Ipunnumbered { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 Control Protocol (IPv6CP). Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipv6")]
        public Output<string> Ipv6 { get; private set; } = null!;

        /// <summary>
        /// PPPoE LCP echo interval in (0-4294967295 sec, default = 5).
        /// </summary>
        [Output("lcpEchoInterval")]
        public Output<int> LcpEchoInterval { get; private set; } = null!;

        /// <summary>
        /// Maximum missed LCP echo messages before disconnect (0-4294967295, default = 3).
        /// </summary>
        [Output("lcpMaxEchoFails")]
        public Output<int> LcpMaxEchoFails { get; private set; } = null!;

        /// <summary>
        /// Name of the PPPoE interface.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// PPPoE terminate timeout value in (0-4294967295 sec).
        /// </summary>
        [Output("padtRetryTimeout")]
        public Output<int> PadtRetryTimeout { get; private set; } = null!;

        /// <summary>
        /// Enter the password.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// Enable/disable PPPoE unnumbered negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("pppoeUnnumberedNegotiate")]
        public Output<string> PppoeUnnumberedNegotiate { get; private set; } = null!;

        /// <summary>
        /// PPPoE service name.
        /// </summary>
        [Output("serviceName")]
        public Output<string> ServiceName { get; private set; } = null!;

        /// <summary>
        /// User name.
        /// </summary>
        [Output("username")]
        public Output<string> Username { 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 SystemPppoeinterface 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 SystemPppoeinterface(string name, SystemPppoeinterfaceArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/systemPppoeinterface:SystemPppoeinterface", name, args ?? new SystemPppoeinterfaceArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class SystemPppoeinterfaceArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// PPPoE AC name.
        /// </summary>
        [Input("acName")]
        public Input<string>? AcName { get; set; }

        /// <summary>
        /// PPP authentication type to use. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Input("authType")]
        public Input<string>? AuthType { get; set; }

        /// <summary>
        /// Name for the physical interface.
        /// </summary>
        [Input("device", required: true)]
        public Input<string> Device { get; set; } = null!;

        /// <summary>
        /// Enable/disable dial on demand to dial the PPPoE interface when packets are routed to the PPPoE interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dialOnDemand")]
        public Input<string>? DialOnDemand { get; set; }

        /// <summary>
        /// PPPoE discovery init timeout value in (0-4294967295 sec).
        /// </summary>
        [Input("discRetryTimeout")]
        public Input<int>? DiscRetryTimeout { get; set; }

        /// <summary>
        /// PPPoE auto disconnect after idle timeout (0-4294967295 sec).
        /// </summary>
        [Input("idleTimeout")]
        public Input<int>? IdleTimeout { get; set; }

        /// <summary>
        /// PPPoE unnumbered IP.
        /// </summary>
        [Input("ipunnumbered")]
        public Input<string>? Ipunnumbered { get; set; }

        /// <summary>
        /// Enable/disable IPv6 Control Protocol (IPv6CP). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6")]
        public Input<string>? Ipv6 { get; set; }

        /// <summary>
        /// PPPoE LCP echo interval in (0-4294967295 sec, default = 5).
        /// </summary>
        [Input("lcpEchoInterval")]
        public Input<int>? LcpEchoInterval { get; set; }

        /// <summary>
        /// Maximum missed LCP echo messages before disconnect (0-4294967295, default = 3).
        /// </summary>
        [Input("lcpMaxEchoFails")]
        public Input<int>? LcpMaxEchoFails { get; set; }

        /// <summary>
        /// Name of the PPPoE interface.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// PPPoE terminate timeout value in (0-4294967295 sec).
        /// </summary>
        [Input("padtRetryTimeout")]
        public Input<int>? PadtRetryTimeout { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Enter the password.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Enable/disable PPPoE unnumbered negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("pppoeUnnumberedNegotiate")]
        public Input<string>? PppoeUnnumberedNegotiate { get; set; }

        /// <summary>
        /// PPPoE service name.
        /// </summary>
        [Input("serviceName")]
        public Input<string>? ServiceName { get; set; }

        /// <summary>
        /// User name.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { 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 SystemPppoeinterfaceArgs()
        {
        }
        public static new SystemPppoeinterfaceArgs Empty => new SystemPppoeinterfaceArgs();
    }

    public sealed class SystemPppoeinterfaceState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// PPPoE AC name.
        /// </summary>
        [Input("acName")]
        public Input<string>? AcName { get; set; }

        /// <summary>
        /// PPP authentication type to use. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Input("authType")]
        public Input<string>? AuthType { get; set; }

        /// <summary>
        /// Name for the physical interface.
        /// </summary>
        [Input("device")]
        public Input<string>? Device { get; set; }

        /// <summary>
        /// Enable/disable dial on demand to dial the PPPoE interface when packets are routed to the PPPoE interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dialOnDemand")]
        public Input<string>? DialOnDemand { get; set; }

        /// <summary>
        /// PPPoE discovery init timeout value in (0-4294967295 sec).
        /// </summary>
        [Input("discRetryTimeout")]
        public Input<int>? DiscRetryTimeout { get; set; }

        /// <summary>
        /// PPPoE auto disconnect after idle timeout (0-4294967295 sec).
        /// </summary>
        [Input("idleTimeout")]
        public Input<int>? IdleTimeout { get; set; }

        /// <summary>
        /// PPPoE unnumbered IP.
        /// </summary>
        [Input("ipunnumbered")]
        public Input<string>? Ipunnumbered { get; set; }

        /// <summary>
        /// Enable/disable IPv6 Control Protocol (IPv6CP). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6")]
        public Input<string>? Ipv6 { get; set; }

        /// <summary>
        /// PPPoE LCP echo interval in (0-4294967295 sec, default = 5).
        /// </summary>
        [Input("lcpEchoInterval")]
        public Input<int>? LcpEchoInterval { get; set; }

        /// <summary>
        /// Maximum missed LCP echo messages before disconnect (0-4294967295, default = 3).
        /// </summary>
        [Input("lcpMaxEchoFails")]
        public Input<int>? LcpMaxEchoFails { get; set; }

        /// <summary>
        /// Name of the PPPoE interface.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// PPPoE terminate timeout value in (0-4294967295 sec).
        /// </summary>
        [Input("padtRetryTimeout")]
        public Input<int>? PadtRetryTimeout { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Enter the password.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Enable/disable PPPoE unnumbered negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("pppoeUnnumberedNegotiate")]
        public Input<string>? PppoeUnnumberedNegotiate { get; set; }

        /// <summary>
        /// PPPoE service name.
        /// </summary>
        [Input("serviceName")]
        public Input<string>? ServiceName { get; set; }

        /// <summary>
        /// User name.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { 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 SystemPppoeinterfaceState()
        {
        }
        public static new SystemPppoeinterfaceState Empty => new SystemPppoeinterfaceState();
    }
}
