From 7f7d2f0deaf8e1655a517ba7dbb64e51c8eb8e95 Mon Sep 17 00:00:00 2001
From: Doug Szumski <doug@stackhpc.com>
Date: Tue, 6 Mar 2018 09:39:25 +0000
Subject: [PATCH] Add support for deploying Apache Kafka

This change supports deploying Apache Kafka.

Depends-On: Iab8d200c2450238f3c0c708d1f4184490f6e6284
for support in Kolla-Ansible.
Task: 6697
Story: 2001627

Change-Id: I22c79f75e9cfed647c03216b94bab5ee0790cbf2
---
 ansible/group_vars/all/kolla                             | 5 +++--
 ansible/kolla-openstack.yml                              | 2 ++
 .../kolla-ansible/templates/overcloud-components.j2      | 3 +++
 ansible/roles/kolla-ansible/tests/test-defaults.yml      | 1 +
 ansible/roles/kolla-ansible/tests/test-extras.yml        | 2 ++
 ansible/roles/kolla-ansible/vars/main.yml                | 1 +
 ansible/roles/kolla-openstack/defaults/main.yml          | 9 +++++++++
 .../molecule/default/tests/test_default.py               | 1 +
 .../molecule/enable-everything/molecule.yml              | 4 ++++
 .../molecule/enable-everything/tests/test_default.py     | 2 ++
 ansible/roles/kolla-openstack/tasks/config.yml           | 1 +
 .../kolla-openstack/templates/kafka.server.properties.j2 | 9 +++++++++
 ansible/roles/kolla-openstack/vars/main.yml              | 5 +++++
 13 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 ansible/roles/kolla-openstack/templates/kafka.server.properties.j2

diff --git a/ansible/group_vars/all/kolla b/ansible/group_vars/all/kolla
index b8bdd46a..c42ef8ea 100644
--- a/ansible/group_vars/all/kolla
+++ b/ansible/group_vars/all/kolla
@@ -144,6 +144,8 @@ overcloud_container_image_regex_map:
     enabled: "{{ kolla_enable_ironic | bool }}"
   - regex: iscsid
     enabled: "{{ kolla_enable_cinder | bool or kolla_enable_ironic | bool }}"
+  - regex: kafka
+    enabled: "{{ kolla_enable_kafka | bool }}"
   - regex: keepalived
     enabled: "{{ kolla_enable_haproxy | bool }}"
   - regex: keystone
@@ -301,7 +303,6 @@ kolla_enable_haproxy: "yes"
 kolla_enable_heat: "yes"
 kolla_enable_horizon: "yes"
 kolla_enable_ironic: "yes"
-# Kafka is not currently supported
 kolla_enable_kafka: "no"
 kolla_enable_kibana: "{{ 'yes' if kolla_enable_central_logging | bool else 'no' }}"
 kolla_enable_magnum: "no"
@@ -316,7 +317,7 @@ kolla_enable_osprofiler: "no"
 kolla_enable_sahara: "no"
 kolla_enable_skydive: "no"
 kolla_enable_swift: "no"
-kolla_enable_zookeeper: "no"
+kolla_enable_zookeeper: "{{ 'yes' if kolla_enable_kafka | bool else 'no' }}"
 
 ###############################################################################
 # Passwords and credentials.
diff --git a/ansible/kolla-openstack.yml b/ansible/kolla-openstack.yml
index babf5d56..e10c5811 100644
--- a/ansible/kolla-openstack.yml
+++ b/ansible/kolla-openstack.yml
@@ -107,6 +107,7 @@
             - { name: inspector, file: ironic-inspector.conf }
             - { name: ironic, file: ironic.conf }
             - { name: ironic_dnsmasq, file: ironic/ironic-dnsmasq.conf }
+            - { name: kafka, file: kafka.server.properties }
             - { name: magnum, file: magnum.conf }
             - { name: murano, file: murano.conf }
             - { name: neutron, file: neutron.conf }
@@ -208,6 +209,7 @@
       kolla_extra_inspector: "{{ kolla_extra_config.inspector | default }}"
       kolla_extra_ironic: "{{ kolla_extra_config.ironic | default }}"
       kolla_extra_ironic_dnsmasq: "{{ kolla_extra_config.ironic_dnsmasq | default }}"
+      kolla_extra_kafka: "{{ kolla_extra_config.kafka | default }}"
       kolla_extra_magnum: "{{ kolla_extra_config.magnum | default }}"
       kolla_extra_murano: "{{ kolla_extra_config.murano | default }}"
       kolla_extra_neutron: "{{ kolla_extra_config.neutron | default }}"
diff --git a/ansible/roles/kolla-ansible/templates/overcloud-components.j2 b/ansible/roles/kolla-ansible/templates/overcloud-components.j2
index baded2d1..62c0ab84 100644
--- a/ansible/roles/kolla-ansible/templates/overcloud-components.j2
+++ b/ansible/roles/kolla-ansible/templates/overcloud-components.j2
@@ -36,6 +36,9 @@ control
 [influxdb:children]
 monitoring
 
+[kafka:children]
+control
+
 [karbor:children]
 control
 
diff --git a/ansible/roles/kolla-ansible/tests/test-defaults.yml b/ansible/roles/kolla-ansible/tests/test-defaults.yml
index 4137bc60..ec439844 100644
--- a/ansible/roles/kolla-ansible/tests/test-defaults.yml
+++ b/ansible/roles/kolla-ansible/tests/test-defaults.yml
@@ -116,6 +116,7 @@
               - neutron_tenant_network_types
               - enable_glance
               - enable_ironic
+              - enable_kafka
               - enable_neutron
               - enable_nova
               - enable_zookeeper
diff --git a/ansible/roles/kolla-ansible/tests/test-extras.yml b/ansible/roles/kolla-ansible/tests/test-extras.yml
index 712481cd..2a93f134 100644
--- a/ansible/roles/kolla-ansible/tests/test-extras.yml
+++ b/ansible/roles/kolla-ansible/tests/test-extras.yml
@@ -85,6 +85,7 @@
             kolla_enable_horizon: True
             kolla_enable_influxdb: True
             kolla_enable_ironic: True
+            kolla_enable_kafka: True
             kolla_enable_karbor: True
             kolla_enable_kibana: True
             kolla_enable_kuryr: True
@@ -219,6 +220,7 @@
               #enable_horizon: True
               #enable_influxdb: True
               #enable_ironic: True
+              #enable_kafka: True
               #enable_karbor: True
               #enable_kibana: True
               #enable_kuryr: True
diff --git a/ansible/roles/kolla-ansible/vars/main.yml b/ansible/roles/kolla-ansible/vars/main.yml
index cddaa444..15888bdb 100644
--- a/ansible/roles/kolla-ansible/vars/main.yml
+++ b/ansible/roles/kolla-ansible/vars/main.yml
@@ -82,6 +82,7 @@ kolla_feature_flags:
   - horizon
   - influxdb
   - ironic
+  - kafka
   - karbor
   - kibana
   - kuryr
diff --git a/ansible/roles/kolla-openstack/defaults/main.yml b/ansible/roles/kolla-openstack/defaults/main.yml
index 003b14c6..cd0fcdcf 100644
--- a/ansible/roles/kolla-openstack/defaults/main.yml
+++ b/ansible/roles/kolla-openstack/defaults/main.yml
@@ -246,6 +246,15 @@ kolla_inspector_default_gateway:
 # Free form extra configuration to append to dnsmasq.conf.
 kolla_extra_ironic_dnsmasq:
 
+###############################################################################
+# Kafka configuration.
+
+# Whether to enable Kafka.
+kolla_enable_kafka:
+
+# Free form extra configuration to append to kafka.server.properties.
+kolla_extra_kafka:
+
 ###############################################################################
 # Magnum configuration.
 
diff --git a/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py b/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py
index c3ea79ef..1b1bd0c7 100644
--- a/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py
+++ b/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py
@@ -45,6 +45,7 @@ def test_service_config_directory(host, path):
      'heat',
      'horizon',
      'ironic',
+     'kafka',
      'magnum',
      'manila',
      'murano',
diff --git a/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml b/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
index 50db855d..83972ca3 100644
--- a/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
+++ b/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
@@ -52,6 +52,10 @@ provisioner:
         kolla_inspector_ipa_ramdisk_path: ${MOLECULE_TEMP_PATH:-/tmp}/ironic-agent.initramfs
         kolla_extra_ironic_dnsmasq: |
           extra=bar
+        kolla_enable_kafka: True
+        kolla_extra_kafka: |
+          [extra-kafka.server.properties]
+          foo=bar
         kolla_enable_magnum: True
         kolla_extra_magnum: |
           [extra-magnum.conf]
diff --git a/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py b/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
index 262e3d36..450247dd 100644
--- a/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
+++ b/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
@@ -37,6 +37,7 @@ testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
      'heat',
      'horizon',
      'ironic',
+     'kafka',
      'keystone',
      'magnum',
      'manila',
@@ -61,6 +62,7 @@ def test_service_config_directory(host, path):
      'heat.conf',
      'ironic.conf',
      'ironic-inspector.conf',
+     'kafka.server.properties',
      'magnum.conf',
      'neutron/ml2_conf.ini',
      'murano.conf',
diff --git a/ansible/roles/kolla-openstack/tasks/config.yml b/ansible/roles/kolla-openstack/tasks/config.yml
index 341f26e7..c4c98a9a 100644
--- a/ansible/roles/kolla-openstack/tasks/config.yml
+++ b/ansible/roles/kolla-openstack/tasks/config.yml
@@ -22,6 +22,7 @@
     - { src: ironic.conf.j2, dest: ironic.conf, enabled: "{{ kolla_enable_ironic }}" }
     - { src: ironic-dnsmasq.conf.j2, dest: ironic/ironic-dnsmasq.conf, enabled: "{{ kolla_enable_ironic }}" }
     - { src: ironic-inspector.conf.j2, dest: ironic-inspector.conf, enabled: "{{ kolla_enable_ironic }}" }
+    - { src: kafka.server.properties.j2, dest: kafka.server.properties, enabled: "{{ kolla_enable_kafka }}" }
     - { src: magnum.conf.j2, dest: magnum.conf, enabled: "{{ kolla_enable_magnum }}" }
     - { src: ml2_conf.ini.j2, dest: neutron/ml2_conf.ini, enabled: "{{ kolla_enable_neutron }}" }
     - { src: murano.conf.j2, dest: murano.conf, enabled: "{{ kolla_enable_murano }}" }
diff --git a/ansible/roles/kolla-openstack/templates/kafka.server.properties.j2 b/ansible/roles/kolla-openstack/templates/kafka.server.properties.j2
new file mode 100644
index 00000000..12d0dac2
--- /dev/null
+++ b/ansible/roles/kolla-openstack/templates/kafka.server.properties.j2
@@ -0,0 +1,9 @@
+# {{ ansible_managed }}
+
+{% if kolla_extra_kafka %}
+#######################
+# Extra configuration
+#######################
+
+{{ kolla_extra_kafka }}
+{% endif %}
diff --git a/ansible/roles/kolla-openstack/vars/main.yml b/ansible/roles/kolla-openstack/vars/main.yml
index cfd4f43b..f6f9fe04 100644
--- a/ansible/roles/kolla-openstack/vars/main.yml
+++ b/ansible/roles/kolla-openstack/vars/main.yml
@@ -65,6 +65,11 @@ kolla_openstack_custom_config:
       - ironic-agent.kernel
       - ironic-dnsmasq.conf
       - pxelinux.default
+  # Kafka.
+  - src: "{{ kolla_extra_config_path }}/kafka"
+    dest: "{{ kolla_node_custom_config_path }}/kafka"
+    patterns: "*"
+    enabled: "{{ kolla_enable_kafka }}"
   # Keystone.
   - src: "{{ kolla_extra_config_path }}/keystone"
     dest: "{{ kolla_node_custom_config_path }}/keystone"
-- 
GitLab