How to use the new virsh provider in Foreman 1.4
This morning I decided to play with a new Foreman 1.4 feature : TFTP, DHCP and DNS provider for my local workstation : virsh.
Virsh provider allow you to manage DHCP and DNS libvirt’s network (via dnsmasq) for some local development. It allow to have a full provisioning workflow without having to install bind, tftpd and dhcpd.
This post is hugely inspired from Foreman 1.4 manual.
Libvirt configuration
The first thing to do is to define a persistent virtual network in libvirt.
Copy in a file named net-defintion.xml. You can off course change the network name, ip range, domain name, etc …
$ cat net-defintion.xml <network> <name>default</name> <uuid>16b7b280-7462-428c-a65c-5753b84c7545</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:b2:fa:27'/> <domain name='fitzdsl.local'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <tftp root='/tftp'/> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> <bootp file='pxelinux.0'/> </dhcp> </ip> </network>
Then, you need to create and start the default network on libvirt:
# virsh net-define --file net-definition.xml # virsh net-start default
We need to setup the TFTP directory (from Foreman manual for Fedora) :
mkdir -p /var/tftproot/{boot,pxelinux.cfg} yum -y install syslinux cp /usr/share/syslinux/{pxelinux.0,menu.c32,chain.c32} /var/tftproot chgrp -R nobody /var/tftproot find /var/tftproot/ -type d | xargs chmod g+s
Smart-Proxy configuration
We need now to configure a local smart-proxy to manage TFTP, DNS and DHCP:
We should now configure the local smart-proxy to use this new provider:
Set the following:
:tftp: true :tftproot: /var/tftproot :tftp_servername: 192.168.122.1 :dns: true :dns_provider: virsh :dhcp: true :dhcp_vendor: virsh :virsh_network: default
Finaly make sure your smart-proxy can have sudo rights :
Defaults !requiretty foreman-proxy ALL=/usr/bin/virsh
Foreman configuration
First you need to add your proxy or refresh the feature list:
In Infrastructure:
New proxy : http://localhost:8443
Then you need to create a new domain and subnet :
- Create a new domain : name it accordingly to your “domain name” on the net-defintion.xml.
- Create a new subnet accordingly to you net-definition file.
In my case:
Name: Home Network address: 192.168.122.0 Netmask: 255.255.255.0 Start IP Range: 192.168.122.2 Stop IP Range: 192.168.122.255
- In Domains tab check the domain you just created.
- In Proxies tab select your new proxy for DHCP, TFTP and DNS.
Create a new VM
When creating a new host, take care to select in “Virtual Machine” Tab on Network Interfaces:
- Network Type => Virtual (NAT)
- Network => “default”
You have now the ability to setup in local full provisioning environment. The only missing thing is that the PTR DNS record is not setup.
Great thanks to Lukas (@lzap) who implemented this new great feature !