<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>
    /// Speed test schedule for each interface. Applies to FortiOS Version `&gt;= 7.0.0`.
    /// 
    /// ## Import
    /// 
    /// System SpeedTestSchedule can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemSpeedtestschedule:SystemSpeedtestschedule labelname {{interface}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemSpeedtestschedule:SystemSpeedtestschedule labelname {{interface}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemSpeedtestschedule:SystemSpeedtestschedule")]
    public partial class SystemSpeedtestschedule : global::Pulumi.CustomResource
    {
        /// <summary>
        /// DSCP used for speed test.
        /// </summary>
        [Output("diffserv")]
        public Output<string> Diffserv { get; private set; } = null!;

        /// <summary>
        /// Enable/disable dynamic server option. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("dynamicServer")]
        public Output<string> DynamicServer { 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>
        /// Interface name.
        /// </summary>
        [Output("interface")]
        public Output<string> Interface { get; private set; } = null!;

        /// <summary>
        /// Schedules for the interface. The structure of `schedules` block is documented below.
        /// </summary>
        [Output("schedules")]
        public Output<ImmutableArray<Outputs.SystemSpeedtestscheduleSchedule>> Schedules { get; private set; } = null!;

        /// <summary>
        /// Speed test server name.
        /// </summary>
        [Output("serverName")]
        public Output<string> ServerName { get; private set; } = null!;

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

        /// <summary>
        /// Enable/disable bypassing interface's inbound bandwidth setting. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("updateInbandwidth")]
        public Output<string> UpdateInbandwidth { get; private set; } = null!;

        /// <summary>
        /// Maximum downloading bandwidth (kbps) to be used in a speed test.
        /// </summary>
        [Output("updateInbandwidthMaximum")]
        public Output<int> UpdateInbandwidthMaximum { get; private set; } = null!;

        /// <summary>
        /// Minimum downloading bandwidth (kbps) to be considered effective.
        /// </summary>
        [Output("updateInbandwidthMinimum")]
        public Output<int> UpdateInbandwidthMinimum { get; private set; } = null!;

        /// <summary>
        /// Enable/disable bypassing interface's outbound bandwidth setting. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("updateOutbandwidth")]
        public Output<string> UpdateOutbandwidth { get; private set; } = null!;

        /// <summary>
        /// Maximum uploading bandwidth (kbps) to be used in a speed test.
        /// </summary>
        [Output("updateOutbandwidthMaximum")]
        public Output<int> UpdateOutbandwidthMaximum { get; private set; } = null!;

        /// <summary>
        /// Minimum uploading bandwidth (kbps) to be considered effective.
        /// </summary>
        [Output("updateOutbandwidthMinimum")]
        public Output<int> UpdateOutbandwidthMinimum { 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 SystemSpeedtestschedule 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 SystemSpeedtestschedule(string name, SystemSpeedtestscheduleArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemSpeedtestschedule:SystemSpeedtestschedule", name, args ?? new SystemSpeedtestscheduleArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class SystemSpeedtestscheduleArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// DSCP used for speed test.
        /// </summary>
        [Input("diffserv")]
        public Input<string>? Diffserv { get; set; }

        /// <summary>
        /// Enable/disable dynamic server option. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dynamicServer")]
        public Input<string>? DynamicServer { 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>
        /// Interface name.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        [Input("schedules")]
        private InputList<Inputs.SystemSpeedtestscheduleScheduleArgs>? _schedules;

        /// <summary>
        /// Schedules for the interface. The structure of `schedules` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSpeedtestscheduleScheduleArgs> Schedules
        {
            get => _schedules ?? (_schedules = new InputList<Inputs.SystemSpeedtestscheduleScheduleArgs>());
            set => _schedules = value;
        }

        /// <summary>
        /// Speed test server name.
        /// </summary>
        [Input("serverName")]
        public Input<string>? ServerName { get; set; }

        /// <summary>
        /// Enable/disable scheduled speed test. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Enable/disable bypassing interface's inbound bandwidth setting. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("updateInbandwidth")]
        public Input<string>? UpdateInbandwidth { get; set; }

        /// <summary>
        /// Maximum downloading bandwidth (kbps) to be used in a speed test.
        /// </summary>
        [Input("updateInbandwidthMaximum")]
        public Input<int>? UpdateInbandwidthMaximum { get; set; }

        /// <summary>
        /// Minimum downloading bandwidth (kbps) to be considered effective.
        /// </summary>
        [Input("updateInbandwidthMinimum")]
        public Input<int>? UpdateInbandwidthMinimum { get; set; }

        /// <summary>
        /// Enable/disable bypassing interface's outbound bandwidth setting. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("updateOutbandwidth")]
        public Input<string>? UpdateOutbandwidth { get; set; }

        /// <summary>
        /// Maximum uploading bandwidth (kbps) to be used in a speed test.
        /// </summary>
        [Input("updateOutbandwidthMaximum")]
        public Input<int>? UpdateOutbandwidthMaximum { get; set; }

        /// <summary>
        /// Minimum uploading bandwidth (kbps) to be considered effective.
        /// </summary>
        [Input("updateOutbandwidthMinimum")]
        public Input<int>? UpdateOutbandwidthMinimum { 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 SystemSpeedtestscheduleArgs()
        {
        }
        public static new SystemSpeedtestscheduleArgs Empty => new SystemSpeedtestscheduleArgs();
    }

    public sealed class SystemSpeedtestscheduleState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// DSCP used for speed test.
        /// </summary>
        [Input("diffserv")]
        public Input<string>? Diffserv { get; set; }

        /// <summary>
        /// Enable/disable dynamic server option. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dynamicServer")]
        public Input<string>? DynamicServer { 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>
        /// Interface name.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        [Input("schedules")]
        private InputList<Inputs.SystemSpeedtestscheduleScheduleGetArgs>? _schedules;

        /// <summary>
        /// Schedules for the interface. The structure of `schedules` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSpeedtestscheduleScheduleGetArgs> Schedules
        {
            get => _schedules ?? (_schedules = new InputList<Inputs.SystemSpeedtestscheduleScheduleGetArgs>());
            set => _schedules = value;
        }

        /// <summary>
        /// Speed test server name.
        /// </summary>
        [Input("serverName")]
        public Input<string>? ServerName { get; set; }

        /// <summary>
        /// Enable/disable scheduled speed test. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Enable/disable bypassing interface's inbound bandwidth setting. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("updateInbandwidth")]
        public Input<string>? UpdateInbandwidth { get; set; }

        /// <summary>
        /// Maximum downloading bandwidth (kbps) to be used in a speed test.
        /// </summary>
        [Input("updateInbandwidthMaximum")]
        public Input<int>? UpdateInbandwidthMaximum { get; set; }

        /// <summary>
        /// Minimum downloading bandwidth (kbps) to be considered effective.
        /// </summary>
        [Input("updateInbandwidthMinimum")]
        public Input<int>? UpdateInbandwidthMinimum { get; set; }

        /// <summary>
        /// Enable/disable bypassing interface's outbound bandwidth setting. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("updateOutbandwidth")]
        public Input<string>? UpdateOutbandwidth { get; set; }

        /// <summary>
        /// Maximum uploading bandwidth (kbps) to be used in a speed test.
        /// </summary>
        [Input("updateOutbandwidthMaximum")]
        public Input<int>? UpdateOutbandwidthMaximum { get; set; }

        /// <summary>
        /// Minimum uploading bandwidth (kbps) to be considered effective.
        /// </summary>
        [Input("updateOutbandwidthMinimum")]
        public Input<int>? UpdateOutbandwidthMinimum { 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 SystemSpeedtestscheduleState()
        {
        }
        public static new SystemSpeedtestscheduleState Empty => new SystemSpeedtestscheduleState();
    }
}
