This repository is currently being migrated. It's locked while the migration is in progress.
/
enable-portal.go
114 lines (99 loc) · 3.87 KB
/
enable-portal.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
111
112
113
114
package cmd
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"k8s.io/client-go/util/retry"
apiv1 "github.com/storageos/kubectl-storageos/api/v1"
"github.com/storageos/kubectl-storageos/pkg/consts"
"github.com/storageos/kubectl-storageos/pkg/installer"
"github.com/storageos/kubectl-storageos/pkg/logger"
pluginutils "github.com/storageos/kubectl-storageos/pkg/utils"
"github.com/storageos/kubectl-storageos/pkg/version"
)
const enablePortal = "enable-portal"
func EnablePortalCmd() *cobra.Command {
var err error
var traceError bool
pluginLogger := logger.NewLogger()
cmd := &cobra.Command{
Use: enablePortal,
Args: cobra.MinimumNArgs(0),
Short: "Enable StorageOS Portal Manager",
Long: `Enable StorageOS Portal Manager`,
SilenceUsage: true,
PreRun: func(cmd *cobra.Command, args []string) {},
Run: func(cmd *cobra.Command, args []string) {
defer pluginutils.ConvertPanicToError(func(e error) {
err = e
})
config := &apiv1.KubectlStorageOSConfig{}
if err = setEnablePortalValues(cmd, config); err != nil {
return
}
traceError = config.Spec.StackTrace
err = enablePortalCmd(config, pluginLogger)
},
PostRunE: func(cmd *cobra.Command, args []string) error {
if err := pluginutils.HandleError(enablePortal, err, traceError); err != nil {
pluginLogger.Error(fmt.Sprintf("%s%s", enablePortal, " has failed"))
return err
}
pluginLogger.Success("Portal Manager enabled successfully.")
return nil
},
}
cmd.Flags().Bool(installer.StackTraceFlag, false, "print stack trace of error")
cmd.Flags().BoolP(installer.VerboseFlag, "v", false, "verbose logging")
cmd.Flags().String(installer.StosConfigPathFlag, "", "path to look for kubectl-storageos-config.yaml")
cmd.Flags().String(installer.StosOperatorNSFlag, consts.NewOperatorNamespace, "namespace of storageos operator")
viper.BindPFlags(cmd.Flags())
return cmd
}
func enablePortalCmd(config *apiv1.KubectlStorageOSConfig, log *logger.Logger) error {
log.Verbose = config.Spec.Verbose
existingOperatorVersion, err := version.GetExistingOperatorVersion(config.Spec.Install.StorageOSOperatorNamespace)
if err != nil {
return err
}
if err := versionSupportsFeature(existingOperatorVersion, consts.PortalManagerFirstSupportedVersion); err != nil {
return err
}
return retry.RetryOnConflict(retry.DefaultBackoff, func() error {
cliInstaller, err := installer.NewPortalManagerInstaller(config, false, log)
if err != nil {
return err
}
log.Commencing(enablePortal)
return cliInstaller.EnablePortalManager(true)
})
}
func setEnablePortalValues(cmd *cobra.Command, config *apiv1.KubectlStorageOSConfig) error {
viper.BindPFlag(installer.StosConfigPathFlag, cmd.Flags().Lookup(installer.StosConfigPathFlag))
v := viper.GetViper()
viper.SetConfigName("kubectl-storageos-config")
viper.SetConfigType("yaml")
viper.AddConfigPath(v.GetString(installer.StosConfigPathFlag))
if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
// Config file was found but another error was produced
return fmt.Errorf("error discovered in config file: %v", err)
}
// Config file not found; set fields in new config object directly
config.Spec.StackTrace, err = cmd.Flags().GetBool(installer.StackTraceFlag)
if err != nil {
return err
}
config.Spec.Verbose, err = cmd.Flags().GetBool(installer.VerboseFlag)
if err != nil {
return err
}
config.Spec.Install.StorageOSOperatorNamespace = cmd.Flags().Lookup(installer.StosOperatorNSFlag).Value.String()
return nil
}
// config file read without error, set fields in new config object
config.Spec.StackTrace = viper.GetBool(installer.StackTraceConfig)
config.Spec.Verbose = viper.GetBool(installer.VerboseConfig)
config.Spec.Install.StorageOSOperatorNamespace = viper.GetString(installer.InstallStosOperatorNSConfig)
return nil
}