# Note the indentation here is required as it's joined # to create a playbook in deploy-steps.j2 ################################################## # Step 1 block, write data for subsequent steps ################################################## - name: Write config data at the start of step 1 when: step == "1" block: - name: Create /var/lib/tripleo-config directory file: path: /var/lib/tripleo-config state: directory setype: svirt_sandbox_file_t selevel: s0 recurse: true # Puppet manifest for baremetal host configuration - name: Write the puppet step_config manifest copy: content: "{{ lookup('file', tripleo_role_name + '/step_config.pp', errors='ignore') | default('', True) }}" dest: /var/lib/tripleo-config/puppet_step_config.pp force: yes mode: '0600' # Config file for our docker-puppet.py script, used to generate container configs - name: Create /var/lib/docker-puppet file: path: /var/lib/docker-puppet state: directory setype: svirt_sandbox_file_t selevel: s0 - name: Write docker-puppet.json file copy: content: "{{ lookup('file', tripleo_role_name + '/puppet_config.yaml', errors='ignore') | default([], True) | from_yaml | to_json }}" dest: /var/lib/docker-puppet/docker-puppet.json force: yes mode: '0600' - name: Create /var/lib/docker-config-scripts file: path: /var/lib/docker-config-scripts state: directory # The container config files # /var/lib/docker-container-startup-configs.json is removed as we now write # per-step files instead - name: Clean old /var/lib/docker-container-startup-configs.json file file: path: /var/lib/docker-container-startup-configs.json state: absent - name: Write docker config scripts copy: content: "{{ item.value.content }}" dest: "/var/lib/docker-config-scripts/{{ item.key }}" force: yes mode: "{{ item.value.mode | default('0600', true) }}" with_dict: "{{ role_data_docker_config_scripts }}" vars: role_data_docker_config_scripts: "{{ lookup('file', tripleo_role_name + '/docker_config_scripts.yaml', errors='ignore') | default({}, True) | from_yaml }}" # Here we are dumping all the docker container startup configuration data # so that we can have access to how they are started outside of heat # and docker-cmd. This lets us create command line tools to test containers. # FIXME We need to update the defaults, e.g in docker-tool, so we can remove the # docker-container-startup-configs.json and use per-step configs instead - name: Set docker_config_default fact no_log: True set_fact: docker_config_default: "{{ docker_config_default | default({}) | combine( {'step_' + item: {}} ) }}" with_sequence: count={{ deploy_steps_max }} - name: Set docker_startup_configs_with_default fact no_log: True set_fact: docker_config_with_default: "{{ docker_config_default | combine(role_data_docker_config) }}" vars: role_data_docker_config: "{{ lookup('file', tripleo_role_name + '/docker_config.yaml', errors='ignore') | default({}, True) | from_yaml }}" - name: Write docker-container-startup-configs copy: content: "{{ docker_config_with_default | to_json }}" dest: /var/lib/docker-container-startup-configs.json force: yes mode: '0600' - name: Write per-step docker-container-startup-configs copy: content: "{{ item.value | to_json }}" dest: "/var/lib/tripleo-config/docker-container-startup-config-{{ item.key }}.json" force: yes mode: '0600' with_dict: "{{ docker_config_with_default }}" - name: Create /var/lib/kolla/config_files directory file: path: /var/lib/kolla/config_files state: directory setype: svirt_sandbox_file_t selevel: s0 recurse: true - name: Write kolla config json files copy: content: "{{ item.value | to_json }}" dest: "{{ item.key }}" force: yes mode: '0600' with_dict: "{{ lookup('file', tripleo_role_name + '/kolla_config.yaml', errors='ignore') | default([], True) | from_yaml }}" ######################################################## # 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 copy: content: "{{item.value|to_json}}" dest: /var/lib/docker-puppet/docker-puppet-tasks{{item.key.replace("step_", "")}}.json force: yes mode: '0600' with_dict: "{{ lookup('file', tripleo_role_name + '/docker_puppet_tasks.yaml', errors='ignore') | default({}, True) | from_yaml }}" when: deploy_server_id == bootstrap_server_id ##################################################### # 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_puppet | default(true) | bool - enable_debug | default(false) | bool - 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' - name: Run puppet host configuration for step {{ step }} when: enable_puppet|default(true)|bool command: >- puppet apply {{ host_puppet_config_debug | default('') }} --modulepath=/etc/puppet/modules:/opt/stack/puppet-modules:/usr/share/openstack-puppet/modules --detailed-exitcodes --summarize --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 - name: "Debug output for task which failed: Run puppet host configuration for step {{ step }}" debug: var: outputs.stdout_lines | default([]) | union(outputs.stderr_lines | default([])) when: - enable_puppet | default(true) | bool - outputs.rc is defined failed_when: outputs.rc not in [0, 2] ###################################### # Generate config via docker-puppet.py ###################################### - name: Run docker-puppet tasks (generate config) during step {{ step }} 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 - name: "Debug output for task which failed: Run docker-puppet tasks (generate config) during step {{ step }}" debug: var: outputs.stdout_lines | default([]) | union(outputs.stderr_lines | default([])) when: outputs.rc is defined failed_when: outputs.rc != 0 ################################################## # Per step starting of the containers using paunch ################################################## # 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-{{ tripleo_role_name }} changed_when: false check_mode: no register: outputs failed_when: false no_log: true - name: "Debug output for task which failed: Start containers for step {{ step }}" debug: var: outputs.stdout_lines | default([]) | union(outputs.stderr_lines | default([])) when: outputs.rc is defined failed_when: outputs.rc != 0 ######################################################## # 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) for step {{ step }} 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 - docker_puppet_tasks_json.stat.exists changed_when: false check_mode: no register: outputs failed_when: false no_log: true - name: "Debug output for task which failed: Run docker-puppet tasks (bootstrap tasks) for step {{ step }}" debug: var: outputs.stdout_lines | default([]) | union(outputs.stderr_lines | default([])) when: outputs.rc is defined failed_when: outputs.rc != 0