// *** 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 Cuemby.Equinix
{
    /// <summary>
    /// Resource `equinix.NetworkDevice` allows creation and management of Equinix Network Edge virtual
    /// network devices.
    /// 
    /// Network Edge virtual network devices can be created in two modes:
    /// 
    /// * **managed** - (default) Where Equinix manages connectivity and services in the device and
    ///   customer gets limited access to the device.
    /// * **self-configured** - Where customer provisions and manages own services in the device with less
    ///   restricted access. Some device types are offered only in this mode.
    /// 
    /// In addition to management modes, there are two software license modes available:
    /// 
    /// * **subscription** - Where Equinix provides software license, including end-to-end support, and
    ///   bills for the service respectively.
    /// * **BYOL** - [bring your own license] Where customer brings his own, already procured device
    ///   software license. There are no charges associated with such license. It is the only licensing mode
    ///   for `self-configured` devices.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// using Equinix = Pulumi.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var dc = Output.Create(Equinix.GetNetworkAccount.InvokeAsync(new Equinix.GetNetworkAccountArgs
    ///         {
    ///             MetroCode = "DC",
    ///         }));
    ///         var sv = Output.Create(Equinix.GetNetworkAccount.InvokeAsync(new Equinix.GetNetworkAccountArgs
    ///         {
    ///             MetroCode = "SV",
    ///         }));
    ///         var csr1000v_ha = new Equinix.NetworkDevice("csr1000v-ha", new Equinix.NetworkDeviceArgs
    ///         {
    ///             Throughput = 500,
    ///             ThroughputUnit = "Mbps",
    ///             MetroCode = dc.Apply(dc =&gt; dc.MetroCode),
    ///             TypeCode = "CSR1000V",
    ///             PackageCode = "SEC",
    ///             Notifications = 
    ///             {
    ///                 "nnheo@example.com",
    ///                 "efpyi@example.com",
    ///                 "hzdkv@example.com",
    ///             },
    ///             Hostname = "csr1000v-p",
    ///             TermLength = 6,
    ///             AccountNumber = dc.Apply(dc =&gt; dc.Number),
    ///             Version = "16.09.05",
    ///             CoreCount = 2,
    ///             SecondaryDevice = new Equinix.Inputs.NetworkDeviceSecondaryDeviceArgs
    ///             {
    ///                 Name = "tf-csr1000v-s",
    ///                 MetroCode = sv.Apply(sv =&gt; sv.MetroCode),
    ///                 Hostname = "csr1000v-s",
    ///                 Notifications = 
    ///                 {
    ///                     "nnheo@example.com",
    ///                     "efpyi@example.com",
    ///                 },
    ///                 AccountNumber = sv.Apply(sv =&gt; sv.Number),
    ///             },
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// using Equinix = Pulumi.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var sv = Output.Create(Equinix.GetNetworkAccount.InvokeAsync(new Equinix.GetNetworkAccountArgs
    ///         {
    ///             MetroCode = "SV",
    ///         }));
    ///         var panw_cluster = new Equinix.NetworkDevice("panw-cluster", new Equinix.NetworkDeviceArgs
    ///         {
    ///             MetroCode = sv.Apply(sv =&gt; sv.MetroCode),
    ///             TypeCode = "PA-VM",
    ///             SelfManaged = true,
    ///             Byol = true,
    ///             PackageCode = "VM100",
    ///             Notifications = 
    ///             {
    ///                 "nnheo@example.com",
    ///                 "efpyi@example.com",
    ///                 "hzdkv@example.com",
    ///             },
    ///             TermLength = 6,
    ///             AccountNumber = sv.Apply(sv =&gt; sv.Number),
    ///             Version = "10.1.3",
    ///             InterfaceCount = 10,
    ///             CoreCount = 2,
    ///             SshKey = new Equinix.Inputs.NetworkDeviceSshKeyArgs
    ///             {
    ///                 Username = "test",
    ///                 KeyName = "test-key",
    ///             },
    ///             AclTemplateId = "0bff6e05-f0e7-44cd-804a-25b92b835f8b",
    ///             ClusterDetails = new Equinix.Inputs.NetworkDeviceClusterDetailsArgs
    ///             {
    ///                 ClusterName = "tf-panw-cluster",
    ///                 Node0 = new Equinix.Inputs.NetworkDeviceClusterDetailsNode0Args
    ///                 {
    ///                     VendorConfiguration = new Equinix.Inputs.NetworkDeviceClusterDetailsNode0VendorConfigurationArgs
    ///                     {
    ///                         Hostname = "panw-node0",
    ///                     },
    ///                     LicenseToken = "licenseToken",
    ///                 },
    ///                 Node1 = new Equinix.Inputs.NetworkDeviceClusterDetailsNode1Args
    ///                 {
    ///                     VendorConfiguration = new Equinix.Inputs.NetworkDeviceClusterDetailsNode1VendorConfigurationArgs
    ///                     {
    ///                         Hostname = "panw-node1",
    ///                     },
    ///                     LicenseToken = "licenseToken",
    ///                 },
    ///             },
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// ## Import
    /// 
    /// This resource can be imported using an existing ID
    /// 
    /// ```sh
    ///  $ pulumi import equinix:index/networkDevice:NetworkDevice example {existing_id}
    /// ```
    /// 
    ///  The `license_token` and `mgtm_acl_template_uuid` fields can not be imported.
    /// </summary>
    [EquinixResourceType("equinix:index/networkDevice:NetworkDevice")]
    public partial class NetworkDevice : Pulumi.CustomResource
    {
        /// <summary>
        /// Billing account number for a device.
        /// </summary>
        [Output("accountNumber")]
        public Output<string> AccountNumber { get; private set; } = null!;

        /// <summary>
        /// Identifier of an ACL template that will be applied on the device.
        /// </summary>
        [Output("aclTemplateId")]
        public Output<string?> AclTemplateId { get; private set; } = null!;

        /// <summary>
        /// Additional Internet bandwidth, in Mbps, that will be
        /// allocated to the device (in addition to default 15Mbps).
        /// </summary>
        [Output("additionalBandwidth")]
        public Output<int> AdditionalBandwidth { get; private set; } = null!;

        /// <summary>
        /// (Autonomous System Number) Unique identifier for a network on the internet.
        /// </summary>
        [Output("asn")]
        public Output<int> Asn { get; private set; } = null!;

        /// <summary>
        /// Boolean value that determines device licensing mode, i.e.,
        /// `bring your own license` or `subscription` (default).
        /// </summary>
        [Output("byol")]
        public Output<bool?> Byol { get; private set; } = null!;

        /// <summary>
        /// An object that has the cluster details. See
        /// Cluster Details below for more details.
        /// </summary>
        [Output("clusterDetails")]
        public Output<Outputs.NetworkDeviceClusterDetails?> ClusterDetails { get; private set; } = null!;

        /// <summary>
        /// Number of CPU cores used by device.
        /// </summary>
        [Output("coreCount")]
        public Output<int> CoreCount { get; private set; } = null!;

        /// <summary>
        /// Device hostname prefix.
        /// </summary>
        [Output("hostname")]
        public Output<string> Hostname { get; private set; } = null!;

        /// <summary>
        /// Device location Equinix Business Exchange name.
        /// </summary>
        [Output("ibx")]
        public Output<string> Ibx { get; private set; } = null!;

        /// <summary>
        /// Number of network interfaces on a device. If not specified,
        /// default number for a given device type will be used.
        /// </summary>
        [Output("interfaceCount")]
        public Output<int> InterfaceCount { get; private set; } = null!;

        /// <summary>
        /// List of device interfaces. See Interface Attribute below
        /// for more details.
        /// </summary>
        [Output("interfaces")]
        public Output<ImmutableArray<Outputs.NetworkDeviceInterface>> Interfaces { get; private set; } = null!;

        /// <summary>
        /// Path to the license file that will be uploaded and applied on a
        /// device. Applicable for some devices types in BYOL licensing mode.
        /// </summary>
        [Output("licenseFile")]
        public Output<string?> LicenseFile { get; private set; } = null!;

        /// <summary>
        /// License file id. This is necessary for Fortinet and Juniper clusters.
        /// </summary>
        [Output("licenseFileId")]
        public Output<string> LicenseFileId { get; private set; } = null!;

        /// <summary>
        /// Device license registration status. Possible values are `APPLYING_LICENSE`,
        /// `REGISTERED`, `APPLIED`, `WAITING_FOR_CLUSTER_SETUP`, `REGISTRATION_FAILED`.
        /// </summary>
        [Output("licenseStatus")]
        public Output<string> LicenseStatus { get; private set; } = null!;

        /// <summary>
        /// License token. This is necessary for Palo Alto clusters.
        /// </summary>
        [Output("licenseToken")]
        public Output<string?> LicenseToken { get; private set; } = null!;

        /// <summary>
        /// Device location metro code.
        /// </summary>
        [Output("metroCode")]
        public Output<string> MetroCode { get; private set; } = null!;

        /// <summary>
        /// Identifier of an MGMT interface ACL template that will be
        /// applied on the device.
        /// </summary>
        [Output("mgmtAclTemplateUuid")]
        public Output<string?> MgmtAclTemplateUuid { get; private set; } = null!;

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

        /// <summary>
        /// List of email addresses that will receive device status
        /// notifications.
        /// </summary>
        [Output("notifications")]
        public Output<ImmutableArray<string>> Notifications { get; private set; } = null!;

        /// <summary>
        /// Name/number used to identify device order on the invoice.
        /// </summary>
        [Output("orderReference")]
        public Output<string?> OrderReference { get; private set; } = null!;

        /// <summary>
        /// Device software package code.
        /// </summary>
        [Output("packageCode")]
        public Output<string> PackageCode { get; private set; } = null!;

        /// <summary>
        /// Purchase order number associated with a device order.
        /// </summary>
        [Output("purchaseOrderNumber")]
        public Output<string?> PurchaseOrderNumber { get; private set; } = null!;

        /// <summary>
        /// Device redundancy type applicable for HA devices, either
        /// primary or secondary.
        /// </summary>
        [Output("redundancyType")]
        public Output<string> RedundancyType { get; private set; } = null!;

        /// <summary>
        /// Unique identifier for a redundant device applicable for HA devices.
        /// </summary>
        [Output("redundantId")]
        public Output<string> RedundantId { get; private set; } = null!;

        /// <summary>
        /// Device location region.
        /// </summary>
        [Output("region")]
        public Output<string> Region { get; private set; } = null!;

        /// <summary>
        /// Definition of secondary device for redundant
        /// device configurations. See Secondary Device below for more details.
        /// </summary>
        [Output("secondaryDevice")]
        public Output<Outputs.NetworkDeviceSecondaryDevice?> SecondaryDevice { get; private set; } = null!;

        /// <summary>
        /// Boolean value that determines device management mode, i.e.,
        /// `self-managed` or `Equinix managed` (default).
        /// </summary>
        [Output("selfManaged")]
        public Output<bool?> SelfManaged { get; private set; } = null!;

        /// <summary>
        /// IP address of SSH enabled interface on the device.
        /// </summary>
        [Output("sshIpAddress")]
        public Output<string> SshIpAddress { get; private set; } = null!;

        /// <summary>
        /// FQDN of SSH enabled interface on the device.
        /// </summary>
        [Output("sshIpFqdn")]
        public Output<string> SshIpFqdn { get; private set; } = null!;

        /// <summary>
        /// Definition of SSH key that will be provisioned on a device
        /// </summary>
        [Output("sshKey")]
        public Output<Outputs.NetworkDeviceSshKey?> SshKey { get; private set; } = null!;

        /// <summary>
        /// interface status. One of `AVAILABLE`, `RESERVED`, `ASSIGNED`.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// Device term length.
        /// </summary>
        [Output("termLength")]
        public Output<int> TermLength { get; private set; } = null!;

        /// <summary>
        /// Device license throughput.
        /// </summary>
        [Output("throughput")]
        public Output<int?> Throughput { get; private set; } = null!;

        /// <summary>
        /// License throughput unit. One of `Mbps` or `Gbps`.
        /// </summary>
        [Output("throughputUnit")]
        public Output<string?> ThroughputUnit { get; private set; } = null!;

        /// <summary>
        /// Device type code.
        /// </summary>
        [Output("typeCode")]
        public Output<string> TypeCode { get; private set; } = null!;

        /// <summary>
        /// Device unique identifier.
        /// </summary>
        [Output("uuid")]
        public Output<string> Uuid { get; private set; } = null!;

        /// <summary>
        /// An object that has fields relevant to the vendor of the
        /// cluster device. See Cluster Details - Nodes - Vendor Configuration
        /// below for more details.
        /// </summary>
        [Output("vendorConfiguration")]
        public Output<ImmutableDictionary<string, string>> VendorConfiguration { get; private set; } = null!;

        /// <summary>
        /// Device software software version.
        /// </summary>
        [Output("version")]
        public Output<string> Version { get; private set; } = null!;

        /// <summary>
        /// device interface id picked for WAN
        /// </summary>
        [Output("wanInterfaceId")]
        public Output<string?> WanInterfaceId { get; private set; } = null!;

        /// <summary>
        /// Device location zone code.
        /// </summary>
        [Output("zoneCode")]
        public Output<string> ZoneCode { get; private set; } = null!;


        /// <summary>
        /// Create a NetworkDevice 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 NetworkDevice(string name, NetworkDeviceArgs args, CustomResourceOptions? options = null)
            : base("equinix:index/networkDevice:NetworkDevice", name, args ?? new NetworkDeviceArgs(), MakeResourceOptions(options, ""))
        {
        }

        private NetworkDevice(string name, Input<string> id, NetworkDeviceState? state = null, CustomResourceOptions? options = null)
            : base("equinix:index/networkDevice:NetworkDevice", 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/cuemby",
            };
            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 NetworkDevice 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 NetworkDevice Get(string name, Input<string> id, NetworkDeviceState? state = null, CustomResourceOptions? options = null)
        {
            return new NetworkDevice(name, id, state, options);
        }
    }

    public sealed class NetworkDeviceArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Billing account number for a device.
        /// </summary>
        [Input("accountNumber", required: true)]
        public Input<string> AccountNumber { get; set; } = null!;

        /// <summary>
        /// Identifier of an ACL template that will be applied on the device.
        /// </summary>
        [Input("aclTemplateId")]
        public Input<string>? AclTemplateId { get; set; }

        /// <summary>
        /// Additional Internet bandwidth, in Mbps, that will be
        /// allocated to the device (in addition to default 15Mbps).
        /// </summary>
        [Input("additionalBandwidth")]
        public Input<int>? AdditionalBandwidth { get; set; }

        /// <summary>
        /// Boolean value that determines device licensing mode, i.e.,
        /// `bring your own license` or `subscription` (default).
        /// </summary>
        [Input("byol")]
        public Input<bool>? Byol { get; set; }

        /// <summary>
        /// An object that has the cluster details. See
        /// Cluster Details below for more details.
        /// </summary>
        [Input("clusterDetails")]
        public Input<Inputs.NetworkDeviceClusterDetailsArgs>? ClusterDetails { get; set; }

        /// <summary>
        /// Number of CPU cores used by device.
        /// </summary>
        [Input("coreCount", required: true)]
        public Input<int> CoreCount { get; set; } = null!;

        /// <summary>
        /// Device hostname prefix.
        /// </summary>
        [Input("hostname")]
        public Input<string>? Hostname { get; set; }

        /// <summary>
        /// Number of network interfaces on a device. If not specified,
        /// default number for a given device type will be used.
        /// </summary>
        [Input("interfaceCount")]
        public Input<int>? InterfaceCount { get; set; }

        /// <summary>
        /// Path to the license file that will be uploaded and applied on a
        /// device. Applicable for some devices types in BYOL licensing mode.
        /// </summary>
        [Input("licenseFile")]
        public Input<string>? LicenseFile { get; set; }

        /// <summary>
        /// License token. This is necessary for Palo Alto clusters.
        /// </summary>
        [Input("licenseToken")]
        public Input<string>? LicenseToken { get; set; }

        /// <summary>
        /// Device location metro code.
        /// </summary>
        [Input("metroCode", required: true)]
        public Input<string> MetroCode { get; set; } = null!;

        /// <summary>
        /// Identifier of an MGMT interface ACL template that will be
        /// applied on the device.
        /// </summary>
        [Input("mgmtAclTemplateUuid")]
        public Input<string>? MgmtAclTemplateUuid { get; set; }

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

        [Input("notifications", required: true)]
        private InputList<string>? _notifications;

        /// <summary>
        /// List of email addresses that will receive device status
        /// notifications.
        /// </summary>
        public InputList<string> Notifications
        {
            get => _notifications ?? (_notifications = new InputList<string>());
            set => _notifications = value;
        }

        /// <summary>
        /// Name/number used to identify device order on the invoice.
        /// </summary>
        [Input("orderReference")]
        public Input<string>? OrderReference { get; set; }

        /// <summary>
        /// Device software package code.
        /// </summary>
        [Input("packageCode", required: true)]
        public Input<string> PackageCode { get; set; } = null!;

        /// <summary>
        /// Purchase order number associated with a device order.
        /// </summary>
        [Input("purchaseOrderNumber")]
        public Input<string>? PurchaseOrderNumber { get; set; }

        /// <summary>
        /// Definition of secondary device for redundant
        /// device configurations. See Secondary Device below for more details.
        /// </summary>
        [Input("secondaryDevice")]
        public Input<Inputs.NetworkDeviceSecondaryDeviceArgs>? SecondaryDevice { get; set; }

        /// <summary>
        /// Boolean value that determines device management mode, i.e.,
        /// `self-managed` or `Equinix managed` (default).
        /// </summary>
        [Input("selfManaged")]
        public Input<bool>? SelfManaged { get; set; }

        /// <summary>
        /// Definition of SSH key that will be provisioned on a device
        /// </summary>
        [Input("sshKey")]
        public Input<Inputs.NetworkDeviceSshKeyArgs>? SshKey { get; set; }

        /// <summary>
        /// Device term length.
        /// </summary>
        [Input("termLength", required: true)]
        public Input<int> TermLength { get; set; } = null!;

        /// <summary>
        /// Device license throughput.
        /// </summary>
        [Input("throughput")]
        public Input<int>? Throughput { get; set; }

        /// <summary>
        /// License throughput unit. One of `Mbps` or `Gbps`.
        /// </summary>
        [Input("throughputUnit")]
        public Input<string>? ThroughputUnit { get; set; }

        /// <summary>
        /// Device type code.
        /// </summary>
        [Input("typeCode", required: true)]
        public Input<string> TypeCode { get; set; } = null!;

        [Input("vendorConfiguration")]
        private InputMap<string>? _vendorConfiguration;

        /// <summary>
        /// An object that has fields relevant to the vendor of the
        /// cluster device. See Cluster Details - Nodes - Vendor Configuration
        /// below for more details.
        /// </summary>
        public InputMap<string> VendorConfiguration
        {
            get => _vendorConfiguration ?? (_vendorConfiguration = new InputMap<string>());
            set => _vendorConfiguration = value;
        }

        /// <summary>
        /// Device software software version.
        /// </summary>
        [Input("version", required: true)]
        public Input<string> Version { get; set; } = null!;

        /// <summary>
        /// device interface id picked for WAN
        /// </summary>
        [Input("wanInterfaceId")]
        public Input<string>? WanInterfaceId { get; set; }

        public NetworkDeviceArgs()
        {
        }
    }

    public sealed class NetworkDeviceState : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Billing account number for a device.
        /// </summary>
        [Input("accountNumber")]
        public Input<string>? AccountNumber { get; set; }

        /// <summary>
        /// Identifier of an ACL template that will be applied on the device.
        /// </summary>
        [Input("aclTemplateId")]
        public Input<string>? AclTemplateId { get; set; }

        /// <summary>
        /// Additional Internet bandwidth, in Mbps, that will be
        /// allocated to the device (in addition to default 15Mbps).
        /// </summary>
        [Input("additionalBandwidth")]
        public Input<int>? AdditionalBandwidth { get; set; }

        /// <summary>
        /// (Autonomous System Number) Unique identifier for a network on the internet.
        /// </summary>
        [Input("asn")]
        public Input<int>? Asn { get; set; }

        /// <summary>
        /// Boolean value that determines device licensing mode, i.e.,
        /// `bring your own license` or `subscription` (default).
        /// </summary>
        [Input("byol")]
        public Input<bool>? Byol { get; set; }

        /// <summary>
        /// An object that has the cluster details. See
        /// Cluster Details below for more details.
        /// </summary>
        [Input("clusterDetails")]
        public Input<Inputs.NetworkDeviceClusterDetailsGetArgs>? ClusterDetails { get; set; }

        /// <summary>
        /// Number of CPU cores used by device.
        /// </summary>
        [Input("coreCount")]
        public Input<int>? CoreCount { get; set; }

        /// <summary>
        /// Device hostname prefix.
        /// </summary>
        [Input("hostname")]
        public Input<string>? Hostname { get; set; }

        /// <summary>
        /// Device location Equinix Business Exchange name.
        /// </summary>
        [Input("ibx")]
        public Input<string>? Ibx { get; set; }

        /// <summary>
        /// Number of network interfaces on a device. If not specified,
        /// default number for a given device type will be used.
        /// </summary>
        [Input("interfaceCount")]
        public Input<int>? InterfaceCount { get; set; }

        [Input("interfaces")]
        private InputList<Inputs.NetworkDeviceInterfaceGetArgs>? _interfaces;

        /// <summary>
        /// List of device interfaces. See Interface Attribute below
        /// for more details.
        /// </summary>
        public InputList<Inputs.NetworkDeviceInterfaceGetArgs> Interfaces
        {
            get => _interfaces ?? (_interfaces = new InputList<Inputs.NetworkDeviceInterfaceGetArgs>());
            set => _interfaces = value;
        }

        /// <summary>
        /// Path to the license file that will be uploaded and applied on a
        /// device. Applicable for some devices types in BYOL licensing mode.
        /// </summary>
        [Input("licenseFile")]
        public Input<string>? LicenseFile { get; set; }

        /// <summary>
        /// License file id. This is necessary for Fortinet and Juniper clusters.
        /// </summary>
        [Input("licenseFileId")]
        public Input<string>? LicenseFileId { get; set; }

        /// <summary>
        /// Device license registration status. Possible values are `APPLYING_LICENSE`,
        /// `REGISTERED`, `APPLIED`, `WAITING_FOR_CLUSTER_SETUP`, `REGISTRATION_FAILED`.
        /// </summary>
        [Input("licenseStatus")]
        public Input<string>? LicenseStatus { get; set; }

        /// <summary>
        /// License token. This is necessary for Palo Alto clusters.
        /// </summary>
        [Input("licenseToken")]
        public Input<string>? LicenseToken { get; set; }

        /// <summary>
        /// Device location metro code.
        /// </summary>
        [Input("metroCode")]
        public Input<string>? MetroCode { get; set; }

        /// <summary>
        /// Identifier of an MGMT interface ACL template that will be
        /// applied on the device.
        /// </summary>
        [Input("mgmtAclTemplateUuid")]
        public Input<string>? MgmtAclTemplateUuid { get; set; }

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

        [Input("notifications")]
        private InputList<string>? _notifications;

        /// <summary>
        /// List of email addresses that will receive device status
        /// notifications.
        /// </summary>
        public InputList<string> Notifications
        {
            get => _notifications ?? (_notifications = new InputList<string>());
            set => _notifications = value;
        }

        /// <summary>
        /// Name/number used to identify device order on the invoice.
        /// </summary>
        [Input("orderReference")]
        public Input<string>? OrderReference { get; set; }

        /// <summary>
        /// Device software package code.
        /// </summary>
        [Input("packageCode")]
        public Input<string>? PackageCode { get; set; }

        /// <summary>
        /// Purchase order number associated with a device order.
        /// </summary>
        [Input("purchaseOrderNumber")]
        public Input<string>? PurchaseOrderNumber { get; set; }

        /// <summary>
        /// Device redundancy type applicable for HA devices, either
        /// primary or secondary.
        /// </summary>
        [Input("redundancyType")]
        public Input<string>? RedundancyType { get; set; }

        /// <summary>
        /// Unique identifier for a redundant device applicable for HA devices.
        /// </summary>
        [Input("redundantId")]
        public Input<string>? RedundantId { get; set; }

        /// <summary>
        /// Device location region.
        /// </summary>
        [Input("region")]
        public Input<string>? Region { get; set; }

        /// <summary>
        /// Definition of secondary device for redundant
        /// device configurations. See Secondary Device below for more details.
        /// </summary>
        [Input("secondaryDevice")]
        public Input<Inputs.NetworkDeviceSecondaryDeviceGetArgs>? SecondaryDevice { get; set; }

        /// <summary>
        /// Boolean value that determines device management mode, i.e.,
        /// `self-managed` or `Equinix managed` (default).
        /// </summary>
        [Input("selfManaged")]
        public Input<bool>? SelfManaged { get; set; }

        /// <summary>
        /// IP address of SSH enabled interface on the device.
        /// </summary>
        [Input("sshIpAddress")]
        public Input<string>? SshIpAddress { get; set; }

        /// <summary>
        /// FQDN of SSH enabled interface on the device.
        /// </summary>
        [Input("sshIpFqdn")]
        public Input<string>? SshIpFqdn { get; set; }

        /// <summary>
        /// Definition of SSH key that will be provisioned on a device
        /// </summary>
        [Input("sshKey")]
        public Input<Inputs.NetworkDeviceSshKeyGetArgs>? SshKey { get; set; }

        /// <summary>
        /// interface status. One of `AVAILABLE`, `RESERVED`, `ASSIGNED`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Device term length.
        /// </summary>
        [Input("termLength")]
        public Input<int>? TermLength { get; set; }

        /// <summary>
        /// Device license throughput.
        /// </summary>
        [Input("throughput")]
        public Input<int>? Throughput { get; set; }

        /// <summary>
        /// License throughput unit. One of `Mbps` or `Gbps`.
        /// </summary>
        [Input("throughputUnit")]
        public Input<string>? ThroughputUnit { get; set; }

        /// <summary>
        /// Device type code.
        /// </summary>
        [Input("typeCode")]
        public Input<string>? TypeCode { get; set; }

        /// <summary>
        /// Device unique identifier.
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { get; set; }

        [Input("vendorConfiguration")]
        private InputMap<string>? _vendorConfiguration;

        /// <summary>
        /// An object that has fields relevant to the vendor of the
        /// cluster device. See Cluster Details - Nodes - Vendor Configuration
        /// below for more details.
        /// </summary>
        public InputMap<string> VendorConfiguration
        {
            get => _vendorConfiguration ?? (_vendorConfiguration = new InputMap<string>());
            set => _vendorConfiguration = value;
        }

        /// <summary>
        /// Device software software version.
        /// </summary>
        [Input("version")]
        public Input<string>? Version { get; set; }

        /// <summary>
        /// device interface id picked for WAN
        /// </summary>
        [Input("wanInterfaceId")]
        public Input<string>? WanInterfaceId { get; set; }

        /// <summary>
        /// Device location zone code.
        /// </summary>
        [Input("zoneCode")]
        public Input<string>? ZoneCode { get; set; }

        public NetworkDeviceState()
        {
        }
    }
}
