Provides a list of per-service ctlplane IPs to the workflows env
authorGiulio Fidente <gfidente@redhat.com>
Wed, 24 May 2017 16:45:59 +0000 (18:45 +0200)
committerGiulio Fidente <gfidente@redhat.com>
Mon, 26 Jun 2017 14:32:02 +0000 (16:32 +0200)
Adds in the execution environment of the workflow steps a list of
per-service network IPs. This can be used by the workflows to
execute actions against the nodes hosting a given service.

Change-Id: Id7c735d53f04f6ad848b2f9f1adaa3c84ecd2fcd
Implements: blueprint tripleo-ceph-ansible

docker/docker-steps.j2
network/ports/net_ip_list_map.yaml
overcloud.j2.yaml
puppet/post.j2.yaml
puppet/puppet-steps.j2

index b3359b1..8377202 100644 (file)
@@ -38,6 +38,8 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  ctlplane_service_ips:
+    type: json
 
 conditions:
 {% for step in range(1, deploy_steps_max) %}
@@ -119,8 +121,14 @@ resources:
       actions:
         CREATE:
           workflow: { get_resource: WorkflowTasks_Step{{step}} }
+          params:
+            env:
+              service_ips: { get_param: ctlplane_service_ips }
         UPDATE:
           workflow: { get_resource: WorkflowTasks_Step{{step}} }
+          params:
+            env:
+              service_ips: { get_param: ctlplane_service_ips }
       always_update: true
 # END service_workflow_tasks handling
 {% endfor %}
index c3734af..a9111ed 100644 (file)
@@ -133,6 +133,20 @@ outputs:
                           SERVICE: {get_attr: [EnabledServicesValue, value]}
                   - values: {get_param: ServiceNetMap}
               - values: {get_attr: [NetIpMapValue, value]}
+  ctlplane_service_ips:
+    description: >
+      Map of enabled services to a list of their ctlplane IP addresses
+    value:
+      yaql:
+        expression: dict($.data.map.items().where(len($[1]) > 0))
+        data:
+          map:
+            map_merge:
+              repeat:
+                template:
+                  SERVICE_ctlplane_node_ips: {get_param: ControlPlaneIpList}
+                for_each:
+                  SERVICE: {get_attr: [EnabledServicesValue, value]}
   service_hostnames:
     description: >
       Map of enabled services to a list of hostnames where they're running
index bc74a5a..448f6d8 100644 (file)
@@ -737,6 +737,18 @@ resources:
 {% endfor %}
       stack_name: {get_param: 'OS::stack_name'}
       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
+      ctlplane_service_ips:
+        # Note (shardy) this somewhat complex yaql may be replaced
+        # with a map_deep_merge function in ocata.  It merges the
+        # list of maps, but appends to colliding lists when a service
+        # is deployed on more than one role
+        yaql:
+          expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1], [$[0], $[1].flatten()]))
+          data:
+            l:
+{% for role in roles %}
+              - {get_attr: [{{role.name}}IpListMap, ctlplane_service_ips]}
+{% endfor %}
       role_data:
 {% for role in roles %}
         {{role.name}}: {get_attr: [{{role.name}}ServiceChainRoleData, value]}
index 370ffa8..67e1ecf 100644 (file)
@@ -25,5 +25,7 @@ parameters:
     description: >
       Setting this to a unique value will re-run any deployment tasks which
       perform configuration on a Heat stack-update.
+  ctlplane_service_ips:
+    type: json
 
 {% include 'puppet-steps.j2' %}
index cc681fd..82c6171 100644 (file)
@@ -133,8 +133,14 @@ resources:
       actions:
         CREATE:
           workflow: { get_resource: WorkflowTasks_Step{{step}} }
+          params:
+            env:
+              service_ips: { get_param: ctlplane_service_ips }
         UPDATE:
           workflow: { get_resource: WorkflowTasks_Step{{step}} }
+          params:
+            env:
+              service_ips: { get_param: ctlplane_service_ips }
       always_update: true
 {% endfor %}
 # END service_workflow_tasks handling