cli/cmd/settings.go

169 lines
3.4 KiB
Go

package cmd
import (
managementClient "github.com/rancher/rancher/pkg/client/generated/management/v3"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
type settingHolder struct {
ID string
Setting managementClient.Setting
}
func SettingsCommand() cli.Command {
return cli.Command{
Name: "settings",
Aliases: []string{"setting"},
Usage: "Show settings for the current server",
Description: "List get or set settings for the current Rancher server",
Action: defaultAction(settingsLs),
Flags: []cli.Flag{
formatFlag,
},
Subcommands: []cli.Command{
{
Name: "ls",
Usage: "List settings",
Description: "Lists all settings in the current cluster.",
ArgsUsage: "[SETTINGNAME]",
Action: settingsLs,
Flags: []cli.Flag{
formatFlag,
quietFlag,
},
},
{
Name: "get",
Usage: "Print a setting",
Action: settingGet,
Flags: []cli.Flag{
formatFlag,
},
},
{
Name: "set",
Usage: "Set the value for a setting",
Action: settingSet,
ArgsUsage: "[SETTINGNAME VALUE]",
Flags: []cli.Flag{
formatFlag,
cli.BoolFlag{
Name: "default",
Usage: "Reset the setting back to it's default value. If the default value is (blank) it will be set to that.",
},
},
},
},
}
}
func settingsLs(ctx *cli.Context) error {
c, err := GetClient(ctx)
if err != nil {
return err
}
settings, err := c.ManagementClient.Setting.List(defaultListOpts(ctx))
if err != nil {
return err
}
writer := NewTableWriter([][]string{
{"ID", "ID"},
{"NAME", "Setting.Name"},
{"VALUE", "Setting.Value"},
}, ctx)
defer writer.Close()
for _, setting := range settings.Data {
writer.Write(&settingHolder{
ID: setting.ID,
Setting: setting,
})
}
return writer.Err()
}
func settingGet(ctx *cli.Context) error {
if ctx.NArg() == 0 {
return cli.ShowCommandHelp(ctx, "settings")
}
c, err := GetClient(ctx)
if err != nil {
return err
}
resource, err := Lookup(c, ctx.Args().First(), "setting")
if err != nil {
return err
}
setting, err := c.ManagementClient.Setting.ByID(resource.ID)
if err != nil {
return err
}
writer := NewTableWriter([][]string{
{"ID", "ID"},
{"NAME", "Setting.Name"},
{"VALUE", "Setting.Value"},
{"DEFAULT", "Setting.Default"},
{"CUSTOMIZED", "Setting.Customized"},
}, ctx)
defer writer.Close()
writer.Write(&settingHolder{
ID: setting.ID,
Setting: *setting,
})
return writer.Err()
}
func settingSet(ctx *cli.Context) error {
if ctx.NArg() == 0 {
return cli.ShowCommandHelp(ctx, "settings")
}
c, err := GetClient(ctx)
if err != nil {
return err
}
resource, err := Lookup(c, ctx.Args().First(), "setting")
if err != nil {
return err
}
setting, err := c.ManagementClient.Setting.ByID(resource.ID)
if err != nil {
return err
}
update := make(map[string]string)
if ctx.Bool("default") {
update["value"] = setting.Default
} else {
update["value"] = ctx.Args().Get(1)
}
updatedSetting, err := c.ManagementClient.Setting.Update(setting, update)
if err != nil {
return err
}
var updatedValue string
if updatedSetting.Value == "" {
updatedValue = "(blank)"
} else {
updatedValue = updatedSetting.Value
}
logrus.Infof("Successfully updated setting %s with a new value of: %s", updatedSetting.Name, updatedValue)
return nil
}