#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

- name: Pulsar setup
  hosts: zookeeper, bookie, broker, proxy
  connection: ssh
  become: true
  tasks:
    - name: Create necessary directories
      file:
        path: "{{ item }}"
        state: directory
      with_items: ["/opt/pulsar"]
    - name: Install RPM packages
      yum:
        state: latest
        name:
          - wget
          - java
          - sysstat
          - vim
    - set_fact:
        zookeeper_servers: "{{ groups['zookeeper']|map('extract', hostvars, ['ansible_default_ipv4', 'address'])|map('regex_replace', '^(.*)$', '\\1:2181') | join(',') }}"
        service_url: "{{ pulsar_service_url }}"
        http_url: "{{ pulsar_web_url }}"
        pulsar_version: "2.8.4"
    - name: Download Pulsar binary package
      unarchive:
        src: https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-{{ pulsar_version }}/apache-pulsar-{{ pulsar_version }}-bin.tar.gz
        remote_src: yes
        dest: /opt/pulsar
        extra_opts: ["--strip-components=1"]
    - set_fact:
        max_heap_memory: "12g"
        max_direct_memory: "12g"
        cluster_name: "local"
    - name: Add pulsar_env.sh configuration file
      template:
        src: "../templates/pulsar_env.sh"
        dest: "/opt/pulsar/conf/pulsar_env.sh"

- name: Set up ZooKeeper
  hosts: zookeeper
  connection: ssh
  become: true
  tasks:
    - set_fact:
        zid: "{{ groups['zookeeper'].index(inventory_hostname) }}"
        max_heap_memory: "512m"
        max_direct_memory: "1g"
    - name: Create ZooKeeper data directory
      file:
        path: "/opt/pulsar/{{ item }}"
        state: directory
      with_items:
        - data/zookeeper
    - name: Add pulsar_env.sh configuration file
      template:
        src: "../templates/pulsar_env.sh"
        dest: "/opt/pulsar/conf/pulsar_env.sh"
    - name: Add zookeeper.conf file
      template:
        src: "../templates/zoo.cfg"
        dest: "/opt/pulsar/conf/zookeeper.conf"
    - name: Add myid file for ZooKeeper
      template:
        src: "../templates/myid"
        dest: "/opt/pulsar/data/zookeeper/myid"
    - name: Add zookeeper.service systemd file
      template:
        src: "../templates/zookeeper.service"
        dest: "/etc/systemd/system/zookeeper.service"
    - name: systemd ZooKeeper start
      systemd:
        state: restarted
        daemon_reload: yes
        name: "zookeeper"
    - name: Initialize cluster metadata
      shell: |
        bin/pulsar initialize-cluster-metadata \
          --cluster {{ cluster_name }} \
          --zookeeper localhost:2181 \
          --configuration-store localhost:2181 \
          --web-service-url {{ http_url }} \
          --broker-service-url {{ service_url }}
      args:
        chdir: /opt/pulsar
      when: groups['zookeeper'][0] == inventory_hostname

- name: Set up bookies
  hosts: bookie
  connection: ssh
  become: true
  tasks:
    - template:
        src: "../templates/bookkeeper.conf"
        dest: "/opt/pulsar/conf/bookkeeper.conf"
    - template:
        src: "../templates/bookkeeper.service"
        dest: "/etc/systemd/system/bookkeeper.service"
    - systemd:
        state: restarted
        daemon_reload: yes
        name: "bookkeeper"

- name: Set up brokers
  hosts: broker
  connection: ssh
  become: true
  tasks:
    - name: Create connectors directory
      file:
        path: "/opt/pulsar/{{ item }}"
        state: directory
      loop:
        - connectors
    - name: Download Pulsar IO packages
      get_url:
        url: https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-{{ pulsar_version }}/connectors/pulsar-io-{{ item }}-{{ pulsar_version }}.nar
        dest: /opt/pulsar/connectors/pulsar-io-{{ item }}-{{ pulsar_version }}.nar
      loop:
#        - aerospike
#        - canal
#        - cassandra
#        - data-generator
#        - debezium-mongodb
#        - debezium-mysql
#        - debezium-postgres
#        - dynamodb
#        - elastic-search
#        - file
#        - flume
#        - hbase
#        - hdfs2
#        - hdfs3
#        - influxdb
#        - jdbc-clickhouse
#        - jdbc-mariadb
#        - jdbc-postgres
#        - jdbc-sqlite
        - kafka
#        - kafka-connect-adaptor
#        - kinesis
#        - mongo
#        - netty
#        - rabbitmq
#        - redis
#        - solr
#        - twitter
    - name: Set up broker
      template:
        src: "../templates/broker.conf"
        dest: "/opt/pulsar/conf/broker.conf"
    - name: Set up function worker
      template:
        src: "../templates/functions_worker.yml"
        dest: "/opt/pulsar/conf/functions_worker.yml"
    - template:
        src: "../templates/pulsar.broker.service"
        dest: "/etc/systemd/system/pulsar.broker.service"
    - systemd:
        state: restarted
        daemon_reload: yes
        name: "pulsar.broker"

- name: Set up Pulsar Proxy
  hosts: proxy
  connection: ssh
  become: true
  tasks:
    - name: Set up proxy
      template:
        src: "../templates/proxy.conf"
        dest: "/opt/pulsar/conf/proxy.conf"
    - template:
        src: "../templates/pulsar.proxy.service"
        dest: "/etc/systemd/system/pulsar.proxy.service"
    - systemd:
        state: restarted
        daemon_reload: yes
        name: "pulsar.proxy"

- name:  Hosts addresses
  hosts: localhost
  become: false
  tasks:
    - debug:
        msg: "Zookeeper Server {{ item }}"
      with_items: "{{ groups['zookeeper'] }}"
    - debug:
        msg: "Bookie {{ item }}"
      with_items: "{{ groups['bookie'] }}"
    - debug:
        msg: "Broker {{ item }}"
      with_items: "{{ groups['broker'] }}"
    - debug:
        msg: "Proxy {{ item }}"
      with_items: "{{ groups['proxy'] }}"
