From 8a8ad26435c43bc32e6cfe055ae69f208ab610ed Mon Sep 17 00:00:00 2001 From: Giulio Fidente Date: Fri, 20 Apr 2018 15:28:58 +0200 Subject: [PATCH] Merge values for same key from multiple services This should merge multiple and different values for the same key found in different services. 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'] Change-Id: I190374e36ad1a2b57611a3a9d0a52ceb1a049aff --- common/services.yaml | 5 ++++- ...e_keys_from_services-cd17425d58b49840.yaml | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/merge_keys_from_services-cd17425d58b49840.yaml 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']