Merge "Extend for deploy k8s+contrail"
diff --git a/kubernetes/files/kube-addons/contrail/contrail.yaml b/kubernetes/files/kube-addons/contrail/contrail.yaml
new file mode 100644
index 0000000..7ef4e6f
--- /dev/null
+++ b/kubernetes/files/kube-addons/contrail/contrail.yaml
@@ -0,0 +1,221 @@
+apiVersion: apps/v1beta2
+kind: Deployment
+metadata:
+  name: opencontrail
+  namespace: kube-system
+  labels:
+    app: opencontrail
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+spec:
+  replicas: 3
+  selector:
+    matchLabels:
+      app: opencontrail
+  template:
+    metadata:
+      labels:
+        app: opencontrail
+    spec:
+      hostNetwork: true
+      containers:
+      - name: opencontrail-controller
+        image: docker-prod-local.artifactory.mirantis.com/opencontrail-oc40/opencontrail-controller
+        securityContext:
+          privileged: true
+        lifecycle:
+          postStart:
+            exec:
+              command:
+              - /bin/sh
+              - -c
+              - >
+                systemctl stop rabbitmq-server.service;
+                systemctl disable rabbitmq-server.service;
+                systemctl stop redis-server.service;
+                systemctl disable redis-server.service;
+
+        volumeMounts:
+        - name: etc-contrail
+          mountPath: /etc/contrail
+        - name: var-lib-configdb
+          mountPath: /var/lib/cassandra
+        - name: var-lib-config-zookeeper-data
+          mountPath: /var/lib/zookeeper
+        - name: var-lib-zookeeper-myid
+          mountPath: /var/lib/zookeeper/myid
+        - name: etc-cassandra-cassandra-env-sh
+          mountPath: /etc/cassandra/cassandra-env.sh
+        - name: etc-cassandra-cassandra-yaml
+          mountPath: /etc/cassandra/cassandra.yaml
+        - name: etc-cassandra-logback-xml
+          mountPath: /etc/cassandra/logback.xml
+        - name: etc-zookeeper-conf-zoo-cfg
+          mountPath: /etc/zookeeper/conf/zoo.cfg
+        - name: etc-zookeeper-conf-log4j-properties
+          mountPath: /etc/zookeeper/conf/log4j.properties
+        - name: var-lib-rabbitmq-erlang-cookie
+          mountPath: /var/lib/rabbitmq/.erlang.cookie
+
+      - name: opencontrail-analyticsdb
+        image: docker-prod-local.artifactory.mirantis.com/opencontrail-oc40/opencontrail-analyticsdb
+        securityContext:
+          privileged: true
+        volumeMounts:
+        - name: etc-contrail
+          mountPath: /etc/contrail
+        - name: etc-cassandra-cassandra-env-analytics-sh
+          mountPath: /etc/cassandra/cassandra-env.sh
+        - name: etc-cassandra-cassandra-analytics-yaml
+          mountPath: /etc/cassandra/cassandra.yaml
+        - name: etc-cassandra-logback-xml
+          mountPath: /etc/cassandra/logback.xml
+        - name: var-lib-analyticsdb
+          mountPath: /var/lib/cassandra
+        - name: var-lib-analyticsdb-zookeeper-data
+          mountPath: /var/lib/zookeeper
+        - name: var-lib-zookeeper-myid
+          mountPath: /var/lib/zookeeper/myid
+        - name: usr-share-kafka-config-server-properties
+          mountPath: /usr/share/kafka/config/server.properties
+        - name: usr-share-kafka-config-consumer-properties
+          mountPath: /usr/share/kafka/config/consumer.properties
+        - name: usr-share-kafka-config-zookeeper-properties
+          mountPath: /usr/share/kafka/config/zookeeper.properties
+        - name: usr-share-kafka-logs
+          mountPath: /usr/share/kafka/logs
+        - name: etc-zookeeper-conf-zoo-analytics-cfg
+          mountPath: /etc/zookeeper/conf/zoo.cfg
+        - name: etc-zookeeper-conf-log4j-properties
+          mountPath: /etc/zookeeper/conf/log4j.properties
+
+      - name: opencontrail-analytics
+        image: docker-prod-local.artifactory.mirantis.com/opencontrail-oc40/opencontrail-analytics
+        volumeMounts:
+        - name: etc-contrail
+          mountPath: /etc/contrail
+        - name: etc-redis-redis-conf
+          mountPath: /etc/redis/redis.conf
+        securityContext:
+          privileged: true
+
+      - name: rabbitmq
+        image: rabbitmq:3.6.6-management-alpine
+        lifecycle:
+          postStart:
+            exec:
+              command:
+              - /bin/sh
+              - -c
+              - >
+                if [ -z "$(grep rabbitmq /etc/resolv.conf)" ]; then
+                  sed "s/^search \([^ ]\+\)/search rabbitmq.\1 \1/" /etc/resolv.conf > /etc/resolv.conf.new;
+                  cat /etc/resolv.conf.new > /etc/resolv.conf;
+                  rm /etc/resolv.conf.new;
+                fi;
+                until rabbitmqctl node_health_check; do sleep 1; done;
+                if [[ "$HOSTNAME" != "ctl01" && -z "$(rabbitmqctl cluster_status | grep ctl01)" ]]; then
+                  rabbitmqctl stop_app;
+                  rabbitmqctl join_cluster rabbit@ctl01;
+                  rabbitmqctl start_app;
+                fi;
+                rabbitmqctl set_policy ha-all "." '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}'
+        env:
+        - name: RABBITMQ_ERLANG_COOKIE
+          value: YTQMGYEHFATZPDKPOCXX
+
+      volumes:
+      # analytics / analyticsdb / controller /
+      - name: etc-contrail
+        hostPath:
+          path: /etc/contrail
+          type: Directory
+
+      # controller
+      - name: var-lib-configdb
+        hostPath:
+          path: /var/lib/configdb
+          type: Directory
+      - name: var-lib-config-zookeeper-data
+        hostPath:
+          path: /var/lib/config_zookeeper_data
+          type: Directory
+      - name: etc-cassandra-cassandra-env-sh
+        hostPath:
+          path: /etc/cassandra/cassandra-env.sh
+          type: File
+      - name: etc-cassandra-cassandra-yaml
+        hostPath:
+          path: /etc/cassandra/cassandra.yaml
+          type: File
+      - name: etc-zookeeper-conf-zoo-cfg
+        hostPath:
+          path: /etc/zookeeper/conf/zoo.cfg
+          type: File
+      - name: var-lib-rabbitmq-erlang-cookie
+        hostPath:
+          path: /var/lib/rabbitmq/.erlang.cookie
+          type: File
+
+
+      # analyticsdb
+      - name: etc-cassandra-cassandra-env-analytics-sh
+        hostPath:
+          path: /etc/cassandra/cassandra-env-analytics.sh
+          type: File
+      - name: etc-cassandra-cassandra-analytics-yaml
+        hostPath:
+          path: /etc/cassandra/cassandra_analytics.yaml
+          type: File
+      - name: etc-cassandra-logback-xml  # is used by controller as well
+        hostPath:
+          path: /etc/cassandra/logback.xml
+          type: File
+      - name: var-lib-analyticsdb
+        hostPath:
+          path: /var/lib/analyticsdb
+          type: Directory
+      - name: var-lib-analyticsdb-zookeeper-data
+        hostPath:
+          path: /var/lib/analyticsdb-zookeeper-data
+          type: Directory
+      - name: var-lib-zookeeper-myid    # is used for controller as well
+        hostPath:
+          path: /var/lib/zookeeper/myid
+          type: File
+      - name: usr-share-kafka-config-server-properties
+        hostPath:
+          path: /usr/share/kafka/config/server.properties
+          type: File
+      - name: usr-share-kafka-config-consumer-properties
+        hostPath:
+          path: /usr/share/kafka/config/consumer.properties
+          type: File
+      - name: usr-share-kafka-config-zookeeper-properties
+        hostPath:
+          path: /usr/share/kafka/config/zookeeper.properties
+          type: File
+      - name: usr-share-kafka-logs
+        hostPath:
+          path: /usr/share/kafka/logs
+          type: Directory
+      - name: etc-zookeeper-conf-zoo-analytics-cfg
+        hostPath:
+          path: /etc/zookeeper/conf/zoo_analytics.cfg
+          type: File
+      - name: etc-zookeeper-conf-log4j-properties # is used by controller as well
+        hostPath:
+          path: /etc/zookeeper/conf/log4j.properties
+          type: File
+
+      # analytics
+      - name: etc-redis-redis-conf
+        hostPath:
+          path: /etc/redis/redis.conf
+          type: File
+
+      nodeSelector:
+        "node-role.kubernetes.io/master": "true"
+      tolerations:
+      - effect: NoSchedule
+        key: node-role.kubernetes.io/master
diff --git a/kubernetes/files/kube-addons/contrail/kube-manager.yaml b/kubernetes/files/kube-addons/contrail/kube-manager.yaml
new file mode 100644
index 0000000..0d8162e
--- /dev/null
+++ b/kubernetes/files/kube-addons/contrail/kube-manager.yaml
@@ -0,0 +1,58 @@
+apiVersion: apps/v1beta2
+kind: Deployment
+metadata:
+  name: kube-manager
+  namespace: kube-system
+  labels:
+    app: kube-manager
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+spec:
+  replicas: 3
+  selector:
+    matchLabels:
+      app: kube-manager
+  template:
+    metadata:
+      labels:
+        app: kube-manager
+    spec:
+      hostNetwork: true
+      containers:
+      - name: opencontrail-kube-manager
+        image: docker-prod-local.artifactory.mirantis.com/opencontrail-oc40/opencontrail-kube-manager
+        securityContext:
+          privileged: true
+        lifecycle:
+          postStart:
+            exec:
+              command:
+              - /bin/sh
+              - -c
+              - >
+                apt update;
+                apt install python-eventlet;
+                service contrail-kube-manager restart;
+
+
+        volumeMounts:
+        - name: etc-kubernetes
+          mountPath: /etc/kubernetes
+        - name: etc-contrail
+          mountPath: /etc/contrail
+
+      volumes:
+      - name: etc-kubernetes
+        hostPath:
+          path: /etc/kubernetes
+          type: Directory
+      - name: etc-contrail
+        hostPath:
+          path: /etc/contrail
+          type: Directory
+
+      nodeSelector:
+        "node-role.kubernetes.io/master": "true"
+      tolerations:
+      - effect: NoSchedule
+        key: node-role.kubernetes.io/master
diff --git a/kubernetes/files/opencontrail/4.0/contrail-kubernetes.conf b/kubernetes/files/opencontrail/4.0/contrail-kubernetes.conf
index 14aafbe..83587bc 100644
--- a/kubernetes/files/opencontrail/4.0/contrail-kubernetes.conf
+++ b/kubernetes/files/opencontrail/4.0/contrail-kubernetes.conf
@@ -32,7 +32,7 @@
 kombu_ssl_certfile={{ master.network.message_queue.ssl_certfile }}
 kombu_ssl_ca_certs={{ master.network.message_queue.ssl_ca_certs }}
 {%- endif %}
-cassandra_server_list={% for member in master.network.database.members %}{{ member.host }}:9160 {% endfor %}
+cassandra_server_list={% for member in master.network.database.members %}{{ member.host }}:{{ member.get('port', '9160')}} {% endfor %}
 cassandra_user={{ master.network.database.get('user', None) }}
 cassandra_password={{ master.network.database.get('password', None) }}
 cluster_id=
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index dd023d1..2d7d150 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -36,6 +36,24 @@
     - dir_mode: 755
     - makedirs: True
 
+{%- elif master.network.engine == "opencontrail" and master.network.get('version', 3.0) > 3.0 %}
+
+/etc/kubernetes/addons/contrail/contrail.yaml:
+  file.managed:
+    - source: salt://kubernetes/files/kube-addons/contrail/contrail.yaml
+    - template: jinja
+    - group: root
+    - dir_mode: 755
+    - makedirs: True
+
+/etc/kubernetes/addons/contrail/kube-manager.yaml:
+  file.managed:
+    - source: salt://kubernetes/files/kube-addons/contrail/kube-manager.yaml
+    - template: jinja
+    - group: root
+    - dir_mode: 755
+    - makedirs: True
+
 {% endif %}
 
 {%- if common.addons.get('virtlet', {}).get('enabled') %}
diff --git a/kubernetes/master/opencontrail.sls b/kubernetes/master/opencontrail.sls
index 82a5559..462f992 100644
--- a/kubernetes/master/opencontrail.sls
+++ b/kubernetes/master/opencontrail.sls
@@ -2,32 +2,17 @@
 {%- if master.enabled %}
 {%- if master.network.get('version', 3.0) != 3.0 %}
 
-opencontrail_kube_manager_package:
-  pkg.installed:
-  - name: contrail-kube-manager
-  - force_yes: True
-
 /etc/contrail/contrail-kubernetes.conf:
   file.managed:
   - source: salt://kubernetes/files/opencontrail/{{ master.network.version }}/contrail-kubernetes.conf
   - template: jinja
-  - require:
-    - pkg: opencontrail_kube_manager_package
+  - makedirs: True
 
-{%- if master.network.get('systemd', true) %}
-
-contrail_kube_manager:
-  service.running:
-    - name: contrail-kube-manager
-    - enable: True
-    - watch:
-      - file: /etc/contrail/contrail-kubernetes.conf
-    {%- if grains.get('noservices') %}
-    - onlyif: /bin/false
-    {%- endif %}
+#/etc/kubernetes/opencontrail/contrail-{{ master.network.version }}.yaml:
+#  file.managed:
+#  - source: salt://kubernetes/files/manifest/contrail-{{ master.network.version }}.manifest
+#  - template: jinja
+#  - makedirs: True
 
 {%- endif %}
-
-{%- endif %}
-
 {%- endif %}