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

- name: Get container facts
  become: true
  kolla_container_facts:
    container_engine: "{{ kolla_container_engine }}"
    name:
      - octavia_api
      - octavia_health_manager
  check_mode: false
  register: container_facts

- name: Checking free port for Octavia API
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ octavia_api_listen_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['octavia_api'] is not defined
    - inventory_hostname in groups['octavia-api']

- name: Checking free port for Octavia Health Manager
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ octavia_health_manager_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['octavia_health_manager'] is not defined
    - inventory_hostname in groups['octavia-health-manager']

- name: Checking certificate files exist for octavia
  stat:
    path: "{{ node_custom_config }}/octavia/{{ item }}"
  delegate_to: localhost
  run_once: True
  register: result
  failed_when: not result.stat.exists
  when:
    - inventory_hostname in groups['octavia-worker']
    - "'amphora' in octavia_provider_drivers"
  with_items:
    - client.cert-and-key.pem
    - client_ca.cert.pem
    - server_ca.cert.pem
    - server_ca.key.pem

- name: Fail when Neutron plugin agent is not supported
  fail:
    msg: >
      Neutron plugin agent {{ neutron_plugin_agent }} is not supported when
      octavia_network_type is tenant, only openvswitch is supported currently
  run_once: True
  when:
    - octavia_auto_configure | bool
    - octavia_network_type == "tenant"
    - neutron_plugin_agent != 'openvswitch'

- name: Checking whether Redis is enabled for octavia jobboard
  assert:
    that: enable_redis | bool
    fail_msg: "Redis must be enabled when using octavia jobboard"
  run_once: True
  when:
    - enable_octavia_jobboard | bool
