# 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_helm_values, recursive=True) }}"
    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
