Move docker_puppet_tasks calculation into services.yaml

This makes the RolesData output more accurate, and we can rework
things so docker-puppet only gets run when there is a non-empty
file calculated (e.g there are tasks to run).

Change-Id: I8cdab3c857977c80fe2e359ab9e05740a838d66b
This commit is contained in:
Steven Hardy 2017-07-19 20:36:11 +01:00 committed by marios
parent d364d9cca2
commit 0a44085af6
3 changed files with 16 additions and 23 deletions

View File

@ -223,10 +223,10 @@ resources:
DockerPuppetTasks: DockerPuppetTasks:
type: OS::Heat::Value type: OS::Heat::Value
properties: properties:
type: comma_delimited_list type: json
value: value:
yaql: yaql:
expression: coalesce($.data, []).where($ != null).select($.get('docker_puppet_tasks')).where($ != null).distinct() expression: dict(coalesce($.data, []).where($ != null).select($.get('docker_puppet_tasks')).where($ != null).selectMany($.items()).groupBy($[0], $[1]))
data: {get_attr: [ServiceChain, role_data]} data: {get_attr: [ServiceChain, role_data]}
HostPrepTasks: HostPrepTasks:

View File

@ -64,6 +64,10 @@
######################################################## ########################################################
# Bootstrap tasks, only performed on bootstrap_server_id # Bootstrap tasks, only performed on bootstrap_server_id
######################################################## ########################################################
- name: Check if /var/lib/docker-puppet/docker-puppet-tasks{{step}}.json exists
stat:
path: /var/lib/docker-puppet/docker-puppet-tasks{{step}}.json
register: docker_puppet_tasks_json
- name: Run docker-puppet tasks (bootstrap tasks) - name: Run docker-puppet tasks (bootstrap tasks)
shell: python /var/lib/docker-puppet/docker-puppet.py shell: python /var/lib/docker-puppet/docker-puppet.py
environment: environment:
@ -71,7 +75,7 @@
NET_HOST: "true" NET_HOST: "true"
NO_ARCHIVE: "true" NO_ARCHIVE: "true"
STEP: "{{step}}" STEP: "{{step}}"
when: deploy_server_id == bootstrap_server_id when: deploy_server_id == bootstrap_server_id and docker_puppet_tasks_json.stat.exists
changed_when: false changed_when: false
check_mode: no check_mode: no
register: outputs register: outputs

View File

@ -60,23 +60,6 @@ conditions:
resources: 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:
$.data.default_tasks + 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]}
default_tasks:
{%- for step in range(1, deploy_steps_max) %}
step_{{step}}: {}
{%- endfor %}
RoleConfig: RoleConfig:
type: OS::Heat::SoftwareConfig type: OS::Heat::SoftwareConfig
properties: properties:
@ -177,7 +160,7 @@ resources:
vars: vars:
puppet_config: {get_param: [role_data, {{role.name}}, puppet_config]} puppet_config: {get_param: [role_data, {{role.name}}, puppet_config]}
docker_puppet_script: {get_file: docker-puppet.py} docker_puppet_script: {get_file: docker-puppet.py}
docker_puppet_tasks: {get_attr: [{{primary_role_name}}DockerPuppetTasks, value]} docker_puppet_tasks: {get_param: [role_data, {{role.name}}, docker_puppet_tasks]}
docker_startup_configs: {get_param: [role_data, {{role.name}}, docker_config]} docker_startup_configs: {get_param: [role_data, {{role.name}}, docker_config]}
kolla_config: {get_param: [role_data, {{role.name}}, kolla_config]} kolla_config: {get_param: [role_data, {{role.name}}, kolla_config]}
bootstrap_server_id: {get_param: [servers, {{primary_role_name}}, '0']} bootstrap_server_id: {get_param: [servers, {{primary_role_name}}, '0']}
@ -195,10 +178,9 @@ resources:
file: path=/var/lib/tripleo-config state=directory file: path=/var/lib/tripleo-config state=directory
- name: Write the puppet step_config manifest - name: Write the puppet step_config manifest
copy: content="{{puppet_step_config}}" dest=/var/lib/tripleo-config/puppet_step_config.pp force=yes copy: content="{{puppet_step_config}}" dest=/var/lib/tripleo-config/puppet_step_config.pp force=yes
# This is the docker-puppet configs end in # this creates a JSON config file for our docker-puppet.py script
- name: Create /var/lib/docker-puppet - name: Create /var/lib/docker-puppet
file: path=/var/lib/docker-puppet state=directory file: path=/var/lib/docker-puppet state=directory
# this creates a JSON config file for our docker-puppet.py script
- name: Write docker-puppet-tasks json files - name: Write docker-puppet-tasks json files
copy: content="{{puppet_config | to_json}}" dest=/var/lib/docker-puppet/docker-puppet.json force=yes copy: content="{{puppet_config | to_json}}" dest=/var/lib/docker-puppet/docker-puppet.json force=yes
# FIXME: can we move docker-puppet somewhere so it's installed via a package? # FIXME: can we move docker-puppet somewhere so it's installed via a package?
@ -222,6 +204,13 @@ resources:
######################################################## ########################################################
# Bootstrap tasks, only performed on bootstrap_server_id # Bootstrap tasks, only performed on bootstrap_server_id
######################################################## ########################################################
- name: Clean /var/lib/docker-puppet/docker-puppet-tasks*.json files
file:
path: "{{item}}"
state: absent
with_fileglob:
- /var/lib/docker-puppet/docker-puppet-tasks*.json
when: deploy_server_id == bootstrap_server_id
- name: Write docker-puppet-tasks json files - name: Write docker-puppet-tasks json files
copy: content="{{item.value|to_json}}" dest=/var/lib/docker-puppet/docker-puppet-tasks{{item.key.replace("step_", "")}}.json force=yes copy: content="{{item.value|to_json}}" dest=/var/lib/docker-puppet/docker-puppet-tasks{{item.key.replace("step_", "")}}.json force=yes
with_dict: "{{docker_puppet_tasks}}" with_dict: "{{docker_puppet_tasks}}"