-
Notifications
You must be signed in to change notification settings - Fork 16
/
config_updates.go
73 lines (63 loc) · 2.54 KB
/
config_updates.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package devices
import (
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/foundriesio/fioctl/client"
"github.com/foundriesio/fioctl/subcommands"
)
func init() {
configUpdatesCmd := &cobra.Command{
Use: "updates <device>",
Short: "Configure aktualizr-lite settings for how updates are applied to a device",
Run: doConfigUpdates,
Args: cobra.ExactArgs(1),
Long: `View or change configuration parameters used by aktualizr-lite for updating a device.
When run with no options, this command will print out how the device is
currently configured and reporting.`,
Example: `
# Make a device start taking updates from Targets tagged with "devel"
fioctl devices config updates <device> --tag devel
# Set the docker apps a device will run:
fioctl devices config updates <device> --apps shellhttpd
# Set the docker apps and the tag:
fioctl devices config updates <device> --apps shellhttpd --tag master
`,
}
configCmd.AddCommand(configUpdatesCmd)
configUpdatesCmd.Flags().StringP("tag", "", "", "Target tag for device to follow")
configUpdatesCmd.Flags().StringP("tags", "", "", "Target tag for device to follow")
configUpdatesCmd.Flags().StringP("apps", "", "", "comma,separate,list")
configUpdatesCmd.Flags().BoolP("dryrun", "", false, "Only show what would be changed")
configUpdatesCmd.Flags().BoolP("force", "", false, "DANGER: For a config on a device that might result in corruption")
_ = configUpdatesCmd.Flags().MarkHidden("tags") // assign for go linter
}
func doConfigUpdates(cmd *cobra.Command, args []string) {
factory := viper.GetString("factory")
name := args[0]
updateApps, _ := cmd.Flags().GetString("apps")
updateTag, _ := cmd.Flags().GetString("tag")
if len(updateTag) == 0 {
// check the old, deprecated "tags" option
updateTag, _ = cmd.Flags().GetString("tags")
}
isDryRun, _ := cmd.Flags().GetBool("dryrun")
isForced, _ := cmd.Flags().GetBool("force")
logrus.Debugf("Configuring device updates for %s", name)
device, err := api.DeviceGet(factory, name)
subcommands.DieNotNil(err, "Failed to fetch a device:")
subcommands.SetUpdatesConfig(&subcommands.SetUpdatesConfigOptions{
UpdateApps: updateApps,
UpdateTag: updateTag,
IsDryRun: isDryRun,
IsForced: isForced,
Device: device,
ListFunc: func() (*client.DeviceConfigList, error) {
return api.DeviceListConfig(factory, name)
},
SetFunc: func(cfg client.ConfigCreateRequest, force bool) error {
return api.DevicePatchConfig(factory, name, cfg, force)
},
},
device.Tag, device.DockerApps)
}