Implement MarshalYAML for relabel.Config so that we do not generate a regex field if it was not provided in the first place
Signed-off-by: Liam Howe <liam.howe@maersk.com>
This commit is contained in:
parent
34ee8c6078
commit
835dfa7eb6
|
@ -111,6 +111,15 @@ func (c *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||||
return c.Validate()
|
return c.Validate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalYAML implements the yaml.Marshaler interface.
|
||||||
|
func (c Config) MarshalYAML() (interface{}, error) {
|
||||||
|
// Omit the regex if it is the default regex as it was not provided in the first place.
|
||||||
|
if c.Regex == DefaultRelabelConfig.Regex {
|
||||||
|
c.Regex.Regexp = nil
|
||||||
|
}
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Config) Validate() error {
|
func (c *Config) Validate() error {
|
||||||
if c.Action == "" {
|
if c.Action == "" {
|
||||||
return fmt.Errorf("relabel action cannot be empty")
|
return fmt.Errorf("relabel action cannot be empty")
|
||||||
|
|
|
@ -851,3 +851,42 @@ func BenchmarkRelabel(b *testing.B) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfig_UnmarshalThenMarshal(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
inputYaml string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Values provided",
|
||||||
|
inputYaml: `source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
|
||||||
|
separator: ;
|
||||||
|
regex: \\d+
|
||||||
|
target_label: __meta_kubernetes_pod_container_port_number
|
||||||
|
replacement: $1
|
||||||
|
action: replace
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "No regex provided",
|
||||||
|
inputYaml: `source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
|
||||||
|
separator: ;
|
||||||
|
target_label: __meta_kubernetes_pod_container_port_number
|
||||||
|
replacement: $1
|
||||||
|
action: keepequal
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
unmarshalled := Config{}
|
||||||
|
err := yaml.Unmarshal([]byte(test.inputYaml), &unmarshalled)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
marshalled, err := yaml.Marshal(&unmarshalled)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, test.inputYaml, string(marshalled))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue