---
# NOTE: Handler order matter, init database upgrade must be before other handlers
# finish database upgrade must be the last handler.

- name: Init keystone database upgrade
  vars:
    service_name: "keystone"
    service: "{{ keystone_services[service_name] }}"
  become: true
  kolla_docker:
    action: "start_container"
    common_options: "{{ docker_common_options }}"
    detach: False
    environment:
      KOLLA_UPGRADE:
      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
    image: "{{ service.image }}"
    labels:
      KOLLA_UPGRADE:
    name: "init_upgrade_database"
    restart_policy: "never"
    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
    dimensions: "{{ service.dimensions }}"
  run_once: True
  when:
    - kolla_action == "upgrade"
    - service.enabled | bool
    - inventory_hostname == groups[service.group][0]

- name: Restart keystone container
  vars:
    service_name: "keystone"
    service: "{{ keystone_services[service_name] }}"
    config_json: "{{ keystone_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
    keystone_conf: "{{ keystone_confs.results|selectattr('item.key', 'equalto', service_name)|first  }}"
    policy_overwriting: "{{ keystone_policy_overwriting.results|selectattr('item.key', 'equalto', service_name)|first }}"
    keystone_container: "{{ check_keystone_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
  become: true
  kolla_docker:
    action: "recreate_or_restart_container"
    common_options: "{{ docker_common_options }}"
    name: "{{ service.container_name }}"
    image: "{{ service.image }}"
    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
    dimensions: "{{ service.dimensions }}"
  when:
    - kolla_action != "config"
    - inventory_hostname in groups[service.group]
    - service.enabled | bool
    - config_json.changed | bool
      or keystone_conf.changed | bool
      or keystone_domains.changed | bool
      or policy_overwriting.changed | bool
      or keystone_wsgi.changed | bool
      or keystone_paste_ini.changed | bool
      or keystone_container.changed | bool

- name: Restart keystone-ssh container
  vars:
    service_name: "keystone-ssh"
    service: "{{ keystone_services[service_name] }}"
    config_json: "{{ keystone_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
    keystone_ssh_container: "{{ check_keystone_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
  become: true
  kolla_docker:
    action: "recreate_or_restart_container"
    common_options: "{{ docker_common_options }}"
    name: "{{ service.container_name }}"
    image: "{{ service.image }}"
    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
    dimensions: "{{ service.dimensions }}"
  when:
    - kolla_action != "config"
    - inventory_hostname in groups[service.group]
    - service.enabled | bool
    - config_json.changed | bool
      or keystone_ssh_confs.changed | bool
      or keystone_ssh_container.changed | bool

- name: Restart keystone-fernet container
  vars:
    service_name: "keystone-fernet"
    service: "{{ keystone_services[service_name] }}"
    config_json: "{{ keystone_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
    keystone_conf: "{{ keystone_confs.results|selectattr('item.key', 'equalto', service_name)|first  }}"
    policy_overwriting: "{{ keystone_policy_overwriting.results|selectattr('item.key', 'equalto', service_name)|first }}"
    keystone_fernet_container: "{{ check_keystone_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
  become: true
  kolla_docker:
    action: "recreate_or_restart_container"
    common_options: "{{ docker_common_options }}"
    name: "{{ service.container_name }}"
    image: "{{ service.image }}"
    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
    dimensions: "{{ service.dimensions }}"
  when:
    - kolla_action != "config"
    - inventory_hostname in groups[service.group]
    - service.enabled | bool
    - config_json.changed | bool
      or keystone_conf.changed | bool
      or policy_overwriting.changed | bool
      or keystone_fernet_confs.changed | bool
      or keystone_fernet_container.changed | bool

- name: Finish keystone database upgrade
  vars:
    service_name: "keystone"
    service: "{{ keystone_services[service_name] }}"
  become: true
  kolla_docker:
    action: "start_container"
    common_options: "{{ docker_common_options }}"
    detach: False
    environment:
      KOLLA_FINISH_UPGRADE:
      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
    image: "{{ service.image }}"
    labels:
      KOLLA_UPGRADE:
    name: "finish_upgrade_database"
    restart_policy: "never"
    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
    dimensions: "{{ service.dimensions }}"
  run_once: True
  when:
    - kolla_action == "upgrade"
    - service.enabled | bool
    - inventory_hostname == groups[service.group][-1]
