Hello again,
So I suceedeed bringing up a XenServer host in VirtualBox from a created Vagrant box.
Here is my Vagrantfile:
Vagrant.configure("2") do |config|
config.vm.box = "debovema/xenserver"
config.vm.box_version = "7.2.0"
# forward HTTP(S) port from the VM to the host to access the XenServer API in Terraform
config.vm.network "forwarded_port", guest: 80, host: 80
config.vm.network "forwarded_port", guest: 443, host: 443
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096" # increase memory to 4 Gb
end
end
After doing vagrant up
and vagrant ssh
, I manually set a password for root user with passwd
command to be used as crendentials by your Terraform provider for XenServer.
Now this is the sample Terraform file I would like to use:
provider "xenserver" {
url = "http://192.168.1.74/"
username = "root"
password = "<password>"
}
resource "xenserver_vdi" "disk1" {
sr_uuid = "d39f638d-1977-5879-c9f1-b14e6d48241e"
name_label = "disk1"
size = 4294967296 # 4GB
}
resource "xenserver_network" "network" {
name_label = "network"
bridge = "Network 0" # default network name is "Network 0"
description = "network"
}
resource "xenserver_vm" "vm-test" {
name_label = "vm-test"
base_template_name = "Debian Wheezy 7.0 (32-bit)"
static_mem_min = 2147483648 # 2GB
static_mem_max = 2147483648
dynamic_mem_min = 2147483648
dynamic_mem_max = 2147483648
boot_order = "cdn"
network_interface {
network_uuid = "${xenserver_network.network.id}"
mac = "12:34:45:67:89:12"
mtu = 1500
device = 0
}
vcpus = 2
hard_drive {
vdi_uuid = "${xenserver_vdi.disk1.id}"
}
}
Notice that I used the Debian Wheezy 7.0 (32-bit) template as it will use Paravirtualization (PV) instead of Hardware-assisted Virtualization (HVM) which is not supported when the XenServer host is already running virtualized.
Basically, I create a 4Gb virtual disk on the default local storage (UUID can be seen below with xe sr-list
command) and a network interface for the VM.
When I run terraform apply, here's what I got:
$ terraform apply
xenserver_network.network: Creating...
bridge: "" => "Network 0"
description: "" => "network"
name_label: "" => "network"
xenserver_vdi.disk1: Creating...
name_label: "" => "disk1"
read_only: "" => "false"
shared: "" => "false"
size: "" => "4294967296"
sr_uuid: "" => "d39f638d-1977-5879-c9f1-b14e6d48241e"
xenserver_network.network: Creation complete after 0s (ID: 76f0adf4-0991-8a66-bf84-32ba6cb4103e)
xenserver_vdi.disk1: Creation complete after 1s (ID: 00efcb93-45a3-41b1-948b-2bfa168cc952)
xenserver_vm.vm-test: Creating...
base_template_name: "" => "Debian Wheezy 7.0 (32-bit)"
boot_order: "" => "cdn"
cores_per_socket: "" => "<computed>"
dynamic_mem_max: "" => "2147483648"
dynamic_mem_min: "" => "2147483648"
hard_drive.#: "0" => "1"
hard_drive.380500672.bootable: "" => "<computed>"
hard_drive.380500672.is_from_template: "" => "false"
hard_drive.380500672.mode: "" => "<computed>"
hard_drive.380500672.user_device: "" => "<computed>"
hard_drive.380500672.vdi_uuid: "" => "00efcb93-45a3-41b1-948b-2bfa168cc952"
name_label: "" => "vm-test"
network_interface.#: "0" => "1"
network_interface.434444472.device: "" => "0"
network_interface.434444472.mac: "" => "12:34:45:67:89:12"
network_interface.434444472.mtu: "" => "1500"
network_interface.434444472.network_uuid: "" => "76f0adf4-0991-8a66-bf84-32ba6cb4103e"
static_mem_max: "" => "2147483648"
static_mem_min: "" => "2147483648"
vcpus: "" => "2"
xenstore_data.%: "" => "<computed>"
Error applying plan:
1 error(s) occurred:
* xenserver_vm.vm-test: 1 error(s) occurred:
* xenserver_vm.vm-test: API Error: UUID_INVALID sr
Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.
So to sum up I have API Error: UUID_INVALID sr
whereas the different resources seem to be created (as seen with XenCenter). However none of the dependencies is bound to the VM.
Is there something I am missing ?
Do you have a much appreciated working sample ? The one on this page is not very comprehensive.
Here is the list of available networks:
[root@localhost ~]# xe network-list
uuid ( RO) : aaf48c3e-0797-22db-c3e8-f08aae02c68b
name-label ( RW): Host internal management network
name-description ( RW): Network on which guests will be assigned a private link-local IP address which can be used to talk XenAPI
bridge ( RO): xenapi
uuid ( RO) : dee0d926-adf7-86f8-1260-18e0cc9bd111
name-label ( RW): network
name-description ( RW): network
bridge ( RO): Network 0
uuid ( RO) : 46177683-6eb1-dfb0-b4a6-7f8e3910eeb1
name-label ( RW): Network 1
name-description ( RW):
bridge ( RO): xapi0
uuid ( RO) : 66281518-bd1d-3b83-4718-da672ba4de88
name-label ( RW): Pool-wide network associated with eth0
name-description ( RW):
bridge ( RO): xenbr0
Here is the list of available storages:
[root@localhost ~]# xe sr-list
uuid ( RO) : ca14e0b1-5d9e-a117-bc41-fd69342ab6e3
name-label ( RW): XenServer Tools
name-description ( RW): XenServer Tools ISOs
host ( RO): localhost
type ( RO): iso
content-type ( RO): iso
uuid ( RO) : d701617e-03bc-be96-3401-824c8d974c55
name-label ( RW): DVD drives
name-description ( RW): Physical DVD drives
host ( RO): localhost
type ( RO): udev
content-type ( RO): iso
uuid ( RO) : d39f638d-1977-5879-c9f1-b14e6d48241e
name-label ( RW): Local storage
name-description ( RW):
host ( RO): localhost
type ( RO): ext
content-type ( RO): user
uuid ( RO) : b53f09cf-ea4d-bd00-decf-371650d748de
name-label ( RW): SMB ISO library
name-description ( RW): SMB ISO Library [\\192.168.1.74\share]
host ( RO): localhost
type ( RO): iso
content-type ( RO): iso
uuid ( RO) : c9cec2df-ef0f-9876-28f6-822ecc673470
name-label ( RW): Removable storage
name-description ( RW):
host ( RO): localhost
type ( RO): udev
content-type ( RO): disk
Thank you very much for your help.