-
Notifications
You must be signed in to change notification settings - Fork 22
/
ceip_participation.go
110 lines (95 loc) · 3.63 KB
/
ceip_participation.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Copyright 2023 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package command
import (
"strconv"
"strings"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/vmware-tanzu/tanzu-cli/pkg/cli"
"github.com/vmware-tanzu/tanzu-plugin-runtime/component"
configlib "github.com/vmware-tanzu/tanzu-plugin-runtime/config"
"github.com/vmware-tanzu/tanzu-plugin-runtime/plugin"
)
// CeipOptOutStatus and CeipOptInStatus are constants for the CEIP opt-in/out verbiage
const (
CeipOptInStatus = "Opt-in"
CeipOptOutStatus = "Opt-out"
)
// Note(TODO:prkalle): The below ceip-participation command(experimental) added may be removed in the next release,
// If we decide to fold this functionality into existing 'tanzu telemetry' plugin
func newCEIPParticipationCmd() *cobra.Command {
var ceipParticipationCmd = &cobra.Command{
Use: "ceip-participation",
Short: "Manage VMware's Customer Experience Improvement Program (CEIP) Participation (subject to change)",
Long: "Manage VMware's Customer Experience Improvement Program (CEIP) participation which provides VMware with " +
"information that enables VMware to improve its products and services and fix problems (subject to change)",
Aliases: []string{"ceip"},
Annotations: map[string]string{
"group": string(plugin.SystemCmdGroup),
},
Hidden: true,
}
ceipParticipationCmd.SetUsageFunc(cli.SubCmdUsageFunc)
ceipParticipationCmd.AddCommand(
newCEIPParticipationSetCmd(),
newCEIPParticipationGetCmd(),
)
return ceipParticipationCmd
}
func newCEIPParticipationSetCmd() *cobra.Command {
var setCmd = &cobra.Command{
Use: "set OPT_IN_BOOL",
Short: "Set the opt-in preference for CEIP (subject to change)",
Long: "Set the opt-in preference for CEIP (subject to change)",
Args: cobra.ExactArgs(1),
ValidArgsFunction: completeCeipSet,
RunE: func(cmd *cobra.Command, args []string) error {
if !strings.EqualFold(args[0], "true") && !strings.EqualFold(args[0], "false") {
return errors.Errorf("incorrect boolean argument: %q", args[0])
}
err := configlib.SetCEIPOptIn(strconv.FormatBool(strings.EqualFold(args[0], "true")))
if err != nil {
return errors.Wrapf(err, "failed to update the configuration")
}
return nil
},
}
return setCmd
}
func newCEIPParticipationGetCmd() *cobra.Command {
var getCmd = &cobra.Command{
Use: "get",
Short: "Get the current CEIP opt-in status (subject to change)",
Long: "Get the current CEIP opt-in status (subject to change)",
ValidArgsFunction: noMoreCompletions,
RunE: func(cmd *cobra.Command, args []string) error {
optInVal, err := configlib.GetCEIPOptIn()
if err != nil {
return errors.Wrapf(err, "failed to get the CEIP opt-in status")
}
ceipStatus := ""
if strings.EqualFold(optInVal, "true") {
ceipStatus = CeipOptInStatus
} else {
ceipStatus = CeipOptOutStatus
}
t := component.NewOutputWriterWithOptions(cmd.OutOrStdout(), outputFormat, []component.OutputWriterOption{}, "CEIP-Status")
t.AddRow(ceipStatus)
t.Render()
return nil
},
}
return getCmd
}
func completeCeipSet(_ *cobra.Command, args []string, _ string) ([]string, cobra.ShellCompDirective) {
if len(args) > 0 {
return activeHelpNoMoreArgs(nil), cobra.ShellCompDirectiveNoFileComp
}
// Keep the "true" choice first by using ShellCompDirectiveKeepOrder (may not work for all shells)
// This is just to make it "easier" to opt-in :-)
return []string{
"true\tAccept to participate",
"false\tRefuse to participate"},
cobra.ShellCompDirectiveKeepOrder | cobra.ShellCompDirectiveNoFileComp
}