forked from rook/rook
Merge pull request #938 from jbw976/log-startup-info
log version, arguments and flags at start up
This commit is contained in:
@@ -62,6 +62,7 @@ TEST_PACKAGES = $(GO_PROJECT)/tests/smoke
|
||||
# the root go project
|
||||
GO_PROJECT=github.com/rook/rook
|
||||
|
||||
# inject the version number into the golang version package using the -X linker flag
|
||||
LDFLAGS += -X $(GO_PROJECT)/pkg/version.Version=$(VERSION)
|
||||
|
||||
# ====================================================================================
|
||||
|
||||
+3
-1
@@ -44,7 +44,7 @@ func init() {
|
||||
apiCmd.Flags().StringVar(&namespace, "namespace", "", "the namespace in which the api service is running")
|
||||
addCephFlags(apiCmd)
|
||||
|
||||
flags.SetFlagsFromEnv(apiCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(apiCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
apiCmd.RunE = startAPI
|
||||
}
|
||||
@@ -60,6 +60,8 @@ func startAPI(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(apiCmd.Flags())
|
||||
|
||||
clientset, _, err := getClientset()
|
||||
if err != nil {
|
||||
fmt.Printf("failed to init k8s client. %+v\n", err)
|
||||
|
||||
+18
-2
@@ -28,6 +28,7 @@ import (
|
||||
|
||||
"github.com/coreos/pkg/capnslog"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
"github.com/rook/rook/pkg/api"
|
||||
"github.com/rook/rook/pkg/ceph"
|
||||
@@ -39,6 +40,11 @@ import (
|
||||
"github.com/rook/rook/pkg/util/exec"
|
||||
"github.com/rook/rook/pkg/util/flags"
|
||||
"github.com/rook/rook/pkg/util/proc"
|
||||
"github.com/rook/rook/pkg/version"
|
||||
)
|
||||
|
||||
const (
|
||||
RookEnvVarPrefix = "ROOK"
|
||||
)
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
@@ -89,8 +95,8 @@ func init() {
|
||||
rootCmd.PersistentFlags().StringVar(&logLevelRaw, "log-level", "INFO", "logging level for logging/tracing output (valid values: CRITICAL,ERROR,WARNING,NOTICE,INFO,DEBUG,TRACE)")
|
||||
|
||||
// load the environment variables
|
||||
flags.SetFlagsFromEnv(rootCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(rootCmd.PersistentFlags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(rootCmd.Flags(), RookEnvVarPrefix)
|
||||
flags.SetFlagsFromEnv(rootCmd.PersistentFlags(), RookEnvVarPrefix)
|
||||
|
||||
rootCmd.RunE = startJoinCluster
|
||||
}
|
||||
@@ -123,6 +129,8 @@ func startJoinCluster(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(rootCmd.Flags())
|
||||
|
||||
if err := joinCluster(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
@@ -232,6 +240,14 @@ func setLogLevel() {
|
||||
capnslog.SetGlobalLogLevel(cfg.logLevel)
|
||||
}
|
||||
|
||||
func logStartupInfo(cmdFlags *pflag.FlagSet) {
|
||||
// log the version number, arguments, and all final flag values (environment variable overrides
|
||||
// have already been taken into account)
|
||||
flagValues := flags.GetFlagsAndValues(cmdFlags, "secret")
|
||||
logger.Infof("starting Rook %s with arguments '%s'", version.Version, strings.Join(os.Args, " "))
|
||||
logger.Infof("flag values: %s", strings.Join(flagValues, ", "))
|
||||
}
|
||||
|
||||
func createContext() *clusterd.Context {
|
||||
executor := &exec.CommandExecutor{}
|
||||
return &clusterd.Context{
|
||||
|
||||
+3
-1
@@ -41,7 +41,7 @@ func init() {
|
||||
mdsCmd.Flags().StringVar(&mdsKeyring, "mds-keyring", "", "the mds keyring")
|
||||
addCephFlags(mdsCmd)
|
||||
|
||||
flags.SetFlagsFromEnv(mdsCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(mdsCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
mdsCmd.RunE = startMDS
|
||||
}
|
||||
@@ -54,6 +54,8 @@ func startMDS(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(mdsCmd.Flags())
|
||||
|
||||
clusterInfo.Monitors = mon.ParseMonEndpoints(cfg.monEndpoints)
|
||||
config := &mds.Config{
|
||||
ID: mdsID,
|
||||
|
||||
+3
-1
@@ -41,7 +41,7 @@ func init() {
|
||||
mgrCmd.Flags().StringVar(&mgrKeyring, "mgr-keyring", "", "the mgr keyring")
|
||||
addCephFlags(mgrCmd)
|
||||
|
||||
flags.SetFlagsFromEnv(mgrCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(mgrCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
mgrCmd.RunE = startMgr
|
||||
}
|
||||
@@ -54,6 +54,8 @@ func startMgr(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(mgrCmd.Flags())
|
||||
|
||||
clusterInfo.Monitors = mon.ParseMonEndpoints(cfg.monEndpoints)
|
||||
config := &mgr.Config{
|
||||
Name: mgrName,
|
||||
|
||||
+3
-1
@@ -52,7 +52,7 @@ func init() {
|
||||
monCmd.Flags().IntVar(&monPort, "port", 0, "port of the monitor")
|
||||
addCephFlags(monCmd)
|
||||
|
||||
flags.SetFlagsFromEnv(monCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(monCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
monCmd.RunE = startMon
|
||||
}
|
||||
@@ -65,6 +65,8 @@ func startMon(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(monCmd.Flags())
|
||||
|
||||
if monPort == 0 {
|
||||
return fmt.Errorf("missing mon port")
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ https://github.com/rook/rook`,
|
||||
}
|
||||
|
||||
func init() {
|
||||
flags.SetFlagsFromEnv(operatorCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(operatorCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
operatorCmd.RunE = startOperator
|
||||
}
|
||||
@@ -46,6 +46,8 @@ func startOperator(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(operatorCmd.Flags())
|
||||
|
||||
clientset, apiExtClientset, err := getClientset()
|
||||
if err != nil {
|
||||
fmt.Printf("failed to get k8s client. %+v", err)
|
||||
|
||||
+3
-1
@@ -55,7 +55,7 @@ func addOSDFlags(command *cobra.Command) {
|
||||
func init() {
|
||||
addOSDFlags(osdCmd)
|
||||
addCephFlags(osdCmd)
|
||||
flags.SetFlagsFromEnv(osdCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(osdCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
osdCmd.RunE = startOSD
|
||||
}
|
||||
@@ -81,6 +81,8 @@ func startOSD(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(osdCmd.Flags())
|
||||
|
||||
forceFormat := false
|
||||
clusterInfo.Monitors = mon.ParseMonEndpoints(cfg.monEndpoints)
|
||||
agent := osd.NewAgent(dataDevices, usingDeviceFilter, cfg.metadataDevice, cfg.directories, forceFormat,
|
||||
|
||||
+3
-1
@@ -43,7 +43,7 @@ func init() {
|
||||
rgwCmd.Flags().IntVar(&rgwPort, "rgw-port", 0, "rgw port number")
|
||||
addCephFlags(rgwCmd)
|
||||
|
||||
flags.SetFlagsFromEnv(rgwCmd.Flags(), "ROOK")
|
||||
flags.SetFlagsFromEnv(rgwCmd.Flags(), RookEnvVarPrefix)
|
||||
|
||||
rgwCmd.RunE = startRGW
|
||||
}
|
||||
@@ -60,6 +60,8 @@ func startRGW(cmd *cobra.Command, args []string) error {
|
||||
|
||||
setLogLevel()
|
||||
|
||||
logStartupInfo(rgwCmd.Flags())
|
||||
|
||||
clusterInfo.Monitors = mon.ParseMonEndpoints(cfg.monEndpoints)
|
||||
config := &rgw.Config{
|
||||
ClusterInfo: &clusterInfo,
|
||||
|
||||
@@ -31,9 +31,6 @@ import (
|
||||
func StartJoinCluster(services []*ClusterService, configDir, nodeID, discoveryURL,
|
||||
etcdMembers string, networkInfo NetworkInfo, configFileOverride string, logLevel capnslog.LogLevel) (*Context, error) {
|
||||
|
||||
logger.Infof("Starting cluster. configDir=%s, nodeID=%s, url=%s, members=%s, networkInfo=%+v, configFileOverride=%s, logLevel=%s",
|
||||
configDir, nodeID, discoveryURL, etcdMembers, networkInfo, configFileOverride, logLevel)
|
||||
|
||||
if err := VerifyNetworkInfo(networkInfo); err != nil {
|
||||
return nil, fmt.Errorf("invalid network info: %+v. %+v", networkInfo, err)
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package flags
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
@@ -72,3 +73,22 @@ func SetFlagsFromEnv(flags *pflag.FlagSet, prefix string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetFlagsAndValues returns all flags and their values as a slice with elements in the format of
|
||||
// "--<flag>=<value>"
|
||||
func GetFlagsAndValues(flags *pflag.FlagSet, excludeFilter string) []string {
|
||||
var flagValues []string
|
||||
|
||||
flags.VisitAll(func(f *pflag.Flag) {
|
||||
val := f.Value.String()
|
||||
if excludeFilter != "" {
|
||||
if matched, _ := regexp.Match(excludeFilter, []byte(f.Name)); matched {
|
||||
val = "*****"
|
||||
}
|
||||
}
|
||||
|
||||
flagValues = append(flagValues, fmt.Sprintf("--%s=%s", f.Name, val))
|
||||
})
|
||||
|
||||
return flagValues
|
||||
}
|
||||
|
||||
@@ -73,3 +73,31 @@ func TestUintFlags(t *testing.T) {
|
||||
err = VerifyRequiredUint64Flags(cmd, []string{"foo", "bar"})
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
func TestGetFlagsAndValues(t *testing.T) {
|
||||
cmd := &cobra.Command{
|
||||
Use: "test",
|
||||
Short: "Creates a test arg",
|
||||
}
|
||||
|
||||
var arg1 string
|
||||
var arg2 string
|
||||
cmd.Flags().StringVar(&arg1, "foo-data", "", "test 1")
|
||||
cmd.Flags().StringVar(&arg2, "bar-secret", "", "test 2")
|
||||
|
||||
cmd.Flags().Set("foo-data", "1234")
|
||||
cmd.Flags().Set("bar-secret", "mypassword")
|
||||
|
||||
// get all flags and their values, providing no filter. all of them should be returned.
|
||||
flagValues := GetFlagsAndValues(cmd.Flags(), "")
|
||||
assert.Equal(t, 2, len(flagValues))
|
||||
assert.Contains(t, flagValues, "--foo-data=1234")
|
||||
assert.Contains(t, flagValues, "--bar-secret=mypassword")
|
||||
|
||||
// get all flags and their values, filtering any flags with "secret" in their name.
|
||||
// the --bar-secret flag should be redacted.
|
||||
flagValues = GetFlagsAndValues(cmd.Flags(), "secret")
|
||||
assert.Equal(t, 2, len(flagValues))
|
||||
assert.Contains(t, flagValues, "--foo-data=1234")
|
||||
assert.Contains(t, flagValues, "--bar-secret=*****")
|
||||
}
|
||||
|
||||
@@ -15,4 +15,5 @@ limitations under the License.
|
||||
*/
|
||||
package version
|
||||
|
||||
// Version will be overridden with the current version at build time using the -X linker flag
|
||||
var Version = "0.0.0"
|
||||
|
||||
Reference in New Issue
Block a user