# Copyright (c) 2022 VEXXHOST, 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: Generate OpenStack-Helm endpoints
  ansible.builtin.include_role:
    name: openstack_helm_endpoints
  vars:
    openstack_helm_endpoints_chart: tempest

- name: Configure tempest
  block:
    - name: Get test image object
      openstack.cloud.image_info:
        cloud: atmosphere
        image: cirros
      register: _tempest_test_image
      when: tempest_helm_values.conf.tempest.compute.image_ref is not defined

    - name: Configure test image ref
      ansible.builtin.set_fact:
        tempest_helm_values: "{{ tempest_helm_values | default({}) | combine({item.key: item.value}, recursive=True) }}"
      with_dict:
        conf:
          tempest:
            compute:
              image_ref: "{{ _tempest_test_image.openstack_image.id }}"
      when:
        - tempest_helm_values.conf.tempest.compute.image_ref is not defined
        - _tempest_test_image.openstack_image.id is defined

    - name: Get test flavor object
      openstack.cloud.compute_flavor_info:
        cloud: atmosphere
        name: m1.tiny
      register: _tempest_test_flavor
      when: tempest_helm_values.conf.tempest.compute.flavor_ref is not defined

    - name: Set test flavor ref
      ansible.builtin.set_fact:
        tempest_helm_values: "{{ tempest_helm_values | default({}) | combine({item.key: item.value}, recursive=True) }}"
      with_dict:
        conf:
          tempest:
            compute:
              flavor_ref: "{{ _tempest_test_flavor.openstack_flavors[0].id }}"
      when:
        - tempest_helm_values.conf.tempest.compute.flavor_ref is not defined
        - _tempest_test_flavor.openstack_flavors[0].id is defined

    - name: Get test network object
      openstack.cloud.networks_info:
        cloud: atmosphere
        name: public
      register: _tempest_test_network
      when: tempest_helm_values.conf.tempest.network.public_network_id is not defined

    - name: Set test network ref
      ansible.builtin.set_fact:
        tempest_helm_values: "{{ tempest_helm_values | default({}) | combine({item.key: item.value}, recursive=True) }}"
      with_dict:
        conf:
          tempest:
            network:
              public_network_id: "{{ _tempest_test_network.openstack_networks[0].id }}"
      when:
        - tempest_helm_values.conf.tempest.network.public_network_id is not defined
        - _tempest_test_network.openstack_networks[0].id is defined

- name: Deploy Helm chart
  failed_when: false
  run_once: true
  kubernetes.core.helm:
    name: "{{ tempest_helm_release_name }}"
    chart_ref: "{{ tempest_helm_chart_ref }}"
    release_namespace: "{{ tempest_helm_release_namespace }}"
    kubeconfig: /etc/kubernetes/admin.conf
    values: "{{ _tempest_helm_values | combine(_tempest_network_backend_settings[atmosphere_network_backend], recursive=True) | combine(tempest_helm_values, recursive=True) }}" # noqa: yaml[line-length]
    wait: true
    wait_timeout: 20m

- name: Get tempest job object
  kubernetes.core.k8s_info:
    api_version: batch/v1
    kind: Job
    name: tempest-run-tests
    namespace: openstack
  register: _tempest_job_obj

- name: Get tempest log
  kubernetes.core.k8s_log:
    namespace: openstack
    label_selectors:
      - job-name=tempest-run-tests
  register: _tempest_log

- name: Print tempest log details
  ansible.builtin.debug:
    msg: "{{ _tempest_log.log_lines }}"

- name: Fail when tempest result is failed
  ansible.builtin.fail:
    msg: "Tempest failed!"
  when: _tempest_job_obj.resources[0]['status']['succeeded'] is not defined or
        _tempest_job_obj.resources[0]['status']['succeeded'] != 1
