diff --git a/common/services.yaml b/common/services.yaml index 19c60774ae..0aa78c9566 100644 --- a/common/services.yaml +++ b/common/services.yaml @@ -365,7 +365,10 @@ outputs: monitoring_subscriptions: {get_attr: [MonitoringSubscriptionsConfig, value]} logging_sources: {get_attr: [LoggingSourcesConfig, value]} logging_groups: {get_attr: [LoggingGroupsConfig, value]} - config_settings: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}} + config_settings: + yaql: + expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) + data: {get_attr: [ServiceChain, role_data, config_settings]} global_config_settings: {get_attr: [GlobalConfigSettings, value]} service_config_settings: {get_attr: [ServiceConfigSettings, value]} workflow_tasks: {get_attr: [WorkflowTasks, value]} diff --git a/releasenotes/notes/merge_keys_from_services-cd17425d58b49840.yaml b/releasenotes/notes/merge_keys_from_services-cd17425d58b49840.yaml new file mode 100644 index 0000000000..6701dabd8c --- /dev/null +++ b/releasenotes/notes/merge_keys_from_services-cd17425d58b49840.yaml @@ -0,0 +1,21 @@ +--- +features: + - | + It is now possible to specify values for any key in `config_settings` + from multiple services; multiple values will be merged using YAQL + mergeWith() function. For example, assuming two services defining + a key as follows: + + config_settings: + mykey: + - val1 + + config_settings: + mykey: + - val2 + - val3 + + the content of the key, as seen by ansible or puppet on the nodes, + will be: + + mykey: ['val1','val2','val3']