This message was deleted.
# harvester
a
This message was deleted.
b
Yes, you can use variables in harvester terraform, just change the following things •
xenorchestra_cloud_config
->
harvester_cloudinit_secret
template
->
network_data
👍 1
Provide an example here in case it helps.
Copy code
|--- terraform-harvester-example/
    |--- provider.tf
    |--- kubeconfig.yaml
    |--- cloud_config.tpl
    |--- network_data.tpl
provider.tf
Copy code
terraform {
  required_providers {
    harvester = {
      source = "harvester/harvester"
    }
  }
}

provider "harvester" {
  # Configuration options
  kubeconfig = "${path.root}/kubeconfig.yaml"
}

resource "harvester_image" "ubuntu" {
  name         = "ubuntu"
  display_name = "ubuntu"
  namespace    = "default"
  source_type  = "download"
  url          = "<https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img>"
}

resource "harvester_network" "mgmt-vlan1" {
  name                 = "mgmt-vlan1"
  namespace            = "default"
  vlan_id              = 1
  route_mode           = "auto"
  route_dhcp_server_ip = ""
  cluster_network_name = "mgmt"
}

variable "test-vm-ip" {
  type    = string
  default = "192.168.100.11/24"
}

resource "harvester_cloudinit_secret" "cloud-config-default" {
  name      = "cloud-config-default"
  namespace = "default"
  user_data = templatefile("${path.root}/cloud_config.tpl", {})
  network_data = templatefile("${path.root}/network_data.tpl", {
    ip = var.test-vm-ip
  })
}

resource "harvester_virtualmachine" "test-vm" {
  depends_on = [
    harvester_image.ubuntu,
    harvester_network.mgmt-vlan1
  ]

  name      = "test-vm"
  namespace = "default"
  cpu       = 2
  memory    = "2Gi"

  cloudinit {
    user_data_secret_name = "cloud-config-default"
    network_data_secret_name = "cloud-config-default"
  }

  network_interface {
    name         = "test-nic"
    network_name = "default/mgmt-vlan1"
  }

  disk {
    name        = "test-disk"
    size        = "10Gi"
    image       = "ubuntu"
    auto_delete = true
  }
}
cloud_config.tpl
Copy code
#cloud-config
package_update: true
packages:
  - qemu-guest-agent
runcmd:
  - - systemctl
    - enable
    - --now
    - qemu-guest-agent.service
password: password
chpasswd: { expire: False }
ssh_pwauth: True
network_data.tpl
Copy code
network:
  version: 2
  ethernets:
    enp1s0:
      dhcp4: false
      addresses:
      - ${ip}
      routes:
      - to: 0.0.0.0/0
        via: 192.168.100.1
        on-link: true
        type: unicast
        metric: 100
      mtu: 1500
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.4.4
👍 1