Skip to content

Instantly share code, notes, and snippets.

@kvaps
Last active May 14, 2020 12:00
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save kvaps/db5548d208a0817337e95f5884c507e8 to your computer and use it in GitHub Desktop.
OpenNebula Terraform example from @azazell_o https://t.me/opennebula/11606
##################################################################################
# PROVIDERS
##################################################################################
provider "opennebula" {
endpoint = "${var.opennebula_endpoint}"
username = "${var.opennebula_user}"
password = "${var.opennebula_password}"
}
##################################################################################
# RESOURCES
##################################################################################
resource "opennebula_image" "image-os" {
name = "${var.env_name}-${count.index}-disk-os"
permissions = "600"
datastore_id = "${var.opennebula_datastore_id}"
persistent = false
clone_from_image = "centos7-contextualized_h"
count = "${var.vm_count}"
timeouts = "10m"
}
resource "opennebula_image" "image-disk-30" {
name = "${var.env_name}-${count.index}-disk-30"
permissions = "600"
datastore_id = "${var.opennebula_datastore_id}"
persistent = false
clone_from_image = "image-template-30_h"
count = "${var.vm_count}"
timeouts = "10m"
}
resource "opennebula_image" "image-disk-50" {
name = "${var.env_name}-${count.index}-disk-50"
permissions = "600"
datastore_id = "${var.opennebula_datastore_id}"
persistent = false
clone_from_image = "image-template-50_h"
count = "${var.vm_count}"
timeouts = "10m"
}
resource "opennebula_template" "template" {
name = "${var.env_name}-template-${count.index}"
description = <<EOF
CONTEXT = [
NETWORK = "YES" ]
CPU = "${var.vm_cpu}"
CPU_MODEL = [
MODEL = "host-passthrough" ]
DISK = [
DEV_PREFIX = "sd",
DISCARD = "unmap",
DRIVER = "raw",
FORMAT = "raw",
IO = "threads",
READONLY = "no",
IMAGE = "${element(opennebula_image.image-os.*.name, count.index)}",
IMAGE_UNAME = "${var.opennebula_user}",
TARGET = "sda" ]
DISK = [
DEV_PREFIX = "sd",
DISCARD = "unmap",
DRIVER = "raw",
FORMAT = "raw",
IO = "threads",
READONLY = "no",
IMAGE = "${element(opennebula_image.image-disk-30.*.name, count.index)}",
IMAGE_UNAME = "${var.opennebula_user}",
TARGET = "sdb" ]
DISK = [
DEV_PREFIX = "sd",
DISCARD = "unmap",
DRIVER = "raw",
FORMAT = "raw",
IO = "threads",
READONLY = "no",
IMAGE = "${element(opennebula_image.image-disk-50.*.name, count.index)}",
IMAGE_UNAME = "${var.opennebula_user}",
TARGET = "sdc" ]
FEATURES = [
ACPI = "yes",
APIC = "yes",
GUEST_AGENT = "yes",
HYPERV = "no",
PAE = "no",
VIRTIO_SCSI_QUEUES = "${var.vm_scsi_q}" ]
GRAPHICS = [
LISTEN = "0.0.0.0",
TYPE = "VNC" ]
HYPERVISOR = "kvm"
INPUT = [
BUS = "usb",
TYPE = "mouse" ]
INPUT = [
BUS = "usb",
TYPE = "tablet" ]
INPUTS_ORDER = ""
LOGO = "images/logos/redhat.png"
MEMORY = "${var.vm_ram}"
MEMORY_UNIT_COST = "GB"
NIC = [
NETWORK = "main",
NETWORK_UNAME = "oneadmin" ]
OS = [
ARCH = "x86_64",
BOOT = "disk0" ]
SCHED_DS_REQUIREMENTS = "ID=\"${var.opennebula_system_datastore_id}\""
SCHED_REQUIREMENTS = "CLUSTER_ID=\"${var.opennebula_cluster_id}\""
VCPU = "${var.vm_vcpu}"
EOF
permissions = "600"
count = "${var.vm_count}"
timeouts = "10m"
}
resource "opennebula_vm" "vm" {
template_id = "${element(opennebula_template.template.*.id, count.index)}"
name = "${var.vm_count == 1 ? var.env_name : format("%s-%d", var.env_name, count.index)}"
permissions = "600"
count = "${var.vm_count}"
timeouts = "10m"
}
##################################################################################
# OUTPUT
##################################################################################
output "vm_ip" {
value = "${join(",",opennebula_vm.vm.*.ip)}"
}
output "vm_name" {
value = "${join(",",opennebula_vm.vm.*.name)}"
}
##################################################################################
# VARIABLES
##################################################################################
variable "opennebula_user" {}
variable "opennebula_password" {}
variable "opennebula_endpoint" {}
variable "opennebula_datastore_id" {}
variable "opennebula_system_datastore_id" {}
variable "opennebula_cluster_id" {}
variable "env_name" {}
variable "vm_cpu" {
default = "1"
}
variable "vm_vcpu" {
default = "1"
}
variable "vm_scsi_q" {
default = "1"
}
variable "vm_count" {
default = "1"
}
variable "vm_ram" {
default = "2048"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment