Merge pull request #12444 from rook/mergify/bp/release-1.11/pr-12430

exporter: Ignore failed deletion of service monitor (backport #12430)
This commit is contained in:
Travis Nielsen authored and GitHub committed 2023-06-28 14:27:01 -06:00
commit 48c2f842b6
5 files changed
+24 -18

No files matched your search

+1
View File
@@ -15,6 +15,7 @@
"core",
"csi",
"docs",
"exporter",
"external",
"file",
"helm",
+1 -1
View File
@@ -515,7 +515,7 @@ func (c *Cluster) EnableServiceMonitor() error {
applyMonitoringLabels(c, serviceMonitor)
if _, err = k8sutil.CreateOrUpdateServiceMonitor(c.clusterInfo.Context, serviceMonitor); err != nil {
if _, err = k8sutil.CreateOrUpdateServiceMonitor(c.context, c.clusterInfo.Context, serviceMonitor); err != nil {
return errors.Wrap(err, "service monitor could not be enabled")
}
return nil
@@ -24,6 +24,7 @@ import (
"github.com/pkg/errors"
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
cephv1 "github.com/rook/rook/pkg/apis/ceph.rook.io/v1"
"github.com/rook/rook/pkg/clusterd"
"github.com/rook/rook/pkg/operator/ceph/config"
"github.com/rook/rook/pkg/operator/ceph/config/keyring"
"github.com/rook/rook/pkg/operator/ceph/controller"
@@ -219,7 +220,7 @@ func MakeCephExporterMetricsService(cephCluster cephv1.CephCluster, servicePortM
}
// EnableCephExporterServiceMonitor add a servicemonitor that allows prometheus to scrape from the monitoring endpoint of the exporter
func EnableCephExporterServiceMonitor(cephCluster cephv1.CephCluster, scheme *runtime.Scheme, opManagerContext context.Context) error {
func EnableCephExporterServiceMonitor(context *clusterd.Context, cephCluster cephv1.CephCluster, scheme *runtime.Scheme, opManagerContext context.Context) error {
serviceMonitor := k8sutil.GetServiceMonitor(cephExporterAppName, cephCluster.Namespace)
cephv1.GetCephExporterLabels(cephCluster.Spec.Labels).OverwriteApplyToObjectMeta(&serviceMonitor.ObjectMeta)
@@ -230,7 +231,7 @@ func EnableCephExporterServiceMonitor(cephCluster cephv1.CephCluster, scheme *ru
serviceMonitor.Spec.Selector.MatchLabels = controller.AppLabels(cephExporterAppName, cephCluster.Namespace)
applyCephExporterLabels(cephCluster, serviceMonitor)
if _, err = k8sutil.CreateOrUpdateServiceMonitor(opManagerContext, serviceMonitor); err != nil {
if _, err = k8sutil.CreateOrUpdateServiceMonitor(context, opManagerContext, serviceMonitor); err != nil {
return errors.Wrap(err, "service monitor could not be enabled")
}
return nil
@@ -86,9 +86,9 @@ func (r *ReconcileNode) Reconcile(context context.Context, request reconcile.Req
}
func (r *ReconcileNode) cleanupExporterResources(clusterNamespace string, ns string, nodeName string) (reconcile.Result, error) {
err := k8sutil.DeleteServiceMonitor(r.opManagerContext, ns, cephExporterAppName)
err := k8sutil.DeleteServiceMonitor(r.context, r.opManagerContext, ns, cephExporterAppName)
if err != nil {
logger.Debugf("failed to delete service monitor for ceph exporter in namespace %q on node %q", ns, nodeName)
logger.Debugf("failed to delete service monitor for ceph exporter in namespace %q on node %q. %v", ns, nodeName, err)
}
err = k8sutil.DeleteService(r.opManagerContext, r.context.Clientset, r.opConfig.OperatorNamespace, cephExporterAppName)
if err != nil {
@@ -271,7 +271,7 @@ func (r *ReconcileNode) createOrUpdateNodeDaemons(node corev1.Node, tolerations
}
if cephCluster.Spec.Monitoring.Enabled {
if err := EnableCephExporterServiceMonitor(cephCluster, r.scheme, r.opManagerContext); err != nil {
if err := EnableCephExporterServiceMonitor(r.context, cephCluster, r.scheme, r.opManagerContext); err != nil {
return errors.Wrap(err, "failed to enable service monitor")
}
logger.Debug("service monitor for ceph exporter was enabled successfully")
+16 -12
View File
@@ -21,20 +21,17 @@ import (
"context"
"fmt"
"github.com/pkg/errors"
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
monitoringclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"github.com/rook/rook/pkg/clusterd"
kerror "k8s.io/apimachinery/pkg/api/errors"
kerrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
)
func getMonitoringClient() (*monitoringclient.Clientset, error) {
cfg, err := clientcmd.BuildConfigFromFlags("", "")
if err != nil {
return nil, fmt.Errorf("failed to build config. %v", err)
}
client, err := monitoringclient.NewForConfig(cfg)
func getMonitoringClient(context *clusterd.Context) (*monitoringclient.Clientset, error) {
client, err := monitoringclient.NewForConfig(context.KubeConfig)
if err != nil {
return nil, fmt.Errorf("failed to get monitoring client. %v", err)
}
@@ -75,11 +72,11 @@ func GetServiceMonitor(name string, namespace string) *monitoringv1.ServiceMonit
}
// CreateOrUpdateServiceMonitor creates serviceMonitor object or an error
func CreateOrUpdateServiceMonitor(ctx context.Context, serviceMonitorDefinition *monitoringv1.ServiceMonitor) (*monitoringv1.ServiceMonitor, error) {
func CreateOrUpdateServiceMonitor(context *clusterd.Context, ctx context.Context, serviceMonitorDefinition *monitoringv1.ServiceMonitor) (*monitoringv1.ServiceMonitor, error) {
name := serviceMonitorDefinition.GetName()
namespace := serviceMonitorDefinition.GetNamespace()
logger.Debugf("creating servicemonitor %s", name)
client, err := getMonitoringClient()
client, err := getMonitoringClient(context)
if err != nil {
return nil, fmt.Errorf("failed to get monitoring client. %v", err)
}
@@ -104,16 +101,23 @@ func CreateOrUpdateServiceMonitor(ctx context.Context, serviceMonitorDefinition
}
// DeleteServiceMonitor deletes a ServiceMonitor and returns the error if any
func DeleteServiceMonitor(ctx context.Context, ns string, name string) error {
client, err := getMonitoringClient()
func DeleteServiceMonitor(context *clusterd.Context, ctx context.Context, ns string, name string) error {
client, err := getMonitoringClient(context)
if err != nil {
return fmt.Errorf("failed to get monitoring client. %v", err)
}
_, err = client.MonitoringV1().ServiceMonitors(ns).Get(ctx, name, metav1.GetOptions{})
if err != nil {
// Either the service monitor does not exist or there are no privileges to detect it
// so we ignore any errors
return nil
}
err = client.MonitoringV1().ServiceMonitors(ns).Delete(ctx, name, metav1.DeleteOptions{})
if err != nil {
if kerror.IsNotFound(err) {
return nil
}
return errors.Wrapf(err, "failed to delete service monitor %q", name)
}
return err
return nil
}