XCP-ng Automation

Basic VM Management

1xe vm-list
bash

Start, stop, et c. with xe:

1xe vm-start vm=$TARGET_VM
bash
1xe vm-shutdown vm=$TARGET_VM
bash

Destruction requires the uuid.

1xe vm-destroy uuid=$TARGET_UUID
bash

Autocompletion works well with all of these commands.

Shut Down VM

List VMs.

1xe host-list
bash
1xe vm-list resident-on=$HOST_UUID
bash
1xe vm-shutdown uuid=TARGET_VM force=true
bash

If this doesn't work, try:

1xe vm-reset-powerstate uuid=TARGET_VM force=true
bash

Get the id:

1list_domains
bash

And destroy the domain:

1/opt/xensource/debug/xenops destroy_domain -domid $DOM_ID
bash

Problem Solving

Error: Internal error:xenopsd internal error: Storage_interface.Illegal_transition in XenServer

After a failed “Move VM”, “Copy VM”, or “Export VM” operation, the Virtual Machine (VM) being operated cannot start.

To resolve this error, complete the following procedure:

Open the Console to the XenServer that is hosting the VM and run the following command:

1list_domains
bash

All the VMs running on that server are displayed.

Copy the UUID corresponding to id=0.

This is the UUID of the Control Domain. The Control Domain is a privileged Virtual Machine that handles all hyper calls received from running VMs to perform all virtual tasks.

Run the following command to obtain the UUID of the VBD (Virtual Block Device) object linking the Control Domain:

1xe vbd-list vm-uuid=$CONTROL_DOMAIN_UUID
bash

Run the following commands to unplug and destroy the VBD:

1xe vbd-unplug uuid=$VBD_UUID
bash
1xe vbd-destroy uuid=$VBD_UUID
bash

Make a local iso repository

1xe sr-create name-label=LocalISO type=iso device-config:location=/var/opt/xen/ISO_Store device-config:legacy_mode=true content-type=iso
bash

This creates a UUID for the new directory, e.g.:

e94e25bb-bcdc-801b-b62a-b51b686a3bdc

Import

1xe vm-import filename="$FILENAME".xva
bash

USB

Put in the USB.

Get the USB's uuid.

1xe pusb-list
bash

Make the USB recognised as a device.

1xe pusb-param-set uuid=*<uuid>*
bash

For passthrough, use this:

1xe pusb-param-set uuid=*<uuid>* passthrough-enabled=true
bash

(requires reboot of guest)

link

Storage Spaces - "SR"

1xe sr-list
bash

Exporting and Exporting VMs

1xe vm-export vm=$VM_NAME filename="$FULL_PATH".xva
bash
1xe vm-import vm=*<Name>* filename="$FULL_PATH".xva
bash