# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
---
# This role will install Kafka with Zookeeper in group 'kafka' in the environment inventory

- name: "pull the zookeeper:{{ zookeeper.version }} image"
  shell: "docker pull zookeeper:{{ zookeeper.version }}"
  register: result
  until: (result.rc == 0)
  retries: "{{ docker.pull.retries }}"
  delay: "{{ docker.pull.delay }}"

- name: (re)start zookeeper
  docker_container:
    name: zookeeper{{ groups['zookeepers'].index(inventory_hostname) }}
    image: zookeeper:{{ zookeeper.version }}
    state: started
    recreate: true
    restart_policy: "{{ docker.restart.policy }}"
    env:
        ZOO_MY_ID: "{{ groups['zookeepers'].index(inventory_hostname) + 1 }}"
        ZOO_SERVERS: "{% set zhosts = [] %}
                      {% for host in groups['zookeepers'] %}
                        {% if host == inventory_hostname %}
                          {{ zhosts.append('server.' + (loop.index|string) + '=' + '0.0.0.0:2888:3888') }}
                        {% else %}
                          {{ zhosts.append('server.' + (loop.index|string) + '=' + hostvars[host].ansible_host + ':' + ((2888+loop.index-1)|string) + ':' + ((3888+loop.index-1)|string) ) }}
                        {% endif %}
                      {% endfor %}
                      {{ zhosts | join(' ') }}"
    ports:
      - "{{ zookeeper.port + groups['zookeepers'].index(inventory_hostname) }}:2181"
      - "{{ 2888 + groups['zookeepers'].index(inventory_hostname) }}:2888"
      - "{{ 3888 + groups['zookeepers'].index(inventory_hostname) }}:3888"

- name: wait until the Zookeeper in this host is up and running
  action: shell (echo ruok; sleep 1) | nc {{ ansible_host }} {{ zookeeper.port + groups['zookeepers'].index(inventory_hostname) }}
  register: result
  until: (result.rc == 0) and (result.stdout == 'imok')
  retries: 36
  delay: 5
