This commit adds filesystem device support. A new family of types DomainFilesystem* are introduced and plumbed into the DomainDeviceList struct. Testing has also been included. --- domain.go | 40 ++++++++++++++++++++++++++++++++++++++++ domain_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/domain.go b/domain.go index 307c71c..cccd9a6 100644 --- a/domain.go +++ b/domain.go @@ -81,6 +81,45 @@ type DomainDisk struct { Target *DomainDiskTarget `xml:"target"` } +type DomainFilesystemDriver struct { + Type string `xml:"type,attr"` + Name string `xml:"name,attr,omitempty"` + WRPolicy string `xml:"wrpolicy,attr,omitempty"` +} + +type DomainFilesystemSource struct { + Dir string `xml:"dir,attr,omitempty"` + File string `xml:"file,attr,omitempty"` +} + +type DomainFilesystemTarget struct { + Dir string `xml:"dir,attr"` +} + +type DomainFilesystemReadOnly struct { +} + +type DomainFilesystemSpaceHardLimit struct { + Value int `xml:",chardata"` + Unit string `xml:"unit,attr,omitempty"` +} + +type DomainFilesystemSpaceSoftLimit struct { + Value int `xml:",chardata"` + Unit string `xml:"unit,attr,omitempty"` +} + +type DomainFilesystem struct { + Type string `xml:"type,attr"` + AccessMode string `xml:"accessmode,attr"` + Driver *DomainFilesystemDriver `xml:"driver"` + Source *DomainFilesystemSource `xml:"source"` + Target *DomainFilesystemTarget `xml:"target"` + ReadOnly *DomainFilesystemReadOnly `xml:"readonly"` + SpaceHardLimit *DomainFilesystemSpaceHardLimit `xml:"space_hard_limit"` + SpaceSoftLimit *DomainFilesystemSpaceSoftLimit `xml:"space_soft_limit"` +} + type DomainInterfaceMAC struct { Address string `xml:"address,attr"` } @@ -212,6 +251,7 @@ type DomainVideo struct { type DomainDeviceList struct { Controllers []DomainController `xml:"controller"` Disks []DomainDisk `xml:"disk"` + Filesystems []DomainFilesystem `xml:"filesystem"` Interfaces []DomainInterface `xml:"interface"` Serials []DomainChardev `xml:"serial"` Consoles []DomainChardev `xml:"console"` diff --git a/domain_test.go b/domain_test.go index e5347ea..06d585c 100644 --- a/domain_test.go +++ b/domain_test.go @@ -690,6 +690,61 @@ var domainTestData = []struct { `</domain>`, }, }, + { + Object: &Domain{ + Type: "kvm", + Name: "test", + Devices: &DomainDeviceList{ + Filesystems: []DomainFilesystem{ + DomainFilesystem{ + Type: "mount", + AccessMode: "mapped", + Driver: &DomainFilesystemDriver{ + Type: "path", + WRPolicy: "immediate", + }, + Source: &DomainFilesystemSource{ + Dir: "/home/user/test", + }, + Target: &DomainFilesystemTarget{ + Dir: "user-test-mount", + }, + }, + DomainFilesystem{ + Type: "file", + AccessMode: "passthrough", + Driver: &DomainFilesystemDriver{ + Name: "loop", + Type: "raw", + }, + Source: &DomainFilesystemSource{ + File: "/home/user/test.img", + }, + Target: &DomainFilesystemTarget{ + Dir: "user-file-test-mount", + }, + }, + }, + }, + }, + Expected: []string{ + `<domain type="kvm">`, + ` <name>test</name>`, + ` <devices>`, + ` <filesystem type="mount" accessmode="mapped">`, + ` <driver type="path" wrpolicy="immediate"></driver>`, + ` <source dir="/home/user/test"></source>`, + ` <target dir="user-test-mount"></target>`, + ` </filesystem>`, + ` <filesystem type="file" accessmode="passthrough">`, + ` <driver type="raw" name="loop"></driver>`, + ` <source file="/home/user/test.img"></source>`, + ` <target dir="user-file-test-mount"></target>`, + ` </filesystem>`, + ` </devices>`, + `</domain>`, + }, + }, } func TestDomain(t *testing.T) { -- 2.11.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list