Merge "Fix Kafka config path for AnalyticsDB 4.0x4.1"
diff --git a/kubernetes/control/endpoint.sls b/kubernetes/control/endpoint.sls
index 4bb4df3..962855e 100644
--- a/kubernetes/control/endpoint.sls
+++ b/kubernetes/control/endpoint.sls
@@ -20,7 +20,7 @@
     {%- if endpoint.get('create', false) %}
       {%- set service_name = endpoint.service + '-' + endpoint.role if endpoint.role is defined else endpoint.service %}
 kubernetes_service_create_{{ endpoint.service }}:
-  cmd.run:
+  cmd.wait:
     - name: kubectl apply -f /srv/kubernetes/services/{{ endpoint.cluster }}/{{ endpoint.service }}-svc.yml
     - unless: kubectl get service -o=custom-columns=NAME:.metadata.name --namespace {{ endpoint.namespace }} | grep -xq {{ endpoint.service }}
     {%- if grains.get('noservices') %}
@@ -47,7 +47,7 @@
 
     {%- if endpoint.get('create', false) %}
 kubernetes_endpoint_create_{{ endpoint_name }}:
-  cmd.run:
+  cmd.wait:
     - name: kubectl apply -f /srv/kubernetes/endpoints/{{ endpoint.cluster }}/{{ endpoint_name }}.yml
     - unless: kubectl get endpoint -o=custom-columns=NAME:.metadata.name --namespace {{ endpoint.namespace }} | grep -xq {{ endpoint_name }}
     {%- if grains.get('noservices') %}
diff --git a/kubernetes/control/ingress.sls b/kubernetes/control/ingress.sls
new file mode 100644
index 0000000..8a262dc
--- /dev/null
+++ b/kubernetes/control/ingress.sls
@@ -0,0 +1,34 @@
+{% from "kubernetes/map.jinja" import control with context %}
+include:
+  - kubernetes.control
+
+{%- for ingress_name, ingress in control.ingress.items() %}
+  {%- if ingress.get('enabled', false) %}
+
+/srv/kubernetes/ingress/{{ ingress.cluster }}/{{ ingress_name }}-ingress.yml:
+  file.managed:
+  - source: salt://kubernetes/files/ingress.yml
+  - user: root
+  - group: root
+  - template: jinja
+  - makedirs: true
+  - require:
+    - file: /srv/kubernetes
+  - defaults:
+      ingress: {{ ingress|yaml }}
+      ingress_name: {{ ingress_name }}
+
+    {%- if ingress.get('create', false) %}
+kubernetes_ingress_create_{{ ingress_name }}:
+  cmd.wait:
+    - name: kubectl apply -f /srv/kubernetes/ingress/{{ ingress.cluster }}/{{ ingress_name }}-ingress.yml
+    - unless: kubectl get ingress -o=custom-columns=NAME:.metadata.name --namespace {{ ingress.namespace }} | grep -xq {{ ingress_name }}
+    {%- if grains.get('noservices') %}
+    - onlyif: /bin/false
+    {%- endif %}
+    - watch:
+      - file: /srv/kubernetes/ingress/{{ ingress.cluster }}/{{ ingress_name }}-ingress.yml
+    {%- endif %}
+
+  {%- endif %}
+{%- endfor %}
diff --git a/kubernetes/control/init.sls b/kubernetes/control/init.sls
index 508f167..18d8b11 100644
--- a/kubernetes/control/init.sls
+++ b/kubernetes/control/init.sls
@@ -18,6 +18,9 @@
   {%- if control.endpoints is defined %}
   - kubernetes.control.endpoint
   {%- endif %}
+  {%- if control.ingress is defined %}
+  - kubernetes.control.ingress
+  {%- endif %}
 
 /srv/kubernetes:
   file.directory:
diff --git a/kubernetes/control/service.sls b/kubernetes/control/service.sls
index 3e28bf7..4e94a56 100644
--- a/kubernetes/control/service.sls
+++ b/kubernetes/control/service.sls
@@ -20,7 +20,7 @@
     {%- if service.get('create', false) %}
       {%- set service_real_name = service.service + '-' + service.role if service.role is defined else service.service %}
 kubernetes_service_create_{{ service_name }}:
-  cmd.run:
+  cmd.wait:
     - name: kubectl apply -f /srv/kubernetes/services/{{ service.cluster }}/{{ service_name }}-svc.yml
     - unless: kubectl get service -o=custom-columns=NAME:.metadata.name --namespace {{ service.namespace }} | grep -xq {{ service_real_name }}
     {%- if grains.get('noservices') %}
@@ -47,7 +47,7 @@
     {%- if service.get('create', false) %}
       {%- set service_real_name = service.service + '-' + service.role if service.role is defined else service.service %}
 kubernetes_{{ service.kind|lower }}_create_{{ service_name }}:
-  cmd.run:
+  cmd.wait:
     - name: kubectl apply -f /srv/kubernetes/{{ service.kind|lower }}/{{ service_name }}-{{ service.kind }}.yml
     - unless: kubectl get {{ service.kind|lower }} -o=custom-columns=NAME:.metadata.name --namespace {{ service.namespace }} | grep -xq {{ service_real_name }}
     {%- if grains.get('noservices') %}
@@ -80,7 +80,7 @@
       {%- if service.get('create', false) %}
         {%- set service_real_name = service.service + '-' + service.role if service.role is defined else service.service %}
 kubernetes_service_create_{{ service.service }}:
-  cmd.run:
+  cmd.wait:
     - name: kubectl apply -f /srv/kubernetes/services/{{ node_name }}-svc.yml
     - unless: kubectl get service -o=custom-columns=NAME:.metadata.name --namespace {{ service.namespace }} | grep -xq {{ service_real_name }}
     {%- if grains.get('noservices') %}
@@ -106,7 +106,7 @@
     {%- if service.get('create', false) %}
       {%- set service_real_name = service.service + '-' + service.role if service.role is defined else service.service %}
 kubernetes_{{ service.kind|lower }}_create_{{ service_name }}:
-  cmd.run:
+  cmd.wait:
     - name: kubectl apply -f /srv/kubernetes/{{ service.kind|lower }}/{{ node_name }}-{{ service.kind }}.yml
     - unless: kubectl get {{ service.kind|lower }} -o=custom-columns=NAME:.metadata.name --namespace {{ service.namespace }} | grep -xq {{ service_real_name }}
     {%- if grains.get('noservices') %}
diff --git a/kubernetes/files/ingress.yml b/kubernetes/files/ingress.yml
new file mode 100644
index 0000000..5fb1cf0
--- /dev/null
+++ b/kubernetes/files/ingress.yml
@@ -0,0 +1,41 @@
+{% from "kubernetes/map.jinja" import control with context %}
+apiVersion: {{ ingress.apiVersion }}
+kind: Ingress
+metadata:
+  name: {{ ingress_name }}
+  namespace: {{ ingress.namespace }}
+  {%- if ingress.annotations is defined %}
+  annotations:
+    {%- for annotation in ingress.annotations %}
+    {{ annotation.name }}: "{{ annotation.value }}"
+    {%- endfor %}
+  {%- endif %}
+spec:
+  {%- if ingress.tls is defined %}
+  tls:
+  - hosts:
+    {%- for host in ingress.tls.hosts %}
+    - {{ host }}
+    {%- endfor %}
+    secretName: {{ ingress.tls.secret_name }}
+  {%- endif %}
+  {%- if ingress.rules is defined %}
+  rules:
+    {%- for host in ingress.rules.hosts %}
+  - {%- if host.name is defined %}
+    host: {{ host.name }}
+    {%- endif %}
+    http:
+      paths:
+      {%- for path, backend in host.paths.items() %}
+      - path: {{ path }}
+        backend:
+          serviceName: {{ backend.service }}
+          servicePort: {{ backend.port }}
+      {%- endfor %}
+    {%- endfor %}
+  {%- elif ingress.backend is defined %}
+  backend:
+    serviceName: {{ ingress.backend.service }}
+    servicePort: {{ ingress.backend.port }}
+  {%- endif %}
diff --git a/kubernetes/files/kube-addons/contrail/contrail.yaml b/kubernetes/files/kube-addons/contrail/contrail.yaml
index 244a3ea..ee56429 100644
--- a/kubernetes/files/kube-addons/contrail/contrail.yaml
+++ b/kubernetes/files/kube-addons/contrail/contrail.yaml
@@ -113,6 +113,8 @@
           mountPath: /var/log/contrail
         - name: journal-controller
           mountPath: /var/log/journal
+        - name: var-log-configdb-zookeeper
+          mountPath: /var/log/zookeeper
         - name: etc-hostname
           mountPath: /etc/hostname
           readOnly: true
@@ -157,6 +159,8 @@
           mountPath: /var/log/contrail
         - name: journal-analyticsdb
           mountPath: /var/log/journal
+        - name: var-log-analyticsdb-zookeeper
+          mountPath: /var/log/zookeeper
         - name: etc-hostname
           mountPath: /etc/hostname
           readOnly: true
@@ -224,6 +228,10 @@
         hostPath:
           path:  /var/log/journal/contrail-controller
           type: DirectoryOrCreate
+      - name: var-log-configdb-zookeeper
+        hostPath:
+          path: /var/log/configdb/zookeeper
+          type: DirectoryOrCreate
 
       # analyticsdb
       - name: etc-cassandra-cassandra-env-analytics-sh
@@ -278,6 +286,10 @@
         hostPath:
           path:  /var/log/journal/contrail-analyticsdb
           type: DirectoryOrCreate
+      - name: var-log-analyticsdb-zookeeper
+        hostPath:
+          path: /var/log/analyticsdb/zookeeper
+          type: DirectoryOrCreate
 
       # analytics
       - name: etc-redis-redis-conf
diff --git a/kubernetes/files/kube-addons/ingress-nginx/ingress-nginx.yaml b/kubernetes/files/kube-addons/ingress-nginx/ingress-nginx.yaml
index aedb8be..cfd5251 100644
--- a/kubernetes/files/kube-addons/ingress-nginx/ingress-nginx.yaml
+++ b/kubernetes/files/kube-addons/ingress-nginx/ingress-nginx.yaml
@@ -86,6 +86,12 @@
 
 kind: ConfigMap
 apiVersion: v1
+{%- if common.addons.get('ingress-nginx', {}).tcp_data is defined %}
+data:
+  {%- for key, value in common.addons.get('ingress-nginx').tcp_data.items() %}
+    {{ key }}: "{{ value }}"
+  {%- endfor %}
+{%- endif %}
 metadata:
   name: tcp-services
   namespace: ingress-nginx
@@ -97,6 +103,12 @@
 
 kind: ConfigMap
 apiVersion: v1
+{%- if common.addons.get('ingress-nginx', {}).udp_data is defined %}
+data:
+  {%- for key, value in common.addons.get('ingress-nginx').udp_data.items() %}
+    {{ key }}: "{{ value }}"
+  {%- endfor %}
+{%- endif %}
 metadata:
   name: udp-services
   namespace: ingress-nginx
@@ -320,6 +332,18 @@
             containerPort: 80
           - name: https
             containerPort: 443
+          {%- if common.addons.get('ingress-nginx', {}).tcp_ports is defined %}
+            {%- for port in common.addons.get('ingress-nginx').tcp_ports %}
+          - name: tcp{{ port }}
+            containerPort: {{ port }}
+            {%- endfor %}
+          {%- endif %}
+          {%- if common.addons.get('ingress-nginx', {}).udp_ports is defined %}
+            {%- for port in common.addons.get('ingress-nginx').udp_ports %}
+          - name: udp{{ port }}
+            containerPort: {{ port }}
+            {%- endfor %}
+          {%- endif %}
           livenessProbe:
             failureThreshold: 3
             httpGet:
@@ -364,5 +388,18 @@
     - name: https
       port: 443
       targetPort: https
-
+    {%- if common.addons.get('ingress-nginx', {}).tcp_ports is defined %}
+      {%- for port in common.addons.get('ingress-nginx').tcp_ports %}
+    - name: tcp{{ port }}
+      port: {{ port }}
+      targetPort: tcp{{ port }}
+      {%- endfor %}
+    {%- endif %}
+    {%- if common.addons.get('ingress-nginx', {}).udp_ports is defined %}
+      {%- for port in common.addons.get('ingress-nginx').udp_ports %}
+    - name: udp{{ port }}
+      port: {{ port }}
+      targetPort: udp{{ port }}
+      {%- endfor %}`
+    {%- endif %}
 ---