[libvirt] [PATCH go-xml] Support for filesystem devices

Ryan Goodfellow posted 1 patch 6 years, 12 months ago
Failed in applying to current master (apply log)
domain.go      | 40 ++++++++++++++++++++++++++++++++++++++++
domain_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 95 insertions(+)
[libvirt] [PATCH go-xml] Support for filesystem devices
Posted by Ryan Goodfellow 6 years, 12 months ago
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@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH go-xml] Support for filesystem devices
Posted by Ryan Goodfellow 6 years, 12 months ago
Hi Folks,

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.

On Tue, Apr 18, 2017 at 3:01 PM, Ryan Goodfellow <rgoodfel@isi.edu> wrote:

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


-- 
*ry**@isi*
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH go-xml] Support for filesystem devices
Posted by Daniel P. Berrange 6 years, 12 months ago
On Thu, Apr 20, 2017 at 09:56:59PM -0700, Ryan Goodfellow wrote:
> Hi Folks,
> 
> 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.

Sorry for the delay, this is on my todo list to review...

> 
> On Tue, Apr 18, 2017 at 3:01 PM, Ryan Goodfellow <rgoodfel@isi.edu> wrote:
> 
> > 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
> >
> >
> 
> 
> -- 
> *ry**@isi*

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH go-xml] Support for filesystem devices
Posted by Daniel P. Berrange 6 years, 11 months ago
On Tue, Apr 18, 2017 at 03:01:18PM -0700, Ryan Goodfellow wrote:
> 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(+)

Thanks, I've pushed this to master now.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list