Skip to content

Setup Terraform#

Terraform can manage resources in your SCO project using the Kubernetes provider. The same project kubeconfig used by kubectl provides Terraform with access.


Prerequisites#


Step 1: Configure the Provider#

terraform {
  required_providers {
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = "~> 2.0"
    }
  }
}

provider "kubernetes" {
  config_path    = pathexpand("~/.kube/my-project.yaml")
  config_context = "my-project"
}

Or use the KUBECONFIG environment variable:

export KUBECONFIG=~/.kube/my-project.yaml
provider "kubernetes" {}

Step 2: Provision a Service#

Use kubernetes_manifest to apply SCO claims:

resource "kubernetes_manifest" "dev_vm" {
  manifest = {
    apiVersion = "compute.cloud.stakater.com/v1"
    kind       = "VirtualMachine"
    metadata = {
      name = "dev-vm"
    }
    spec = {
      parameters = {
        flavour      = "rhel9"
        instanceType = "o1.medium"
        connection   = "private"
        sshPublicKey = var.ssh_public_key
      }
    }
  }

  timeouts {
    create = "10m"
    delete = "10m"
  }
}

Apply:

terraform init
terraform plan
terraform apply

Step 3: Read Status#

data "kubernetes_resource" "dev_vm" {
  api_version = "compute.cloud.stakater.com/v1"
  kind        = "VirtualMachine"
  metadata {
    name = "dev-vm"
  }
}

output "vm_status" {
  value = data.kubernetes_resource.dev_vm.object.status
}

What's Next?#