---
- name: Checking for any running keystone_fernet containers
  become: true
  kolla_container_facts:
    container_engine: "{{ kolla_container_engine }}"
    name:
      - keystone_fernet
  register: container_facts

# FIXME(mgoddard): This does not catch some cases we might consider
# bootstrapped:
# * the keystone_fernet container is created but not running
# * the keystone_fernet volume exists but no container
# Probably what we care about is the existence of Fernet key 0.
- name: Group nodes where keystone_fernet is running
  group_by:
    key: keystone_fernet_{{ container_facts['keystone_fernet'].State | default('bootstrap') }}
  changed_when: false

# NOTE(mgoddard): If we bootstrap Fernet keys on an existing cluster, this
# would overwrite existing keys, and invalidate tokens created from them.
- name: Fail if any hosts need bootstrapping and not all hosts targeted
  fail:
    msg: >
      Some hosts ({{ groups['keystone_fernet_bootstrap'] | join(', ') }}) need
      Fernet key bootstrapping, but not all Keystone hosts are in the target
      list. Stopping as it may be unsafe to proceed. Please run without --limit
      or --serial to bootstrap these hosts.
  when:
    - groups['keystone_fernet_running'] is not defined
    - groups['keystone'] | difference(ansible_play_batch) | list | length > 0

- name: Running Keystone bootstrap container
  vars:
    keystone: "{{ keystone_services.keystone }}"
  become: true
  kolla_docker:
    action: "start_container"
    common_options: "{{ docker_common_options }}"
    detach: False
    environment:
      KOLLA_BOOTSTRAP:
      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
    image: "{{ keystone.image }}"
    labels:
      BOOTSTRAP:
    name: "bootstrap_keystone"
    restart_policy: oneshot
    volumes: "{{ keystone.volumes | reject('equalto', '') | list }}"
  run_once: True

- name: Running Keystone fernet bootstrap container
  vars:
    keystone_fernet: "{{ keystone_services['keystone-fernet'] }}"
  become: true
  kolla_docker:
    action: "start_container"
    common_options: "{{ docker_common_options }}"
    detach: False
    environment:
      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
    image: "{{ keystone_fernet.image }}"
    labels:
      BOOTSTRAP:
    command: >
      bash -c 'sudo -E kolla_set_configs &&
      keystone-manage --config-file /etc/keystone/keystone.conf
      fernet_setup --keystone-user {{ keystone_username }} --keystone-group {{ keystone_groupname }}'
    name: "bootstrap_keystone_fernet"
    restart_policy: oneshot
    volumes: "{{ keystone_fernet.volumes | reject('equalto', '') | list }}"
  run_once: True
  delegate_to: "{{ groups['keystone'][0] }}"
  when:
    - groups['keystone_fernet_running'] is not defined
