Merge pull request #26 from alexandruavadanii/merge-by-hostnme
reclass.storage.node: Merge duplicate nodes
diff --git a/reclass/storage/node.sls b/reclass/storage/node.sls
index 3014b4a..bf27610 100644
--- a/reclass/storage/node.sls
+++ b/reclass/storage/node.sls
@@ -13,8 +13,25 @@
- clean: True
{%- endif %}
+{%- set storage_by_name = {} %}
+
{%- for node_name, node in storage.get('node', {}).iteritems() %}
+{%- if node.name is defined and node.repeat is not defined %}
+{%- set node_name = node.name %}
+
+{%- if node_name in storage_by_name and storage_by_name[node_name].classes is defined %}
+{%- do node.update({'classes': storage_by_name[node_name].classes + node.get('classes', []) }) %}
+{%- endif %}
+
+{%- endif %}
+
+{%- do salt['defaults.merge'](storage_by_name, {node_name: node}) %}
+
+{%- endfor %}
+
+{%- for node_name, node in storage_by_name.iteritems() %}
+
{%- if node.repeat is defined %}
{%- for i in range(node.repeat.count) %}
diff --git a/tests/pillar/storage_nodes_squash.sls b/tests/pillar/storage_nodes_squash.sls
new file mode 100644
index 0000000..44b1bd8
--- /dev/null
+++ b/tests/pillar/storage_nodes_squash.sls
@@ -0,0 +1,14 @@
+reclass:
+ storage:
+ enabled: true
+ node:
+ service_node01:
+ name: svc01
+ domain: deployment.local
+ classes:
+ - cluster.deployment_name.service.role
+ service_node02:
+ name: svc01
+ domain: deployment.local
+ classes:
+ - cluster.deployment_name.service.role2