ionos-cloud / terraform-provider-ionoscloud

The IonosCloud Terraform provider gives the ability to deploy and configure resources using the IonosCloud APIs.
Mozilla Public License 2.0
35 stars 23 forks source link

Terraform Provider seems to ignore user-data #687

Open CND-MW opened 1 week ago

CND-MW commented 1 week ago

Description

I am trying to inject commands for cloud-init via ‘user-data’ into a cubeserver. I have used the commands as heredoc and as base64 encoded string. Unfortunately, the content is not executed in either case. It is independent of the image used (I have tried debian:11, debian:12 and ubuntu:24.04). If you run the script via the data centre, it works perfectly. Here is the configuration (the script is just an example without much sense):

resource "ionoscloud_cube_server" "server" {
  datacenter_id     = ionoscloud_datacenter.dc.id
  name              = "Server"
  availability_zone = "AUTO"
  template_uuid     = data.ionoscloud_template.template.id
  image_name        = data.ionoscloud_image.image.id
  ssh_key_path      = [ "/root/.ssh/id_ionos_ecdsa.pub" ]
  volume {
    name            = "Vol-Server"
    disk_type       = "DAS"
    user_data       = "IyEvYmluL2Jhc2gKZWNobyAiSGVsbG8gd29ybGQhIiA+L3Vzci9sb2NhbC9zcmMvbW90ZApjaG1vZCA2NDQgL3Vzci9sb2NhbC9zcmMvbW90ZAo="
  }
  nic {
    lan             = ionoscloud_lan.wan.id
    name            = "Nic WAN"
    dhcp            = true
    ips             = [ "${var.public-ip}" ]
    firewall_active = false
  }
}

Expected behavior

a file, e.g. in /usr/local/src

Environment

Terraform version:

Terraform v1.9.7
on linux_amd64

Provider version:

6.5.7

OS:

debian 11.11

Configuration Files

see above

How to Reproduce

sh> terraform apply

Error and Debug Output

  sh> cat cloud-init.log | grep user-data
  2024-10-07 11:35:30,676 - util.py[DEBUG]: Reading from /var/lib/cloud/seed/nocloud/user-data (quiet=False)
  2024-10-07 11:35:30,676 - util.py[DEBUG]: Read 147 bytes from /var/lib/cloud/seed/nocloud/user-data
  2024-10-07 11:35:31,294 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/nocloud/user-data.txt - wb: [600] 147 bytes
  2024-10-07 11:35:31,296 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/nocloud/user-data.txt.i - wb: [600] 453 bytes
  sh> cat cloud-init.log | grep user-data
  2024-10-07 10:48:50,801 - util.py[DEBUG]: Reading from /var/lib/cloud/seed/nocloud/user-data (quiet=False)
  2024-10-07 10:48:50,801 - util.py[DEBUG]: Read 0 bytes from /var/lib/cloud/seed/nocloud/user-data
  2024-10-07 10:48:51,356 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/nocloud/user-data.txt - wb: [600] 0 bytes
  2024-10-07 10:48:51,358 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/nocloud/user-data.txt.i - wb: [600] 308 bytes
cristiGuranIonos commented 1 week ago

We will fix this. Meanwhile, if you need this urgently, you can create a ionoscloud_server with type CUBE

resource "ionoscloud_server" "server" {
  datacenter_id     = ionoscloud_datacenter.dc.id
  name              = "Server"
  type                = "CUBE"
  availability_zone = "AUTO"
  template_uuid     = data.ionoscloud_template.template.id
  image_name        = data.ionoscloud_image.image.id
  ssh_key_path      = [ "/root/.ssh/id_ionos_ecdsa.pub" ]
  volume {
    name            = "Vol-Server"
    disk_type       = "DAS"
    user_data       = "IyEvYmluL2Jhc2gKZWNobyAiSGVsbG8gd29ybGQhIiA+L3Vzci9sb2NhbC9zcmMvbW90ZApjaG1vZCA2NDQgL3Vzci9sb2NhbC9zcmMvbW90ZAo="
  }
  nic {
    lan             = ionoscloud_lan.wan.id
    name            = "Nic WAN"
    dhcp            = true
    ips             = [ "${var.public-ip}" ]
    firewall_active = false
  }
}
CND-MW commented 1 week ago

Perfect. That's the solution. Many thanks for the quick help!