The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/2038
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) === * s/apply-add/add * s/apply-remove/remove * s/apply/assign * allow `lxc profile apply ''` again Closes #1920 Closes #2037 Signed-off-by: Tycho Andersen <tycho.ander...@canonical.com>
From 3a6d6a56d214f7b212d283f6c7ba992ef99e618f Mon Sep 17 00:00:00 2001 From: Tycho Andersen <tycho.ander...@canonical.com> Date: Fri, 20 May 2016 13:58:54 -0700 Subject: [PATCH] rework `lxc profile apply*` cli * s/apply-add/add * s/apply-remove/remove * s/apply/assign * allow `lxc profile apply ''` again Closes #1920 Closes #2037 Signed-off-by: Tycho Andersen <tycho.ander...@canonical.com> --- client.go | 8 ++++++-- lxc/profile.go | 32 +++++++++++++++++--------------- po/lxd.pot | 32 +++++++++++++++++--------------- test/suites/config.sh | 12 ++++++++++++ 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/client.go b/client.go index a951af8..d1e08cb 100644 --- a/client.go +++ b/client.go @@ -2067,7 +2067,7 @@ func (c *Client) ListProfiles() ([]string, error) { return names, nil } -func (c *Client) ApplyProfile(container, profile string) (*Response, error) { +func (c *Client) AssignProfile(container, profile string) (*Response, error) { if c.Remote.Public { return nil, fmt.Errorf("This function isn't supported by public remotes.") } @@ -2077,7 +2077,11 @@ func (c *Client) ApplyProfile(container, profile string) (*Response, error) { return nil, err } - st.Profiles = strings.Split(profile, ",") + if profile != "" { + st.Profiles = strings.Split(profile, ",") + } else { + st.Profiles = nil + } return c.put(fmt.Sprintf("containers/%s", container), st, Async) } diff --git a/lxc/profile.go b/lxc/profile.go index 2322d4e..0153281 100644 --- a/lxc/profile.go +++ b/lxc/profile.go @@ -60,16 +60,18 @@ lxc profile edit <profile> Example: lxc profile edit <profile> # launch editor cat profile.yml | lxc profile edit <profile> # read from profile.yml -lxc profile apply <container> <profiles> - Apply a comma-separated list of profiles to a container, in order. +lxc profile assign <container> <profiles> + Assign a comma-separated list of profiles to a container, in order. All profiles passed in this call (and only those) will be applied - to the specified container. + to the specified container, i.e. it sets the list of profiles exactly to + those specified in this command. To add/remove a particular profile from a + container, use {add|remove} below. Example: lxc profile apply foo default,bar # Apply default and bar lxc profile apply foo default # Only default is active lxc profile apply '' # no profiles are applied anymore lxc profile apply bar,default # Apply default second now -lxc profile apply-add <container> <profile> -lxc profile apply-remove <container> <profile> +lxc profile add <container> <profile> # add a profile to a container +lxc profile remove <container> <profile> # remove the profile from a container Devices: lxc profile device list <profile> List devices in the given profile. @@ -113,7 +115,7 @@ func (c *profileCmd) run(config *lxd.Config, args []string) error { return c.doProfileDevice(config, args) case "edit": return c.doProfileEdit(client, profile) - case "apply": + case "apply", "assign": container := profile switch len(args) { case 2: @@ -123,8 +125,8 @@ func (c *profileCmd) run(config *lxd.Config, args []string) error { default: return errArgs } - return c.doProfileApply(client, container, profile) - case "apply-add": + return c.doProfileAssign(client, container, profile) + case "add": container := profile switch len(args) { case 2: @@ -134,8 +136,8 @@ func (c *profileCmd) run(config *lxd.Config, args []string) error { default: return errArgs } - return c.doProfileApplyAdd(client, container, profile) - case "apply-remove": + return c.doProfileAdd(client, container, profile) + case "remove": container := profile switch len(args) { case 2: @@ -145,7 +147,7 @@ func (c *profileCmd) run(config *lxd.Config, args []string) error { default: return errArgs } - return c.doProfileApplyRemove(client, container, profile) + return c.doProfileRemove(client, container, profile) case "get": return c.doProfileGet(client, profile, args[2:]) case "set": @@ -239,8 +241,8 @@ func (c *profileCmd) doProfileDelete(client *lxd.Client, p string) error { return err } -func (c *profileCmd) doProfileApply(client *lxd.Client, d string, p string) error { - resp, err := client.ApplyProfile(d, p) +func (c *profileCmd) doProfileAssign(client *lxd.Client, d string, p string) error { + resp, err := client.AssignProfile(d, p) if err != nil { return err } @@ -256,7 +258,7 @@ func (c *profileCmd) doProfileApply(client *lxd.Client, d string, p string) erro return err } -func (c *profileCmd) doProfileApplyAdd(client *lxd.Client, d string, p string) error { +func (c *profileCmd) doProfileAdd(client *lxd.Client, d string, p string) error { ct, err := client.ContainerInfo(d) if err != nil { return err @@ -274,7 +276,7 @@ func (c *profileCmd) doProfileApplyAdd(client *lxd.Client, d string, p string) e return err } -func (c *profileCmd) doProfileApplyRemove(client *lxd.Client, d string, p string) error { +func (c *profileCmd) doProfileRemove(client *lxd.Client, d string, p string) error { ct, err := client.ContainerInfo(d) if err != nil { return err diff --git a/po/lxd.pot b/po/lxd.pot index 8f3339c..373df2e 100644 --- a/po/lxd.pot +++ b/po/lxd.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: lxd\n" "Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n" - "POT-Creation-Date: 2016-05-17 17:02-0400\n" + "POT-Creation-Date: 2016-05-20 13:58-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <l...@li.org>\n" @@ -86,7 +86,7 @@ msgstr "" msgid "'/' not allowed in snapshot name" msgstr "" -#: lxc/profile.go:251 +#: lxc/profile.go:253 msgid "(none)" msgstr "" @@ -159,7 +159,7 @@ msgstr "" msgid "Can't unset key '%s', it's not currently set." msgstr "" -#: lxc/profile.go:417 +#: lxc/profile.go:419 msgid "Cannot provide container name to list" msgstr "" @@ -187,7 +187,7 @@ msgstr "" msgid "Config key/value to apply to the new container" msgstr "" -#: lxc/config.go:527 lxc/config.go:592 lxc/image.go:714 lxc/profile.go:215 +#: lxc/config.go:527 lxc/config.go:592 lxc/image.go:714 lxc/profile.go:217 #, c-format msgid "Config parsing error: %s" msgstr "" @@ -525,16 +525,18 @@ msgid "Manage configuration profiles.\n" " Example: lxc profile edit <profile> # launch editor\n" " cat profile.yml | lxc profile edit <profile> # read from profile.yml\n" "\n" - "lxc profile apply <container> <profiles>\n" - " Apply a comma-separated list of profiles to a container, in order.\n" + "lxc profile assign <container> <profiles>\n" + " Assign a comma-separated list of profiles to a container, in order.\n" " All profiles passed in this call (and only those) will be applied\n" - " to the specified container.\n" + " to the specified container, i.e. it sets the list of profiles exactly to\n" + " those specified in this command. To add/remove a particular profile from a\n" + " container, use {add|remove} below.\n" " Example: lxc profile apply foo default,bar # Apply default and bar\n" " lxc profile apply foo default # Only default is active\n" " lxc profile apply '' # no profiles are applied anymore\n" " lxc profile apply bar,default # Apply default second now\n" - "lxc profile apply-add <container> <profile>\n" - "lxc profile apply-remove <container> <profile>\n" + "lxc profile add <container> <profile> # add a profile to a container\n" + "lxc profile remove <container> <profile> # remove the profile from a container\n" "\n" "Devices:\n" "lxc profile device list <profile> List devices in the given profile.\n" @@ -809,7 +811,7 @@ msgid "Presents details on how to use LXD.\n" "lxd help [--all]" msgstr "" -#: lxc/profile.go:216 +#: lxc/profile.go:218 msgid "Press enter to open the editor again" msgstr "" @@ -840,22 +842,22 @@ msgstr "" msgid "Processes: %d" msgstr "" -#: lxc/profile.go:272 +#: lxc/profile.go:274 #, c-format msgid "Profile %s added to %s" msgstr "" -#: lxc/profile.go:167 +#: lxc/profile.go:169 #, c-format msgid "Profile %s created" msgstr "" -#: lxc/profile.go:237 +#: lxc/profile.go:239 #, c-format msgid "Profile %s deleted" msgstr "" -#: lxc/profile.go:303 +#: lxc/profile.go:305 #, c-format msgid "Profile %s removed from %s" msgstr "" @@ -864,7 +866,7 @@ msgstr "" msgid "Profile to apply to the new container" msgstr "" -#: lxc/profile.go:253 +#: lxc/profile.go:255 #, c-format msgid "Profiles %s applied to %s" msgstr "" diff --git a/test/suites/config.sh b/test/suites/config.sh index 6613727..732e11e 100644 --- a/test/suites/config.sh +++ b/test/suites/config.sh @@ -92,6 +92,18 @@ test_config_profiles() { # into the database and never let the user edit the container again. ! lxc config set foo raw.lxc "lxc.notaconfigkey = invalid" + # check that various profile application mechanisms work + lxc profile create one + lxc profile create two + lxc profile assign foo one,two + [ "$(lxc info foo | grep Profiles)" = "Profiles: one, two" ] + lxc profile assign foo "" + [ "$(lxc info foo | grep Profiles)" = "Profiles: " ] + lxc profile add foo one + [ "$(lxc info foo | grep Profiles)" = "Profiles: one" ] + lxc profile remove foo one + [ "$(lxc info foo | grep Profiles)" = "Profiles: " ] + lxc profile create stdintest echo "BADCONF" | lxc profile set stdintest user.user_data - lxc profile show stdintest | grep BADCONF
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel