<filename>sdk/dotnet/RouterIsis.cs// *** 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 IS-IS.
    /// 
    /// ## 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.RouterIsis("trname", new()
    ///     {
    ///         AdjacencyCheck = "disable",
    ///         AdjacencyCheck6 = "disable",
    ///         AdvPassiveOnly = "disable",
    ///         AdvPassiveOnly6 = "disable",
    ///         AuthModeL1 = "password",
    ///         AuthModeL2 = "password",
    ///         AuthSendonlyL1 = "disable",
    ///         AuthSendonlyL2 = "disable",
    ///         DefaultOriginate = "disable",
    ///         DefaultOriginate6 = "disable",
    ///         DynamicHostname = "disable",
    ///         IgnoreLspErrors = "disable",
    ///         IsType = "level-1-2",
    ///         LspGenIntervalL1 = 30,
    ///         LspGenIntervalL2 = 30,
    ///         LspRefreshInterval = 900,
    ///         MaxLspLifetime = 1200,
    ///         MetricStyle = "narrow",
    ///         OverloadBit = "disable",
    ///         Redistribute6L1 = "disable",
    ///         Redistribute6L2 = "disable",
    ///         RedistributeL1 = "disable",
    ///         RedistributeL2 = "disable",
    ///         SpfIntervalExpL1 = "500 50000",
    ///         SpfIntervalExpL2 = "500 50000",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Router Isis can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/routerIsis:RouterIsis labelname RouterIsis
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/routerIsis:RouterIsis labelname RouterIsis
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/routerIsis:RouterIsis")]
    public partial class RouterIsis : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable adjacency check. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("adjacencyCheck")]
        public Output<string> AdjacencyCheck { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 adjacency check. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("adjacencyCheck6")]
        public Output<string> AdjacencyCheck6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IS-IS advertisement of passive interfaces only. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("advPassiveOnly")]
        public Output<string> AdvPassiveOnly { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 IS-IS advertisement of passive interfaces only. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("advPassiveOnly6")]
        public Output<string> AdvPassiveOnly6 { get; private set; } = null!;

        /// <summary>
        /// Authentication key-chain for level 1 PDUs.
        /// </summary>
        [Output("authKeychainL1")]
        public Output<string> AuthKeychainL1 { get; private set; } = null!;

        /// <summary>
        /// Authentication key-chain for level 2 PDUs.
        /// </summary>
        [Output("authKeychainL2")]
        public Output<string> AuthKeychainL2 { get; private set; } = null!;

        /// <summary>
        /// Level 1 authentication mode. Valid values: `password`, `md5`.
        /// </summary>
        [Output("authModeL1")]
        public Output<string> AuthModeL1 { get; private set; } = null!;

        /// <summary>
        /// Level 2 authentication mode. Valid values: `password`, `md5`.
        /// </summary>
        [Output("authModeL2")]
        public Output<string> AuthModeL2 { get; private set; } = null!;

        /// <summary>
        /// Authentication password for level 1 PDUs.
        /// </summary>
        [Output("authPasswordL1")]
        public Output<string?> AuthPasswordL1 { get; private set; } = null!;

        /// <summary>
        /// Authentication password for level 2 PDUs.
        /// </summary>
        [Output("authPasswordL2")]
        public Output<string?> AuthPasswordL2 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable level 1 authentication send-only. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("authSendonlyL1")]
        public Output<string> AuthSendonlyL1 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable level 2 authentication send-only. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("authSendonlyL2")]
        public Output<string> AuthSendonlyL2 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable distribution of default route information. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("defaultOriginate")]
        public Output<string> DefaultOriginate { get; private set; } = null!;

        /// <summary>
        /// Enable/disable distribution of default IPv6 route information. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("defaultOriginate6")]
        public Output<string> DefaultOriginate6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable dynamic hostname. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dynamicHostname")]
        public Output<string> DynamicHostname { 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>
        /// Enable/disable ignoring of LSP errors with bad checksums. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ignoreLspErrors")]
        public Output<string> IgnoreLspErrors { get; private set; } = null!;

        /// <summary>
        /// IS type. Valid values: `level-1-2`, `level-1`, `level-2-only`.
        /// </summary>
        [Output("isType")]
        public Output<string> IsType { get; private set; } = null!;

        /// <summary>
        /// IS-IS interface configuration. The structure of `isis_interface` block is documented below.
        /// </summary>
        [Output("isisInterfaces")]
        public Output<ImmutableArray<Outputs.RouterIsisIsisInterface>> IsisInterfaces { get; private set; } = null!;

        /// <summary>
        /// IS-IS net configuration. The structure of `isis_net` block is documented below.
        /// </summary>
        [Output("isisNets")]
        public Output<ImmutableArray<Outputs.RouterIsisIsisNet>> IsisNets { get; private set; } = null!;

        /// <summary>
        /// Minimum interval for level 1 LSP regenerating.
        /// </summary>
        [Output("lspGenIntervalL1")]
        public Output<int> LspGenIntervalL1 { get; private set; } = null!;

        /// <summary>
        /// Minimum interval for level 2 LSP regenerating.
        /// </summary>
        [Output("lspGenIntervalL2")]
        public Output<int> LspGenIntervalL2 { get; private set; } = null!;

        /// <summary>
        /// LSP refresh time in seconds.
        /// </summary>
        [Output("lspRefreshInterval")]
        public Output<int> LspRefreshInterval { get; private set; } = null!;

        /// <summary>
        /// Maximum LSP lifetime in seconds.
        /// </summary>
        [Output("maxLspLifetime")]
        public Output<int> MaxLspLifetime { get; private set; } = null!;

        /// <summary>
        /// Use old-style (ISO 10589) or new-style packet formats Valid values: `narrow`, `wide`, `transition`, `narrow-transition`, `narrow-transition-l1`, `narrow-transition-l2`, `wide-l1`, `wide-l2`, `wide-transition`, `wide-transition-l1`, `wide-transition-l2`, `transition-l1`, `transition-l2`.
        /// </summary>
        [Output("metricStyle")]
        public Output<string> MetricStyle { get; private set; } = null!;

        /// <summary>
        /// Enable/disable signal other routers not to use us in SPF. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("overloadBit")]
        public Output<string> OverloadBit { get; private set; } = null!;

        /// <summary>
        /// Overload-bit only temporarily after reboot.
        /// </summary>
        [Output("overloadBitOnStartup")]
        public Output<int> OverloadBitOnStartup { get; private set; } = null!;

        /// <summary>
        /// Suppress overload-bit for the specific prefixes. Valid values: `external`, `interlevel`.
        /// </summary>
        [Output("overloadBitSuppress")]
        public Output<string> OverloadBitSuppress { get; private set; } = null!;

        /// <summary>
        /// Enable/disable redistribution of level 1 IPv6 routes into level 2. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("redistribute6L1")]
        public Output<string> Redistribute6L1 { get; private set; } = null!;

        /// <summary>
        /// Access-list for IPv6 route redistribution from l1 to l2.
        /// </summary>
        [Output("redistribute6L1List")]
        public Output<string> Redistribute6L1List { get; private set; } = null!;

        /// <summary>
        /// Enable/disable redistribution of level 2 IPv6 routes into level 1. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("redistribute6L2")]
        public Output<string> Redistribute6L2 { get; private set; } = null!;

        /// <summary>
        /// Access-list for IPv6 route redistribution from l2 to l1.
        /// </summary>
        [Output("redistribute6L2List")]
        public Output<string> Redistribute6L2List { get; private set; } = null!;

        /// <summary>
        /// IS-IS IPv6 redistribution for routing protocols. The structure of `redistribute6` block is documented below.
        /// </summary>
        [Output("redistribute6s")]
        public Output<ImmutableArray<Outputs.RouterIsisRedistribute6>> Redistribute6s { get; private set; } = null!;

        /// <summary>
        /// Enable/disable redistribution of level 1 routes into level 2. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("redistributeL1")]
        public Output<string> RedistributeL1 { get; private set; } = null!;

        /// <summary>
        /// Access-list for route redistribution from l1 to l2.
        /// </summary>
        [Output("redistributeL1List")]
        public Output<string> RedistributeL1List { get; private set; } = null!;

        /// <summary>
        /// Enable/disable redistribution of level 2 routes into level 1. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("redistributeL2")]
        public Output<string> RedistributeL2 { get; private set; } = null!;

        /// <summary>
        /// Access-list for route redistribution from l2 to l1.
        /// </summary>
        [Output("redistributeL2List")]
        public Output<string> RedistributeL2List { get; private set; } = null!;

        /// <summary>
        /// IS-IS redistribute protocols. The structure of `redistribute` block is documented below.
        /// </summary>
        [Output("redistributes")]
        public Output<ImmutableArray<Outputs.RouterIsisRedistribute>> Redistributes { get; private set; } = null!;

        /// <summary>
        /// Level 1 SPF calculation delay.
        /// </summary>
        [Output("spfIntervalExpL1")]
        public Output<string> SpfIntervalExpL1 { get; private set; } = null!;

        /// <summary>
        /// Level 2 SPF calculation delay.
        /// </summary>
        [Output("spfIntervalExpL2")]
        public Output<string> SpfIntervalExpL2 { get; private set; } = null!;

        /// <summary>
        /// IS-IS IPv6 summary address. The structure of `summary_address6` block is documented below.
        /// </summary>
        [Output("summaryAddress6s")]
        public Output<ImmutableArray<Outputs.RouterIsisSummaryAddress6>> SummaryAddress6s { get; private set; } = null!;

        /// <summary>
        /// IS-IS summary addresses. The structure of `summary_address` block is documented below.
        /// </summary>
        [Output("summaryAddresses")]
        public Output<ImmutableArray<Outputs.RouterIsisSummaryAddress>> SummaryAddresses { 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 RouterIsis 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 RouterIsis(string name, RouterIsisArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/routerIsis:RouterIsis", name, args ?? new RouterIsisArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class RouterIsisArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable adjacency check. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("adjacencyCheck")]
        public Input<string>? AdjacencyCheck { get; set; }

        /// <summary>
        /// Enable/disable IPv6 adjacency check. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("adjacencyCheck6")]
        public Input<string>? AdjacencyCheck6 { get; set; }

        /// <summary>
        /// Enable/disable IS-IS advertisement of passive interfaces only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("advPassiveOnly")]
        public Input<string>? AdvPassiveOnly { get; set; }

        /// <summary>
        /// Enable/disable IPv6 IS-IS advertisement of passive interfaces only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("advPassiveOnly6")]
        public Input<string>? AdvPassiveOnly6 { get; set; }

        /// <summary>
        /// Authentication key-chain for level 1 PDUs.
        /// </summary>
        [Input("authKeychainL1")]
        public Input<string>? AuthKeychainL1 { get; set; }

        /// <summary>
        /// Authentication key-chain for level 2 PDUs.
        /// </summary>
        [Input("authKeychainL2")]
        public Input<string>? AuthKeychainL2 { get; set; }

        /// <summary>
        /// Level 1 authentication mode. Valid values: `password`, `md5`.
        /// </summary>
        [Input("authModeL1")]
        public Input<string>? AuthModeL1 { get; set; }

        /// <summary>
        /// Level 2 authentication mode. Valid values: `password`, `md5`.
        /// </summary>
        [Input("authModeL2")]
        public Input<string>? AuthModeL2 { get; set; }

        [Input("authPasswordL1")]
        private Input<string>? _authPasswordL1;

        /// <summary>
        /// Authentication password for level 1 PDUs.
        /// </summary>
        public Input<string>? AuthPasswordL1
        {
            get => _authPasswordL1;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _authPasswordL1 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("authPasswordL2")]
        private Input<string>? _authPasswordL2;

        /// <summary>
        /// Authentication password for level 2 PDUs.
        /// </summary>
        public Input<string>? AuthPasswordL2
        {
            get => _authPasswordL2;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _authPasswordL2 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Enable/disable level 1 authentication send-only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("authSendonlyL1")]
        public Input<string>? AuthSendonlyL1 { get; set; }

        /// <summary>
        /// Enable/disable level 2 authentication send-only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("authSendonlyL2")]
        public Input<string>? AuthSendonlyL2 { get; set; }

        /// <summary>
        /// Enable/disable distribution of default route information. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("defaultOriginate")]
        public Input<string>? DefaultOriginate { get; set; }

        /// <summary>
        /// Enable/disable distribution of default IPv6 route information. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("defaultOriginate6")]
        public Input<string>? DefaultOriginate6 { get; set; }

        /// <summary>
        /// Enable/disable dynamic hostname. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dynamicHostname")]
        public Input<string>? DynamicHostname { 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>
        /// Enable/disable ignoring of LSP errors with bad checksums. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ignoreLspErrors")]
        public Input<string>? IgnoreLspErrors { get; set; }

        /// <summary>
        /// IS type. Valid values: `level-1-2`, `level-1`, `level-2-only`.
        /// </summary>
        [Input("isType")]
        public Input<string>? IsType { get; set; }

        [Input("isisInterfaces")]
        private InputList<Inputs.RouterIsisIsisInterfaceArgs>? _isisInterfaces;

        /// <summary>
        /// IS-IS interface configuration. The structure of `isis_interface` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisIsisInterfaceArgs> IsisInterfaces
        {
            get => _isisInterfaces ?? (_isisInterfaces = new InputList<Inputs.RouterIsisIsisInterfaceArgs>());
            set => _isisInterfaces = value;
        }

        [Input("isisNets")]
        private InputList<Inputs.RouterIsisIsisNetArgs>? _isisNets;

        /// <summary>
        /// IS-IS net configuration. The structure of `isis_net` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisIsisNetArgs> IsisNets
        {
            get => _isisNets ?? (_isisNets = new InputList<Inputs.RouterIsisIsisNetArgs>());
            set => _isisNets = value;
        }

        /// <summary>
        /// Minimum interval for level 1 LSP regenerating.
        /// </summary>
        [Input("lspGenIntervalL1")]
        public Input<int>? LspGenIntervalL1 { get; set; }

        /// <summary>
        /// Minimum interval for level 2 LSP regenerating.
        /// </summary>
        [Input("lspGenIntervalL2")]
        public Input<int>? LspGenIntervalL2 { get; set; }

        /// <summary>
        /// LSP refresh time in seconds.
        /// </summary>
        [Input("lspRefreshInterval")]
        public Input<int>? LspRefreshInterval { get; set; }

        /// <summary>
        /// Maximum LSP lifetime in seconds.
        /// </summary>
        [Input("maxLspLifetime")]
        public Input<int>? MaxLspLifetime { get; set; }

        /// <summary>
        /// Use old-style (ISO 10589) or new-style packet formats Valid values: `narrow`, `wide`, `transition`, `narrow-transition`, `narrow-transition-l1`, `narrow-transition-l2`, `wide-l1`, `wide-l2`, `wide-transition`, `wide-transition-l1`, `wide-transition-l2`, `transition-l1`, `transition-l2`.
        /// </summary>
        [Input("metricStyle")]
        public Input<string>? MetricStyle { get; set; }

        /// <summary>
        /// Enable/disable signal other routers not to use us in SPF. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("overloadBit")]
        public Input<string>? OverloadBit { get; set; }

        /// <summary>
        /// Overload-bit only temporarily after reboot.
        /// </summary>
        [Input("overloadBitOnStartup")]
        public Input<int>? OverloadBitOnStartup { get; set; }

        /// <summary>
        /// Suppress overload-bit for the specific prefixes. Valid values: `external`, `interlevel`.
        /// </summary>
        [Input("overloadBitSuppress")]
        public Input<string>? OverloadBitSuppress { get; set; }

        /// <summary>
        /// Enable/disable redistribution of level 1 IPv6 routes into level 2. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistribute6L1")]
        public Input<string>? Redistribute6L1 { get; set; }

        /// <summary>
        /// Access-list for IPv6 route redistribution from l1 to l2.
        /// </summary>
        [Input("redistribute6L1List")]
        public Input<string>? Redistribute6L1List { get; set; }

        /// <summary>
        /// Enable/disable redistribution of level 2 IPv6 routes into level 1. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistribute6L2")]
        public Input<string>? Redistribute6L2 { get; set; }

        /// <summary>
        /// Access-list for IPv6 route redistribution from l2 to l1.
        /// </summary>
        [Input("redistribute6L2List")]
        public Input<string>? Redistribute6L2List { get; set; }

        [Input("redistribute6s")]
        private InputList<Inputs.RouterIsisRedistribute6Args>? _redistribute6s;

        /// <summary>
        /// IS-IS IPv6 redistribution for routing protocols. The structure of `redistribute6` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisRedistribute6Args> Redistribute6s
        {
            get => _redistribute6s ?? (_redistribute6s = new InputList<Inputs.RouterIsisRedistribute6Args>());
            set => _redistribute6s = value;
        }

        /// <summary>
        /// Enable/disable redistribution of level 1 routes into level 2. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistributeL1")]
        public Input<string>? RedistributeL1 { get; set; }

        /// <summary>
        /// Access-list for route redistribution from l1 to l2.
        /// </summary>
        [Input("redistributeL1List")]
        public Input<string>? RedistributeL1List { get; set; }

        /// <summary>
        /// Enable/disable redistribution of level 2 routes into level 1. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistributeL2")]
        public Input<string>? RedistributeL2 { get; set; }

        /// <summary>
        /// Access-list for route redistribution from l2 to l1.
        /// </summary>
        [Input("redistributeL2List")]
        public Input<string>? RedistributeL2List { get; set; }

        [Input("redistributes")]
        private InputList<Inputs.RouterIsisRedistributeArgs>? _redistributes;

        /// <summary>
        /// IS-IS redistribute protocols. The structure of `redistribute` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisRedistributeArgs> Redistributes
        {
            get => _redistributes ?? (_redistributes = new InputList<Inputs.RouterIsisRedistributeArgs>());
            set => _redistributes = value;
        }

        /// <summary>
        /// Level 1 SPF calculation delay.
        /// </summary>
        [Input("spfIntervalExpL1")]
        public Input<string>? SpfIntervalExpL1 { get; set; }

        /// <summary>
        /// Level 2 SPF calculation delay.
        /// </summary>
        [Input("spfIntervalExpL2")]
        public Input<string>? SpfIntervalExpL2 { get; set; }

        [Input("summaryAddress6s")]
        private InputList<Inputs.RouterIsisSummaryAddress6Args>? _summaryAddress6s;

        /// <summary>
        /// IS-IS IPv6 summary address. The structure of `summary_address6` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisSummaryAddress6Args> SummaryAddress6s
        {
            get => _summaryAddress6s ?? (_summaryAddress6s = new InputList<Inputs.RouterIsisSummaryAddress6Args>());
            set => _summaryAddress6s = value;
        }

        [Input("summaryAddresses")]
        private InputList<Inputs.RouterIsisSummaryAddressArgs>? _summaryAddresses;

        /// <summary>
        /// IS-IS summary addresses. The structure of `summary_address` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisSummaryAddressArgs> SummaryAddresses
        {
            get => _summaryAddresses ?? (_summaryAddresses = new InputList<Inputs.RouterIsisSummaryAddressArgs>());
            set => _summaryAddresses = value;
        }

        /// <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 RouterIsisArgs()
        {
        }
        public static new RouterIsisArgs Empty => new RouterIsisArgs();
    }

    public sealed class RouterIsisState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable adjacency check. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("adjacencyCheck")]
        public Input<string>? AdjacencyCheck { get; set; }

        /// <summary>
        /// Enable/disable IPv6 adjacency check. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("adjacencyCheck6")]
        public Input<string>? AdjacencyCheck6 { get; set; }

        /// <summary>
        /// Enable/disable IS-IS advertisement of passive interfaces only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("advPassiveOnly")]
        public Input<string>? AdvPassiveOnly { get; set; }

        /// <summary>
        /// Enable/disable IPv6 IS-IS advertisement of passive interfaces only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("advPassiveOnly6")]
        public Input<string>? AdvPassiveOnly6 { get; set; }

        /// <summary>
        /// Authentication key-chain for level 1 PDUs.
        /// </summary>
        [Input("authKeychainL1")]
        public Input<string>? AuthKeychainL1 { get; set; }

        /// <summary>
        /// Authentication key-chain for level 2 PDUs.
        /// </summary>
        [Input("authKeychainL2")]
        public Input<string>? AuthKeychainL2 { get; set; }

        /// <summary>
        /// Level 1 authentication mode. Valid values: `password`, `md5`.
        /// </summary>
        [Input("authModeL1")]
        public Input<string>? AuthModeL1 { get; set; }

        /// <summary>
        /// Level 2 authentication mode. Valid values: `password`, `md5`.
        /// </summary>
        [Input("authModeL2")]
        public Input<string>? AuthModeL2 { get; set; }

        [Input("authPasswordL1")]
        private Input<string>? _authPasswordL1;

        /// <summary>
        /// Authentication password for level 1 PDUs.
        /// </summary>
        public Input<string>? AuthPasswordL1
        {
            get => _authPasswordL1;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _authPasswordL1 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("authPasswordL2")]
        private Input<string>? _authPasswordL2;

        /// <summary>
        /// Authentication password for level 2 PDUs.
        /// </summary>
        public Input<string>? AuthPasswordL2
        {
            get => _authPasswordL2;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _authPasswordL2 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Enable/disable level 1 authentication send-only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("authSendonlyL1")]
        public Input<string>? AuthSendonlyL1 { get; set; }

        /// <summary>
        /// Enable/disable level 2 authentication send-only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("authSendonlyL2")]
        public Input<string>? AuthSendonlyL2 { get; set; }

        /// <summary>
        /// Enable/disable distribution of default route information. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("defaultOriginate")]
        public Input<string>? DefaultOriginate { get; set; }

        /// <summary>
        /// Enable/disable distribution of default IPv6 route information. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("defaultOriginate6")]
        public Input<string>? DefaultOriginate6 { get; set; }

        /// <summary>
        /// Enable/disable dynamic hostname. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dynamicHostname")]
        public Input<string>? DynamicHostname { 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>
        /// Enable/disable ignoring of LSP errors with bad checksums. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ignoreLspErrors")]
        public Input<string>? IgnoreLspErrors { get; set; }

        /// <summary>
        /// IS type. Valid values: `level-1-2`, `level-1`, `level-2-only`.
        /// </summary>
        [Input("isType")]
        public Input<string>? IsType { get; set; }

        [Input("isisInterfaces")]
        private InputList<Inputs.RouterIsisIsisInterfaceGetArgs>? _isisInterfaces;

        /// <summary>
        /// IS-IS interface configuration. The structure of `isis_interface` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisIsisInterfaceGetArgs> IsisInterfaces
        {
            get => _isisInterfaces ?? (_isisInterfaces = new InputList<Inputs.RouterIsisIsisInterfaceGetArgs>());
            set => _isisInterfaces = value;
        }

        [Input("isisNets")]
        private InputList<Inputs.RouterIsisIsisNetGetArgs>? _isisNets;

        /// <summary>
        /// IS-IS net configuration. The structure of `isis_net` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisIsisNetGetArgs> IsisNets
        {
            get => _isisNets ?? (_isisNets = new InputList<Inputs.RouterIsisIsisNetGetArgs>());
            set => _isisNets = value;
        }

        /// <summary>
        /// Minimum interval for level 1 LSP regenerating.
        /// </summary>
        [Input("lspGenIntervalL1")]
        public Input<int>? LspGenIntervalL1 { get; set; }

        /// <summary>
        /// Minimum interval for level 2 LSP regenerating.
        /// </summary>
        [Input("lspGenIntervalL2")]
        public Input<int>? LspGenIntervalL2 { get; set; }

        /// <summary>
        /// LSP refresh time in seconds.
        /// </summary>
        [Input("lspRefreshInterval")]
        public Input<int>? LspRefreshInterval { get; set; }

        /// <summary>
        /// Maximum LSP lifetime in seconds.
        /// </summary>
        [Input("maxLspLifetime")]
        public Input<int>? MaxLspLifetime { get; set; }

        /// <summary>
        /// Use old-style (ISO 10589) or new-style packet formats Valid values: `narrow`, `wide`, `transition`, `narrow-transition`, `narrow-transition-l1`, `narrow-transition-l2`, `wide-l1`, `wide-l2`, `wide-transition`, `wide-transition-l1`, `wide-transition-l2`, `transition-l1`, `transition-l2`.
        /// </summary>
        [Input("metricStyle")]
        public Input<string>? MetricStyle { get; set; }

        /// <summary>
        /// Enable/disable signal other routers not to use us in SPF. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("overloadBit")]
        public Input<string>? OverloadBit { get; set; }

        /// <summary>
        /// Overload-bit only temporarily after reboot.
        /// </summary>
        [Input("overloadBitOnStartup")]
        public Input<int>? OverloadBitOnStartup { get; set; }

        /// <summary>
        /// Suppress overload-bit for the specific prefixes. Valid values: `external`, `interlevel`.
        /// </summary>
        [Input("overloadBitSuppress")]
        public Input<string>? OverloadBitSuppress { get; set; }

        /// <summary>
        /// Enable/disable redistribution of level 1 IPv6 routes into level 2. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistribute6L1")]
        public Input<string>? Redistribute6L1 { get; set; }

        /// <summary>
        /// Access-list for IPv6 route redistribution from l1 to l2.
        /// </summary>
        [Input("redistribute6L1List")]
        public Input<string>? Redistribute6L1List { get; set; }

        /// <summary>
        /// Enable/disable redistribution of level 2 IPv6 routes into level 1. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistribute6L2")]
        public Input<string>? Redistribute6L2 { get; set; }

        /// <summary>
        /// Access-list for IPv6 route redistribution from l2 to l1.
        /// </summary>
        [Input("redistribute6L2List")]
        public Input<string>? Redistribute6L2List { get; set; }

        [Input("redistribute6s")]
        private InputList<Inputs.RouterIsisRedistribute6GetArgs>? _redistribute6s;

        /// <summary>
        /// IS-IS IPv6 redistribution for routing protocols. The structure of `redistribute6` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisRedistribute6GetArgs> Redistribute6s
        {
            get => _redistribute6s ?? (_redistribute6s = new InputList<Inputs.RouterIsisRedistribute6GetArgs>());
            set => _redistribute6s = value;
        }

        /// <summary>
        /// Enable/disable redistribution of level 1 routes into level 2. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistributeL1")]
        public Input<string>? RedistributeL1 { get; set; }

        /// <summary>
        /// Access-list for route redistribution from l1 to l2.
        /// </summary>
        [Input("redistributeL1List")]
        public Input<string>? RedistributeL1List { get; set; }

        /// <summary>
        /// Enable/disable redistribution of level 2 routes into level 1. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("redistributeL2")]
        public Input<string>? RedistributeL2 { get; set; }

        /// <summary>
        /// Access-list for route redistribution from l2 to l1.
        /// </summary>
        [Input("redistributeL2List")]
        public Input<string>? RedistributeL2List { get; set; }

        [Input("redistributes")]
        private InputList<Inputs.RouterIsisRedistributeGetArgs>? _redistributes;

        /// <summary>
        /// IS-IS redistribute protocols. The structure of `redistribute` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisRedistributeGetArgs> Redistributes
        {
            get => _redistributes ?? (_redistributes = new InputList<Inputs.RouterIsisRedistributeGetArgs>());
            set => _redistributes = value;
        }

        /// <summary>
        /// Level 1 SPF calculation delay.
        /// </summary>
        [Input("spfIntervalExpL1")]
        public Input<string>? SpfIntervalExpL1 { get; set; }

        /// <summary>
        /// Level 2 SPF calculation delay.
        /// </summary>
        [Input("spfIntervalExpL2")]
        public Input<string>? SpfIntervalExpL2 { get; set; }

        [Input("summaryAddress6s")]
        private InputList<Inputs.RouterIsisSummaryAddress6GetArgs>? _summaryAddress6s;

        /// <summary>
        /// IS-IS IPv6 summary address. The structure of `summary_address6` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisSummaryAddress6GetArgs> SummaryAddress6s
        {
            get => _summaryAddress6s ?? (_summaryAddress6s = new InputList<Inputs.RouterIsisSummaryAddress6GetArgs>());
            set => _summaryAddress6s = value;
        }

        [Input("summaryAddresses")]
        private InputList<Inputs.RouterIsisSummaryAddressGetArgs>? _summaryAddresses;

        /// <summary>
        /// IS-IS summary addresses. The structure of `summary_address` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterIsisSummaryAddressGetArgs> SummaryAddresses
        {
            get => _summaryAddresses ?? (_summaryAddresses = new InputList<Inputs.RouterIsisSummaryAddressGetArgs>());
            set => _summaryAddresses = value;
        }

        /// <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 RouterIsisState()
        {
        }
        public static new RouterIsisState Empty => new RouterIsisState();
    }
}
