<reponame>pulumiverse/pulumi-fortios// *** 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 IPv4 IP pools.
    /// 
    /// ## 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.FirewallIppool("trname", new()
    ///     {
    ///         ArpReply = "enable",
    ///         BlockSize = 128,
    ///         Endip = "172.16.17.32",
    ///         NumBlocksPerUser = 8,
    ///         PbaTimeout = 30,
    ///         PermitAnyHost = "disable",
    ///         SourceEndip = "0.0.0.0",
    ///         SourceStartip = "0.0.0.0",
    ///         Startip = "1.0.0.0",
    ///         Type = "overload",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Firewall Ippool can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallIppool:FirewallIppool labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallIppool:FirewallIppool labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/firewallIppool:FirewallIppool")]
    public partial class FirewallIppool : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable adding NAT64 route. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("addNat64Route")]
        public Output<string> AddNat64Route { get; private set; } = null!;

        /// <summary>
        /// Select an interface from available options that will reply to ARP requests. (If blank, any is selected).
        /// </summary>
        [Output("arpIntf")]
        public Output<string> ArpIntf { get; private set; } = null!;

        /// <summary>
        /// Enable/disable replying to ARP requests when an IP Pool is added to a policy (default = enable). Valid values: `disable`, `enable`.
        /// </summary>
        [Output("arpReply")]
        public Output<string> ArpReply { get; private set; } = null!;

        /// <summary>
        /// Associated interface name.
        /// </summary>
        [Output("associatedInterface")]
        public Output<string> AssociatedInterface { get; private set; } = null!;

        /// <summary>
        /// Number of addresses in a block (64 to 4096, default = 128).
        /// </summary>
        [Output("blockSize")]
        public Output<int> BlockSize { get; private set; } = null!;

        /// <summary>
        /// Comment.
        /// </summary>
        [Output("comments")]
        public Output<string?> Comments { get; private set; } = null!;

        /// <summary>
        /// Final IPv4 address (inclusive) in the range for the address pool (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Output("endip")]
        public Output<string> Endip { get; private set; } = null!;

        /// <summary>
        /// Final port number (inclusive) in the range for the address pool (Default: 65533).
        /// </summary>
        [Output("endport")]
        public Output<int> Endport { get; private set; } = null!;

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

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

        /// <summary>
        /// Number of addresses blocks that can be used by a user (1 to 128, default = 8).
        /// </summary>
        [Output("numBlocksPerUser")]
        public Output<int> NumBlocksPerUser { get; private set; } = null!;

        /// <summary>
        /// Port block allocation timeout (seconds).
        /// </summary>
        [Output("pbaTimeout")]
        public Output<int> PbaTimeout { get; private set; } = null!;

        /// <summary>
        /// Enable/disable full cone NAT. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("permitAnyHost")]
        public Output<string> PermitAnyHost { get; private set; } = null!;

        /// <summary>
        /// Number of port for each user (32 to 60416, default = 0, auto).
        /// </summary>
        [Output("portPerUser")]
        public Output<int> PortPerUser { get; private set; } = null!;

        /// <summary>
        /// Final IPv4 address (inclusive) in the range of the source addresses to be translated (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Output("sourceEndip")]
        public Output<string> SourceEndip { get; private set; } = null!;

        /// <summary>
        /// First IPv4 address (inclusive) in the range of the source addresses to be translated (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Output("sourceStartip")]
        public Output<string> SourceStartip { get; private set; } = null!;

        /// <summary>
        /// First IPv4 address (inclusive) in the range for the address pool (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Output("startip")]
        public Output<string> Startip { get; private set; } = null!;

        /// <summary>
        /// First port number (inclusive) in the range for the address pool (Default: 5117).
        /// </summary>
        [Output("startport")]
        public Output<int> Startport { get; private set; } = null!;

        /// <summary>
        /// IP pool type (overload, one-to-one, fixed port range, or port block allocation). Valid values: `overload`, `one-to-one`, `fixed-port-range`, `port-block-allocation`.
        /// </summary>
        [Output("type")]
        public Output<string> Type { 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 FirewallIppool 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 FirewallIppool(string name, FirewallIppoolArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/firewallIppool:FirewallIppool", name, args ?? new FirewallIppoolArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class FirewallIppoolArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable adding NAT64 route. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("addNat64Route")]
        public Input<string>? AddNat64Route { get; set; }

        /// <summary>
        /// Select an interface from available options that will reply to ARP requests. (If blank, any is selected).
        /// </summary>
        [Input("arpIntf")]
        public Input<string>? ArpIntf { get; set; }

        /// <summary>
        /// Enable/disable replying to ARP requests when an IP Pool is added to a policy (default = enable). Valid values: `disable`, `enable`.
        /// </summary>
        [Input("arpReply")]
        public Input<string>? ArpReply { get; set; }

        /// <summary>
        /// Associated interface name.
        /// </summary>
        [Input("associatedInterface")]
        public Input<string>? AssociatedInterface { get; set; }

        /// <summary>
        /// Number of addresses in a block (64 to 4096, default = 128).
        /// </summary>
        [Input("blockSize")]
        public Input<int>? BlockSize { get; set; }

        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comments")]
        public Input<string>? Comments { get; set; }

        /// <summary>
        /// Final IPv4 address (inclusive) in the range for the address pool (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("endip", required: true)]
        public Input<string> Endip { get; set; } = null!;

        /// <summary>
        /// Final port number (inclusive) in the range for the address pool (Default: 65533).
        /// </summary>
        [Input("endport")]
        public Input<int>? Endport { get; set; }

        /// <summary>
        /// IP pool name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable NAT64. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("nat64")]
        public Input<string>? Nat64 { get; set; }

        /// <summary>
        /// Number of addresses blocks that can be used by a user (1 to 128, default = 8).
        /// </summary>
        [Input("numBlocksPerUser")]
        public Input<int>? NumBlocksPerUser { get; set; }

        /// <summary>
        /// Port block allocation timeout (seconds).
        /// </summary>
        [Input("pbaTimeout")]
        public Input<int>? PbaTimeout { get; set; }

        /// <summary>
        /// Enable/disable full cone NAT. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("permitAnyHost")]
        public Input<string>? PermitAnyHost { get; set; }

        /// <summary>
        /// Number of port for each user (32 to 60416, default = 0, auto).
        /// </summary>
        [Input("portPerUser")]
        public Input<int>? PortPerUser { get; set; }

        /// <summary>
        /// Final IPv4 address (inclusive) in the range of the source addresses to be translated (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("sourceEndip")]
        public Input<string>? SourceEndip { get; set; }

        /// <summary>
        /// First IPv4 address (inclusive) in the range of the source addresses to be translated (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("sourceStartip")]
        public Input<string>? SourceStartip { get; set; }

        /// <summary>
        /// First IPv4 address (inclusive) in the range for the address pool (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("startip", required: true)]
        public Input<string> Startip { get; set; } = null!;

        /// <summary>
        /// First port number (inclusive) in the range for the address pool (Default: 5117).
        /// </summary>
        [Input("startport")]
        public Input<int>? Startport { get; set; }

        /// <summary>
        /// IP pool type (overload, one-to-one, fixed port range, or port block allocation). Valid values: `overload`, `one-to-one`, `fixed-port-range`, `port-block-allocation`.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { 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 FirewallIppoolArgs()
        {
        }
        public static new FirewallIppoolArgs Empty => new FirewallIppoolArgs();
    }

    public sealed class FirewallIppoolState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable adding NAT64 route. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("addNat64Route")]
        public Input<string>? AddNat64Route { get; set; }

        /// <summary>
        /// Select an interface from available options that will reply to ARP requests. (If blank, any is selected).
        /// </summary>
        [Input("arpIntf")]
        public Input<string>? ArpIntf { get; set; }

        /// <summary>
        /// Enable/disable replying to ARP requests when an IP Pool is added to a policy (default = enable). Valid values: `disable`, `enable`.
        /// </summary>
        [Input("arpReply")]
        public Input<string>? ArpReply { get; set; }

        /// <summary>
        /// Associated interface name.
        /// </summary>
        [Input("associatedInterface")]
        public Input<string>? AssociatedInterface { get; set; }

        /// <summary>
        /// Number of addresses in a block (64 to 4096, default = 128).
        /// </summary>
        [Input("blockSize")]
        public Input<int>? BlockSize { get; set; }

        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comments")]
        public Input<string>? Comments { get; set; }

        /// <summary>
        /// Final IPv4 address (inclusive) in the range for the address pool (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("endip")]
        public Input<string>? Endip { get; set; }

        /// <summary>
        /// Final port number (inclusive) in the range for the address pool (Default: 65533).
        /// </summary>
        [Input("endport")]
        public Input<int>? Endport { get; set; }

        /// <summary>
        /// IP pool name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable NAT64. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("nat64")]
        public Input<string>? Nat64 { get; set; }

        /// <summary>
        /// Number of addresses blocks that can be used by a user (1 to 128, default = 8).
        /// </summary>
        [Input("numBlocksPerUser")]
        public Input<int>? NumBlocksPerUser { get; set; }

        /// <summary>
        /// Port block allocation timeout (seconds).
        /// </summary>
        [Input("pbaTimeout")]
        public Input<int>? PbaTimeout { get; set; }

        /// <summary>
        /// Enable/disable full cone NAT. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("permitAnyHost")]
        public Input<string>? PermitAnyHost { get; set; }

        /// <summary>
        /// Number of port for each user (32 to 60416, default = 0, auto).
        /// </summary>
        [Input("portPerUser")]
        public Input<int>? PortPerUser { get; set; }

        /// <summary>
        /// Final IPv4 address (inclusive) in the range of the source addresses to be translated (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("sourceEndip")]
        public Input<string>? SourceEndip { get; set; }

        /// <summary>
        /// First IPv4 address (inclusive) in the range of the source addresses to be translated (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("sourceStartip")]
        public Input<string>? SourceStartip { get; set; }

        /// <summary>
        /// First IPv4 address (inclusive) in the range for the address pool (format xxx.xxx.xxx.xxx, Default: 0.0.0.0).
        /// </summary>
        [Input("startip")]
        public Input<string>? Startip { get; set; }

        /// <summary>
        /// First port number (inclusive) in the range for the address pool (Default: 5117).
        /// </summary>
        [Input("startport")]
        public Input<int>? Startport { get; set; }

        /// <summary>
        /// IP pool type (overload, one-to-one, fixed port range, or port block allocation). Valid values: `overload`, `one-to-one`, `fixed-port-range`, `port-block-allocation`.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { 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 FirewallIppoolState()
        {
        }
        public static new FirewallIppoolState Empty => new FirewallIppoolState();
    }
}
