mirror of https://github.com/rancher/cli.git
169 lines
3.4 KiB
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
|
|
}
|