---
- import_role:
    name: service-precheck
  vars:
    service_precheck_services: "{{ cinder_services }}"
    service_name: "{{ project_name }}"

- name: Get container facts
  become: true
  kolla_container_facts:
    action: get_containers
    container_engine: "{{ kolla_container_engine }}"
    name:
      - cinder_api
  check_mode: false
  register: container_facts

- name: Checking free port for Cinder API
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ cinder_api_listen_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts.containers['cinder_api'] is not defined
    - inventory_hostname in groups['cinder-api']

- name: Checking at least one valid backend is enabled for Cinder
  run_once: True
  fail:
    msg: "Please enable at least one backend when enabling Cinder"
  when:
    - not skip_cinder_backend_check | bool
    - not enable_cinder_backend_iscsi | bool
    - not enable_cinder_backend_lvm | bool
    - not enable_cinder_backend_nfs | bool
    - not cinder_backend_ceph | bool
    - not cinder_backend_vmwarevc_vmdk | bool
    - not cinder_backend_vmware_vstorage_object | bool
    - not enable_cinder_backend_quobyte | bool
    - not enable_cinder_backend_pure_iscsi | bool
    - not enable_cinder_backend_pure_fc | bool
    - not enable_cinder_backend_pure_roce | bool
    - not enable_cinder_backend_pure_nvme_tcp | bool
    - not enable_cinder_backend_lightbits | bool

- name: Checking LVM volume group exists for Cinder
  become: true
  command: "vgs {{ cinder_volume_group }}"
  register: result
  changed_when: false
  failed_when: result is failed
  check_mode: false
  when:
    - enable_cinder | bool
    - enable_cinder_backend_lvm | bool
    - inventory_hostname in groups['cinder-volume']

- name: Checking for coordination backend if Ceph backend is enabled
  run_once: True
  fail:
    msg: "Please enable redis or etcd when using Cinder Ceph backend"
  when:
    - not skip_cinder_backend_check | bool
    - cinder_backend_ceph | bool
    - cinder_coordination_backend == ''
    - groups['cinder-volume'] | length > 1

- name: Check if S3 configurations are defined
  assert:
    that:
      - vars[item] is defined
    msg: "Cinder backup S3 backend is enabled, either the {{ item }} or {{ item | replace('cinder_backup_', '') }} variable must be defined."
  with_items:
    - cinder_backup_s3_url
    - cinder_backup_s3_bucket
    - cinder_backup_s3_access_key
    - cinder_backup_s3_secret_key
  when: cinder_backup_driver == "s3"

- name: Check if Lightbits configurations are defined
  assert:
    that:
      - vars[item] is defined
    msg: "Cinder Lightbits backend is enabled, the {{ item }} variable must be defined."
  with_items:
    - lightos_api_address
    - lightos_jwt
  when: enable_cinder_backend_lightbits == "yes"

- name: Check if cinder_cluster_name is configured for HA configurations
  assert:
    that:
      - cinder_cluster_name != ""
    msg: |
      Multiple cinder-volume instances detected but cinder_cluster_name is not set- please see
      https://docs.openstack.org/kolla-ansible/latest/reference/storage/cinder-guide.html#ha
      for guidance.
  when:
    - not cinder_cluster_skip_precheck
    - groups['cinder-volume'] | length > 1

- name: Check if cinder_cluster_name is configured and configuration is non-HA
  assert:
    that:
      - cinder_cluster_name == ""
    msg: |
      Single cinder-volume instance detected but cinder_cluster_name is set (cluster
      configuration will not be applied) - please see
      https://docs.openstack.org/kolla-ansible/latest/reference/storage/cinder-guide.html#ha
      for guidance.
  when:
    - not cinder_cluster_skip_precheck
    - groups['cinder-volume'] | length == 1
