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

- name: Get container facts
  become: true
  kolla_container_facts:
    container_engine: "{{ kolla_container_engine }}"
    name:
      - swift_account_server
      - swift_container_server
      - swift_object_server
      - swift_proxy_server
  check_mode: false
  register: container_facts

- name: Checking free port for Swift Account Server
  wait_for:
    host: "{{ 'swift_storage' | kolla_address }}"
    port: "{{ swift_account_server_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_account_server'] is not defined
    - inventory_hostname in groups['swift-account-server']

- name: Checking free port for Swift Container Server
  wait_for:
    host: "{{ 'swift_storage' | kolla_address }}"
    port: "{{ swift_container_server_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_container_server'] is not defined
    - inventory_hostname in groups['swift-container-server']

- name: Checking free port for Swift Object Server
  wait_for:
    host: "{{ 'swift_storage' | kolla_address }}"
    port: "{{ swift_object_server_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_object_server'] is not defined
    - inventory_hostname in groups['swift-object-server']

- name: Checking free port for Swift Account Replication Server
  wait_for:
    host: "{{ 'swift_replication' | kolla_address }}"
    port: "{{ swift_account_server_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_account_server'] is not defined
    - inventory_hostname in groups['swift-account-server']

- name: Checking free port for Swift Container Replication Server
  wait_for:
    host: "{{ 'swift_replication' | kolla_address }}"
    port: "{{ swift_container_server_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_container_server'] is not defined
    - inventory_hostname in groups['swift-container-server']

- name: Checking free port for Swift Object Replication Server
  wait_for:
    host: "{{ 'swift_replication' | kolla_address }}"
    port: "{{ swift_object_server_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_object_server'] is not defined
    - inventory_hostname in groups['swift-object-server']

- name: Checking free port for Rsync
  wait_for:
    host: "{{ 'swift_replication' | kolla_address }}"
    port: "873"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_object_server'] is not defined
    - inventory_hostname in groups['swift-object-server']

- name: Checking free port for Swift Proxy Server
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ swift_proxy_server_listen_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['swift_proxy_server'] is not defined
    - inventory_hostname in groups['swift-proxy-server']

- name: Checking Swift ring files
  run_once: True
  stat:
    path: "{{ node_custom_config }}/swift/{{ item }}"
  delegate_to: localhost
  register: swift_ring_files
  with_items:
    - "account.builder"
    - "account.ring.gz"
    - "container.builder"
    - "container.ring.gz"
    - "object.builder"
    - "object.ring.gz"
    - "{{ swift_extra_ring_files }}"

- name: Fail if ring files don't exist
  run_once: True
  fail:
    msg: >-
      Swift ring files do not exist.
      Ensure .builder and .gz are available for each of account/container/object under {{ node_custom_config }}/swift before deploying Swift.
  with_items: '{{ swift_ring_files.results }}'
  when:
    - not item.stat.exists
