---
- import_tasks: config-host.yml

- import_tasks: config.yml

- import_tasks: check-containers.yml

- include_tasks: config-neutron-fake.yml
  when:
    - inventory_hostname in groups['compute']
    - enable_nova_fake | bool

- name: Running Neutron database expand container
  vars:
    neutron_server: "{{ neutron_services['neutron-server'] }}"
  become: true
  kolla_docker:
    action: "start_container"
    common_options: "{{ docker_common_options }}"
    detach: False
    environment:
      KOLLA_UPGRADE:
      NEUTRON_DB_EXPAND:
      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
      NEUTRON_ROLLING_UPGRADE_SERVICES: "{{ neutron_rolling_upgrade_services | join(' ') }}"
    image: "{{ neutron_server.image }}"
    labels:
      UPGRADE:
    name: "bootstrap_neutron"
    restart_policy: oneshot
    volumes: "{{ neutron_server.volumes }}"
  run_once: True
  delegate_to: "{{ groups['neutron-server'][0] }}"

- name: Flush Handlers
  meta: flush_handlers

- name: Checking neutron pending contract scripts
  become: true
  command: "{{ kolla_container_engine }} exec -t neutron_server neutron-db-manage --subproject {{ item }} has_offline_migrations"
  register: neutron_check_contract_db_stdout
  ignore_errors: yes
  with_items: "{{ neutron_rolling_upgrade_services }}"
  when: inventory_hostname == groups['neutron-server'][0]

- name: Stopping all neutron-server for contract db
  vars:
    neutron_server: "{{ neutron_services['neutron-server'] }}"
    first_neutron_server_host: "{{ groups[neutron_server.group][0] }}"
    results_of_check_pending_contract_scripts: "{{ hostvars[first_neutron_server_host]['neutron_check_contract_db_stdout'] }}"
    # NOTE(hrw): no idea
    filter_rc: "results[?rc!=`0`]"
    is_stop_neutron_server: "{{ results_of_check_pending_contract_scripts | json_query(filter_rc) }}"
  become: true
  kolla_docker:
    action: "stop_container"
    common_options: "{{ docker_common_options }}"
    name: "{{ neutron_server.container_name }}"
  when:
    - neutron_server.host_in_groups | bool
    - is_stop_neutron_server | length > 0
  notify:
    - "Restart neutron-server container"

- name: Running Neutron database contract container
  vars:
    neutron_server: "{{ neutron_services['neutron-server'] }}"
  become: true
  kolla_docker:
    action: "start_container"
    common_options: "{{ docker_common_options }}"
    detach: False
    environment:
      KOLLA_UPGRADE:
      NEUTRON_DB_CONTRACT:
      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
      NEUTRON_ROLLING_UPGRADE_SERVICES: "{{ neutron_rolling_upgrade_services | join(' ') }}"
    image: "{{ neutron_server.image }}"
    labels:
      UPGRADE:
    name: "bootstrap_neutron"
    restart_policy: oneshot
    volumes: "{{ neutron_server.volumes }}"
  run_once: True
  delegate_to: "{{ groups['neutron-server'][0] }}"

# Flush handlers here to ensure neutron-server containers are started
- name: Flush Handlers
  meta: flush_handlers
