A quick way to create an instance on OpenStack is to use Terraform, an open-source Infrastructure-as-Code (IaC) tool developed by HashiCorp.
Here is my environment, quickly drawn 😉 :
This instance will be provisioned with Linux CirrOS.
The Terraform plan that i used :
# Creating an SSH key pair resource resource "openstack_compute_keypair_v2" "MaCle2" { provider = openstack.hello # Provider name declared in provider.tf name = "MaCle2" # Name of the SSH key to use for creation public_key = file("~/.ssh/id_rsa.pub") # Path to your previously generated SSH key } # Creating the instance resource "openstack_compute_instance_v2" "create_an_instance" { name = "MonInstance2" #Instance name provider = openstack.hello # Provider name image_name = "cirros-0.5.2-x86_64-disk" # Image name flavor_name = "m1.nano" # Instance type name key_pair = openstack_compute_keypair_v2.MaCle2.name security_groups = ["default"] network { name = "Shared" # Adds the network component to reach your instance } }
The provider to use to interact with OpenStack is terraform-provider-openstack :
# Define providers and set versions terraform { required_version = ">= 0.14.0" required_providers { openstack = { source = "terraform-provider-openstack/openstack" version = "~> 1.42.0" } } } # Configure the OpenStack provider provider "openstack" { auth_url = "http://10.0.2.15/identity" # Authentication URL domain_name = "default" alias = "hello" }
The documentation for terraform-provider-openstack can be found here :
https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs
Commands to run :
1) terraform validate : to validate/verify the configuration
2) terraform plan : to preview the changes
3) terraform apply : to actually apply/run the actions
4) terraform destroy : to destroy everything and return to the initial state. In this case, that means both the instance and the key will be deleted.
This is part of the output after running the “terraform apply” instruction :
Of course, the OpenStack environment variables need to be set first :
source admin-openrc.sh