[PATCH go-xml] Support for filesystem devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux