The last few months, when I was getting free time off other projects, I was working on a new LCFG component, lcfg-libvirt. The main idea behind lcfg-libvirt is not just to manage libVirt itself, but use libVirt via the component to manage multiple virtualisation platforms without the need to use multiple components.
At first stage, the goal was to generalise the resources that could be used by both Xen and KVM guests, as well as other platform candidates that are supported by libVirt.
The second stage was to migrate all the existing lcfg-xen functionality into the component, using the new resources and manage the Xen guests via libVirt.
At the third stage, KVM support was added at the same level as the pre-existing Xen support. At this stage, network management via virsh was implemented as well. In order to get networking sorted I had to create a new patch for the lcfg-network component in order to support bridge interfaces at an OS level.
The man page is still missing. The lcfg-xen(8) will be used as the basis for this as well.
The functionality so far can be summarised as bellow:
– Support for Xen, hardware virtualised, guests (migrated from lcfg-xen).
– Support for Xen, paravirtualised, guests (migrated from lcfg-xen).
– Support for Xen specific networking (migrated from lcfg-xen).
– Support for KVM guests for both Intel and AMD processors.
– Support for KVM specific networking.
– Guest cloning for both Xen and KVM guests (migrated from lcfg-xen).
– Support for NAT, Bridge and Routed interfaces for both Xen and KVM.
– Use of virsh to manage guests and generic networking.
KVM guest example:
!libvirt.hosttype mSET(kvm) !libvirt.vms mADD(pe2900x1) !libvirt.name_pe2900x1 mSET(pe2900x1) !libvirt.type_pe2900x1 mSET(hvm) !libvirt.uuid_pe2900x1 mSET(56bcea35-a598-4ce8-97f1-02cba34e3451) !libvirt.disks_pe2900x1 mADD(root test) !libvirt.diskname_pe2900x1_root mSET(pe2900x1) !libvirt.disksize_pe2900x1_root mSET(32) !libvirt.diskpath_pe2900x1_root mSET(/guests) !libvirt.diskname_pe2900x1_test mSET(test) !libvirt.disksize_pe2900x1_test mSET(10) !libvirt.diskpath_pe2900x1_test mSET(/guests) !libvirt.boot_pe2900x1 mSET(no) !libvirt.opts_pe2900x1 mADD(vnc monitor) !libvirt.optvalue_pe2900x1_vnc mSET(1) !libvirt.optvalue_pe2900x1_monitor mSET(pty) !libvirt.nethost_pe2900x1 mADD(vif1 vif2) !libvirt.hostmac_pe2900x1_vif1 mSET(12:28:aa:02:1e:4d) !libvirt.bridge_pe2900x1_vif1 mSET(br0) !libvirt.netmode_pe2900x1_vif1 mSET(bridge) !libvirt.hostmac_pe2900x1_vif2 mSET(23:12:cb:af:1a:cf) !libvirt.bridge_pe2900x1_vif2 mSET(default) !libvirt.netmode_pe2900x1_vif2 mSET(network)
Xen guest example:
!libvirt.hosttype mSET(xen) !libvirt.vms mADD(pe2900x1) !libvirt.name_pe2900x1 mSET(pe2900x1) !libvirt.type_pe2900x1 mSET(hvm) !libvirt.uuid_pe2900x1 mSET(56bcea35-a598-4ce8-89f87-02cba34e7205) !libvirt.disks_pe2900x1 mADD(root test) !libvirt.diskname_pe2900x1_root mSET(pe2900x1) !libvirt.disksize_pe2900x1_root mSET(32) !libvirt.diskpath_pe2900x1_root mSET(/guests) !libvirt.diskname_pe2900x1_test mSET(test) !libvirt.disksize_pe2900x1_test mSET(10) !libvirt.diskpath_pe2900x1_test mSET(/guests) !libvirt.boot_pe2900x1 mSET(no) !libvirt.nethost_pe2900x1 mADD(vif1) !libvirt.hostmac_pe2900x1_vif1 mSET(12:28:ad:12:ac:2a) !libvirt.bridge_pe2900x1_vif1 mSET(xenbr0) !libvirt.script_pe2900x1_vif1 mSET(vif-bridge) !libvirt.netmode_pe2900x1_vif1 mSET(bridge)
Network configuration example:
!libvirt.networking mADD(routed) !libvirt.nettype_routed mSET(interface) !libvirt.netname_routed mSET(routed) !libvirt.netuuid_routed mSET(56bcea35-a598-4ce8-97f1-02acd24s6985) !libvirt.bridgename_routed mSET(virbr9) !libvirt.mode_routed mSET(route) !libvirt.modedev_routed mSET(eth0) !libvirt.ipaddr_routed mSET(192.168.1.0) !libvirt.netmask_routed mSET(255.255.255.0) !libvirt.dhcpstart_routed mSET(192.168.1.1) !libvirt.dhcpend_routed mSET(192.168.1.254) !libvirt.nethost_routed mSET(host1 host2) !libvirt.hostname_routed_host1 mSET(test) !libvirt.hostmac_routed_host1 mSET(00:1E:C9:53:29:AD) !libvirt.hostip_routed_host1 mSET(1.1.1.1) !libvirt.hostname_routed_host2 mSET(test2) !libvirt.hostmac_routed_host2 mSET(00:1F:B9:65:12:AB) !libvirt.hostip_routed_host2 mSET(2.2.2.2)
Source code available on LCFG SVN. You’ll need an Informatics iFriend account to see the contents. RPMs should follow sooner or later.
You must be logged in to post a comment.