This commit is contained in:
Mike McFetridge
2026-07-20 09:23:17 -04:00
parent c1315882da
commit 72272e4006
3179 changed files with 562960 additions and 14 deletions
+63
View File
@@ -0,0 +1,63 @@
data "netbox_cluster" "<< resource_name >>_cluster" {
name = "<< cluster_name >>"
}
<%- if site_name %>
data "netbox_site" "<< resource_name >>_site" {
name = "<< site_name >>"
}
<%- endif %>
<%- if device_name %>
data "netbox_devices" "<< resource_name >>_device_lookup" {
limit = 1
filter {
name = "name"
value = "<< device_name >>"
}
}
<%- endif %>
resource "netbox_virtual_machine" "<< resource_name >>" {
name = "<< vm_name >>"
cluster_id = data.netbox_cluster.<< resource_name >>_cluster.id
<%- if site_name %>
site_id = data.netbox_site.<< resource_name >>_site.id
<%- endif %>
status = "<< status >>"
<%- if device_name %>
device_id = data.netbox_devices.<< resource_name >>_device_lookup.devices[0].device_id
<%- endif %>
<%- if resources_enabled %>
vcpus = << vcpus >>
memory = << memory_mb >>
disk = << disk_gb >>
<%- endif %>
<%- if description_enabled %>
comments = "<< description_text >>"
<%- endif %>
}
<%- if ipam_enabled %>
resource "netbox_interface" "<< resource_name >>_interface" {
name = "<< interface_name >>"
virtual_machine_id = netbox_virtual_machine.<< resource_name >>.id
}
resource "netbox_ip_address" "<< resource_name >>_ip" {
ip_address = "<< primary_ip4 >>"
status = "active"
<%- if dns_name %>
dns_name = "<< dns_name >>"
<%- endif %>
interface_id = netbox_interface.<< resource_name >>_interface.id
object_type = "virtualization.vminterface"
}
resource "netbox_primary_ip" "<< resource_name >>_primary_ip" {
ip_address_id = netbox_ip_address.<< resource_name >>_ip.id
virtual_machine_id = netbox_virtual_machine.<< resource_name >>.id
}
<%- endif %>
+222
View File
@@ -0,0 +1,222 @@
{
"slug": "netbox-vm",
"kind": "terraform",
"metadata": {
"name": "NetBox Virtual Machine",
"description": "Registers a virtual machine in NetBox with cluster, site, and host device associations. Defines VM metadata including resource allocation and optional IPAM integration.",
"tags": [],
"icon": {
"provider": "selfhst",
"id": "netbox"
},
"draft": false,
"version": {
"name": "5.0.1",
"source_dep_name": "manual/netbox-vm"
}
},
"variables": [
{
"title": "General",
"name": "general",
"items": [
{
"name": "resource_name",
"type": "str",
"title": "Resource Name",
"required": false,
"default": "vm",
"config": {
"placeholder": "vm"
}
}
]
},
{
"title": "Virtual Machine Configuration",
"name": "vm",
"items": [
{
"name": "vm_name",
"type": "str",
"title": "Virtual machine name",
"required": true,
"config": {
"placeholder": "servername"
}
},
{
"name": "cluster_name",
"type": "str",
"title": "Cluster name",
"required": true,
"default": "clustername",
"description": "Existing NetBox cluster name to resolve via data source.",
"config": {
"placeholder": "clustername"
}
},
{
"name": "status",
"type": "enum",
"title": "VM status",
"required": false,
"default": "active",
"config": {
"options": [
"active",
"planned",
"staged",
"offline",
"decommissioning"
]
}
}
]
},
{
"title": "Site Assignment",
"name": "site",
"items": [
{
"name": "site_name",
"type": "str",
"title": "Site Name",
"required": false,
"description": "Existing NetBox site name to resolve via data source (leave empty to skip)"
}
]
},
{
"title": "Host Device",
"name": "device",
"items": [
{
"name": "device_name",
"type": "str",
"title": "Device Name",
"required": false,
"description": "Existing NetBox device name for host assignment (leave empty to skip)"
}
]
},
{
"title": "IP Address Management",
"name": "ipam",
"items": [
{
"name": "ipam_enabled",
"type": "bool",
"title": "IPAM",
"required": false,
"default": false
},
{
"name": "interface_name",
"type": "str",
"title": "Network interface name",
"required": true,
"default": "eth0",
"config": {
"placeholder": "eth0"
}
},
{
"name": "primary_ip4",
"type": "str",
"title": "Primary IPv4",
"required": true,
"description": "Primary IPv4 address with CIDR notation"
},
{
"name": "dns_name",
"type": "str",
"title": "DNS Name",
"required": false,
"description": "DNS name for the IP address (leave empty to skip)"
}
]
},
{
"title": "Resource Allocation",
"name": "resources",
"items": [
{
"name": "resources_enabled",
"type": "bool",
"title": "Resources",
"required": false,
"default": false
},
{
"name": "vcpus",
"type": "int",
"title": "vCPUs",
"required": false,
"default": 2,
"config": {
"slider": true,
"min": 1,
"max": 24,
"step": 1,
"placeholder": "2",
"unit": "vCPU"
}
},
{
"name": "memory_mb",
"type": "int",
"title": "Memory",
"required": false,
"default": 4096,
"config": {
"slider": true,
"min": 512,
"max": 24576,
"step": 512,
"placeholder": "4096",
"unit": "MB"
}
},
{
"name": "disk_gb",
"type": "int",
"title": "Disk Size",
"required": false,
"default": 50,
"config": {
"slider": true,
"min": 10,
"max": 1000,
"step": 10,
"placeholder": "50",
"unit": "GB"
}
}
]
},
{
"title": "Description",
"name": "description",
"items": [
{
"name": "description_enabled",
"type": "bool",
"title": "Description",
"required": false,
"default": false
},
{
"name": "description_text",
"type": "str",
"title": "VM description",
"required": false,
"config": {
"placeholder": "Add a description here...",
"textarea": true
}
}
]
}
]
}