Merge "Refactor parameters for k8s-aio-calico model."
diff --git a/.kitchen.yml b/.kitchen.yml
index 7df4724..f66b6bf 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -21,6 +21,7 @@
       provision_command:
         - apt-get update
         - apt-get install -y git curl python-pip
+        - pip install --upgrade pip
         - git clone https://github.com/salt-formulas/salt-formulas-scripts /srv/salt/scripts
         - cd /srv/salt/scripts; git pull -r; cd -
         # NOTE: Configure ENV options as needed, example:
@@ -28,8 +29,9 @@
             export BOOTSTRAP=1;\n
             export CLUSTER_NAME=<%= cluster %>;\n
             export FORMULAS_SOURCE=pkg;\n
-            export RECLASS_VERSION=dev;\n
+            export RECLASS_VERSION=develop;\n
             export RECLASS_IGNORE_CLASS_NOTFOUND=True;\n
+            export RECLASS_IGNORE_CLASS_REGEXP='service.*';\n
             export EXTRA_FORMULAS="";\n
           " > /kitchen.env
           #export RECLASS_SOURCE_PATH=/usr/lib/python2.7/site-packages/reclass;\n
diff --git a/classes/cluster/k8s-aio-calico/.env b/classes/cluster/k8s-aio-calico/.env
new file mode 100644
index 0000000..407e2d1
--- /dev/null
+++ b/classes/cluster/k8s-aio-calico/.env
@@ -0,0 +1 @@
+EXTRA_FORMULAS="ntp"
diff --git a/classes/cluster/k8s-aio-contrail/.env b/classes/cluster/k8s-aio-contrail/.env
new file mode 100644
index 0000000..407e2d1
--- /dev/null
+++ b/classes/cluster/k8s-aio-contrail/.env
@@ -0,0 +1 @@
+EXTRA_FORMULAS="ntp"
diff --git a/classes/cluster/k8s-ha-calico-cloudprovider/.env b/classes/cluster/k8s-ha-calico-cloudprovider/.env
new file mode 100644
index 0000000..407e2d1
--- /dev/null
+++ b/classes/cluster/k8s-ha-calico-cloudprovider/.env
@@ -0,0 +1 @@
+EXTRA_FORMULAS="ntp"
diff --git a/classes/cluster/k8s-ha-calico-syndic/.env b/classes/cluster/k8s-ha-calico-syndic/.env
new file mode 100644
index 0000000..407e2d1
--- /dev/null
+++ b/classes/cluster/k8s-ha-calico-syndic/.env
@@ -0,0 +1 @@
+EXTRA_FORMULAS="ntp"
diff --git a/classes/cluster/k8s-ha-calico/.env b/classes/cluster/k8s-ha-calico/.env
new file mode 100644
index 0000000..407e2d1
--- /dev/null
+++ b/classes/cluster/k8s-ha-calico/.env
@@ -0,0 +1 @@
+EXTRA_FORMULAS="ntp"
diff --git a/classes/cluster/k8s-ha-calico/kubernetes/control.yml b/classes/cluster/k8s-ha-calico/kubernetes/control.yml
index 082d7ab..1b88da8 100644
--- a/classes/cluster/k8s-ha-calico/kubernetes/control.yml
+++ b/classes/cluster/k8s-ha-calico/kubernetes/control.yml
@@ -41,6 +41,7 @@
       addons:
         dashboard:
           enabled: ${_param:kubernetes_dashboard}
+          image: ${_param:kubernetes_dashboard_image}
         helm:
           enabled: ${_param:kubernetes_helm_enabled}
         calico_policy:
@@ -51,6 +52,13 @@
           agent_image: ${_param:kubernetes_netchecker_agent_image}
           server_image: ${_param:kubernetes_netchecker_server_image}
           agent_probeurls: ${_param:kubernetes_netchecker_agent_probeurls}
+        dns:
+          enabled: ${_param:kubernetes_dns}
+          kubedns_image: ${_param:kubernetes_kubedns_image}
+          dnsmasq_image: ${_param:kubernetes_dnsmasq_image}
+          sidecar_image: ${_param:kubernetes_sidecar_image}
+          autoscaler:
+            image: ${_param:kubernetes_dns_autoscaler_image}
         coredns:
           enabled: ${_param:kubernetes_coredns_enabled}
         externaldns:
diff --git a/classes/cluster/k8s-ha-calico/kubernetes/init.yml b/classes/cluster/k8s-ha-calico/kubernetes/init.yml
index 25a2b52..c669373 100644
--- a/classes/cluster/k8s-ha-calico/kubernetes/init.yml
+++ b/classes/cluster/k8s-ha-calico/kubernetes/init.yml
@@ -25,17 +25,23 @@
 
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.7.8-3
     kubernetes_virtlet_image: mirantis/virtlet:latest
+    kubernetes_dashboard_image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1
+    kubernetes_kubedns_image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5
+    kubernetes_dnsmasq_image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.14.5
+    kubernetes_sidecar_image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5
+    kubernetes_dns_autoscaler_image: gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0
     kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:stable
     kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:stable
     kubernetes_netchecker_agent_probeurls: "http://ipinfo.io"
 
     # switches of addons
     kubernetes_addon_namespace: kube-system
+    kubernetes_dns: true
     kubernetes_dashboard: true
     kubernetes_helm_enabled: false
     kubernetes_netchecker_enabled: true
     kubernetes_calico_policy_enabled: false
-    kubernetes_virtlet_enabled: true
+    kubernetes_virtlet_enabled: false
 
     # addresses and hostnames
     kubernetes_internal_api_address: 10.254.0.1
diff --git a/classes/cluster/k8s-ha-contrail/.env b/classes/cluster/k8s-ha-contrail/.env
new file mode 100644
index 0000000..407e2d1
--- /dev/null
+++ b/classes/cluster/k8s-ha-contrail/.env
@@ -0,0 +1 @@
+EXTRA_FORMULAS="ntp"
diff --git a/classes/cluster/k8s-ha-contrail/kubernetes/control.yml b/classes/cluster/k8s-ha-contrail/kubernetes/control.yml
index 250ae20..08760e2 100644
--- a/classes/cluster/k8s-ha-contrail/kubernetes/control.yml
+++ b/classes/cluster/k8s-ha-contrail/kubernetes/control.yml
@@ -27,6 +27,7 @@
       addons:
         dashboard:
           enabled: ${_param:kubernetes_dashboard}
+          image: ${_param:kubernetes_dashboard_image}
         helm:
           enabled: ${_param:kubernetes_helm_enabled}
         netchecker:
@@ -37,6 +38,13 @@
           namespace: ${_param:kubernetes_addon_namespace}
           enabled: ${_param:kubernetes_contrail_network_controller}
           image: ${_param:kubernetes_contrail_network_controller_image}
+        dns:
+          enabled: ${_param:kubernetes_dns}
+          kubedns_image: ${_param:kubernetes_kubedns_image}
+          dnsmasq_image: ${_param:kubernetes_dnsmasq_image}
+          sidecar_image: ${_param:kubernetes_sidecar_image}
+          autoscaler:
+            image: ${_param:kubernetes_dns_autoscaler_image}
         coredns:
           enabled: ${_param:kubernetes_coredns_enabled}
         externaldns:
diff --git a/classes/cluster/k8s-ha-contrail/kubernetes/init.yml b/classes/cluster/k8s-ha-contrail/kubernetes/init.yml
index 7a46cc0..822401b 100644
--- a/classes/cluster/k8s-ha-contrail/kubernetes/init.yml
+++ b/classes/cluster/k8s-ha-contrail/kubernetes/init.yml
@@ -26,6 +26,11 @@
 
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.7.8-3
     kubernetes_virtlet_image: mirantis/virtlet:latest
+    kubernetes_dashboard_image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1
+    kubernetes_kubedns_image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5
+    kubernetes_dnsmasq_image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.14.5
+    kubernetes_sidecar_image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5
+    kubernetes_dns_autoscaler_image: gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0
     kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:stable
     kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:stable
     kubernetes_netchecker_agent_probeurls: "http://ipinfo.io"
@@ -35,6 +40,7 @@
 
     # switches of addons
     kubernetes_addon_namespace: kube-system
+    kubernetes_dns: true
     kubernetes_dashboard: false
     kubernetes_helm_enabled: true
     kubernetes_netchecker_enabled: true
diff --git a/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml b/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml
index 521071a..5430906 100644
--- a/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml
+++ b/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml
@@ -108,10 +108,10 @@
                 rndc_host: ${_param:openstack_control_node03_address}
                 rndc_port: 953
                 rndc_key_file: /etc/designate/rndc.key
+      quota:
+        zones: ${_param:designate_quota_zones}
     worker:
       enabled: ${_param:designate_worker_enabled}
-    quota:
-        zones: ${_param:designate_quota_zones}
   glance:
     server:
       storage:
diff --git a/classes/cluster/virtual-mcp11-aio/openstack/init.yml b/classes/cluster/virtual-mcp11-aio/openstack/init.yml
index f1b70a8..03d7636 100755
--- a/classes/cluster/virtual-mcp11-aio/openstack/init.yml
+++ b/classes/cluster/virtual-mcp11-aio/openstack/init.yml
@@ -121,7 +121,7 @@
     openstack_public_neutron_subnet_allocation_start: 192.168.130.10
     openstack_public_neutron_subnet_allocation_end: 192.168.130.254
     barbican_simple_crypto_kek: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
-    barbican_integration_enabled: True
+    barbican_integration_enabled: False
   galera:
     master:
       members: ~
@@ -147,7 +147,7 @@
   nova:
     compute:
       barbican:
-        enable: ${_param:barbican_integration_enabled}
+        enabled: ${_param:barbican_integration_enabled}
       vncproxy_url: http://${_param:single_address}:6080
       network:
         user: neutron
diff --git a/scripts/bootstrap_all.sh b/scripts/bootstrap_all.sh
index 445464e..2219d00 100755
--- a/scripts/bootstrap_all.sh
+++ b/scripts/bootstrap_all.sh
@@ -5,12 +5,16 @@
 K8S_BOOTSTRAP=$(salt -C 'I@kubernetes:master' test.ping 1>/dev/null 2>&1 && echo true)
 OPENSTACK_BOOTSTRAP=$(salt -C 'I@nova:controller' test.ping 1>/dev/null 2>&1 && echo true)
 OPENCONTRAIL_BOOTSTRAP=$(salt -C 'I@opencontrail:control' test.ping 1>/dev/null 2>&1 && echo true)
+OSS_BOOTSTRAP=$(salt -C 'I@devops_portal:config' test.ping 1>/dev/null 2>&1 && echo true)
 STACKLIGHTV2_BOOTSTRAP=$(salt -C 'I@prometheus:server' test.ping 1>/dev/null 2>&1 && echo true)
 
 "$CWD"/config_verify.sh
 "$CWD"/infra_install.sh
 "$CWD"/core_services_install.sh
-if [[ "$STACKLIGHTV2_BOOTSTRAP" == "true" ]]; then
+if [[ "$OSS_BOOTSTRAP" == "true" ]]; then
+    "$CWD"/oss_install.sh infra
+fi
+if [[ "$STACKLIGHTV2_BOOTSTRAP" == "true" ]] || [[ "$OSS_BOOTSTRAP" == "true" ]]; then
     "$CWD"/docker_swarm_install.sh
 fi
 if [[ "$K8S_BOOTSTRAP" == "true" ]]; then
@@ -30,3 +34,6 @@
 if [[ "$STACKLIGHTV2_BOOTSTRAP" == "true" ]]; then
     "$CWD"/stacklightv2_infra_install.sh
 fi
+if [[ "$OSS_BOOTSTRAP" == "true" ]]; then
+    "$CWD"/oss_install.sh services
+fi
diff --git a/scripts/oss_install.sh b/scripts/oss_install.sh
new file mode 100755
index 0000000..2c3211f
--- /dev/null
+++ b/scripts/oss_install.sh
@@ -0,0 +1,40 @@
+#!/bin/bash -x
+exec > >(tee -i /tmp/"$(basename "$0" .sh)"_"$(date '+%Y-%m-%d_%H-%M-%S')".log) 2>&1
+
+install_infra () {
+  # DOP config and rundeck files should be created before container start
+  salt -C 'I@devops_portal:config' state.sls devops_portal.config
+  salt -C 'I@rundeck:server' state.sls rundeck.server
+}
+
+install_services () {
+  # Up containers
+  salt -C 'I@docker:swarm:role:master' state.sls docker.client
+
+  # XXX: first run may fails
+  salt -C 'I@postgresql:client' cmd.run 'while true; do if docker service logs postgresql_db | grep "ready to accept"; then break; else sleep 5; fi; done'
+  for i in $(seq 2); do
+      salt -C 'I@postgresql:client' state.sls postgresql.client
+      sleep 10
+  done
+
+  # Rundeck client, jobs, and etc
+  salt -C 'I@rundeck:client' cmd.run 'while true; do curl -sf 172.16.10.254:4440 >/dev/null && break; done'
+  salt -C 'I@rundeck:client' state.sls rundeck.client
+
+  # ElasticSearch indicies
+  salt -C 'I@elasticsearch:client' cmd.run 'while true; do curl -sf 172.16.10.254:9200 >/dev/null && break; done'
+  for i in $(seq 3); do
+    salt -C 'I@elasticsearch:client' state.sls elasticsearch.client
+    sleep 10
+  done
+}
+
+case "$1" in
+  "infra")
+    install_infra
+  ;;
+  "services")
+    install_services
+  ;;
+esac