net-lab: add hosts and category iteration logic
* add a category variable * add multiple different hosts and enable specifying base image per vm or per category * add comments to explain the code * rename the project * rename the base domain
This commit is contained in:
parent
9f68d39731
commit
adfdfd3726
31
vms/main.tf
31
vms/main.tf
@ -48,23 +48,32 @@ variable "sourceimage" {
|
|||||||
type = string
|
type = string
|
||||||
default = "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2"
|
default = "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2"
|
||||||
}
|
}
|
||||||
|
variable "category" {
|
||||||
|
type = string
|
||||||
|
default = "host"
|
||||||
|
}
|
||||||
|
|
||||||
# base OS image
|
# base OS image
|
||||||
resource "libvirt_volume" "baseosimage" {
|
resource "libvirt_volume" "baseosimage" {
|
||||||
name = "baseosimage_${var.projectname}"
|
for_each = var.hosts
|
||||||
source = var.sourceimage
|
# if desired, base image could be specified for a category of devices sharing
|
||||||
|
# the base image using name = "baseosimage_${var.projectname}.${each.value.category}"
|
||||||
|
name = "baseosimage_${var.projectname}.${each.value.name}"
|
||||||
|
source = each.value.sourceimage
|
||||||
pool = var.baseimagediskpool
|
pool = var.baseimagediskpool
|
||||||
}
|
}
|
||||||
|
|
||||||
# vdisk creation
|
# vdisk creation
|
||||||
# vdisks are cloned from the base image for each of the "hosts"
|
# vdisks are cloned from the base image for each of the "hosts"
|
||||||
resource "libvirt_volume" "qcow2_volume" {
|
resource "libvirt_volume" "qcow2_volume" {
|
||||||
for_each = var.hosts
|
for_each = var.hosts
|
||||||
name = "${each.value.name}.qcow2"
|
name = "${each.value.name}.qcow2"
|
||||||
base_volume_id = libvirt_volume.baseosimage.id
|
# let each baseos image have a name after the vm using it
|
||||||
|
base_volume_id = libvirt_volume.baseosimage[each.value.name].id
|
||||||
pool = each.value.diskpool
|
pool = each.value.diskpool
|
||||||
format = "qcow2"
|
# currently a hard constraint to only use qcow2, could become settable
|
||||||
size = each.value.disksize
|
format = "qcow2"
|
||||||
|
size = each.value.disksize
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use cloudinit config file
|
# Use cloudinit config file
|
||||||
@ -85,8 +94,8 @@ resource "libvirt_cloudinit_disk" "commoninit" {
|
|||||||
user_data = data.template_file.user_data[each.key].rendered
|
user_data = data.template_file.user_data[each.key].rendered
|
||||||
}
|
}
|
||||||
|
|
||||||
# default guest
|
# net-lab domains loop
|
||||||
resource "libvirt_domain" "default_guest" {
|
resource "libvirt_domain" "net-lab" {
|
||||||
for_each = var.hosts
|
for_each = var.hosts
|
||||||
name = each.value.name
|
name = each.value.name
|
||||||
vcpu = each.value.vcpu
|
vcpu = each.value.vcpu
|
||||||
@ -103,12 +112,12 @@ resource "libvirt_domain" "default_guest" {
|
|||||||
volume_id = element(libvirt_volume.qcow2_volume[each.key].*.id, 1)
|
volume_id = element(libvirt_volume.qcow2_volume[each.key].*.id, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
cloudinit = libvirt_cloudinit_disk.commoninit[each.key].id
|
cloudinit = libvirt_cloudinit_disk.commoninit[each.value.name].id
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
output "hostnames" {
|
output "hostnames" {
|
||||||
value = [libvirt_domain.default_guest.*]
|
value = [libvirt_domain.net-lab.*]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
# project name
|
# project name
|
||||||
projectname = "vms"
|
projectname = "net-lab-infra"
|
||||||
|
|
||||||
# OS image
|
# OS image
|
||||||
#sourceimage = "https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.3.2011-20201204.2.x86_64.qcow2"
|
# sourceimage = "$HOME/.images/CentOS-8-GenericCloud-8.3.2011-20201204.2.x86_64.qcow2"
|
||||||
|
# sourceimage = "$HOME/.images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2"
|
||||||
sourceimage = "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2"
|
sourceimage = "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2"
|
||||||
|
|
||||||
# the base image is the source image for all VMs created from it
|
# the base image is the source image for all VMs created from it
|
||||||
@ -18,21 +19,55 @@ networkname = "default" # default==NAT
|
|||||||
# RAM in bytes
|
# RAM in bytes
|
||||||
# disk size in bytes (disk size must be greater than source image virtual size)
|
# disk size in bytes (disk size must be greater than source image virtual size)
|
||||||
hosts = {
|
hosts = {
|
||||||
"victim" = {
|
"h_victim" = {
|
||||||
name = "victim",
|
name = "h_victim",
|
||||||
vcpu = 1,
|
vcpu = 1,
|
||||||
memory = "512",
|
memory = "768",
|
||||||
diskpool = "default",
|
diskpool = "default",
|
||||||
disksize = "4300000000",
|
disksize = "11000000000",
|
||||||
mac = "00:00:00:13:37:22",
|
mac = "00:00:00:13:37:22",
|
||||||
|
sourceimage = "https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.3.2011-20201204.2.x86_64.qcow2",
|
||||||
|
category = "host-victim",
|
||||||
},
|
},
|
||||||
"attacker" = {
|
"h_attacker" = {
|
||||||
name = "attacker",
|
name = "h_attacker",
|
||||||
vcpu = 1,
|
vcpu = 1,
|
||||||
memory = "1024",
|
memory = "1024",
|
||||||
diskpool = "default",
|
diskpool = "default",
|
||||||
disksize = "4300000000",
|
disksize = "5370000000",
|
||||||
mac = "00:00:00:13:37:23",
|
mac = "00:00:00:13:37:23",
|
||||||
|
sourceimage = "https://download.fedoraproject.org/pub/fedora/linux/releases/34/Cloud/x86_64/images/Fedora-Cloud-Base-34-1.2.x86_64.qcow2",
|
||||||
|
category = "host-attacker",
|
||||||
|
},
|
||||||
|
"r_edge" = {
|
||||||
|
name = "r_edge",
|
||||||
|
vcpu = 1,
|
||||||
|
memory = "768",
|
||||||
|
diskpool = "default",
|
||||||
|
disksize = "4300000000",
|
||||||
|
mac = "00:00:00:13:37:24",
|
||||||
|
sourceimage = "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2",
|
||||||
|
category = "router",
|
||||||
|
},
|
||||||
|
"r_upstream" = {
|
||||||
|
name = "r_upstream",
|
||||||
|
vcpu = 1,
|
||||||
|
memory = "768",
|
||||||
|
diskpool = "default",
|
||||||
|
disksize = "4300000000",
|
||||||
|
mac = "00:00:00:13:37:25",
|
||||||
|
sourceimage = "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2",
|
||||||
|
category = "router",
|
||||||
|
},
|
||||||
|
"h_defender" = {
|
||||||
|
name = "h_defender",
|
||||||
|
vcpu = 1,
|
||||||
|
memory = "1024",
|
||||||
|
diskpool = "default",
|
||||||
|
disksize = "5370000000",
|
||||||
|
mac = "00:00:00:13:37:26",
|
||||||
|
sourceimage = "https://download.fedoraproject.org/pub/fedora/linux/releases/34/Cloud/x86_64/images/Fedora-Cloud-Base-34-1.2.x86_64.qcow2",
|
||||||
|
category = "host-defender",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user