This page describes how to create a new VM by using Terraform or OpenTofu.


Pre-requisites

The following pre-requisites must be satisfied.


There is a set of mandatory inputs required to create a new VM which are:


The available selectable options could also be checked using the Opnstack CLI commands :

$ openstack keypair list
 
$ openstack image list
 
$ openstack flavor list 
 
$ openstack network list


Write configuration files

Create a directory for your configuration and change directory into it:

$ mkdir example-create-vm

$ cd example-create-vm


Create the main configuration file to define the infrastructure:

$ touch main.tf


Open the main.tf file in a text editor and fill it as needed like in the following example :

# Define required providers
terraform {
required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.53.0"
    }
  }
}

# Configure the OpenStack Provider
provider "openstack" {
  # ...
}


resource "openstack_compute_instance_v2" "server-name" {
  name            = "server-name"
  image_name      = "image-name"
  flavor_name     = "flavor-name"
  key_pair        = "key-name"
  security_groups = ["secgroup-name-1", "secgroup-name-2", ...]

  network {
    name = "network-name"
  }
}

Replace the following fields as desired:

  • server-name
  • image-name
  • flavor-name
  • key-name
  • secgroup-name-1 , secgroup-name-2
  • network-name


For instance for ECMWF can be :

resource "openstack_compute_instance_v2" "test-server" {
  name            = "test-server"
  image_name      = "Rocky-9.4-20240717094419"
  flavor_name     = "2cpu-2gbmem-30gbdisk"
  key_pair        = "mykey"
  security_groups = ["default", "ssh"]

  network {
    name = "private-cci1-ewcloud-ms-nmhs-project"
  }
}


Run Terraform or OpenTofu to create a VM

Initialize the directory :

Terraform

$ terraform init


OpenTofu

$ tofu init




Review the required changes: 

$ terraform plan


Apply the changes to create the VM :

Terraform

$ terraform apply


OpenTofu

$ tofu apply




Status can be then seen via:

Terraform

$ terraform show


OpenTofu

$ tofu show



Destroy the VM

The created VM can be then destroyed by simply running:

Terraform

$ terraform destroy


OpenTofu

$ tofu destroy