<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>