Xen-Orchestra Terraform provider and Windows
-
-
-
@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
-
@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
-
@rochemike for now the patch lives in a separate branch, it will reach master soon
it will onlatest
XOA by the end of the month -
@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?
-
@rochemike I can help you for this
Do you use XO from the source or a XOA ?
-
@florent XOA
-
@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
-
@florent ticket opened!
-
@rochemike patch done this morning
-
@rochemike hi mike did you have time to test ?
-
@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 } }
-
What is your version of XO? There was a breaking change a few months back that required a MAC address to be defined but was changed. It's fixed now so if you update to the latest version it would fix it.
Though I can't find it now, I remember having to roll back a version until it was fixed. Might be mixing this up with the affinity host actually...
In case this is useful, here is my ubuntu TF
data "xenorchestra_pool" "pool" { name_label = var.pool_name } data "xenorchestra_template" "template" { name_label = var.vmtemplate } data "xenorchestra_network" "net" { name_label = var.network pool_id = var.pool_uuid } resource "xenorchestra_cloud_config" "bar" { name = "cloud config name" # Template the cloudinit if needed template = templatefile("cloud_config.tftpl", { hostname = var.hostname }) } resource "xenorchestra_cloud_config" "net" { name = "cloud network config name" # Template the cloudinit if needed template = templatefile("cloud_network_config.tftpl", { }) } resource "xenorchestra_vm" "bar" { memory_max = var.ram cpus = var.cpus cloud_config = xenorchestra_cloud_config.bar.template cloud_network_config = xenorchestra_cloud_config.net.template name_label = var.name_label name_description = var.name_description template = data.xenorchestra_template.template.id # Prefer to run the VM on the primary pool instance affinity_host = data.xenorchestra_pool.pool.master network { network_id = data.xenorchestra_network.net.id } disk { sr_id = var.disk_sr name_label = var.disk_name size = var.disk_size } tags = [ "Nightly Backup" ] wait_for_ip = true // Override the default create timeout from 5 mins to 20. timeouts { create = "20m" } }
-
@gsrfan01 I'm up-to-date as far as I can tell.
Current version: 5.84.0
I just want to build a VM to test another feature - what can I do to get past this message? I can't find a way to define VIFs in Terraform for XO.
-
I'm wondering if it's because there is no pool UUID specified in your config.
Working bottom up we have your network which references the
xenorchestra_network
objectnetwork { network_id = data.xenorchestra_network.network.id }
Which is this, specifying the network name and references
xenorchestra_pool
for the pool informationdata"xenorchestra_network""network" { name_label = "VLAN113" pool_id = data.xenorchestra_pool.pool.id }
Which specifies the name of the pool.
data"xenorchestra_pool""pool" { name_label = "b500-2555 Server Room" }
My config has the name of the network and the UUID of the pool that network resides on. I tried swapping it over to the pool name and my script errors out at applying the terraform configuration, swapping it over to the UUID of the pool worked though.
data "xenorchestra_network" "net" { name_label = var.network. pool_id = var.pool_uuid }
-
I updated that stanza as follows
data "xenorchestra_network" "network" { name_label = "VLAN113" pool_id = var.pool_uuid }
Now I can't get past "terraform plan" because "pool_uuid" hasn't been declared.
ā· ā Error: Reference to undeclared input variable ā ā on vm.tf line 16, in data "xenorchestra_network" "network": ā 16: pool_id = var.pool_uuid ā ā An input variable with the name "pool_uuid" has not been declared. This variable can be declared with a variable "pool_uuid" {} block. āµ
No amount of googling is helping me to figure out how to declare "var.pool_uuid"
-
@rochemike Sorry that's on me, you want to set the UUID like below, replace YOUR_POOL_UUID with the pool UUID, make sure it stays wrapped in quotes.
data "xenorchestra_network" "net" { name_label = var.network pool_id = "YOUR_POOL_UUID" }
I set mine as a variable during an Ansible playbook that writes it to a
terraform.tfvars
file providing thevar.pool_uuid
alongside others. -
so you're saying paste in the literal UUID
pool_id = "d27d1ac8-696a-78c6-e44e-444d1d10b5bb"
instead of referencing it like this?
pool_id = data.xenorchestra_pool.pool.id
This referenced version worked just fine in March... do I now have to change every instance of this pool_id definition thoughout my TF file?
-
@rochemike Based on the TF snippet that you pasted earlier you're declaring the pool's name but not the UUID. The
pool_id
inxenorchestra_network
needs to be the UUID to work. I tried both the name and the UUID on my end and failed with the name but worked with the UUID.data "xenorchestra_pool" "pool" { name_label = "b500-2555 Server Room" } ... data "xenorchestra_network" "network" { name_label = "VLAN113" pool_id = data.xenorchestra_pool.pool.id } ... network { network_id = data.xenorchestra_network.network.id } ... }
You may be able to skip the
pool_id
entirely based on the Terrafarm docs. This seems to work on my end.That would look like the below assuming you don't have VLAN113 on another pool visible to Xen Orchestra.
data "xenorchestra_network" "net" { name_label = "VLAN113" }