Merge pull request #13604 from rkachach/fix_issue_13577

mgr: fixing dashboard configuration handling
This commit is contained in:
Travis Nielsen
2024-01-25 18:51:50 -07:00
committed by GitHub
2 changed files with 54 additions and 20 deletions
+53 -19
View File
@@ -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
}
+1 -1
View File
@@ -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)