/home/zuul/src/opendev.org/openstack/openstack-ansible-os_tempest/tasks/tempest_post_install.yml
---
# Copyright 2014, Rackspace US, Inc.
# Copyright 2018, Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

- name: Create tempest directories
  file:
    path: "{{ item.path }}"
    state: directory
    owner: "{{ item.owner | default(omit) }}"
    group: "{{ item.group | default(omit) }}"
    mode: "{{ item.mode|default('0755') }}"
  with_items:
    - path: "{{ tempest_log_dir | realpath }}"
      owner: root
    - path: "{{ tempest_image_dir }}"
    - path: "{{ tempest_workspace }}"
    - path: "/etc/tempest"
      owner: root
      group: root

- name: Copy tempest config
  config_template:
    src: "tempest.conf.j2"
    dest: "/etc/tempest/tempest.conf"
    owner: "root"
    group: "root"
    mode: "0644"
    config_overrides: "{{ tempest_tempest_conf_overrides }}"
    config_type: "ini"
  register: copy_tempest_config
  when: not tempest_use_tempestconf | bool

- name: Move over workspace when config is updated
  shell: |
    set -e

    if [ -d  {{ tempest_venv_bin }} ]; then
        . {{ tempest_venv_bin }}/activate
    else
       exit 0
    fi

    if tempest workspace list | grep ' workspace '; then

        # Get a backup suffix
        export CURDATE=$(date +"%d%^b%g_%H%M%S%Z")

        # Get the dirname for 'workspace' directly from the tempest workspace list
        WSPATH=$(dirname $(tempest workspace list | awk '{if($2 == "workspace"){print $4}}'))

        # Rename the workspace
        tempest workspace rename --old-name workspace --new-name workspace_${CURDATE}

        # A workspace move only changes the config.  The move happens manually.
        if [ -d "${WSPATH}/workspace" ]
        then
            mv ${WSPATH}/workspace ${WSPATH}/workspace_${CURDATE}
            tempest workspace move --name workspace_${CURDATE} --path ${WSPATH}/workspace_${CURDATE}/
        fi

        exit 3
    fi
  args:
    executable: /bin/bash
  register: tempest_move_workspace
  changed_when: tempest_move_workspace.rc == 3
  failed_when:
    - tempest_move_workspace.rc != 0
    - tempest_move_workspace.rc != 3
  when: copy_tempest_config.changed
  tags:
     # don't trigger ANSIBLE0016
     - skip_ansible_lint

- name: Initialise tempest workspace
  shell: |
    set -e
    if [ ! -d {{ tempest_workspace }}/etc ]; then
        if [ -d {{ tempest_venv_bin }} ]; then
            . {{ tempest_venv_bin }}/activate
        fi
        # (guilhermesp) We are adding this conditional here to avoid
        # breakage when we are upgrade from rocky to stein as the workspace
        # path has been change between these two releases
        if tempest workspace list | grep ' workspace '; then
            if ! tempest workspace list | grep ' workspace ' | grep -w {{ tempest_workspace }}; then
                # Init not working on existing entry. Renme old workspace instead and init new.
                export CURDATE=$(date +"%d%^b%g_%H%M%S%Z")
                tempest workspace rename --old-name workspace --new-name workspace_${CURDATE}
                tempest init {{ tempest_workspace }}
            fi
        fi
        tempest init {{ tempest_workspace }}
      exit 3
    fi
  args:
    executable: /bin/bash
  register: tempest_init_workspace
  changed_when: tempest_init_workspace.rc == 3
  failed_when:
    - tempest_init_workspace.rc != 0
    - tempest_init_workspace.rc != 3
  tags:
    # don't trigger ANSIBLE0013
    - skip_ansible_lint

- import_tasks: tempestconf.yml
  when: tempest_use_tempestconf | bool
  tags:
    - tempest-config
    - tempestconf

- name: List installed tempest plugins
  shell: |
    set -e
    if [ -d {{ tempest_venv_bin }} ]; then
       . {{ tempest_venv_bin }}/activate
    fi
    tempest list-plugins
  args:
    executable: /bin/bash
  when: "debug | bool"

- name: List tempest tests
  shell: |
    set -e
    if [ -d {{ tempest_venv_bin }} ];
    then
      . {{ tempest_venv_bin }}/activate
    fi
    tempest run -l
  args:
    chdir: "{{ tempest_workspace }}"
    executable: /bin/bash
  when: "debug | bool"
  changed_when: false

- name: Generate tempest test whitelist
  copy:
    content: |
      {% for item in tempest_test_whitelist | unique | sort %}
      {%   if item %}
      {{ item }}
      {%   endif %}
      {% endfor %}
    dest: "{{ tempest_test_whitelist_file_path }}"
  when:
    - tempest_test_whitelist | length > 0

# Tests to NOT execute:
# This sets up a list of tests to skip, which can even include those included in the whitelist.
- name: Generate tempest test blacklist
  copy:
    content: |
      {% for item in tempest_test_blacklist %}
      {% if item.test is defined %}
      {{ item.test }}
      {% else %}
      {{ item }}
      {%   endif %}
      {% endfor %}
    dest: "{{ tempest_test_blacklist_file_path }}"
  when:
    - tempest_test_blacklist | length > 0