<div dir="ltr">Hi Folks,<div><br></div><div>Any thoughts on this? This is my first time posting to this list, not sure if I should direct the patch at someone in particular.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 18, 2017 at 3:01 PM, Ryan Goodfellow <span dir="ltr"><<a href="mailto:rgoodfel@isi.edu" target="_blank">rgoodfel@isi.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This commit adds filesystem device support. A new family of types<br>
DomainFilesystem* are introduced and plumbed into the DomainDeviceList<br>
struct.<br>
<br>
Testing has also been included.<br>
---<br>
domain.go | 40 ++++++++++++++++++++++++++++++<wbr>++++++++++<br>
domain_test.go | 55 ++++++++++++++++++++++++++++++<wbr>+++++++++++++++++++++++++<br>
2 files changed, 95 insertions(+)<br>
<br>
diff --git a/domain.go b/domain.go<br>
index 307c71c..cccd9a6 100644<br>
--- a/domain.go<br>
+++ b/domain.go<br>
@@ -81,6 +81,45 @@ type DomainDisk struct {<br>
Target *DomainDiskTarget `xml:"target"`<br>
}<br>
<br>
+type DomainFilesystemDriver struct {<br>
+ Type string `xml:"type,attr"`<br>
+ Name string `xml:"name,attr,omitempty"`<br>
+ WRPolicy string `xml:"wrpolicy,attr,omitempty"<wbr>`<br>
+}<br>
+<br>
+type DomainFilesystemSource struct {<br>
+ Dir string `xml:"dir,attr,omitempty"`<br>
+ File string `xml:"file,attr,omitempty"`<br>
+}<br>
+<br>
+type DomainFilesystemTarget struct {<br>
+ Dir string `xml:"dir,attr"`<br>
+}<br>
+<br>
+type DomainFilesystemReadOnly struct {<br>
+}<br>
+<br>
+type DomainFilesystemSpaceHardLimit struct {<br>
+ Value int `xml:",chardata"`<br>
+ Unit string `xml:"unit,attr,omitempty"`<br>
+}<br>
+<br>
+type DomainFilesystemSpaceSoftLimit struct {<br>
+ Value int `xml:",chardata"`<br>
+ Unit string `xml:"unit,attr,omitempty"`<br>
+}<br>
+<br>
+type DomainFilesystem struct {<br>
+ Type string `xml:"type,attr"`<br>
+ AccessMode string `xml:"accessmode,attr"`<br>
+ Driver *DomainFilesystemDriver `xml:"driver"`<br>
+ Source *DomainFilesystemSource `xml:"source"`<br>
+ Target *DomainFilesystemTarget `xml:"target"`<br>
+ ReadOnly *DomainFilesystemReadOnly `xml:"readonly"`<br>
+ SpaceHardLimit *<wbr>DomainFilesystemSpaceHardLimit `xml:"space_hard_limit"`<br>
+ SpaceSoftLimit *<wbr>DomainFilesystemSpaceSoftLimit `xml:"space_soft_limit"`<br>
+}<br>
+<br>
type DomainInterfaceMAC struct {<br>
Address string `xml:"address,attr"`<br>
}<br>
@@ -212,6 +251,7 @@ type DomainVideo struct {<br>
type DomainDeviceList struct {<br>
Controllers []DomainController `xml:"controller"`<br>
Disks []DomainDisk `xml:"disk"`<br>
+ Filesystems []DomainFilesystem `xml:"filesystem"`<br>
Interfaces []DomainInterface `xml:"interface"`<br>
Serials []DomainChardev `xml:"serial"`<br>
Consoles []DomainChardev `xml:"console"`<br>
diff --git a/domain_test.go b/domain_test.go<br>
index e5347ea..06d585c 100644<br>
--- a/domain_test.go<br>
+++ b/domain_test.go<br>
@@ -690,6 +690,61 @@ var domainTestData = []struct {<br>
`</domain>`,<br>
},<br>
},<br>
+ {<br>
+ Object: &Domain{<br>
+ Type: "kvm",<br>
+ Name: "test",<br>
+ Devices: &DomainDeviceList{<br>
+ Filesystems: []DomainFilesystem{<br>
+ DomainFilesystem{<br>
+ Type: "mount",<br>
+ AccessMode: "mapped",<br>
+ Driver: &DomainFilesystemDriver{<br>
+ Type: "path",<br>
+ WRPolicy: "immediate",<br>
+ },<br>
+ Source: &DomainFilesystemSource{<br>
+ Dir: "/home/user/test",<br>
+ },<br>
+ Target: &DomainFilesystemTarget{<br>
+ Dir: "user-test-mount",<br>
+ },<br>
+ },<br>
+ DomainFilesystem{<br>
+ Type: "file",<br>
+ AccessMode: "passthrough",<br>
+ Driver: &DomainFilesystemDriver{<br>
+ Name: "loop",<br>
+ Type: "raw",<br>
+ },<br>
+ Source: &DomainFilesystemSource{<br>
+ File: "/home/user/test.img",<br>
+ },<br>
+ Target: &DomainFilesystemTarget{<br>
+ Dir: "user-file-test-mount",<br>
+ },<br>
+ },<br>
+ },<br>
+ },<br>
+ },<br>
+ Expected: []string{<br>
+ `<domain type="kvm">`,<br>
+ ` <name>test</name>`,<br>
+ ` <devices>`,<br>
+ ` <filesystem type="mount" accessmode="mapped">`,<br>
+ ` <driver type="path" wrpolicy="immediate"></driver><wbr>`,<br>
+ ` <source dir="/home/user/test"></<wbr>source>`,<br>
+ ` <target dir="user-test-mount"></<wbr>target>`,<br>
+ ` </filesystem>`,<br>
+ ` <filesystem type="file" accessmode="passthrough">`,<br>
+ ` <driver type="raw" name="loop"></driver>`,<br>
+ ` <source file="/home/user/test.img"></<wbr>source>`,<br>
+ ` <target dir="user-file-test-mount"></<wbr>target>`,<br>
+ ` </filesystem>`,<br>
+ ` </devices>`,<br>
+ `</domain>`,<br>
+ },<br>
+ },<br>
}<br>
<br>
func TestDomain(t *testing.T) {<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.11.0<br>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><b><font color="#990000">ry</font></b><i style="font-size:12.8px">@<font color="#990000">isi</font></i></div></div></div></div>
</div>