From 9c1940e461867f2ce986a81fa313d7995592f0c5 Mon Sep 17 00:00:00 2001 From: Giulio Fidente Date: Wed, 24 May 2017 18:45:59 +0200 Subject: Provides a list of per-service ctlplane IPs to the workflows env 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 | 8 ++++++++ network/ports/net_ip_list_map.yaml | 14 ++++++++++++++ overcloud.j2.yaml | 12 ++++++++++++ puppet/post.j2.yaml | 2 ++ puppet/puppet-steps.j2 | 6 ++++++ 5 files changed, 42 insertions(+) diff --git a/docker/docker-steps.j2 b/docker/docker-steps.j2 index b3359b17..83772028 100644 --- a/docker/docker-steps.j2 +++ b/docker/docker-steps.j2 @@ -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 %} diff --git a/network/ports/net_ip_list_map.yaml b/network/ports/net_ip_list_map.yaml index c3734afe..a9111ed9 100644 --- a/network/ports/net_ip_list_map.yaml +++ b/network/ports/net_ip_list_map.yaml @@ -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 diff --git a/overcloud.j2.yaml b/overcloud.j2.yaml index bc74a5ac..448f6d8b 100644 --- a/overcloud.j2.yaml +++ b/overcloud.j2.yaml @@ -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]} diff --git a/puppet/post.j2.yaml b/puppet/post.j2.yaml index 370ffa8a..67e1ecfd 100644 --- a/puppet/post.j2.yaml +++ b/puppet/post.j2.yaml @@ -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' %} diff --git a/puppet/puppet-steps.j2 b/puppet/puppet-steps.j2 index cc681fd3..82c6171e 100644 --- a/puppet/puppet-steps.j2 +++ b/puppet/puppet-steps.j2 @@ -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 -- cgit 1.2.3-korg