diff --git a/pkg/operator/ceph/cluster/mgr/dashboard.go b/pkg/operator/ceph/cluster/mgr/dashboard.go index ead1a152b..a5c90120c 100644 --- a/pkg/operator/ceph/cluster/mgr/dashboard.go +++ b/pkg/operator/ceph/cluster/mgr/dashboard.go @@ -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 } diff --git a/pkg/operator/ceph/config/monstore.go b/pkg/operator/ceph/config/monstore.go index 63c475e13..01c4eac44 100644 --- a/pkg/operator/ceph/config/monstore.go +++ b/pkg/operator/ceph/config/monstore.go @@ -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)