tested on ubuntu server 17.10/artful XEN host (dom0)

on the dom0 compute node,

cat /proc/cpuinfo  | grep ^processor
#vi /etc/default/grub
vi /etc/default/grub.d/xen.cfg

GRUB_CMDLINE_XEN="dom0_mem=1G,max:4G dom0_max_vcpus=1-3 dom0_vcpus_pin pv-linear-pt=true"

update-grub

vi ~/bin/cleanconf

#!/bin/bash
sed '/^[[:space:]]*$/d; /^[[:space:]]*#/d' $@

chmod +x ~/bin/cleanconf

apt install nova-compute-xen nova-compute-libvirt

cp -pi /etc/nova/nova.conf /etc/nova/nova.conf.dist
cleanconf /etc/nova/nova.conf.dist > /etc/nova/nova.conf.clean
cleanconf /etc/nova/nova.conf.dist > /etc/nova/nova.conf
ls -ldhF /var/lib/nova/tmp/
vi /etc/nova/nova.conf

[DEFAULT]
compute_driver = libvirt.LibvirtDriver
transport_url = rabbit://openstack:RABBIT_PASS@controller
my_ip = x.x.x.x
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
log_dir = /var/log/nova

[api]
auth_strategy = keystone

[glance]
api_servers = http://controller:9292

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS

[libvirt]
virt_type = xen

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[placement]
#os_region_name = openstack
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:35357/v3
username = placement
password = PLACEMENT_PASS

diff -bu /etc/nova/nova.conf.clean /etc/nova/nova.conf
cp /etc/nova/nova.conf /etc/nova/nova.conf.`date +%s`

nmap -p 5000,8778,9292,11211,35357 controller

#tail -n0 -F /var/log/syslog /var/log/*/*

systemctl list-unit-files | grep libvirt
systemctl status libvirtd.service

systemctl list-unit-files | grep nova
systemctl stop nova-compute.service
systemctl start nova-compute.service

note. min 1vcpu max 3vcpu (machine has 3 cpu sockets)

on the controller node (may be a XEN guest),

. admin-openrc
openstack compute service list --service nova-compute
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

you should now be able to see Type = Xen into the Dashboard,

Admin / Compute / Hypervisors
Hypervisor tab

refs.