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

    Xen-Orchestra Terraform provider and Windows

    Scheduled Pinned Locked Moved Infrastructure as Code
    34 Posts 7 Posters 9.3k Views 7 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.
    • R Offline
      rochemike @olivierlambert
      last edited by

      @olivierlambert

      As far as I can tell - XO is creating the cloudconfig on a "VFAT" drive with no partition table. Windows needs a partition table. I think this problem could simply be addressed by adding the creation of a FAT16 partition table - the resulting config drive would still be usable by Linux and additionally by Windows VMs.

      FAT32 could be part of the problem - the minimum partition size for FAT32 is 256MB...

      https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Size_limits

      I just ran through this experiment.

      Used a terraform plan to deploy a Windows VM.

      Used a terraform plan to deply a Linux VM.

      On the Linux VM, mounted the "XO CloudConfigDrive" and used fdisk to format the device "/dev/xvdb" (on RHEL in my case) and then added a FAT16 partition.

      Here is what I see from fdisk on a "normal CloudConfigDrive

      Command (m for help): p
      Disk /dev/xvde: 10 MiB, 10485760 bytes, 20480 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: dos
      Disk identifier: 0x6c302ad6
      

      Here is what I see from fdisk on a "Windows-enabled" CloudConfigDrive

      Command (m for help): p
      Disk /dev/xvdc: 10 MiB, 10485760 bytes, 20480 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: dos
      Disk identifier: 0x54d69752
      
      Device     Boot Start   End Sectors Size Id Type
      /dev/xvdc1       2048 20479   18432   9M  6 FAT16
      

      ================================

      Now, cloudbase-init is able to see the CloudConfig drive and act upon it.

      1 Reply Last reply Reply Quote 0
      • olivierlambertO Offline
        olivierlambert Vates πŸͺ Co-Founder CEO
        last edited by

        Okay if I sum up, "just" creating a FAT16 partition table could do the trick?

        R 1 Reply Last reply Reply Quote 0
        • olivierlambertO Offline
          olivierlambert Vates πŸͺ Co-Founder CEO
          last edited by

          @julien-f do you remember how hard it was to create a FAT system entirely from XO in Javascript? Do you think it's a lot harder to do that in a partition? (ie creating the partition table, then just one partition with the FAT system inside)

          julien-fJ 1 Reply Last reply Reply Quote 0
          • R Offline
            rochemike @olivierlambert
            last edited by

            @olivierlambert yes, I think that would do it. I can't see any other difference at this point.

            1 Reply Last reply Reply Quote 1
            • julien-fJ Offline
              julien-f Vates πŸͺ Co-Founder XO Team @olivierlambert
              last edited by julien-f

              @olivierlambert https://github.com/vatesfr/xen-orchestra/blob/master/packages/xo-server/src/fatfs-buffer.mjs

              I don't remember the details exactly, but it would probably be harder to do it with a partition table.

              R 1 Reply Last reply Reply Quote 0
              • R Offline
                rochemike @julien-f
                last edited by

                @julien-f and @olivierlambert

                Admittedly, I'm not proficient in this kind of programming, not at all. I tried reading through the code you linked to above and it makes no sense to me. Normally I would try to try fixing this myself, but I just don't have time to invest learning something that's this new to me.

                However, I know in a bash script we simply partition the drive and it wouldn't change another thing about subsequent commands, because you're still writing to the drive in the same manner. How is that different in this code?

                Your comments make me sad and afraid that you won't take up this challenge to support Windows VMs with cloud-init. I would ask that if you put this off into the future, that you update any blogs or documents to explicitly describe that Windows VMs are excluded from cloud-init compatibility for now, to save anyone else from spending as much time on this as I have.

                On a personal note, the news that warm VM migrations from VMware will be built into the GUI for all versions of VMware is then a bittersweet story because it will give us what we need to support migration of our virtualization platforms from VMware. But lack of support for terraform / cloud-init for Windows would mean having to pivot to re-engineer our automation service.

                Please advise what we can expect of this bug-squashing in terms of time.

                Thanks for all you have done to create and continually improve this platform.

                Mike

                1 Reply Last reply Reply Quote 0
                • olivierlambertO Offline
                  olivierlambert Vates πŸͺ Co-Founder CEO
                  last edited by olivierlambert

                  We will discuss this internally ( @marcungeschikts can you add this to the backlog?) and we'll see if it's doable and at which level of difficulty πŸ™‚

                  marcungeschiktsM R 2 Replies Last reply Reply Quote 0
                  • marcungeschiktsM Offline
                    marcungeschikts Vates πŸͺ Project mgmt @olivierlambert
                    last edited by

                    πŸ‘Œ

                    1 Reply Last reply Reply Quote 0
                    • R Offline
                      rochemike @olivierlambert
                      last edited by

                      @olivierlambert

                      I'm happy to help test if that kind of help is needed.

                      Mike

                      florentF 1 Reply Last reply Reply Quote 1
                      • florentF Offline
                        florent Vates πŸͺ XO Team @rochemike
                        last edited by

                        @rochemike hi,

                        I did some test on a branch (adding a MBR at the beginning of the cloud init drive) : https://github.com/vatesfr/xen-orchestra/pull/6889 it should fix the windows problem. Can you test it ?

                        Regards

                        fbeauchamp opened this pull request in vatesfr/xen-orchestra

                        closed feat(xo-server): add MBR to cloud-init drive #6889

                        R 1 Reply Last reply Reply Quote 1
                        • R Offline
                          rochemike @florent
                          last edited by

                          @florent Great news! I'm eager to test, but tied up. I hope to get to it within the next 1-2 weeks.

                          Is there anything special I need to do from my end, or is the patch live?

                          Mike

                          florentF 1 Reply Last reply Reply Quote 0
                          • florentF Offline
                            florent Vates πŸͺ XO Team @rochemike
                            last edited by

                            @rochemike for now the patch lives in a separate branch, it will reach master soon
                            it will on latest XOA by the end of the month

                            R 1 Reply Last reply Reply Quote 0
                            • R Offline
                              rochemike @florent
                              last edited by

                              @florent I confess I'm still new to things like "branches" I understand the concepts but am unsure how to go forward. Should I just wait until after the changes go live, or is there some way to test them before then?

                              florentF 1 Reply Last reply Reply Quote 0
                              • florentF Offline
                                florent Vates πŸͺ XO Team @rochemike
                                last edited by

                                @rochemike I can help you for this

                                Do you use XO from the source or a XOA ?

                                R 1 Reply Last reply Reply Quote 0
                                • R Offline
                                  rochemike @florent
                                  last edited by

                                  @florent XOA

                                  florentF 1 Reply Last reply Reply Quote 0
                                  • florentF Offline
                                    florent Vates πŸͺ XO Team @rochemike
                                    last edited by

                                    @rochemike great, that will be even easier

                                    can you open a support ticket and open a support tunnel ? I will connect and patch your installation

                                    R 1 Reply Last reply Reply Quote 2
                                    • R Offline
                                      rochemike @florent
                                      last edited by

                                      @florent ticket opened!

                                      florentF 2 Replies Last reply Reply Quote 0
                                      • florentF Offline
                                        florent Vates πŸͺ XO Team @rochemike
                                        last edited by

                                        @rochemike patch done this morning

                                        1 Reply Last reply Reply Quote 2
                                        • florentF Offline
                                          florent Vates πŸͺ XO Team @rochemike
                                          last edited by

                                          @rochemike hi mike did you have time to test ?

                                          R 1 Reply Last reply Reply Quote 0
                                          • R Offline
                                            rochemike @florent
                                            last edited by rochemike

                                            @florent hello, I'm sorry for the delay.

                                            Yes, and I'm getting errors.

                                            right after "terraform apply" and answering "yes" to the prompt, I got this:

                                            xenorchestra_vm.rbbmspcs2: Creating...
                                            β•·
                                            β”‚ Error: jsonrpc2: code 10 message: invalid parameters: {"errors":[{"instancePath":"/affinityHost","schemaPath":"#/properties/affinityHost/minLength","keyword":"minLength","params":{"limit":1},"message":"must NOT have fewer than 1 characters"},{"instancePath":"/VIFs/0/mac","schemaPath":"#/properties/VIFs/items/properties/mac/minLength","keyword":"minLength","params":{"limit":1},"message":"must NOT have fewer than 1 characters"}]}
                                            β”‚
                                            β”‚   with xenorchestra_vm.rbbmspcs2,
                                            β”‚   on vm.tf line 19, in resource "xenorchestra_vm" "rbbmspcs2":
                                            β”‚   19: resource "xenorchestra_vm" "rbbmspcs2" {
                                            β”‚
                                            β•΅
                                            

                                            So... I did some Googling and found that another person was experiencing a similar issue recently, so I added the following line to my tf file:

                                            affinity_host = data.xenorchestra_pool.pool.master
                                            

                                            Now, I'm getting this error - and I can't figure out a solution on my own. Any ideas? I haven't toyed with my TF files in months, ever since I reported this, and wasn't getting these errors back then.

                                            xenorchestra_vm.rbbmspcs2: Creating...
                                            β•·
                                            β”‚ Error: jsonrpc2: code 10 message: invalid parameters: {"errors":[{"instancePath":"/VIFs/0/mac","schemaPath":"#/properties/VIFs/items/properties/mac/minLength","keyword":"minLength","params":{"limit":1},"message":"must NOT have fewer than 1 characters"}]}
                                            β”‚
                                            β”‚   with xenorchestra_vm.rbbmspcs2,
                                            β”‚   on vm-windows.tf line 19, in resource "xenorchestra_vm" "rbbmspcs2":
                                            β”‚   19: resource "xenorchestra_vm" "rbbmspcs2" {
                                            β”‚
                                            β•΅
                                            

                                            Here follows the simplified TF file I've been using, with the new "affinity_host" line:

                                            data "xenorchestra_pool" "pool" {
                                              name_label = "b500-2555 Server Room"
                                            }
                                            
                                            data "xenorchestra_template" "vm_template" {
                                              name_label = "rbbmswsoe2019s_2023-02-28"
                                            }
                                            
                                            data "xenorchestra_sr" "sr" {
                                              name_label = "nfs-isilon-xcpng-b500-2555"
                                              pool_id = data.xenorchestra_pool.pool.id
                                            }
                                            
                                            data "xenorchestra_network" "network" {
                                              name_label = "VLAN113"
                                              pool_id = data.xenorchestra_pool.pool.id
                                            }
                                            
                                            resource "xenorchestra_vm" "rbbmspcs2" {
                                              memory_max = 8589934594
                                              cpus = 2
                                              name_label = "XO terraform tutorial"
                                              affinity_host = data.xenorchestra_pool.pool.master
                                              template = data.xenorchestra_template.vm_template.id
                                            
                                              network {
                                                network_id = data.xenorchestra_network.network.id
                                              }
                                            
                                              disk {
                                                sr_id = data.xenorchestra_sr.sr.id
                                                name_label = "VM boot drive"
                                                size = 50212254720
                                              }
                                            }
                                            
                                            G 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post