{"id":780,"sha1":"17edf9b8f677aeb433abf56e78ab0f03a8a38e0b","playbook":{"id":4,"items":{"plays":107,"tasks":2438,"results":2413,"hosts":13,"files":511,"records":0},"arguments":{"version":null,"verbosity":0,"private_key_file":null,"remote_user":null,"connection":"openstack.osa.ssh","timeout":null,"ssh_common_args":null,"sftp_extra_args":null,"scp_extra_args":null,"ssh_extra_args":null,"ask_pass":false,"connection_password_file":null,"force_handlers":true,"flush_cache":false,"become":false,"become_method":"sudo","become_user":null,"become_ask_pass":false,"become_password_file":null,"tags":["all"],"skip_tags":[],"check":false,"diff":false,"inventory":["/home/zuul/src/opendev.org/openstack/openstack-ansible/inventory/dynamic_inventory.py","/home/zuul/src/opendev.org/openstack/openstack-ansible/inventory/inventory.ini","/etc/openstack_deploy/inventory.ini"],"listhosts":false,"subset":null,"extra_vars":"Not saved by ARA as configured by 'ignored_arguments'","vault_ids":[],"ask_vault_pass":false,"vault_password_files":[],"forks":4,"module_path":null,"syntax":false,"listtasks":false,"listtags":false,"step":false,"start_at_task":null,"args":["setup-openstack.yml"]},"labels":[{"id":1,"name":"check:False"},{"id":2,"name":"tags:all"}],"started":"2025-12-14T10:21:40.790759Z","ended":"2025-12-14T11:05:36.775743Z","duration":"00:43:55.984984","name":null,"ansible_version":"2.18.6","client_version":"1.7.4","python_version":"3.13.5","server_version":"1.7.4","status":"completed","path":"/home/zuul/src/opendev.org/openstack/openstack-ansible/playbooks/setup-openstack.yml","controller":"aio1.openstack.local","user":"root"},"content":"---\n# Copyright 2016, Rackspace US, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n- name: Executing tempest and collect results\n  block:\n    - name: Execute tempest tests\n      ansible.builtin.shell: |\n        set -e\n        if [ -d {{ tempest_venv_bin }} ];\n        then\n        . {{ tempest_venv_bin }}/activate\n        fi\n        tempest run \\\n        {% if tempest_run_concurrency is defined %}\n          --concurrency {{ tempest_run_concurrency }} \\\n        {% else %}\n          --serial \\\n        {% endif %}\n        {% if tempest_test_worker_file_path is defined %}\n          --worker-file {{ tempest_test_worker_file_path }} \\\n        {% endif %}\n        {% if _tempest_test_excludelist | length > 0 %}\n          --exclude-list {{ tempest_excludelist_file_path }} \\\n        {% endif %}\n          --include-list {{ tempest_includelist_file_path }} > {{ tempest_log_dir }}/tempest_run.log\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      changed_when: false\n      register: tempest_tests_run\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n\n  always:\n    - name: Generate raw subunit results\n      # Despite not using testrepository, we leave the output filename as\n      # testrepository.subunit as the OpenStack Health dashboard relies on\n      # subunit files with this particular name.\n      # NOTE(mattt): At present we're not placing this file in a valid location\n      # to be used by the OpenStack Health dashboard.\n      ansible.builtin.shell: |\n        set -e\n        if [ -d {{ tempest_venv_bin }} ];\n        then\n        . {{ tempest_venv_bin }}/activate\n        fi\n        {{ stestr_executable }} last --subunit > {{ tempest_log_dir }}/testrepository.subunit\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      changed_when: false\n      failed_when: false\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n\n    - name: Generate xml subunit results\n      ansible.builtin.shell: |\n        set -e\n        if [ -d {{ tempest_venv_bin }} ];\n        then\n        . {{ tempest_venv_bin }}/activate\n        fi\n        subunit2junitxml {{ tempest_log_dir }}/testrepository.subunit > {{ tempest_log_dir }}/tempest_results.xml\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      changed_when: false\n      failed_when: false\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n\n    - name: Generate html subunit results\n      ansible.builtin.shell: |\n        set -e\n        if [ -d {{ tempest_venv_bin }} ];\n        then\n        . {{ tempest_venv_bin }}/activate\n        fi\n        subunit2html {{ tempest_log_dir }}/testrepository.subunit {{ tempest_log_dir }}/stestr_results.html\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      changed_when: false\n      failed_when: false\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n\n    - name: Generate test-list file\n      ansible.builtin.shell: |\n        set -e\n        if [ -d {{ tempest_venv_bin }} ];\n        then\n        . {{ tempest_venv_bin }}/activate\n        fi\n        tempest run \\\n          --include-list {{ tempest_includelist_file_path }} \\\n        {% if _tempest_test_excludelist | length > 0 %}\n          --exclude-list {{ tempest_excludelist_file_path }} \\\n        {% endif %}\n          --list-tests &> {{ tempest_log_dir }}/test_list.txt\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      changed_when: false\n      failed_when: false\n\n    # Copy module doesn't copy recursively with remote_src set to true\n    - name: Copy stackviz-html to home directory\n      ansible.builtin.shell: |\n        cp -r {{ stackviz_venv_bin | dirname }}/share/stackviz-html {{ tempest_log_dir }}/stackviz\n      args:\n        executable: /bin/bash\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n      when: tempest_run_stackviz | bool\n\n    - name: Collecting data from tempest run\n      ansible.builtin.shell: |\n        . {{ stackviz_venv_bin }}/activate\n        stackviz-export -f {{ tempest_log_dir }}/testrepository.subunit --env {{ tempest_log_dir }}/stackviz/data\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n      when: tempest_run_stackviz | bool\n\n    - name: Create tempest failing tests file\n      ansible.builtin.shell: |\n        set -e\n        if [ -d {{ tempest_venv_bin }} ];\n        then\n        . {{ tempest_venv_bin }}/activate\n        fi\n        {{ stestr_executable }} failing --list  > {{ tempest_log_dir }}/failing_tests.log\n      args:\n        chdir: \"{{ tempest_workspace }}\"\n        executable: /bin/bash\n      failed_when: false\n      changed_when: false\n      tags:\n        # don't trigger ANSIBLE0013\n        - skip_ansible_lint\n      when: tempest_tests_run.rc != 0\n\n    - name: Fail if tempest tests did not succeed\n      ansible.builtin.assert:\n        that:\n          - \"tempest_tests_run.rc == 0\"\n","created":"2025-12-14T10:21:59.224023Z","updated":"2025-12-14T10:21:59.224035Z","path":"/home/zuul/src/opendev.org/openstack/openstack-ansible-os_tempest/tasks/tempest_run.yml"}