XCP-ng
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    destroy_cloud_config_vdi_after_boot

    Scheduled Pinned Locked Moved Infrastructure as Code
    9 Posts 3 Posters 773 Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C Offline
      carloum70
      last edited by carloum70

      Hi all,

      I was able to create VMs using my Terraform code until I set the parameter destroy_cloud_config_vdi_after_boot to true.

      Initially, it created a virtual machine and, after booting, removed the Cloud-Init disk as expected. However, from that point on, the VM started being created without a disk, even though tofu apply shows the following:

            + disk {
                + name_label = "carlo123-osdisk"
                + position   = (known after apply)
                + size       = 32212254720
                + sr_id      = "589dad4d-2391-c2a9-589c-d34a9a7757ea"
                + vbd_id     = (known after apply)
                + vdi_id     = (known after apply)
              }
      

      tofu apply failes with:

      │ Error: jsonrpc2: code -32000 message: Can't create cloud init config drive for VM without disks: {"message":"Can't create cloud init config drive for VM without disks","name":"Error","stack":"Error: Can't create cloud init config drive for VM without disks\n    at Xapi.createCloudInitConfig (file:///opt/xo/xo-builds/xen-orchestra-202510281611/@xen-orchestra/xapi/vm.mjs:418:13)\n    at Xo.<anonymous> (file:///opt/xo/xo-builds/xen-orchestra-202510281611/packages/xo-server/src/api/vm.mjs:191:26)\n    at Task.runInside (/opt/xo/xo-builds/xen-orchestra-202510281611/@vates/task/index.js:175:22)\n    at Task.run (/opt/xo/xo-builds/xen-orchestra-202510281611/@vates/task/index.js:159:20)\n    at Api.#callApiMethod (file:///opt/xo/xo-builds/xen-orchestra-202510281611/packages/xo-server/src/xo-mixins/api.mjs:469:18)"}
      │ 
      │   with module.vm.xenorchestra_vm.vm,
      │   on ../modules/vm/main.tf line 20, in resource "xenorchestra_vm" "vm":
      │   20: resource "xenorchestra_vm" "vm" {```
      

      This my main.tf

      data "template_file" "cloud_config" {
        template = file("${path.module}/cloud-init.yaml.tftpl")
      
        vars = {
          hostname   = var.vm_name
        }
      }
      
      data "template_file" "cloud_network_config" {
        template = file("${path.module}/network-config.yaml.tftpl")
      
        vars = {
          ip_address = var.ip_address
          netmask    = var.netmask 
          gateway    = var.gateway
          dns        = join(", ", var.dns)
        }
      }
      
      resource "xenorchestra_vm" "vm" {
        name_label = var.vm_name
        name_description = var.description
        template   = var.template_uuid
        cpus       = var.cpus
        memory_max = var.memory * 1024 * 1024
        hvm_boot_firmware = "uefi"
        auto_poweron = false
        destroy_cloud_config_vdi_after_boot = true
        power_state = "Running"
        clone_type = "full"
      
        disk {
          sr_id      = var.sr_uuid
          name_label = "${var.vm_name}-osdisk"
          size       = var.disk_size * 1024 * 1024 * 1024
        }
      
        dynamic "disk" {
          for_each = var.data_disks
          content {
            sr_id      = var.sr_uuid
            name_label = "${var.vm_name}-${disk.value.name}"
            size       = disk.value.size * 1024 * 1024 * 1024
          }
        }
      
        network {
          network_id = var.network_id
        }
      
        cloud_config = var.ip_address != "" ? data.template_file.cloud_config.rendered : null
        cloud_network_config = var.ip_address != "" ? data.template_file.cloud_network_config.rendered : null
      

      When I commented out the cloud_config line the vm is created without a disk.
      Xensource.log also shows the following :

      Oct 28 16:23:59 dacshyp001 xapi: [ info||11548 :::80|dispatch:VM.provision D:c4cf2cdf383f|taskhelper] task Async.VM.provision R:57a7bfeaacf3 forwarded (trackid=e7b951e8d29a4f9c673e51262f6144c9)
      Oct 28 16:23:59 dacshyp001 xapi: [ info||11548 HTTPS 172.28.4.11->:::80|Async.VM.provision R:57a7bfeaacf3|xapi_vm_helpers] VM.set_is_a_template('false')
      Oct 28 16:23:59 dacshyp001 xapi: [error||188 |xapi events D:596426783cc2|xenops] events_from_xapi: missing from the cache: [ ff4ff6a6-379a-4ec0-9dd2-ae28f8b6bc2c ]
      Oct 28 16:23:59 dacshyp001 xapi: [error||188 |xapi events D:596426783cc2|xenops] events_from_xapi: missing from the cache: [ ff4ff6a6-379a-4ec0-9dd2-ae28f8b6bc2c ]
      

      Running the following command:

      [15:44 dacshyp002 ~]# xe vm-list uuid=ff4ff6a6-379a-4ec0-9dd2-ae28f8b6bc2c
      uuid ( RO)           : ff4ff6a6-379a-4ec0-9dd2-ae28f8b6bc2c
           name-label ( RW): Control domain on host: dacshyp001
          power-state ( RO): running
      

      XOA commit 45ef6

      I’m not sure where to start troubleshooting this, any help would be appreciated.
      Thanks in advance,
      Carlo

      1 Reply Last reply Reply Quote 0
      • C Offline
        carloum70
        last edited by carloum70

        Update:
        I tried to create a vm using a basic terraform config and using another template. Still the same problem, vm created without a disk.

        tofu apply  -var-file="carlo111.tfvars"
        
        OpenTofu used the selected providers to generate the following execution plan. Resource actions are indicated with
        the following symbols:
          + create
        
        OpenTofu will perform the following actions:
        
          # module.vm.xenorchestra_vm.vm will be created
          + resource "xenorchestra_vm" "vm" {
              + auto_poweron                        = false
              + clone_type                          = "full"
              + core_os                             = false
              + cpu_cap                             = 0
              + cpu_weight                          = 0
              + cpus                                = 2
              + destroy_cloud_config_vdi_after_boot = false
              + exp_nested_hvm                      = false
              + hvm_boot_firmware                   = "uefi"
              + id                                  = (known after apply)
              + ipv4_addresses                      = (known after apply)
              + ipv6_addresses                      = (known after apply)
              + memory_max                          = 2126512128
              + memory_min                          = (known after apply)
              + name_label                          = "carlo111"
              + power_state                         = "Running"
              + start_delay                         = 0
              + template                            = "3dbf5448-0337-40e1-ebfc-f3f47e2cb0dd"
              + vga                                 = "std"
              + videoram                            = 8
        
              + disk {
                  + name_label = "carlo111-osdisk"
                  + position   = (known after apply)
                  + size       = 32212254720
                  + sr_id      = "589dad4d-2391-c2a9-589c-d34a9a7757ea"
                  + vbd_id     = (known after apply)
                  + vdi_id     = (known after apply)
                }
        
              + network {
                  + device         = (known after apply)
                  + ipv4_addresses = (known after apply)
                  + ipv6_addresses = (known after apply)
                  + mac_address    = (known after apply)
                  + network_id     = "d4ddcfb0-6d3e-d267-b200-d7d1fec1edc8"
                }
            }
        
        Plan: 1 to add, 0 to change, 0 to destroy.
        
        Do you want to perform these actions?
          OpenTofu will perform the actions described above.
          Only 'yes' will be accepted to approve.
        
          Enter a value: yes
        
        module.vm.xenorchestra_vm.vm: Creating...
        module.vm.xenorchestra_vm.vm: Still creating... [10s elapsed]
        module.vm.xenorchestra_vm.vm: Creation complete after 14s [id=95b3b0c6-ac8e-fe4b-2f55-ba0d8ff04005]
        
        [20:09 dacshyp002 ~]# xe vbd-list vm-uuid=95b3b0c6-ac8e-fe4b-2f55-ba0d8ff04005
        [20:25 dacshyp002 ~]# 
        

        main.tf

        resource "xenorchestra_vm" "vm" {
          name_label = var.vm_name
          template   = var.template_uuid
          cpus       = var.cpus
          memory_max = var.memory * 1024 * 1024
          hvm_boot_firmware = "uefi"
          clone_type = "full"
        
          disk {
            sr_id      = var.sr_uuid
            name_label = "${var.vm_name}-osdisk"
            size       = var.disk_size * 1024 * 1024 * 1024
          }
        
          network {
            network_id = var.network_id
          }
        }
        

        I don't know if it is related, I see the following errors during the creation of the vm:

        Oct 28 20:44:07 dacshyp002 xapi: [error||458 |xapi events D:20adbb444ff6|xenops] events_from_xapi: missing from the cache: [ 532cad38-f1ae-433b-b7ac-e0399613fe24 ]
        Oct 28 20:44:07 dacshyp002 xapi: [error||458 |xapi events D:20adbb444ff6|xenops] events_from_xapi: extra items in the cache: [ 95b3b0c6-ac8e-fe4b-2f55-ba0d8ff04005 ]
        
        [20:44 dacshyp002 log]# xe vm-list uuid=532cad38-f1ae-433b-b7ac-e0399613fe24
        uuid ( RO)           : 532cad38-f1ae-433b-b7ac-e0399613fe24
             name-label ( RW): Control domain on host: dacshyp002
            power-state ( RO): running
        
        
        [20:45 dacshyp002 log]# xe vm-list uuid=1c210250-1f89-b0e3-c1e6-f7bee976e94c
        uuid ( RO)           : 95b3b0c6-ac8e-fe4b-2f55-ba0d8ff04005
             name-label ( RW): carlo111
            power-state ( RO): running
        
        

        Manually creating the vm using the same template is not a problem.

        1 Reply Last reply Reply Quote 0
        • C Offline
          carloum70
          last edited by carloum70

          Looking at the debug logging I can see the VDI and VBD are created but also removed during the setup of the VM. At this point I am not using cloud-init.
          Creation of VDI and VBD:

          Oct 29 11:57:18 dacshyp002 xapi: [ info||67090 :::80|OpaqueRef:973e5688-b5a7-d197-cb55-95834b9abec6|mux] VDI.create dbg:OpaqueRef:973e5688-b5a7-d197-cb55-95834b9abec6 sr:589dad4d-2391-c2a9-589c-d34a9a7757ea vdi_info:{"sm_config":{},"sharable":false,"persistent":true,"physical_utilisation":0,"virtual_size":32212254720,"cbt_enabled":false,"read_only":false,"snapshot_of":"","snapshot_time":"19700101T00:00:00Z","is_a_snapshot":false,"metadata_of_pool":"","ty":"user","name_description":"","name_label":"debiancloud.vhd","content_id":"","vdi":""}
          
          Oct 29 11:57:18 dacshyp002 xapi: [debug||67090 HTTPS 172.28.4.10->:::80|VBD.create R:9725689f8e64|vbdops] VBD.create (device = 0; uuid = 2f57bc16-c913-ecd5-dce4-9261a7a0e6ed; ref = OpaqueRef:9549bde7-4ff8-dda0-703b-6efbf7397155)
          

          Some seconds later I see the following:

          Oct 29 11:57:29 dacshyp002 xapi: [debug||68871 HTTPS 172.28.4.10->:::80|VBD.unplug R:b9f5584469dd|audit] VBD.unplug: VBD = '2f57bc16-c913-ecd5-dce4-9261a7a0e6ed' Oct 29 11:57:30 dacshyp002 xapi: [debug||67090 HTTPS 172.28.4.10->:::80|VBD.destroy R:cf37a355d7de|audit] VBD.destroy: VBD = '2f57bc16-c913-ecd5-dce4-9261a7a0e6ed' 
          Oct 29 11:57:30 dacshyp002 xapi: [debug||67090 HTTPS 172.28.4.10->:::80|VBD.destroy R:cf37a355d7de|xapi_vbd_helpers] VBD.destroy (uuid = 2f57bc16-c913-ecd5-dce4-9261a7a0e6ed; ref = OpaqueRef:9549bde7-4ff8-dda0-703b-6efbf7397155)
          

          During the proces I checked all VDI's on my storage :

          while true; do echo '==================================='; xe vdi-list sr-uuid=589dad4d-2391-c2a9-589c-d34a9a7757ea | grep name-label; sleep 1; done
          
          ===================================
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): dacsvm002-osdisk
                    name-label ( RW): dacsvm03-dhcp01-osdisk
                    name-label ( RW): dacsvm01-osdisk
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): Debian Bookworm 12_uruva
                    name-label ( RW): sebas-vm-disk
                    name-label ( RW): dacsvm01-osdisk
          ...
          ===================================
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): dacsvm002-osdisk
                    name-label ( RW): dacsvm03-dhcp01-osdisk
                    name-label ( RW): dacsvm01-osdisk
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): Debian Bookworm 12_uruva
                    name-label ( RW): sebas-vm-disk
                    name-label ( RW): dacsvm01-osdisk
          ...
          ===================================
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): dacsvm002-osdisk
                    name-label ( RW): dacsvm03-dhcp01-osdisk
                    name-label ( RW): dacsvm01-osdisk
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): debiancloud.vhd
                    name-label ( RW): Debian Bookworm 12_uruva
                    name-label ( RW): sebas-vm-disk
                    name-label ( RW): dacsvm01-osdisk
          
          1 Reply Last reply Reply Quote 0
          • olivierlambertO Online
            olivierlambert Vates 🪐 Co-Founder CEO
            last edited by

            Adding @Cyrille in the convo

            1 Reply Last reply Reply Quote 0
            • C Offline
              carloum70
              last edited by

              I am still troubleshooting this case.

              I created 2 new templates:
              Template1 based on a default debian13-netinstall iso image
              Template2: based on a debian cloud-init raw file: https://cdimage.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.raw

              Running terraform with template1 runs fine. A vm is created with a disk.
              Running terraform with template2 --> vm is created without a disk.
              Manually creating a vm using template2 runs also fine.

              [21:33 dacshyp002 ~]# xe vbd-list vm-uuid=a6b4c48d-16c0-a333-fa90-c8b4b13d6c2a
              uuid ( RO)             : 06552805-ddfa-7f80-a55e-9d878d626ad2
                        vm-uuid ( RO): a6b4c48d-16c0-a333-fa90-c8b4b13d6c2a
                  vm-name-label ( RO): debian13-generic-cloud-tmpl
                       vdi-uuid ( RO): 5c793847-b331-4f65-be71-9463c68e09c8
                          empty ( RO): false
                         device ( RO): xvdb
              

              I can't reproduce the problem at my homelab. There are some differences at home:

              • running xoa in a container (commit 82891)
              • all vdi's are stored on local storage (at work we are using iscsi luns)
              • just one xcp-ng server
              1 Reply Last reply Reply Quote 0
              • C Offline
                carloum70
                last edited by

                Here is a full logging (xensource.log) the moment terraform creates the vm (carlo111).
                I really hope someone can give me some clues. Because this is a showstopper.
                Debug-terraform2.txt

                1 Reply Last reply Reply Quote 0
                • olivierlambertO Online
                  olivierlambert Vates 🪐 Co-Founder CEO
                  last edited by

                  @Cyrille is back next week 🙂

                  CyrilleC 1 Reply Last reply Reply Quote 0
                  • CyrilleC Offline
                    Cyrille Vates 🪐 DevOps Team @olivierlambert
                    last edited by

                    Hi @carloum70

                    I'm back now — sorry for the delay.
                    If I understand correctly, this issue only occurs with a template created from a Debian 13 cloud-init raw file, is that right? I'm trying to understand how to reproduce the issue, as I've never seen it before.

                    CyrilleC 1 Reply Last reply Reply Quote 0
                    • CyrilleC Offline
                      Cyrille Vates 🪐 DevOps Team @Cyrille
                      last edited by

                      Can you share how you created the template?
                      And copy here the template object from xo-cli or the rest api: xo-cli list-objects type=VM-template id=<your_template_id>?

                      1 Reply Last reply Reply Quote 0

                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                      With your input, this post could be even better 💗

                      Register Login
                      • First post
                        Last post