equinix_network_device (Resource)
Resource equinix_network_device 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-configureddevices.
Example Usage
# Create pair of redundant, managed CSR1000V routers with license subscription
# in two different metro locations
data "equinix_network_account" "dc" {
metro_code = "DC"
}
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "csr1000v-ha" {
name = "tf-csr1000v-p"
throughput = 500
throughput_unit = "Mbps"
metro_code = data.equinix_network_account.dc.metro_code
type_code = "CSR1000V"
self_managed = false
connectivity = "INTERNET-ACCESS"
byol = false
package_code = "SEC"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
hostname = "csr1000v-p"
term_length = 12
account_number = data.equinix_network_account.dc.number
version = "16.09.05"
core_count = 2
secondary_device {
name = "tf-csr1000v-s"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "csr1000v-s"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
}
}
# Create self configured PANW cluster with BYOL license
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "panw-cluster" {
name = "tf-panw"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "PA-VM"
self_managed = true
byol = true
package_code = "VM100"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "10.1.3"
interface_count = 10
core_count = 2
ssh_key {
username = "test"
key_name = "test-key"
}
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
cluster_details {
cluster_name = "tf-panw-cluster"
node0 {
vendor_configuration {
hostname = "panw-node0"
}
license_token = "licenseToken"
}
node1 {
vendor_configuration {
hostname = "panw-node1"
}
license_token = "licenseToken"
}
}
}
# Create self configured single Aviatrix device with cloud init file
data "equinix_network_account" "sv" {
metro_code = "SV"
}
variable "filepath" { default = "cloudInitFileFolder/TF-AVX-cloud-init-file.txt" }
resource "equinix_network_file" "aviatrix-cloudinit-file" {
file_name = "TF-AVX-cloud-init-file.txt"
content = file("${path.module}/${var.filepath}")
metro_code = data.equinix_network_account.sv.metro_code
device_type_code = "AVIATRIX_EDGE_10"
process_type = "CLOUD_INIT"
self_managed = true
byol = true
}
resource "equinix_network_device" "aviatrix-single" {
name = "tf-aviatrix"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "AVIATRIX_EDGE_10"
self_managed = true
byol = true
package_code = "STD"
notifications = ["john@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "6.9"
core_count = 2
cloud_init_file_id = equinix_network_file.aviatrix-cloudinit-file.uuid
acl_template_id = "c06150ea-b604-4ad1-832a-d63936e9b938"
}
# Create self configured single Catalyst 8000V (Autonomous Mode) router with license token
data "equinix_network_account" "sv" {
name = "account-name"
metro_code = "SV"
}
resource "equinix_network_device" "c8kv-single" {
name = "tf-c8kv"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
package_code = "network-essentials"
notifications = ["test@equinix.com"]
hostname = "C8KV"
account_number = data.equinix_network_account.sv.number
version = "17.06.01a"
core_count = 2
term_length = 12
license_token = "valid-license-token"
additional_bandwidth = 5
ssh_key {
username = "test-username"
key_name = "valid-key-name"
}
acl_template_id = "3e548c02-9164-4197-aa23-05b1f644883c"
}
# Create self configured single VSRX device with BYOL License
data "equinix_network_account" "sv" {
name = "account-name"
metro_code = "SV"
}
resource "equinix_network_device" "vsrx-single" {
name = "tf-c8kv-sdwan"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "VSRX"
self_managed = true
byol = true
package_code = "STD"
notifications = ["test@equinix.com"]
hostname = "VSRX"
account_number = data.equinix_network_account.sv.number
version = "23.2R1.13"
core_count = 2
term_length = 12
additional_bandwidth = 5
project_id = "a86d7112-d740-4758-9c9c-31e66373746b"
diverse_device_id = "ed7891bd-15b4-4f72-ac56-d96cfdacddcc"
ssh_key {
username = "test-username"
key_name = "valid-key-name"
}
acl_template_id = "3e548c02-9164-4197-aa23-05b1f644883c"
}
# Create self configured redundant Arista router with DSA key
data "equinix_network_account" "sv" {
name = "account-name"
metro_code = "SV"
}
resource "equinix_network_ssh_key" "test-public-key" {
name = "key-name"
public_key = "ssh-dss key-value"
type = "DSA"
}
resource "equinix_network_device" "arista-ha" {
name = "tf-arista-p"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "ARISTA-ROUTER"
self_managed = true
connectivity = "PRIVATE"
byol = true
package_code = "CloudEOS"
notifications = ["test@equinix.com"]
hostname = "arista-p"
account_number = data.equinix_network_account.sv.number
version = "4.29.0"
core_count = 4
term_length = 12
additional_bandwidth = 5
ssh_key {
username = "test-username"
key_name = equinix_network_ssh_key.test-public-key.name
}
acl_template_id = "c637a17b-7a6a-4486-924b-30e6c36904b0"
secondary_device {
name = "tf-arista-s"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "arista-s"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
acl_template_id = "fee5e2c0-6198-4ce6-9cbd-bbe6c1dbe138"
}
}
# Create self configured redundant BlueCat DNS and DHCP Server
data "equinix_network_account" "sv" {
name = "account-name"
metro_code = "SV"
}
resource "equinix_network_ssh_key" "test-public-key" {
name = "key-name"
public_key = "ssh-dss key-value"
type = "DSA"
}
resource "equinix_network_device" "bluecat-bdds-ha" {
name = "tf-bluecat-bdds-p"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "BLUECAT"
self_managed = true
connectivity = "PRIVATE"
byol = true
package_code = "STD"
notifications = ["test@equinix.com"]
account_number = data.equinix_network_account.sv.number
version = "9.6.0"
core_count = 2
term_length = 12
vendor_configuration = {
"hostname" = "test"
"privateAddress" : "x.x.x.x"
"privateCidrMask" : "24"
"privateGateway" : "x.x.x.x"
"licenseKey" : "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
"licenseId" : "xxxxxxxxxxxxxxx"
}
ssh_key {
username = "test-username"
key_name = equinix_network_ssh_key.test-public-key.name
}
secondary_device {
name = "tf-bluecat-bdds-s"
metro_code = data.equinix_network_account.sv.metro_code
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = {
"hostname" = "test"
"privateAddress" : "x.x.x.x"
"privateCidrMask" : "24"
"privateGateway" : "x.x.x.x"
"licenseKey" : "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
"licenseId" : "xxxxxxxxxxxxxxx"
}
}
}
# Create self configured redundant BlueCat Edge Service Point
data "equinix_network_account" "sv" {
name = "account-name"
metro_code = "SV"
}
resource "equinix_network_file" "bluecat-edge-service-point-cloudinit-primary-file" {
file_name = "TF-BLUECAT-ESP-cloud-init-file.txt"
content = file("${path.module}/${var.filepath}")
metro_code = data.equinix_network_account.sv.metro_code
device_type_code = "BLUECAT-EDGE-SERVICE-POINT"
process_type = "CLOUD_INIT"
self_managed = true
byol = true
}
resource "equinix_network_file" "bluecat-edge-service-point-cloudinit-secondary-file" {
file_name = "TF-BLUECAT-ESP-cloud-init-file.txt"
content = file("${path.module}/${var.filepath}")
metro_code = data.equinix_network_account.sv.metro_code
device_type_code = "BLUECAT-EDGE-SERVICE-POINT"
process_type = "CLOUD_INIT"
self_managed = true
byol = true
}
resource "equinix_network_device" "bluecat-edge-service-point-ha" {
name = "tf-bluecat-edge-service-point-p"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "BLUECAT-EDGE-SERVICE-POINT"
self_managed = true
connectivity = "PRIVATE"
byol = true
package_code = "STD"
notifications = ["test@equinix.com"]
account_number = data.equinix_network_account.sv.number
cloud_init_file_id = equinix_network_file.bluecat-edge-service-point-cloudinit-primary-file.uuid
version = "4.6.3"
core_count = 4
term_length = 12
secondary_device {
name = "tf-bluecat-edge-service-point-s"
metro_code = data.equinix_network_account.sv.metro_code
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
cloud_init_file_id = equinix_network_file.bluecat-edge-service-point-cloudinit-secondary-file.uuid
}
}
# Create PA-VM firewall cluster with Panorama Server Integration
# with Panorama Server IP and Panorama Auth Key in vendor Configuration
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "panw-cluster" {
name = "tf-panw"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "PA-VM"
self_managed = true
byol = true
package_code = "VM100"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "11.1.3"
interface_count = 10
core_count = 2
ssh_key {
username = "test"
key_name = "test-key"
}
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
cluster_details {
cluster_name = "tf-panw-cluster"
node0 {
vendor_configuration {
hostname = "panw-node0"
panorama_ip_address = "x.x.x.x"
panorama_auth_key = "xxxxxxxxxxx"
}
license_token = "licenseToken"
}
node1 {
vendor_configuration {
hostname = "panw-node1"
panorama_ip_address = "x.x.x.x"
panorama_auth_key = "xxxxxxxxxxx"
}
license_token = "licenseToken"
}
}
}
# Create C8000V BYOL device with bandwidth tier information
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "c8000v-byol-tier" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
package_code = "network-essentials"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
tier = 1
ssh_key {
username = "test"
key_name = "test-key"
}
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
}
# Create C8000V BYOL device with numeric bandwidth throughput information
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "c8000v-byol-throughput" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
package_code = "network-essentials"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
throughput = "100"
throughput_unit = "Mbps"
ssh_key {
username = "test"
key_name = "test-key"
}
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
}
# Create self configured single Aviatrix Transit Edge device with cloud init file
data "equinix_network_account" "sv" {
metro_code = "SV"
}
variable "filepath" { default = "cloudInitFileFolder/TF-AVX-cloud-init-file.txt" }
resource "equinix_network_file" "aviatrix-cloudinit-file" {
file_name = "TF-AVX-cloud-init-file.txt"
content = file("${path.module}/${var.filepath}")
metro_code = data.equinix_network_account.sv.metro_code
device_type_code = "AVIATRIX_TRANSIT_EDGE"
process_type = "CLOUD_INIT"
self_managed = true
byol = true
}
resource "equinix_network_device" "aviatrix-transit-edge-single" {
name = "tf-aviatrix"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "AVIATRIX_TRANSIT_EDGE"
self_managed = true
byol = true
package_code = "STD"
notifications = ["john@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "7.2.a"
core_count = 2
cloud_init_file_id = equinix_network_file.aviatrix-cloudinit-file.uuid
acl_template_id = "c06150ea-b604-4ad1-832a-d63936e9b938"
}
# Create ZSCALER APPC device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "zscaler-appc-single" {
name = "tf-zscaler-appc"
project_id = "XXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "ZSCALER-APPC"
self_managed = true
byol = true
connectivity = "PRIVATE"
package_code = "STD"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "23.395.1"
interface_count = 1
core_count = 4
vendor_configuration = {"provisioningKey" = "XXXXXXXXXX", "hostname" = "XXXX"}
ssh_key {
username = "test"
key_name = "test-key"
}
}
# Create ZSCALER APPC device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "zscaler-pse-single" {
name = "tf-zscaler-pse"
project_id = "XXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "ZSCALER-PSE"
self_managed = true
byol = true
connectivity = "PRIVATE"
package_code = "STD"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "23.395.1"
interface_count = 1
core_count = 4
vendor_configuration = {"provisioningKey" = "XXXXXXXXXX", "hostname" = "XXXX"}
ssh_key {
username = "test"
key_name = "test-key"
}
}
# Create C8000V BYOL device with bandwidth tier information
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "c8000v-byol-withtout-default-password" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
generate_default_password = false
package_code = "network-essentials"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
tier = 1
ssh_key {
username = "test"
key_name = "test-key"
}
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
}
# Create Checkpoint single device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "CHECKPOINT-SV" {
name = "TF_CHECKPOINT"
project_id = "XXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "CGUARD"
self_managed = true
byol = true
package_code = "STD"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "R81.20"
hostname = "test"
core_count = 2
term_length = 1
additional_bandwidth = 5
acl_template_id = "XXXXXXX"
ssh_key {
username = "XXXXX"
key_name = "XXXXXX"
}
}
# Create Cisco FTD Cluster with Connectivity- PRIVATE
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "Cisco-FTD-SV" {
name = "TF_Cisco_NGFW_CLUSTER_ZNPD"
project_id = "XXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "Cisco_NGFW"
self_managed = true
connectivity = "PRIVATE"
byol = true
package_code = "FTDv10"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "7.0.4-55"
hostname = "test"
core_count = 4
term_length = 1
interface_count = 10
cluster_details {
cluster_name = "tf-ftd-cluster"
node0 {
vendor_configuration {
hostname = "test"
activation_key = "XXXXX"
controller1 = "X.X.X.X"
management_type = "FMC"
}
}
node1 {
vendor_configuration {
hostname = "test"
management_type = "FMC"
}
}
}
}
# Create Fortinet SDWAN single device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "FTNT-SDWAN-SV" {
name = "TF_VERSA-SDWAN"
project_id = "XXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "VERSA_SDWAN"
self_managed = true
byol = true
package_code = "FLEX_VNF_2"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "21.2.3"
core_count = 2
term_length = 1
additional_bandwidth = 50
acl_template_id = "XXXXXXXXX"
vendor_configuration = {
controller1 = "X.X.X.X"
controller2 = "X.X.X.X"
localId = "test@test.com"
remoteId = "test@test.com"
serialNumber = "4"
}
secondary_device {
name = "Praveena_TF_VERSA"
metro_code = data.equinix_network_account.sv.metro_code
account_number = data.equinix_network_account.sv.number
acl_template_id = "XXXXXXXX"
notifications = ["test@eq.com"]
vendor_configuration = {
controller1 = "X.X.X.X"
controller2 = "X.X.X.X"
localId = "test@test.com"
remoteId = "test@test.com"
serialNumber = "4"
}
}
}
# Create VYos Router HA device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "VYOS-AM" {
name = "TF_VYOS"
project_id = "XXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "VYOS-ROUTER"
self_managed = true
byol = false
package_code = "STD"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "1.4.1-2501"
hostname = "test"
core_count = 2
term_length = 1
additional_bandwidth = 50
acl_template_id = "XXXXXXXX"
ssh_key {
username = "test"
key_name = "xxxxxxxx"
}
secondary_device {
name = "TF_CHECKPOINT"
metro_code = data.equinix_network_account.sv.metro_code
account_number = data.equinix_network_account.sv.number
hostname = "test"
acl_template_id = "XXXXXXXXXXX"
notifications = ["test@eq.com"]
}
}
# Create Fortinet SDWAN single device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "FTNT-SDWAN-SV" {
name = "TF_FTNT-SDWAN"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "FG-SDWAN"
self_managed = true
byol = true
package_code = "VM02"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "7.0.14"
hostname = "test"
core_count = 2
term_length = 1
additional_bandwidth = 50
acl_template_id = "XXXXXXXX"
vendor_configuration = {
adminPassword = "XXXXX"
controller1 = "X.X.X.X"
}
}
# Create Aruba Edgeconnect SDWAN HA device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "ARUBA-EDGECONNECT-AM" {
name = "TF_Aruba_Edge_Connect"
project_id = "XXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "EDGECONNECT-SDWAN"
self_managed = true
byol = true
package_code = "EC-V"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "9.4.2.3"
core_count = 2
term_length = 1
additional_bandwidth = 50
interface_count = 32
acl_template_id = "XXXXXXX"
vendor_configuration = {
accountKey : "xxxxx"
accountName : "xxxx"
applianceTag : "tests"
hostname : "test"
}
secondary_device {
name = "TF_CHECKPOINT"
metro_code = data.equinix_network_account.sv.metro_code
account_number = data.equinix_network_account.sv.number
acl_template_id = "XXXXXXX"
notifications = ["test@eq.com"]
vendor_configuration = {
accountKey : "xxxxx"
accountName : "xxxx"
applianceTag : "test"
hostname : "test"
}
}
}
# Create Infoblox Grid Member Single device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "INFOBLOX-SV" {
name = "TF_INFOBLOX"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "INFOBLOX-GRID-MEMBER"
self_managed = true
byol = true
connectivity = "PRIVATE"
package_code = "STD"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "9.0.5"
core_count = 8
term_length = 1
vendor_configuration = {
adminPassword = "xxxxxx"
ipAddress = "X.X.X.X"
subnetMaskIp = "X.X.X.X"
gatewayIp = "X.X.X.X"
}
}
# Create Infoblox Grid Member HA device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "INFOBLOX-SV" {
name = "TF_INFOBLOX"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "INFOBLOX-GRID-MEMBER"
self_managed = true
connectivity = "PRIVATE"
byol = true
package_code = "STD"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "9.0.5"
core_count = 8
term_length = 1
vendor_configuration = {
adminPassword = "X.X.X.X"
ipAddress = "X.X.X.X"
subnetMaskIp = "X.X.X.X"
gatewayIp = "X.X.X.X"
}
secondary_device {
name = "TF_INFOBLOX-Sec"
metro_code = data.equinix_network_account.sv.metro_code
account_number = data.equinix_network_account.sv.number
notifications = ["test@eq.com"]
vendor_configuration = {
adminPassword = "X.X.X.X"
ipAddress = "X.X.X.X"
subnetMaskIp = "X.X.X.X"
gatewayIp = "X.X.X.X"
}
}
}
# Create Infoblox Grid Member HA device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "INFOBLOX-SV" {
name = "TF_INFOBLOX"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "INFOBLOX-GRID-MEMBER"
self_managed = true
byol = true
package_code = "STD"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "9.0.5"
connectivity = "PRIVATE"
core_count = 8
term_length = 1
cluster_details {
cluster_name = "tf-infoblox-cluster"
node0 {
vendor_configuration {
admin_password = "xxxxxxx"
ip_address = "X.X.X.X"
subnet_mask_ip = "X.X.X.X"
gateway_ip = "X.X.X.X"
}
}
node1 {
vendor_configuration {
admin_password = "xxxxxxx"
ip_address = "X.X.X.X"
subnet_mask_ip = "X.X.X.X"
gateway_ip = "X.X.X.X"
}
}
}
}
# Create F5XC device
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "f5xc-single" {
name = "tf-f5xc"
project_id = "XXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "F5XC"
self_managed = true
byol = true
connectivity = "INTERNET-ACCESS"
package_code = "STD"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 1
account_number = data.equinix_network_account.sv.number
acl_template_id = "xxxx"
version = "9.2025.17"
interface_count = 8
core_count = 8
vendor_configuration = {"token" = "XXXXXXXXXX", "hostname" = "XXXX"}
}
# Create C8000V HA - BYOL device with cloud init rest api support
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "c8000v-byol" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
generate_default_password = true
package_code = "network-essentials"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
tier = 1
ssh_key {
username = "test"
key_name = "test-key"
}
vendor_configuration = { restApiSupportRequirement = "true" }
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
secondary_device {
name = "tf-c8000v-byol-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "csr1000v-s"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = { restApiSupportRequirement = "true" }
acl_template_id = "0bff6e05-f0e7-44cd-804a-25b92b835f8b"
}
}
# Create Aruba Edgeconnect SDWAN HA device with 2different account numbers with purchase orders
data "equinix_network_account" "sv" {
metro_code = "SV"
}
resource "equinix_network_device" "ARUBA-EDGECONNECT-AM" {
name = "TF_Aruba_Edge_Connect"
project_id = "XXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "EDGECONNECT-SDWAN"
self_managed = true
byol = true
package_code = "EC-V"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "9.4.2.3"
core_count = 2
term_length = 1
additional_bandwidth = 50
interface_count = 32
acl_template_id = "XXXXXXX"
purchase_order_number = "PO-Primary-Account-123"
vendor_configuration = {
accountKey : "xxxxx"
accountName : "xxxx"
applianceTag : "tests"
hostname : "test"
}
secondary_device {
name = "TF_CHECKPOINT"
metro_code = data.equinix_network_account.sv.metro_code
account_number = data.equinix_network_account.sv.number
purchase_order_number = "PO-Secondary-Account-123"
acl_template_id = "XXXXXXX"
notifications = ["test@eq.com"]
vendor_configuration = {
accountKey : "xxxxx"
accountName : "xxxx"
applianceTag : "test"
hostname : "test"
}
}
}
# Create C8000V HA - BYOL device with connectivity PRIVATE with DHCP IP address type
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "c8000v-byol" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
package_code = "network-essentials"
connectivity = "PRIVATE"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
tier = 1
ssh_key {
username = "test"
key_name = "test-key"
}
vendor_configuration = { restApiSupportRequirement = "true", ipAddressType = "DHCP", managementInterfaceId= "6" }
secondary_device {
name = "tf-c8000v-byol-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "c8000v-s"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = { restApiSupportRequirement = "true", ipAddressType = "DHCP", managementInterfaceId= "6" }
}
}
# Create C8000V HA - BYOL device with connectivity PRIVATE with NO IP address type
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "c8000v-byol" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
package_code = "network-essentials"
connectivity = "PRIVATE"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
tier = 1
ssh_key {
username = "test"
key_name = "test-key"
}
vendor_configuration = { restApiSupportRequirement = "true", ipAddressType = "NO_IP_ADDRESS" }
secondary_device {
name = "tf-c8000v-byol-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "csr8000v-s"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = { restApiSupportRequirement = "true", ipAddressType = "NO_IP_ADDRESS" }
}
}
# Create C8000V HA - BYOL device with connectivity PRIVATE with static IP address type
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "c8000v-byol" {
name = "tf-c8000v-byol"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "C8000V"
self_managed = true
byol = true
package_code = "network-essentials"
connectivity = "PRIVATE"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = data.equinix_network_account.sv.number
version = "17.11.01a"
interface_count = 10
core_count = 2
tier = 1
ssh_key {
username = "test"
key_name = "test-key"
}
vendor_configuration = {
restApiSupportRequirement = "true", ipAddressType = "STATIC", ipAddress = "x.x.x.x", gatewayIp = "x.x.x.x",
subnetMaskIp = "x.x.x.x", managementInterfaceId= "6"
}
secondary_device {
name = "tf-c8000v-byol-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "csr8000v-s"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = {
restApiSupportRequirement = "true", ipAddressType = "STATIC", ipAddress = "x.x.x.x", gatewayIp = "x.x.x.x",
subnetMaskIp = "x.x.x.x", managementInterfaceId= "6"
}
}
}
# Create FG VM Cluster with connectivity PRIVATE and IP Address Type as STATIC
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "FGVM-SV" {
name = "tf-fgvm-cluster-static-znpd"
metro_code = "DC"
type_code = "FG-VM"
project_id = "xxxxxxx"
self_managed = true
connectivity = "PRIVATE"
byol = true
package_code = "VM02"
notifications = ["john@equinix.com", "marry@equinix.com", "fred@equinix.com"]
term_length = 12
account_number = xxxxxx
version = "7.6.2"
interface_count = 10
core_count = 2
ssh_key {
username = "sanity1"
key_name = ""
}
cluster_details {
cluster_name = "tf-fgvm--cluster"
node0 {
vendor_configuration {
ip_address = "x.x.x.x"
subnet_mask_ip = "x.x.x.x"
gateway_ip = "x.x.x.x"
management_interface_id = "5"
hostname = "test"
ip_address_type = "STATIC"
}
}
node1 {
vendor_configuration {
ip_address = "x.x.x.x"
subnet_mask_ip = "x.x.x.x"
gateway_ip = "x.x.x.x"
management_interface_id = "5"
hostname = "test"
ip_address_type = "STATIC"
}
}
}
}
# Create Fortinet VM firewall ha device with connectivity PRIVATE and IP Address Type as DHCP
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "FTNT-FIREWALL-SV" {
name = "TF_FTNT-FIREWALL"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "FG-VM"
self_managed = true
byol = true
interface_count = 10
connectivity = "PRIVATE"
package_code = "VM02"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "7.6.3"
hostname = "test"
core_count = 2
term_length = 1
vendor_configuration = {
ipAddressType = "DHCP", managementInterfaceId= "6"
}
secondary_device {
name = "TF_FTNT-FIREWALL-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "fg-vm-znpd"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = { ipAddressType = "DHCP", managementInterfaceId= "6"}
}
}
# Create Fortinet firewall ha device with connectivity PRIVATE and IP Address Type as NO IP Address
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "FTNT-FIREWALL-SV" {
name = "TF_FTNT-FIREWALL"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
type_code = "FG-VM"
interface_count = 10
self_managed = true
byol = true
connectivity = "PRIVATE"
package_code = "VM02"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "7.6.3"
hostname = "test"
core_count = 2
term_length = 1
vendor_configuration = {
ipAddressType = "NO_IP_ADDRESS"
}
secondary_device {
name = "TF_FTNT-FIREWALL-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "fg-vm-znpd"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = {
ipAddressType = "NO_IP_ADDRESS"
}
}
}
# Create FG VM ha device with connectivity PRIVATE and IP Address Type as STATIC
data "equinix_network_account" "sv" {
metro_code = "SV"
name = "account-name"
}
resource "equinix_network_device" "FTNT-FIREWALL-SV" {
name = "TF_FTNT-FIREWALL"
project_id = "XXXXXXXXXX"
metro_code = data.equinix_network_account.sv.metro_code
interface_count = 10
type_code = "FG-VM"
self_managed = true
byol = true
connectivity = "PRIVATE"
package_code = "VM02"
notifications = ["test@eq.com"]
account_number = data.equinix_network_account.sv.number
version = "7.6.3"
hostname = "test"
core_count = 2
term_length = 1
vendor_configuration = {
gatewayIp = "X.X.X.X"
ipAddress = "X.X.X.X"
ipAddressType = "STATIC"
subnetMaskIp = "x.x.x.x"
managementInterfaceId = "6"
}
secondary_device {
name = "TF_FTNT-FIREWALL-secondary"
metro_code = data.equinix_network_account.sv.metro_code
hostname = "fg-vm-znpd"
notifications = ["john@equinix.com", "marry@equinix.com"]
account_number = data.equinix_network_account.sv.number
vendor_configuration = {
gatewayIp = "X.X.X.X"
ipAddress = "X.X.X.X"
ipAddressType = "STATIC"
subnetMaskIp = "X.X.X.X"
managementInterfaceId = "6"
}
}
}
Argument Reference
The following arguments are supported:
name- (Required) Device name.type_code- (Required) Device type code.metro_code- (Required) Device location metro code.hostname- (Optional) Device hostname prefix.package_code- (Required) Device software package code.version- (Required) Device software software version.core_count- (Required) Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.)tier- (Optional, conflicts withthroughput,throughput_unit) Select bandwidth tier for your own license, i.e.,0or1or2or3. Tiers applicable only for C8000V Autonomous or C8000V SDWAN (controller) device types. If not provided, tier is defaulted to '2'.term_length- (Required) Device term length.self_managed- (Optional) Boolean value that determines device management mode, i.e.,self-managedorEquinix-managed(default).byol- (Optional) Boolean value that determines device licensing mode, i.e.,bring your own licenseorsubscription(default).license_token- (Optional, conflicts withlicense_file) License Token applicable for some device types in BYOL licensing mode.license_file- (Optional) Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode.license_file_id- (Optional, conflicts withlicense_file) Identifier of a license file that will be applied on the device.cloud_init_file_id- (Optional) Identifier of a cloud init file that will be applied on the device.throughput- (Optional) Device license throughput.throughput_unit- (Optional) License throughput unit. One ofMbpsorGbps.account_number- (Required) Billing account number for a device.notifications- (Required) List of email addresses that will receive device status notifications.purchase_order_number- (Optional) Purchase order number associated with a device order. For billing accounts that require a purchase order, this field is required.order_reference- (Optional) Name/number used to identify device order on the invoice.acl_template_id- (Optional) Identifier of a WAN interface ACL template that will be applied on the device.mgmt_acl_template_uuid- (Optional) Identifier of an MGMT interface ACL template that will be applied on the device.additional_bandwidth- (Optional) Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps).interface_count- (Optional) Number of network interfaces on a device. If not specified, default number for a given device type will be used.wan_interafce_id- (Optional) Specify the WAN/SSH interface id. If not specified, default WAN/SSH interface for a given device type will be used.vendor_configuration- (Optional) Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress, provisioningKey, ipAddress(applicable for infoblox only), subnetMaskIp(applicable for infoblox only), gatewayIp(applicable for infoblox only))ssh-key- (Optional) Definition of SSH key that will be provisioned on a device (max one key). See SSH Key below for more details.secondary_device- (Optional) Definition of secondary device for redundant device configurations. See Secondary Device below for more details.cluster_details- (Optional) An object that has the cluster details. See Cluster Details below for more details.connectivity- (Optional) Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESSproject_id- (Optional) Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization.diverse_device_id- (Optional) Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices.generate_default_password- (Optional) Boolean value that determines to create device with or without default password. Use this field to let Equinix know if you want your new device to be create with default admin password. This field is only meaningful for C8000V Autonomous(single/ha) and Fortinet Firewall devices(single/ha/cluster). If not specified, by default device is created with admin password.
Secondary Device
-> NOTE: Network Edge provides different High Availability (HA) options. By defining a secondary_device block, terraform will deploy Redundant Devices, useful for customers that require two actively forwarding data planes (Active/Active) on separate hardware stacks. See Architecting for Resiliency documentation to know more about the fault-tolerant solutions that you can achieve.
The secondary_device block supports the following arguments:
name- (Required) Secondary device name.metro_code- (Required) Metro location of a secondary device.hostname- (Optional) Secondary device hostname.license_token- (Optional, conflicts withlicense_file) License Token can be provided for some device types o the device.license_file- (Optional) Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode.license_file_id- (Optional, conflicts withlicense_file) Identifier of a license file that will be applied on a secondary device.cloud_init_file_id- (Optional) Identifier of a cloud init file that will be applied on a secondary device.account_number- (Required) Billing account number for secondary device.notifications- (Required) List of email addresses that will receive notifications about secondary device.additional_bandwidth- (Optional) Additional Internet bandwidth, in Mbps, for a secondary device.vendor_configuration- (Optional) Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values arecontroller1,activationKey,managementType,siteId,systemIpAddress,privateAddress,privateCidrMask,privateGateway,licenseKey,licenseId,panoramaAuthKey,panoramaIpAddress,ipAddress,subnetMaskIp,gatewayIp.acl_template_id- (Optional) Identifier of a WAN interface ACL template that will be applied on a secondary device.mgmt_acl_template_uuid- (Optional) Identifier of an MGMT interface ACL template that will be applied on a secondary device.ssh-key- (Optional) Up to one definition of SSH key that will be provisioned on a secondary device.
SSH Key
The ssh_key block supports the following arguments:
username- (Required) username associated with given key.name- (Optional) reference by name to previously provisioned public SSH key.
Cluster Details
-> NOTE: Network Edge provides different High Availability (HA) options. By defining a cluster_details block, terraform will deploy a Device Clustering. This option, based on vendor-specific features, allows customers to deploy more advanced resilient configurations than secondary_device. See Network Edge HA Options documentation to know which vendors support clustered devices. See Architecting for Resiliency documentation to know more about the fault-tolerant solutions that you can achieve.
The cluster_details block supports the following arguments:
cluster_name- (Required) The name of the cluster devicenode0- (Required) An object that hasnode0configuration. See Cluster Details - Nodes below for more details.node1- (Required) An object that hasnode1configuration. See Cluster Details - Nodes below for more details.
Cluster Details - Nodes
The node0 and node1 blocks supports the following arguments:
vendor_configuration- (Optional) An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details.license_file_id- (Optional) License file id. This is necessary for Fortinet and Juniper clusters.license_token- (Optional) License token. This is necessary for Palo Alto clusters.
Cluster Details - Nodes - Vendor Configuration
The vendor_configuration block supports the following arguments:
hostname- (Optional) Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters.admin_password- (Optional) The administrative password of the device. You can use it to log in to the console. This field is not available for all device types.controller1- (Optional) System IP Address. Mandatory for the Fortinet SDWAN cluster device.activation_key- (Optional) Activation key. This is required for Velocloud clusters.controller_fqdn- (Optional) Controller fqdn. This is required for Velocloud clusters.root_password- (Optional) The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster.panorama_ip_address- (Optional) Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server.panorama_auth_key- (Optional) Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server.provisioning_key- (Optional) Provisioning Key. This field is relevant only for the ZSCALER APPC and ZSCALER PSE devices.ip_address- (Optional) IP Address. This field is relevant only for the Infoblox devices.subnet_mask_ip- (Optional) Subnet Mask IP. This field is relevant only for the Infoblox devices.gateway_ip- (Optional) Gateway IP. This field is relevant only for the Infoblox devices.
Attributes Reference
In addition to all arguments above, the following attributes are exported:
uuid- Device unique identifier.status- Device provisioning status. Possible values areINITIALIZING,PROVISIONING,WAITING_FOR_PRIMARY,WAITING_FOR_SECONDARY,WAITING_FOR_REPLICA_CLUSTER_NODES,CLUSTER_SETUP_IN_PROGRESS,FAILED,PROVISIONED,DEPROVISIONING,DEPROVISIONED,RESOURCE_UPGRADE_IN_PROGRESS,RESOURCE_UPGRADE_FAILED.license_status- Device license registration status. Possible values areAPPLYING_LICENSE,REGISTERED,APPLIED,WAITING_FOR_CLUSTER_SETUP,REGISTRATION_FAILED.license_file_id- Unique identifier of applied license file.ibx- Device location Equinix Business Exchange name.region- Device location region.acl_template_id- Unique identifier of applied ACL template.ssh_ip_address- IP address of SSH enabled interface on the device.ssh_ip_fqdn- FQDN of SSH enabled interface on the device.redundancy_type- Device redundancy type applicable for HA devices, either primary or secondary.redundant_id- Unique identifier for a redundant device applicable for HA devices.interface- List of device interfaces. See Interface Attribute below for more details.asn- (Autonomous System Number) Unique identifier for a network on the internet.zone_code- Device location zone code.cluster_id- The ID of the cluster.num_of_nodes- The number of nodes in the cluster.diverse_device_name- Name of the device with diverse device UUID. This field is returned in device details if the device is created by passing diverse_device_id.
Interface Attribute
Each interface attribute has below fields:
id- interface identifier.name- interface name.status- interface status. One ofAVAILABLE,RESERVED,ASSIGNED.operational_status- interface operational status. One ofup,down.mac_address- interface MAC address.ip_address- interface IP address.assigned_type- interface management type (Equinix Managed or empty).type- interface type.
Timeouts
This resource provides the following Timeouts configuration options:
- create - Default is 90 minutes
- update - Default is 90 minutes
- delete - Default is 30 minutes
Import
This resource can be imported using an existing ID:
terraform import equinix_network_device.example {existing_id}
The license_token, mgmt_acl_template_uuid and cloud_init_file_id fields can not be imported.