The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8259
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === …age properties Signed-off-by: Tate Song <tlsong54...@gmail.com>
From 92c6b68379fb97f027aa440e157ce8b727b15d7f Mon Sep 17 00:00:00 2001 From: Tate Song <tlsong54...@gmail.com> Date: Tue, 15 Dec 2020 20:35:51 -0600 Subject: [PATCH] lxc/image: Add support for directly getting, setting and unsetting image properties Signed-off-by: Tate Song <tlsong54...@gmail.com> --- lxc/image.go | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/lxc/image.go b/lxc/image.go index 8d3332ac53..9849a3ec79 100644 --- a/lxc/image.go +++ b/lxc/image.go @@ -92,6 +92,18 @@ hash or alias name (if one is set).`)) imageShowCmd := cmdImageShow{global: c.global, image: c} cmd.AddCommand(imageShowCmd.Command()) + // Get-property + imageGetPropCmd := cmdImageGetProp{global: c.global, image: c} + cmd.AddCommand(imageGetPropCmd.Command()) + + // Set-property + imageSetPropCmd := cmdImageSetProp{global: c.global, image: c} + cmd.AddCommand(imageSetPropCmd.Command()) + + // Unset-property + imageUnsetPropCmd := cmdImageUnsetProp{global: c.global, image: c, imageSetProp: &imageSetPropCmd} + cmd.AddCommand(imageUnsetPropCmd.Command()) + return cmd } @@ -1396,3 +1408,140 @@ func (c *cmdImageShow) Run(cmd *cobra.Command, args []string) error { return nil } + +type cmdImageGetProp struct { + global *cmdGlobal + image *cmdImage +} + +func (c *cmdImageGetProp) Command() *cobra.Command { + cmd := &cobra.Command{} + cmd.Use = usage("get-property", i18n.G("[<remote>:]<image> <key>")) + cmd.Short = i18n.G("Get image properties") + cmd.Long = cli.FormatSection(i18n.G("Description"), i18n.G( + `Get image properties`)) + + cmd.RunE = c.Run + + return cmd +} + +func (c *cmdImageGetProp) Run(cmd *cobra.Command, args []string) error { + // Sanity checks + exit, err := c.global.CheckArgs(cmd, args, 2, 2) + if exit { + return err + } + + // Parse remote + remoteName, name, err := c.global.conf.ParseRemote(args[0]) + if err != nil { + return err + } + + remoteServer, err := c.global.conf.GetImageServer(remoteName) + if err != nil { + return err + } + + // Get the corresponding property + image := c.image.dereferenceAlias(remoteServer, "", name) + info, _, err := remoteServer.GetImage(image) + if err != nil { + return err + } + + properties := info.Writable() + prop, propFound := properties.Properties[args[1]] + if !propFound { + return fmt.Errorf(i18n.G("Property not found")) + } + + fmt.Println(prop) + + return nil +} + +type cmdImageSetProp struct { + global *cmdGlobal + image *cmdImage +} + +func (c *cmdImageSetProp) Command() *cobra.Command { + cmd := &cobra.Command{} + cmd.Use = usage("set-property", i18n.G("[<remote>:]<image> <key> <value>")) + cmd.Short = i18n.G("Set image properties") + cmd.Long = cli.FormatSection(i18n.G("Description"), i18n.G( + `Set image properties`)) + + cmd.RunE = c.Run + + return cmd +} + +func (c *cmdImageSetProp) Run(cmd *cobra.Command, args []string) error { + // Sanity checks + exit, err := c.global.CheckArgs(cmd, args, 3, 3) + if exit { + return err + } + + // Parse remote + resources, err := c.global.ParseServers(args[0]) + if err != nil { + return err + } + + resource := resources[0] + + if resource.name == "" { + return fmt.Errorf(i18n.G("Image identifier missing: %s"), args[0]) + } + + // Show properties + image := c.image.dereferenceAlias(resource.server, "", resource.name) + info, etag, err := resource.server.GetImage(image) + if err != nil { + return err + } + + properties := info.Writable() + properties.Properties[args[1]] = args[2] + + // Update image + err = resource.server.UpdateImage(image, properties, etag) + if err != nil { + return err + } + + return nil +} + +type cmdImageUnsetProp struct { + global *cmdGlobal + image *cmdImage + imageSetProp *cmdImageSetProp +} + +func (c *cmdImageUnsetProp) Command() *cobra.Command { + cmd := &cobra.Command{} + cmd.Use = usage("unset-property", i18n.G("[<remote>:]<image> <key>")) + cmd.Short = i18n.G("Unset image properties") + cmd.Long = cli.FormatSection(i18n.G("Description"), i18n.G( + `Unset image properties`)) + + cmd.RunE = c.Run + + return cmd +} + +func (c *cmdImageUnsetProp) Run(cmd *cobra.Command, args []string) error { + // Sanity checks + exit, err := c.global.CheckArgs(cmd, args, 2, 2) + if exit { + return err + } + + args = append(args, "") + return c.imageSetProp.Run(cmd, args) +}
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel