mirror of
https://github.com/Telecominfraproject/wlan-cloud-kube-state-metrics.git
synced 2025-11-01 19:17:54 +00:00
Prevent multiple custom resource configurations for the same resource
This commit is contained in:
@@ -13,8 +13,10 @@ Two flags can be used:
|
|||||||
* `--custom-resource-state-config-file /path/to/config.yaml`
|
* `--custom-resource-state-config-file /path/to/config.yaml`
|
||||||
|
|
||||||
If both flags are provided, the inline configuration will take precedence.
|
If both flags are provided, the inline configuration will take precedence.
|
||||||
|
When multiple entries for the same resource exist, kube-state-metrics will exit with an error.
|
||||||
|
This includes configuration which refers to a different API version.
|
||||||
|
|
||||||
In addition to specifying one of `--custom-resource-state-config*` flags, you should also add the custom resource *Kind*s in plural form to the list of exposed resources in the `--resources` flag. If you don't specify `--resources`, then all known custom resources configured in `--custom-resource-state-config-*` and all available default kubernetes objects will be taken into account by kube-state-metrics.
|
In addition to specifying one of `--custom-resource-state-config*` flags, you should also add the custom resource *Kind*s in plural form to the list of exposed resources in the `--resources` flag. If you don't specify `--resources`, then all known custom resources configured in `--custom-resource-state-config*` and all available default kubernetes objects will be taken into account by kube-state-metrics.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
|
|||||||
@@ -162,8 +162,10 @@ type ConfigDecoder interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FromConfig decodes a configuration source into a slice of customresource.RegistryFactory that are ready to use.
|
// FromConfig decodes a configuration source into a slice of customresource.RegistryFactory that are ready to use.
|
||||||
func FromConfig(decoder ConfigDecoder) (factories []customresource.RegistryFactory, err error) {
|
func FromConfig(decoder ConfigDecoder) ([]customresource.RegistryFactory, error) {
|
||||||
var crconfig Metrics
|
var crconfig Metrics
|
||||||
|
var factories []customresource.RegistryFactory
|
||||||
|
factoriesIndex := map[string]bool{}
|
||||||
if err := decoder.Decode(&crconfig); err != nil {
|
if err := decoder.Decode(&crconfig); err != nil {
|
||||||
return nil, fmt.Errorf("failed to parse Custom Resource State metrics: %w", err)
|
return nil, fmt.Errorf("failed to parse Custom Resource State metrics: %w", err)
|
||||||
}
|
}
|
||||||
@@ -172,6 +174,10 @@ func FromConfig(decoder ConfigDecoder) (factories []customresource.RegistryFacto
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create metrics factory for %s: %w", resource.GroupVersionKind, err)
|
return nil, fmt.Errorf("failed to create metrics factory for %s: %w", resource.GroupVersionKind, err)
|
||||||
}
|
}
|
||||||
|
if _, ok := factoriesIndex[factory.Name()]; ok {
|
||||||
|
return nil, fmt.Errorf("found multiple custom resource configurations for the same resource %s", factory.Name())
|
||||||
|
}
|
||||||
|
factoriesIndex[factory.Name()] = true
|
||||||
factories = append(factories, factory)
|
factories = append(factories, factory)
|
||||||
}
|
}
|
||||||
return factories, nil
|
return factories, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user