-
Notifications
You must be signed in to change notification settings - Fork 2
Description
What happened:
The ManagedMetric value does not reflect the correct number of resources when monitoring multi-version APIs without targeting a specific version. See the following scenario where we use provider-kubernetes to create a couple of ConfigMaps, two with API version v1alpha2 and one with API version v1alpha1.
NAME KIND PROVIDERCONFIG SYNCED READY AGE
bar-alpha1 ConfigMap kubernetes-provider True True 9m29s
bar-alpha2 ConfigMap kubernetes-provider True True 9m29s
foo-alpha2 ConfigMap kubernetes-provider True True 9m29s
Now we define 3 ManagedMetrics that target kubernetes objects, two of them fully qualified with GVK and one with GK only, leaving out the version:
NAME READY VALUE OBSERVED
kubernetes-objects True 6 5s
kubernetes-objects-v1alpha1 True 3 5s
kubernetes-objects-v1alpha2 True 3 5s
Right now the actual number of objects gets multiplied by the number of servable versions instead of grouping them by GK in the unqualified version case.
What you expected to happen:
Since both versions are servable by the API server, all three metrics should report 3 kubernetes objects:
NAME READY VALUE OBSERVED
kubernetes-objects True 3 5s
kubernetes-objects-v1alpha1 True 3 5s
kubernetes-objects-v1alpha2 True 3 5s
How to reproduce it (as minimally and precisely as possible):
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-kubernetes
spec:
package: xpkg.upbound.io/upbound/provider-kubernetes:v0.16.0
---
apiVersion: kubernetes.crossplane.io/v1alpha1
kind: ProviderConfig
metadata:
name: kubernetes-provider
namespace: default
spec:
credentials:
source: InjectedIdentity
---
apiVersion: kubernetes.crossplane.io/v1alpha2
kind: Object
metadata:
name: foo-alpha2
namespace: default
spec:
forProvider:
manifest:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: default
providerConfigRef:
name: kubernetes-provider
---
apiVersion: kubernetes.crossplane.io/v1alpha2
kind: Object
metadata:
name: bar-alpha2
namespace: default
spec:
forProvider:
manifest:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: default
providerConfigRef:
name: kubernetes-provider
---
---
apiVersion: kubernetes.crossplane.io/v1alpha1
kind: Object
metadata:
name: bar-alpha1
namespace: default
spec:
forProvider:
manifest:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: default
providerConfigRef:
name: kubernetes-provider
---
apiVersion: metrics.openmcp.cloud/v1alpha1
kind: ManagedMetric
metadata:
name: kubernetes-objects
spec:
name: kubernetes-objects
target:
kind: Object
group: kubernetes.crossplane.io
interval: "15s"
---
apiVersion: metrics.openmcp.cloud/v1alpha1
kind: ManagedMetric
metadata:
name: kubernetes-objects-v1alpha1
spec:
name: kubernetes-objects-v1alpha1
target:
kind: Object
group: kubernetes.crossplane.io
version: v1alpha1
interval: "15s"
---
apiVersion: metrics.openmcp.cloud/v1alpha1
kind: ManagedMetric
metadata:
name: kubernetes-objects-v1alpha2
spec:
name: kubernetes-objects-v1alpha2
target:
kind: Object
group: kubernetes.crossplane.io
version: v1alpha2
interval: "15s"
Anything else we need to know:
Environment: