|
@@ -23,6 +23,7 @@ import (
|
|
|
|
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
|
. "github.com/onsi/gomega"
|
|
. "github.com/onsi/gomega"
|
|
|
|
|
+ "github.com/prometheus/client_golang/prometheus"
|
|
|
dto "github.com/prometheus/client_model/go"
|
|
dto "github.com/prometheus/client_model/go"
|
|
|
v1 "k8s.io/api/core/v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
@@ -33,6 +34,7 @@ import (
|
|
|
esv1beta1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1beta1"
|
|
esv1beta1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1beta1"
|
|
|
genv1alpha1 "github.com/external-secrets/external-secrets/apis/generators/v1alpha1"
|
|
genv1alpha1 "github.com/external-secrets/external-secrets/apis/generators/v1alpha1"
|
|
|
ctest "github.com/external-secrets/external-secrets/pkg/controllers/commontest"
|
|
ctest "github.com/external-secrets/external-secrets/pkg/controllers/commontest"
|
|
|
|
|
+ "github.com/external-secrets/external-secrets/pkg/controllers/externalsecret/esmetrics"
|
|
|
"github.com/external-secrets/external-secrets/pkg/provider/testing/fake"
|
|
"github.com/external-secrets/external-secrets/pkg/provider/testing/fake"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -44,6 +46,14 @@ var (
|
|
|
interval = time.Millisecond * 250
|
|
interval = time.Millisecond * 250
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+var (
|
|
|
|
|
+ testSyncCallsTotal *prometheus.CounterVec
|
|
|
|
|
+ testSyncCallsError *prometheus.CounterVec
|
|
|
|
|
+
|
|
|
|
|
+ testExternalSecretCondition *prometheus.GaugeVec
|
|
|
|
|
+ testExternalSecretReconcileDuration *prometheus.GaugeVec
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
type testCase struct {
|
|
type testCase struct {
|
|
|
secretStore esv1beta1.GenericStore
|
|
secretStore esv1beta1.GenericStore
|
|
|
externalSecret *esv1beta1.ExternalSecret
|
|
externalSecret *esv1beta1.ExternalSecret
|
|
@@ -160,10 +170,10 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
ExternalSecretNamespace, err = ctest.CreateNamespaceWithLabels("test-ns", k8sClient, map[string]string{NamespaceLabelKey: NamespaceLabelValue})
|
|
ExternalSecretNamespace, err = ctest.CreateNamespaceWithLabels("test-ns", k8sClient, map[string]string{NamespaceLabelKey: NamespaceLabelValue})
|
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
metric.Reset()
|
|
metric.Reset()
|
|
|
- syncCallsTotal.Reset()
|
|
|
|
|
- syncCallsError.Reset()
|
|
|
|
|
- externalSecretCondition.Reset()
|
|
|
|
|
- externalSecretReconcileDuration.Reset()
|
|
|
|
|
|
|
+ testSyncCallsTotal.Reset()
|
|
|
|
|
+ testSyncCallsError.Reset()
|
|
|
|
|
+ testExternalSecretCondition.Reset()
|
|
|
|
|
+ testExternalSecretReconcileDuration.Reset()
|
|
|
fakeProvider.Reset()
|
|
fakeProvider.Reset()
|
|
|
})
|
|
})
|
|
|
|
|
|
|
@@ -294,8 +304,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 0.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 0.0)).To(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionTrue, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionTrue, 1.0)).To(BeTrue())
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsTotal.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsTotal.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
// three reconciliations: initial sync, status update, secret update
|
|
// three reconciliations: initial sync, status update, secret update
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
@@ -400,8 +410,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
}
|
|
}
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
@@ -1286,8 +1296,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
}
|
|
}
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
@@ -1334,8 +1344,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
}
|
|
}
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
@@ -1466,8 +1476,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
}
|
|
}
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
@@ -1504,8 +1514,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
}
|
|
}
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
@@ -1530,8 +1540,8 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
}
|
|
}
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
Eventually(func() bool {
|
|
Eventually(func() bool {
|
|
|
- Expect(syncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
- Expect(externalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testSyncCallsError.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metric)).To(Succeed())
|
|
|
|
|
+ Expect(testExternalSecretReconcileDuration.WithLabelValues(ExternalSecretName, ExternalSecretNamespace).Write(&metricDuration)).To(Succeed())
|
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
return metric.GetCounter().GetValue() >= 2.0 && metricDuration.GetGauge().GetValue() > 0.0
|
|
|
}, timeout, interval).Should(BeTrue())
|
|
}, timeout, interval).Should(BeTrue())
|
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
Expect(externalSecretConditionShouldBe(ExternalSecretName, ExternalSecretNamespace, esv1beta1.ExternalSecretReady, v1.ConditionFalse, 1.0)).To(BeTrue())
|
|
@@ -1550,12 +1560,12 @@ var _ = Describe("ExternalSecret controller", func() {
|
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
tc.checkExternalSecret = func(es *esv1beta1.ExternalSecret) {
|
|
|
// Condition True and False should be 0, since the Condition was not created
|
|
// Condition True and False should be 0, since the Condition was not created
|
|
|
Eventually(func() float64 {
|
|
Eventually(func() float64 {
|
|
|
- Expect(externalSecretCondition.WithLabelValues(ExternalSecretName, ExternalSecretNamespace, string(esv1beta1.ExternalSecretReady), string(v1.ConditionTrue)).Write(&metric)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testExternalSecretCondition.WithLabelValues(ExternalSecretName, ExternalSecretNamespace, string(esv1beta1.ExternalSecretReady), string(v1.ConditionTrue)).Write(&metric)).To(Succeed())
|
|
|
return metric.GetGauge().GetValue()
|
|
return metric.GetGauge().GetValue()
|
|
|
}, timeout, interval).Should(Equal(0.0))
|
|
}, timeout, interval).Should(Equal(0.0))
|
|
|
|
|
|
|
|
Eventually(func() float64 {
|
|
Eventually(func() float64 {
|
|
|
- Expect(externalSecretCondition.WithLabelValues(ExternalSecretName, ExternalSecretNamespace, string(esv1beta1.ExternalSecretReady), string(v1.ConditionFalse)).Write(&metric)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testExternalSecretCondition.WithLabelValues(ExternalSecretName, ExternalSecretNamespace, string(esv1beta1.ExternalSecretReady), string(v1.ConditionFalse)).Write(&metric)).To(Succeed())
|
|
|
return metric.GetGauge().GetValue()
|
|
return metric.GetGauge().GetValue()
|
|
|
}, timeout, interval).Should(Equal(0.0))
|
|
}, timeout, interval).Should(Equal(0.0))
|
|
|
|
|
|
|
@@ -2233,7 +2243,7 @@ var _ = Describe("Controller Reconcile logic", func() {
|
|
|
|
|
|
|
|
func externalSecretConditionShouldBe(name, ns string, ct esv1beta1.ExternalSecretConditionType, cs v1.ConditionStatus, v float64) bool {
|
|
func externalSecretConditionShouldBe(name, ns string, ct esv1beta1.ExternalSecretConditionType, cs v1.ConditionStatus, v float64) bool {
|
|
|
return Eventually(func() float64 {
|
|
return Eventually(func() float64 {
|
|
|
- Expect(externalSecretCondition.WithLabelValues(name, ns, string(ct), string(cs)).Write(&metric)).To(Succeed())
|
|
|
|
|
|
|
+ Expect(testExternalSecretCondition.WithLabelValues(name, ns, string(ct), string(cs)).Write(&metric)).To(Succeed())
|
|
|
return metric.GetGauge().GetValue()
|
|
return metric.GetGauge().GetValue()
|
|
|
}, timeout, interval).Should(Equal(v))
|
|
}, timeout, interval).Should(Equal(v))
|
|
|
}
|
|
}
|
|
@@ -2245,4 +2255,10 @@ func init() {
|
|
|
Service: esv1beta1.AWSServiceSecretsManager,
|
|
Service: esv1beta1.AWSServiceSecretsManager,
|
|
|
},
|
|
},
|
|
|
})
|
|
})
|
|
|
|
|
+
|
|
|
|
|
+ esmetrics.SetUpMetrics(false)
|
|
|
|
|
+ testSyncCallsTotal = esmetrics.GetCounterVec(esmetrics.SyncCallsKey)
|
|
|
|
|
+ testSyncCallsError = esmetrics.GetCounterVec(esmetrics.SyncCallsErrorKey)
|
|
|
|
|
+ testExternalSecretCondition = esmetrics.GetGaugeVec(esmetrics.ExternalSecretStatusConditionKey)
|
|
|
|
|
+ testExternalSecretReconcileDuration = esmetrics.GetGaugeVec(esmetrics.ExternalSecretReconcileDurationKey)
|
|
|
}
|
|
}
|