Signed-off-by: Alexey Slaykovsky <aslaikov@xxxxxxxxxx> --- domain.go | 68 ++++++++++++++++++++++++ domain_test.go | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 232 insertions(+) diff --git a/domain.go b/domain.go index c98908e..ec2bd02 100644 --- a/domain.go +++ b/domain.go @@ -126,6 +126,69 @@ type DomainMemory struct { Unit string `xml:"unit,attr"` } +type DomainOSType struct { + Arch string `xml:"arch,attr"` + Machine string `xml:"machine,attr"` + Type string `xml:",chardata"` +} + +type DomainSMBios struct { + Mode string `xml:"mode,attr"` +} + +type DomainNVRam struct { + NVRam string `xml:",chardata"` + Template string `xml:"template,attr"` +} + +type DomainBootDevice struct { + Dev string `xml:"dev,attr"` +} + +type DomainBootMenu struct { + Enabled string `xml:"enabled,attr"` + Timeout string `xml:"timeout,attr"` +} + +type DomainSysInfo struct { + Type string `xml:"type,attr"` + System []DomainSysInfoEntry `xml:"system>entry"` + BIOS []DomainSysInfoEntry `xml:"bios>entry"` + BaseBoard []DomainSysInfoEntry `xml:"baseBoard>entry"` +} + +type DomainSysInfoEntry struct { + Name string `xml:"name,attr"` + Value string `xml:",chardata"` +} + +type DomainBIOS struct { + UseSerial string `xml:"useserial,attr"` + RebootTimeout string `xml:"rebootTimeout,attr"` +} + +type DomainLoader struct { + Path string `xml:",chardata"` + Readonly string `xml:"readonly,attr"` + Secure string `xml:"secure,attr"` + Type string `xml:"type,attr"` +} + +type DomainOS struct { + Type *DomainOSType `xml:"type"` + Loader *DomainLoader `xml:"loader"` + NVRam *DomainNVRam `xml:"nvram"` + Kernel string `xml:"kernel,omitempty"` + Initrd string `xml:"initrd,omitempty"` + KernelArgs string `xml:"cmdline,omitempty"` + BootDevices []DomainBootDevice `xml:"boot"` + BootMenu *DomainBootMenu `xml:"bootmenu"` + SMBios *DomainSMBios `xml:"smbios"` + BIOS *DomainBIOS `xml:"bios"` + Init string `xml:"init,omitempty"` + InitArgs []string `xml:"initarg"` +} + type Domain struct { XMLName xml.Name `xml:"domain"` Type string `xml:"type,attr"` @@ -134,4 +197,9 @@ type Domain struct { Memory *DomainMemory `xml:"memory"` CurrentMemory *DomainMemory `xml:"currentMemory"` Devices *DomainDeviceList `xml:"devices"` + OS *DomainOS `xml:"os"` + SysInfo *DomainSysInfo `xml:"sysinfo"` + OnPoweroff string `xml:"on_poweroff,omitempty"` + OnReboot string `xml:"on_reboot,omitempty"` + OnCrash string `xml:"on_crash,omitempty"` } diff --git a/domain_test.go b/domain_test.go index e403aeb..ae262e5 100644 --- a/domain_test.go +++ b/domain_test.go @@ -121,6 +121,170 @@ var domainTestData = []struct { `</domain>`, }, }, + { + Object: &Domain{ + Type: "kvm", + Name: "test", + Memory: &DomainMemory{ + Unit: "KiB", + Value: "8192", + }, + CurrentMemory: &DomainMemory{ + Unit: "KiB", + Value: "4096", + }, + OS: &DomainOS{ + Type: &DomainOSType{ + Arch: "x86_64", + Machine: "pc", + Type: "hvm", + }, + BootDevices: []DomainBootDevice{ + DomainBootDevice{ + Dev: "hd", + }, + }, + Loader: &DomainLoader{ + Readonly: "yes", + Secure: "no", + Type: "rom", + Path: "/loader", + }, + SMBios: &DomainSMBios{ + Mode: "sysinfo", + }, + BIOS: &DomainBIOS{ + UseSerial: "yes", + RebootTimeout: "0", + }, + Init: "/bin/systemd", + InitArgs: []string{ + "--unit", + "emergency.service", + }, + }, + SysInfo: &DomainSysInfo{ + Type: "smbios", + BIOS: []DomainSysInfoEntry{ + DomainSysInfoEntry{ + Name: "vendor", + Value: "vendor", + }, + }, + System: []DomainSysInfoEntry{ + DomainSysInfoEntry{ + Name: "manufacturer", + Value: "manufacturer", + }, + DomainSysInfoEntry{ + Name: "product", + Value: "product", + }, + DomainSysInfoEntry{ + Name: "version", + Value: "version", + }, + }, + BaseBoard: []DomainSysInfoEntry{ + DomainSysInfoEntry{ + Name: "manufacturer", + Value: "manufacturer", + }, + DomainSysInfoEntry{ + Name: "product", + Value: "product", + }, + DomainSysInfoEntry{ + Name: "version", + Value: "version", + }, + DomainSysInfoEntry{ + Name: "serial", + Value: "serial", + }, + }, + }, + }, + Expected: []string{ + `<domain type="kvm">`, + ` <name>test</name>`, + ` <memory unit="KiB">8192</memory>`, + ` <currentMemory unit="KiB">4096</currentMemory>`, + ` <os>`, + ` <type arch="x86_64" machine="pc">hvm</type>`, + ` <loader readonly="yes" secure="no" type="rom">/loader</loader>`, + ` <boot dev="hd"></boot>`, + ` <smbios mode="sysinfo"></smbios>`, + ` <bios useserial="yes" rebootTimeout="0"></bios>`, + ` <init>/bin/systemd</init>`, + ` <initarg>--unit</initarg>`, + ` <initarg>emergency.service</initarg>`, + ` </os>`, + ` <sysinfo type="smbios">`, + ` <system>`, + ` <entry name="manufacturer">manufacturer</entry>`, + ` <entry name="product">product</entry>`, + ` <entry name="version">version</entry>`, + ` </system>`, + ` <bios>`, + ` <entry name="vendor">vendor</entry>`, + ` </bios>`, + ` <baseBoard>`, + ` <entry name="manufacturer">manufacturer</entry>`, + ` <entry name="product">product</entry>`, + ` <entry name="version">version</entry>`, + ` <entry name="serial">serial</entry>`, + ` </baseBoard>`, + ` </sysinfo>`, + `</domain>`, + }, + }, + { + Object: &Domain{ + Type: "kvm", + Name: "test", + OS: &DomainOS{ + NVRam: &DomainNVRam{ + Template: "/t.fd", + NVRam: "/vars.fd", + }, + BootMenu: &DomainBootMenu{ + Enabled: "yes", + Timeout: "3000", + }, + }, + }, + Expected: []string{ + `<domain type="kvm">`, + ` <name>test</name>`, + ` <os>`, + ` <nvram template="/t.fd">/vars.fd</nvram>`, + ` <bootmenu enabled="yes" timeout="3000"></bootmenu>`, + ` </os>`, + `</domain>`, + }, + }, + { + Object: &Domain{ + Type: "kvm", + Name: "test", + OS: &DomainOS{ + Kernel: "/vmlinuz", + Initrd: "/initrd", + KernelArgs: "arg", + }, + }, + Expected: []string{ + `<domain type="kvm">`, + ` <name>test</name>`, + ` <os>`, + ` <kernel>/vmlinuz</kernel>`, + ` <initrd>/initrd</initrd>`, + ` <cmdline>arg</cmdline>`, + ` </os>`, + `</domain>`, + }, + }, } func TestDomain(t *testing.T) { -- 2.11.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list