forked from rook/rook
Merge pull request #13604 from rkachach/fix_issue_13577
mgr: fixing dashboard configuration handling
This commit is contained in:
@@ -51,7 +51,8 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
dashboardInitWaitTime = 5 * time.Second
|
||||
dashboardInitWaitTime = 5 * time.Second
|
||||
removeMgrDaemonConfiguration = true
|
||||
)
|
||||
|
||||
func (c *Cluster) configureDashboardService() error {
|
||||
@@ -93,15 +94,9 @@ func (c *Cluster) configureDashboardModules() error {
|
||||
return errors.Wrap(err, "failed to initialize dashboard")
|
||||
}
|
||||
|
||||
var hasChanged bool
|
||||
for _, daemonID := range c.getDaemonIDs() {
|
||||
changed, err := c.configureDashboardModuleSettings(daemonID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if changed {
|
||||
hasChanged = true
|
||||
}
|
||||
hasChanged, err := c.configureDashboardModuleSettings()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if hasChanged {
|
||||
logger.Info("dashboard config has changed. restarting the dashboard module")
|
||||
@@ -110,20 +105,54 @@ func (c *Cluster) configureDashboardModules() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Cluster) configureDashboardModuleSettings(daemonID string) (bool, error) {
|
||||
// Delete the manager per-daemon configuration. Returns true
|
||||
// if all the configuration entries have been delete successfully.
|
||||
func (c *Cluster) deleteManagerDaemonConfiguration() bool {
|
||||
|
||||
mgrKeysToDelete := []string{
|
||||
"mgr/dashboard/url_prefix",
|
||||
"mgr/dashboard/ssl",
|
||||
"mgr/dashboard/PROMETHEUS_API_HOST",
|
||||
"mgr/dashboard/PROMETHEUS_API_SSL_VERIFY",
|
||||
"mgr/dashboard/server_port",
|
||||
"mgr/dashboard/ssl_server_port",
|
||||
}
|
||||
|
||||
success := true
|
||||
monStore := config.GetMonStore(c.context, c.clusterInfo)
|
||||
for _, daemonID := range c.getDaemonIDs() {
|
||||
mgrDaemonID := fmt.Sprintf("%s.%s", config.MgrType, daemonID)
|
||||
for _, key := range mgrKeysToDelete {
|
||||
err := monStore.Delete(mgrDaemonID, key)
|
||||
if err != nil {
|
||||
logger.Errorf("failed to delete configuration entry %q %q, err: %v", mgrDaemonID, key, err)
|
||||
success = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if success {
|
||||
logger.Info("All per-daemon mgr configuration has been deleted successfully.")
|
||||
} else {
|
||||
logger.Error("At least one delete operation failed while trying to delete per-daemon mgr configuration.")
|
||||
}
|
||||
|
||||
return success
|
||||
}
|
||||
|
||||
func (c *Cluster) configureDashboardModuleSettings() (bool, error) {
|
||||
|
||||
monStore := config.GetMonStore(c.context, c.clusterInfo)
|
||||
|
||||
daemonID = fmt.Sprintf("mgr.%s", daemonID)
|
||||
|
||||
// url prefix
|
||||
hasChanged, err := monStore.SetIfChanged(daemonID, "mgr/dashboard/url_prefix", c.spec.Dashboard.URLPrefix)
|
||||
hasChanged, err := monStore.SetIfChanged(config.MgrType, "mgr/dashboard/url_prefix", c.spec.Dashboard.URLPrefix)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
// ssl support
|
||||
ssl := strconv.FormatBool(c.spec.Dashboard.SSL)
|
||||
changed, err := monStore.SetIfChanged(daemonID, "mgr/dashboard/ssl", ssl)
|
||||
changed, err := monStore.SetIfChanged(config.MgrType, "mgr/dashboard/ssl", ssl)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -131,7 +160,7 @@ func (c *Cluster) configureDashboardModuleSettings(daemonID string) (bool, error
|
||||
|
||||
// Prometheus host end point
|
||||
prometheusEndpoint := c.spec.Dashboard.PrometheusEndpoint
|
||||
changed, err = monStore.SetIfChanged(daemonID, "mgr/dashboard/PROMETHEUS_API_HOST", prometheusEndpoint)
|
||||
changed, err = monStore.SetIfChanged(config.MgrType, "mgr/dashboard/PROMETHEUS_API_HOST", prometheusEndpoint)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -139,7 +168,7 @@ func (c *Cluster) configureDashboardModuleSettings(daemonID string) (bool, error
|
||||
|
||||
// Prometheus host end point ssl verify
|
||||
prometheusEndpointSSLVerify := strconv.FormatBool(c.spec.Dashboard.PrometheusEndpointSSLVerify)
|
||||
changed, err = monStore.SetIfChanged(daemonID, "mgr/dashboard/PROMETHEUS_API_SSL_VERIFY", prometheusEndpointSSLVerify)
|
||||
changed, err = monStore.SetIfChanged(config.MgrType, "mgr/dashboard/PROMETHEUS_API_SSL_VERIFY", prometheusEndpointSSLVerify)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -147,7 +176,7 @@ func (c *Cluster) configureDashboardModuleSettings(daemonID string) (bool, error
|
||||
|
||||
// server port
|
||||
port := strconv.Itoa(c.dashboardInternalPort())
|
||||
changed, err = monStore.SetIfChanged(daemonID, "mgr/dashboard/server_port", port)
|
||||
changed, err = monStore.SetIfChanged(config.MgrType, "mgr/dashboard/server_port", port)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -155,13 +184,18 @@ func (c *Cluster) configureDashboardModuleSettings(daemonID string) (bool, error
|
||||
|
||||
// SSL enabled. Needed to set specifically the ssl port setting
|
||||
if c.spec.Dashboard.SSL {
|
||||
changed, err = monStore.SetIfChanged(daemonID, "mgr/dashboard/ssl_server_port", port)
|
||||
changed, err = monStore.SetIfChanged(config.MgrType, "mgr/dashboard/ssl_server_port", port)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
hasChanged = hasChanged || changed
|
||||
}
|
||||
|
||||
// Remove any existing per mgr-daemon configuration
|
||||
if removeMgrDaemonConfiguration {
|
||||
removeMgrDaemonConfiguration = !c.deleteManagerDaemonConfiguration()
|
||||
}
|
||||
|
||||
return hasChanged, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ func (m *MonStore) Set(who, option, value string) error {
|
||||
|
||||
// Delete a config in the centralized mon configuration database.
|
||||
func (m *MonStore) Delete(who, option string) error {
|
||||
logger.Infof("deleting %q option from the mon configuration database", option)
|
||||
logger.Infof("deleting %q %q option from the mon configuration database", who, option)
|
||||
args := []string{"config", "rm", who, normalizeKey(option)}
|
||||
cephCmd := client.NewCephCommand(m.context, m.clusterInfo, args)
|
||||
out, err := cephCmd.RunWithTimeout(exec.CephCommandsTimeout)
|
||||
|
||||
Reference in New Issue
Block a user