Merge "Add docker_puppet_tasks initialization on primary node"
authorJenkins <jenkins@review.openstack.org>
Fri, 17 Feb 2017 15:56:43 +0000 (15:56 +0000)
committerGerrit Code Review <review@openstack.org>
Fri, 17 Feb 2017 15:56:44 +0000 (15:56 +0000)
docker/docker-puppet.py
docker/post.j2.yaml
docker/services/README.rst
docker/services/services.yaml

index 2d56081..fe87ce7 100755 (executable)
@@ -72,7 +72,9 @@ with open(config_file) as f:
 
 configs = {}
 
-for service in json_data:
+for service in (json_data or []):
+    if service is None:
+        continue
     config_volume = service[0] or ''
     puppet_tags = service[1] or ''
     manifest = service[2] or ''
index c125423..3473f4c 100644 (file)
@@ -29,6 +29,66 @@ parameters:
 
 resources:
 
+  # These utility tasks use docker-puppet.py to execute tasks via puppet
+  # We only execute these on the first node in the primary role
+  {{primary_role_name}}DockerPuppetTasks:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        yaql:
+          expression:
+            dict($.data.docker_puppet_tasks.where($1 != null).selectMany($.items()).groupBy($[0], $[1]))
+          data:
+            docker_puppet_tasks: {get_param: [role_data, {{primary_role_name}}, docker_puppet_tasks]}
+
+# BEGIN primary_role_name docker-puppet-tasks (run only on a single node)
+{% for step in range(1, 6) %}
+
+  {{primary_role_name}}DockerPuppetJsonConfig{{step}}:
+      type: OS::Heat::StructuredConfig
+      properties:
+        group: json-file
+        config:
+          /var/lib/docker-puppet/docker-puppet-tasks{{step}}.json:
+            {get_attr: [{{primary_role_name}}DockerPuppetTasks, value, 'step_{{step}}']}
+
+  {{primary_role_name}}DockerPuppetJsonDeployment{{step}}:
+    type: OS::Heat::SoftwareDeployment
+    properties:
+      server: {get_param: [servers, {{primary_role_name}}, '0']}
+      config: {get_resource: {{primary_role_name}}DockerPuppetJsonConfig{{step}}}
+
+  {{primary_role_name}}DockerPuppetTasksConfig{{step}}:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: {get_file: docker-puppet.py}
+      inputs:
+        - name: CONFIG
+        - name: NET_HOST
+        - name: NO_ARCHIVE
+
+  {{primary_role_name}}DockerPuppetTasksDeployment{{step}}:
+    type: OS::Heat::SoftwareDeployment
+    depends_on:
+      {% for dep in roles %}
+      - {{dep.name}}Deployment_Step{{step}}
+      - {{dep.name}}ContainersDeployment_Step{{step}}
+      {% endfor %}
+      - {{primary_role_name}}DockerPuppetJsonDeployment{{step}}
+    properties:
+      name: {{primary_role_name}}DockerPuppetJsonDeployment{{step}}
+      server: {get_param: [servers, {{primary_role_name}}, '0']}
+      config: {get_resource: {{primary_role_name}}DockerPuppetTasksConfig{{step}}}
+      input_values:
+        CONFIG: /var/lib/docker-puppet/docker-puppet-tasks{{step}}.json
+        NET_HOST: 'true'
+        NO_ARCHIVE: 'true'
+
+{% endfor %}
+# END primary_role_name docker-puppet-tasks
+
 {% for role in roles %}
   # Post deployment steps for all roles
   # A single config is re-applied with an incrementing step number
@@ -165,10 +225,11 @@ resources:
     depends_on: [{{role.name}}PreConfig, {{role.name}}ArtifactsDeploy]
   {% else %}
     depends_on:
-    {% for dep in roles %}
+      {% for dep in roles %}
       - {{dep.name}}Deployment_Step{{step -1}}
       - {{dep.name}}ContainersDeployment_Step{{step -1}}
-    {% endfor %}
+      {% endfor %}
+      - {{primary_role_name}}DockerPuppetTasksDeployment{{step -1}}
   {% endif %}
     properties:
       name: {{role.name}}Deployment_Step{{step}}
@@ -201,11 +262,12 @@ resources:
       - {{role.name}}GenerateConfigDeployment
   {% else %}
     depends_on:
-      {% for dep in roles %}
+        {% for dep in roles %}
         - {{dep.name}}ContainersDeployment_Step{{step -1}}
         - {{dep.name}}Deployment_Step{{step}} # baremetal steps of the same level run first
         - {{dep.name}}Deployment_Step{{step -1}}
-      {% endfor %}
+        {% endfor %}
+        - {{primary_role_name}}DockerPuppetTasksDeployment{{step -1}}
   {% endif %}
     properties:
       name: {{role.name}}ContainersDeployment_Step{{step}}
@@ -220,6 +282,7 @@ resources:
     depends_on:
   {% for dep in roles %}
       - {{dep.name}}Deployment_Step5
+      - {{primary_role_name}}DockerPuppetTasksDeployment5
   {% endfor %}
     properties:
       servers:  {get_param: servers}
index edaa5ee..c054e8c 100644 (file)
@@ -76,6 +76,13 @@ are re-asserted when applying latter ones.
    'docker_image' above but some containers share a common set of
    config files which are generated in a common base container.
 
+ * docker_puppet_tasks: This section provides data to drive the
+   docker-puppet.py tool directly. The task is executed only once
+   within the cluster (not on each node) and is useful for several
+   puppet snippets we require for initialization of things like
+   keystone endpoints, database users, etc. See docker-puppet.py
+   for formatting.
+
 Docker steps
 ------------
 Similar to baremetal docker containers are brought up in a stepwise manner.
index 8e89902..cd9f4cb 100644 (file)
@@ -75,3 +75,5 @@ outputs:
         map_merge: {get_attr: [ServiceChain, role_data, kolla_config]}
       docker_config:
         {get_attr: [ServiceChain, role_data, docker_config]}
+      docker_puppet_tasks:
+        {get_attr: [ServiceChain, role_data, docker_puppet_tasks]}