11e599d116
puppet run on never fails, even when it should, since we moved to the ansible way of applying it. The reason is the current following code: - name: Run puppet host configuration for step {{step}} command: >- puppet apply --modulepath=/etc/puppet/modules:/opt/stack/puppet-modules:/usr/share/openstack-puppet/modules --logdest syslog --logdest console --color=false /var/lib/tripleo-config/puppet_step_config.pp The above is missing the --detailed-exitcodes switch and so puppet will never really error out on us and the deployment will keep on running all the steps even though a previous puppet manifest might have failed. This cause extra hard-to-debug failures. Initially the issue was observed on the puppet host runs, but this parameter is missing also from docker-puppet.py, so let's add it there as well as it makes sense to return proper error codes whenever we call puppet. Besides this being a good idea in general, we actually *have* to do it because puppet does not fail correctly without this option due to the following puppet bug: https://tickets.puppetlabs.com/browse/PUP-2754 Depends-On: I607927c2ee5c29b605e18e9294b0f91d37337680 Co-Authored-By: Damien Ciabrini <dciabrin@redhat.com> Change-Id: Ie9df4f520645404560a9635fb66e3af42b966f54 Closes-Bug: #1723163
100 lines
4.3 KiB
YAML
100 lines
4.3 KiB
YAML
# Note the indentation here is required as it's joined
|
|
# to create a playbook in deploy-steps.j2
|
|
|
|
#####################################################
|
|
# Per step puppet configuration of the baremetal host
|
|
#####################################################
|
|
- name: Set host puppet debugging fact string
|
|
set_fact:
|
|
host_puppet_config_debug: "--debug --verbose"
|
|
when: enable_debug|default(false)
|
|
- name: Write the config_step hieradata
|
|
copy: content="{{dict(step=step|int)|to_json}}" dest=/etc/puppet/hieradata/config_step.json force=true mode=0600
|
|
become: true
|
|
- name: Run puppet host configuration for step {{step}}
|
|
command: >-
|
|
puppet apply {{ host_puppet_config_debug|default('') }}
|
|
--modulepath=/etc/puppet/modules:/opt/stack/puppet-modules:/usr/share/openstack-puppet/modules
|
|
--detailed-exitcodes
|
|
--logdest syslog --logdest console --color=false
|
|
/var/lib/tripleo-config/puppet_step_config.pp
|
|
changed_when: outputs.rc == 2
|
|
check_mode: no
|
|
register: outputs
|
|
failed_when: false
|
|
no_log: true
|
|
become: true
|
|
- debug: var=(outputs.stderr|default('')).split('\n')|union(outputs.stdout_lines|default([]))
|
|
when: outputs is defined
|
|
failed_when: outputs.rc not in [0, 2]
|
|
######################################
|
|
# Generate config via docker-puppet.py
|
|
######################################
|
|
- name: Run docker-puppet tasks (generate config)
|
|
shell: python /var/lib/docker-puppet/docker-puppet.py
|
|
environment:
|
|
NET_HOST: 'true'
|
|
DEBUG: '{{docker_puppet_debug|default(false)}}'
|
|
PROCESS_COUNT: '{{docker_puppet_process_count|default(3)}}'
|
|
when: step == "1"
|
|
changed_when: false
|
|
check_mode: no
|
|
register: outputs
|
|
failed_when: false
|
|
no_log: true
|
|
become: true
|
|
- debug: var=(outputs.stderr|default('')).split('\n')|union(outputs.stdout_lines|default([]))
|
|
when: outputs is defined
|
|
failed_when: outputs|failed
|
|
##################################################
|
|
# Per step starting of the containers using paunch
|
|
##################################################
|
|
- name: Check if /var/lib/hashed-tripleo-config/docker-container-startup-config-step_{{step}}.json exists
|
|
stat:
|
|
path: /var/lib/tripleo-config/hashed-docker-container-startup-config-step_{{step}}.json
|
|
register: docker_config_json
|
|
become: true
|
|
# Note docker-puppet.py generates the hashed-*.json file, which is a copy of
|
|
# the *step_n.json with a hash of the generated external config added
|
|
# This acts as a salt to enable restarting the container if config changes
|
|
- name: Start containers for step {{step}}
|
|
command: >-
|
|
paunch --debug apply
|
|
--file /var/lib/tripleo-config/hashed-docker-container-startup-config-step_{{step}}.json
|
|
--config-id tripleo_step{{step}} --managed-by tripleo-{{role_name}}
|
|
when: docker_config_json.stat.exists
|
|
changed_when: false
|
|
check_mode: no
|
|
register: outputs
|
|
failed_when: false
|
|
no_log: true
|
|
become: true
|
|
- debug: var=(outputs.stderr|default('')).split('\n')|union(outputs.stdout_lines|default([]))
|
|
when: outputs is defined
|
|
failed_when: outputs|failed
|
|
########################################################
|
|
# 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
|
|
become: true
|
|
- name: Run docker-puppet tasks (bootstrap tasks)
|
|
shell: python /var/lib/docker-puppet/docker-puppet.py
|
|
environment:
|
|
CONFIG: /var/lib/docker-puppet/docker-puppet-tasks{{step}}.json
|
|
NET_HOST: "true"
|
|
NO_ARCHIVE: "true"
|
|
STEP: "{{step}}"
|
|
when: deploy_server_id == bootstrap_server_id and docker_puppet_tasks_json.stat.exists
|
|
changed_when: false
|
|
check_mode: no
|
|
register: outputs
|
|
failed_when: false
|
|
no_log: true
|
|
become: true
|
|
- debug: var=(outputs.stderr|default('')).split('\n')|union(outputs.stdout_lines|default([]))
|
|
when: outputs is defined
|
|
failed_when: outputs|failed
|