diff --git a/common/container-puppet.sh b/common/container-puppet.sh index 411b159cea..9b0ff468b8 100644 --- a/common/container-puppet.sh +++ b/common/container-puppet.sh @@ -22,6 +22,10 @@ if [ -n "$PUPPET_TAGS" ]; then TAGS="--tags \"$PUPPET_TAGS\"" fi +if [ ! -z ${STEP_CONFIG+x} ]; then + echo -e "${STEP_CONFIG}" | tee /etc/config.pp +fi + CHECK_MODE="" if [ -d "/tmp/puppet-check-mode" ]; then mkdir -p /etc/puppet/check-mode diff --git a/common/deploy-steps-tasks.yaml b/common/deploy-steps-tasks.yaml index 836ba98596..d2a9c73af3 100644 --- a/common/deploy-steps-tasks.yaml +++ b/common/deploy-steps-tasks.yaml @@ -148,6 +148,7 @@ tripleo_container_manage_debug: "{{ enable_debug | bool }}" tripleo_container_manage_healthcheck_disabled: "{{ container_healthcheck_disabled | bool }}" tripleo_container_manage_log_path: "{{ container_log_stdout_path }}" + tripleo_container_manage_config_patterns: '*.json' tags: - container_startup_configs diff --git a/common/generate-config-tasks.yaml b/common/generate-config-tasks.yaml index c78584adf8..6550938b7e 100644 --- a/common/generate-config-tasks.yaml +++ b/common/generate-config-tasks.yaml @@ -1,43 +1,83 @@ -- name: Run container-puppet tasks (generate config) during step 1 - async: 3600 - poll: 0 - shell: "{{ python_cmd }} /var/lib/container-puppet/container-puppet.py" - environment: - NET_HOST: 'true' - DEBUG: '{{ docker_puppet_debug | bool }}' - PROCESS_COUNT: "{{ docker_puppet_process_count }}" - CONTAINER_CLI: "{{ container_cli }}" - CONFIG: '/var/lib/container-puppet/{{ ansible_check_mode | bool | ternary("check-mode/", "") }}container-puppet.json' - CONFIG_VOLUME_PREFIX: '/var/lib/config-data{{ ansible_check_mode | bool | ternary("/check-mode", "") }}' - CHECK_MODE: '{{ ansible_check_mode | bool | ternary(1, 0) }}' - STARTUP_CONFIG_PATTERN: '/var/lib/tripleo-config/container-startup-config/*/{{ ansible_check_mode | bool | ternary("check-mode/", "") }}*.json' - MOUNT_HOST_PUPPET: '{{docker_puppet_mount_host_puppet | default(true)}}' - CONTAINER_LOG_STDOUT_PATH: "{{ container_log_stdout_path }}" - CONTAINER_HEALTHCHECK_DISABLED: "{{ container_healthcheck_disabled }}" - SHORT_HOSTNAME: "{{ ansible_hostname }}" - check_mode: no - register: generate_config_async_result +- name: Block for container-puppet tasks (generate config) during step 1 with paunch + when: + - enable_paunch|default(true) tags: - container_config + block: + - name: Run container-puppet tasks (generate config) during step 1 with paunch + async: 3600 + poll: 0 + shell: "{{ python_cmd }} /var/lib/container-puppet/container-puppet.py" + environment: + NET_HOST: 'true' + DEBUG: '{{ docker_puppet_debug | bool }}' + PROCESS_COUNT: "{{ docker_puppet_process_count }}" + CONTAINER_CLI: "{{ container_cli }}" + CONFIG: '/var/lib/container-puppet/{{ ansible_check_mode | bool | ternary("check-mode/", "") }}container-puppet.json' + CONFIG_VOLUME_PREFIX: '/var/lib/config-data{{ ansible_check_mode | bool | ternary("/check-mode", "") }}' + CHECK_MODE: '{{ ansible_check_mode | bool | ternary(1, 0) }}' + STARTUP_CONFIG_PATTERN: '/var/lib/tripleo-config/container-startup-config/*/{{ ansible_check_mode | bool | ternary("check-mode/", "") }}*.json' + MOUNT_HOST_PUPPET: '{{docker_puppet_mount_host_puppet | default(true)}}' + CONTAINER_LOG_STDOUT_PATH: "{{ container_log_stdout_path }}" + CONTAINER_HEALTHCHECK_DISABLED: "{{ container_healthcheck_disabled }}" + SHORT_HOSTNAME: "{{ ansible_hostname }}" + check_mode: no + register: generate_config_async_result -- name: Wait for container-puppet tasks (generate config) to finish - async_status: - jid: "{{ generate_config_async_result.ansible_job_id }}" - register: generate_config_outputs - until: generate_config_outputs.finished - retries: 1200 - delay: 3 - tags: - - container_config + - name: Wait for container-puppet tasks (generate config) to finish + async_status: + jid: "{{ generate_config_async_result.ansible_job_id }}" + register: generate_config_outputs + until: generate_config_outputs.finished + retries: 1200 + delay: 3 -- name: "Debug output for task: Run container-puppet tasks (generate config) during step 1" - debug: - var: generate_config_outputs.stdout_lines | default([]) | union(generate_config_outputs.stderr_lines | default([])) - when: generate_config_outputs.rc is defined - failed_when: generate_config_outputs.rc != 0 + - name: "Debug output for task: Run container-puppet tasks (generate config) during step 1" + debug: + var: generate_config_outputs.stdout_lines | default([]) | union(generate_config_outputs.stderr_lines | default([])) + when: generate_config_outputs.rc is defined + failed_when: generate_config_outputs.rc != 0 + ignore_errors: "{{ ansible_check_mode|bool }}" + +- name: Block for container-puppet tasks (generate config) during step {{ step }} with tripleo-ansible + when: + - not enable_paunch|default(true) tags: - container_config - ignore_errors: "{{ ansible_check_mode|bool }}" + block: + - name: Create base directory puppet configs + file: + path: "/var/lib/tripleo-config/container-puppet-config" + mode: 0700 + recurse: true + setype: svirt_sandbox_file_t + + - name: "Generate container puppet configs for step {{ step }}" + container_puppet_config: + check_mode: '{{ ansible_check_mode | bool | ternary(1, 0) }}' + config_vol_prefix: "/var/lib/config-data{{ ansible_check_mode | bool | ternary('/check-mode', '') }}" + debug: "{{ docker_puppet_debug | bool }}" + net_host: true + no_archive: false + puppet_config: "/var/lib/container-puppet/{{ ansible_check_mode | bool | ternary('check-mode/', '') }}container-puppet.json" + short_hostname: "{{ ansible_hostname }}" + step: "{{ step }}" + + - name: "Manage Puppet containers (generate config) for step {{ step }} with tripleo-ansible" + include_role: + name: tripleo_container_manage + vars: + tripleo_container_manage_concurrency: "{{ docker_puppet_process_count }}" + tripleo_container_manage_systemd_order: false + tripleo_container_manage_systemd_teardown: false + tripleo_container_manage_config: "/var/lib/tripleo-config/container-puppet-config/step_{{ step }}" + tripleo_container_manage_config_patterns: 'container-puppet-*.json' + tripleo_container_manage_config_id: "tripleo_puppet_step{{ step }}" + tripleo_container_manage_debug: "{{ docker_puppet_debug | bool }}" + # puppet with --detailed-exitcodes will return 0 for success and + # no changes and 2 for success and resource changes. Other + # numbers are failures + tripleo_container_manage_valid_exit_code: [0, 2] - name: Diff container-puppet.py puppet-generated changes for check mode shell: | diff --git a/common/host-container-puppet-tasks.yaml b/common/host-container-puppet-tasks.yaml index 9eed67c2dd..43d32bdd32 100644 --- a/common/host-container-puppet-tasks.yaml +++ b/common/host-container-puppet-tasks.yaml @@ -8,41 +8,74 @@ tags: - container_config_tasks -- name: Run container-puppet tasks (bootstrap tasks) for step {{ step }} - async: 3600 - poll: 0 - shell: "{{ python_cmd }} /var/lib/container-puppet/container-puppet.py" - environment: - CONFIG: /var/lib/container-puppet/{{ ansible_check_mode | bool | ternary('check-mode/', '') }}container-puppet-tasks{{ step }}.json - CONFIG_VOLUME_PREFIX: '/var/lib/config-data{{ ansible_check_mode | bool | ternary("/check-mode", "") }}' - NET_HOST: "true" - NO_ARCHIVE: "true" - STEP: "{{ step }}" - CONTAINER_CLI: "{{ container_cli }}" - DEBUG: "{{ docker_puppet_debug }}" - MOUNT_HOST_PUPPET: '{{docker_puppet_mount_host_puppet}}' - SHORT_HOSTNAME: "{{ ansible_hostname }}" - PROCESS_COUNT: "{{ docker_puppet_process_count }}" - register: bootstrap_tasks_async_result - no_log: true - tags: - - container_config_tasks - -- name: Wait for container-puppet tasks (bootstrap tasks) for step {{ step }} to finish - async_status: - jid: "{{ bootstrap_tasks_async_result.ansible_job_id }}" - register: bootstrap_tasks_outputs - until: bootstrap_tasks_outputs.finished - retries: 1200 - delay: 3 - tags: - - container_config_tasks - -- name: "Debug output for task: Run container-puppet tasks (bootstrap tasks) for step {{ step }}" - debug: - var: bootstrap_tasks_outputs.stdout_lines | default([]) | union(bootstrap_tasks_outputs.stderr_lines | default([])) +- name: Block for container-puppet tasks (bootstrap tasks) for step {{ step }} with paunch when: - - bootstrap_tasks_outputs.rc is defined - failed_when: bootstrap_tasks_outputs.rc != 0 + - enable_paunch|default(true) tags: - container_config_tasks + block: + - name: Run container-puppet tasks (bootstrap tasks) for step {{ step }} with paunch + async: 3600 + poll: 0 + shell: "{{ python_cmd }} /var/lib/container-puppet/container-puppet.py" + environment: + CONFIG: /var/lib/container-puppet/{{ ansible_check_mode | bool | ternary('check-mode/', '') }}container-puppet-tasks{{ step }}.json + CONFIG_VOLUME_PREFIX: '/var/lib/config-data{{ ansible_check_mode | bool | ternary("/check-mode", "") }}' + NET_HOST: "true" + NO_ARCHIVE: "true" + STEP: "{{ step }}" + CONTAINER_CLI: "{{ container_cli }}" + DEBUG: "{{ docker_puppet_debug }}" + MOUNT_HOST_PUPPET: '{{docker_puppet_mount_host_puppet}}' + SHORT_HOSTNAME: "{{ ansible_hostname }}" + PROCESS_COUNT: "{{ docker_puppet_process_count }}" + register: bootstrap_tasks_async_result + no_log: true + + - name: Wait for container-puppet tasks (bootstrap tasks) for step {{ step }} to finish + async_status: + jid: "{{ bootstrap_tasks_async_result.ansible_job_id }}" + register: bootstrap_tasks_outputs + until: bootstrap_tasks_outputs.finished + retries: 1200 + delay: 3 + + - name: "Debug output for task: Run container-puppet tasks (bootstrap tasks) for step {{ step }}" + debug: + var: bootstrap_tasks_outputs.stdout_lines | default([]) | union(bootstrap_tasks_outputs.stderr_lines | default([])) + when: + - bootstrap_tasks_outputs.rc is defined + failed_when: bootstrap_tasks_outputs.rc != 0 + +- name: Block for container-puppet tasks (bootstrap tasks) for step {{ step }} with tripleo-ansible + when: + - not enable_paunch|default(true) + tags: + - container_config_tasks + block: + - name: "Generate container puppet configs for step {{ step }}" + container_puppet_config: + check_mode: '{{ ansible_check_mode | bool | ternary(1, 0) }}' + config_vol_prefix: "/var/lib/config-data{{ ansible_check_mode | bool | ternary('/check-mode', '') }}" + debug: "{{ docker_puppet_debug | bool }}" + net_host: true + no_archive: true + puppet_config: "/var/lib/container-puppet/{{ ansible_check_mode | bool | ternary('check-mode/', '') }}container-puppet-tasks{{ step }}.json" + short_hostname: "{{ ansible_hostname }}" + step: "{{ step }}" + + - name: "Manage Puppet containers (bootstrap tasks) for step {{ step }} with tripleo-ansible" + include_role: + name: tripleo_container_manage + vars: + tripleo_container_manage_concurrency: "{{ docker_puppet_process_count }}" + tripleo_container_manage_systemd_order: false + tripleo_container_manage_systemd_teardown: false + tripleo_container_manage_config: "/var/lib/tripleo-config/container-puppet-config/step_{{ step }}" + tripleo_container_manage_config_patterns: 'container-puppet-*.json' + tripleo_container_manage_config_id: "tripleo_puppet_step{{ step }}" + tripleo_container_manage_debug: "{{ docker_puppet_debug | bool }}" + # puppet with --detailed-exitcodes will return 0 for success and + # no changes and 2 for success and resource changes. Other + # numbers are failures + tripleo_container_manage_valid_exit_code: [0, 2]