Add a per service bootstrap node variable
authorMichele Baldessari <michele@acksyn.org>
Mon, 19 Dec 2016 13:27:51 +0000 (14:27 +0100)
committerMichele Baldessari <michele@acksyn.org>
Wed, 21 Dec 2016 10:52:57 +0000 (11:52 +0100)
In order to call commands that need to be run on a single node, we
create a new per-service variable that will contain the first node of
each role containing the service.

Change-Id: I03e8685f939e8ae1fcd8b16883b559615042505d
Partial-Bug: #1615983

network/ports/net_ip_list_map.yaml
overcloud.j2.yaml
puppet/all-nodes-config.yaml

index d7863e0..263eccd 100644 (file)
@@ -138,3 +138,20 @@ outputs:
                   SERVICE_short_node_names: {get_param: ServiceHostnameList}
                 for_each:
                     SERVICE: {get_attr: [EnabledServicesValue, value]}
+  short_service_bootstrap_hostnames:
+    description: >
+      Map of enabled services to a list of hostnames where they're running regardless of the network
+      Used for bootstrap purposes
+    value:
+      yaql:
+        # If ServiceHostnameList is empty the role is deployed with zero nodes
+        # therefore we don't want to add any *_node_names to the map
+        expression: dict($.data.map.items().where(len($[1]) > 0))
+        data:
+          map:
+            map_merge:
+              repeat:
+                template:
+                  SERVICE_short_bootstrap_node_name: {get_param: ServiceHostnameList}
+                for_each:
+                    SERVICE: {get_attr: [EnabledServicesValue, value]}
index f7e6f37..f53a99a 100644 (file)
@@ -443,6 +443,14 @@ resources:
             l:
 {% for role in roles %}
               - {get_attr: [{{role.name}}IpListMap, short_service_hostnames]}
+{% endfor %}
+      short_service_bootstrap_node:
+        yaql:
+          expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1], [$[0], $[1].flatten().first()]))
+          data:
+            l:
+{% for role in roles %}
+              - {get_attr: [{{role.name}}IpListMap, short_service_bootstrap_hostnames]}
 {% endfor %}
       # FIXME(shardy): These require further work to move into service_ips
       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
index 0a8bec6..5f56fe2 100644 (file)
@@ -28,6 +28,8 @@ parameters:
     type: json
   short_service_node_names:
     type: json
+  short_service_bootstrap_node:
+    type: json
   controller_names:
     type: comma_delimited_list
   memcache_node_ips:
@@ -125,6 +127,7 @@ resources:
               - {get_param: service_ips}
               - {get_param: service_node_names}
               - {get_param: short_service_node_names}
+              - {get_param: short_service_bootstrap_node}
               - controller_node_ips:
                   list_join:
                   - ','