Add k8s-ha-contrail-40 virtual lab

Change-Id: I6f0f3eb35b35a11fd95c4f5a5ca0ba915907b6a3
diff --git a/classes/cluster/k8s-ha-contrail-40/kubernetes/control.yml b/classes/cluster/k8s-ha-contrail-40/kubernetes/control.yml
new file mode 100644
index 0000000..161940e
--- /dev/null
+++ b/classes/cluster/k8s-ha-contrail-40/kubernetes/control.yml
@@ -0,0 +1,119 @@
+classes:
+- service.etcd.server.cluster
+- service.kubernetes.control.cluster
+- service.kubernetes.control.cluster-admin
+- system.haproxy.proxy.listen.kubernetes.apiserver
+- system.linux.system.repo.docker_legacy
+- system.kubernetes.pool.cluster
+- system.salt.minion.cert.k8s_client
+- system.salt.minion.cert.etcd_client
+- system.salt.minion.cert.etcd_server
+- system.kubernetes.master.cluster
+- cluster.k8s-ha-contrail-40.infra
+parameters:
+  _param:
+    keepalived_vip_interface: ens4
+    keepalived_vip_virtual_router_id: 60
+
+  linux:
+    network:
+      interface:
+        ens3:
+          enabled: true
+          type: eth
+          mtu: 1500
+          address: ${_param:deploy_address}
+          netmask: '255.255.255.0'
+          
+        ens4:
+          enabled: true
+          type: eth
+          mtu: 1500
+          address: ${_param:single_address}
+          netmask: '255.255.255.0'
+  etcd:
+    server:
+      bind:
+        host: ${_param:deploy_address}
+      source:
+        engine: docker_hybrid
+      ssl:
+        enabled: true
+  kubernetes:
+    pool:
+      kubelet:
+        fail_on_swap: ${_param:kubelet_fail_on_swap}
+      enabled: true
+      network:
+        engine: none
+        opencontrail:
+          enabled: false
+    common:
+      addons:
+        dashboard:
+          enabled: ${_param:kubernetes_dashboard}
+          image: ${_param:kubernetes_dashboard_image}
+        helm:
+          enabled: ${_param:kubernetes_helm_enabled}
+        netchecker:
+          enabled: ${_param:kubernetes_netchecker_enabled}
+          agent_image: ${_param:kubernetes_netchecker_agent_image}
+          server_image: ${_param:kubernetes_netchecker_server_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:
+          enabled: ${_param:kubernetes_externaldns_enabled}
+          image: ${_param:kubernetes_externaldns_image}
+          provider: ${_param:kubernetes_externaldns_provider}
+      hyperkube:
+        image: ${_param:kubernetes_hyperkube_image}
+    master:
+      kubelet:
+        address: ${_param:single_address}
+        fail_on_swap: ${_param:kubelet_fail_on_swap}
+      etcd:
+        ssl:
+          enabled: true
+      network:
+        opencontrail:
+          enabled: true
+          version: 4.0
+          host: ${_param:keepalived_vip_address}
+          port: 8082
+          default_domain: default-domain
+          default_project: default-domain:default
+          public_network: default-domain:default:Public
+          public_ip_range: 185.22.97.128/26
+          public_network: default-domain:default-project:Public
+          private_ip_range: 10.150.0.0/16
+          network_manager:
+            image: docker-prod-local.artifactory.mirantis.com/opencontrail-oc40/opencontrail-kube-manager
+#          config:
+#            api:
+#              host: ${_param:opencontrail_control_address}
+          identity:
+            auth_user: admin
+            auth_password: contrail123
+            auth_tenant: admin
+          message_queue:
+            host: ${_param:single_address}
+          database:
+            members:
+              - host: ${_param:kubernetes_control_node01_address}
+                port: 9161
+              - host: ${_param:kubernetes_control_node02_address}
+                port: 9161
+              - host: ${_param:kubernetes_control_node03_address}
+                port: 9161
+          collector:
+            members:
+              - host: ${_param:kubernetes_control_node01_address}
+              - host: ${_param:kubernetes_control_node02_address}
+              - host: ${_param:kubernetes_control_node03_address}