Merge "Add FreeIPA AAA (idp/idm) CI lab [WIP]"
diff --git a/classes/cluster/k8s_aio_calico/infra/config.yml b/classes/cluster/k8s_aio_calico/infra/config.yml
index de701cf..c8f630f 100644
--- a/classes/cluster/k8s_aio_calico/infra/config.yml
+++ b/classes/cluster/k8s_aio_calico/infra/config.yml
@@ -31,7 +31,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -40,24 +40,24 @@
           expression: <<node_hostname>>__startswith__cfg
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
         kubernetes_control01:
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             kubernetes_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             kubernetes_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             kubernetes_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
diff --git a/classes/cluster/k8s_aio_contrail/infra/config.yml b/classes/cluster/k8s_aio_contrail/infra/config.yml
index faf7784..8f67033 100644
--- a/classes/cluster/k8s_aio_contrail/infra/config.yml
+++ b/classes/cluster/k8s_aio_contrail/infra/config.yml
@@ -19,6 +19,15 @@
     linux_system_codename: xenial
     salt_api_password_hash: "$6$WV0P1shnoDh2gI/Z$22/Bcd7ffMv0jDlFpT63cAU4PiXHz9pjXwngToKwqAsgoeK4HNR3PiKaushjxp3JsQ8hNoJmAC6TxzVqfV8WH/"
     salt_master_host: ${_param:infra_config_deploy_address}
+  linux:
+    network:
+      interface:
+        ens4:
+          enabled: true
+          type: eth
+          proto: static
+          address: ${_param:single_address}
+          netmask: 255.255.255.0
   reclass:
     storage:
       node:
diff --git a/classes/cluster/k8s_aio_contrail/infra/init.yml b/classes/cluster/k8s_aio_contrail/infra/init.yml
index 45e2e40..734adf9 100644
--- a/classes/cluster/k8s_aio_contrail/infra/init.yml
+++ b/classes/cluster/k8s_aio_contrail/infra/init.yml
@@ -26,13 +26,6 @@
           names:
           - ${_param:infra_config_hostname}
           - ${_param:infra_config_hostname}.${_param:cluster_domain}
-      interface:
-        ens4:
-          enabled: true
-          type: eth
-          proto: static
-          address: ${_param:single_address}
-          netmask: 255.255.255.0
     system:
       name: ${_param:infra_config_hostname}
       domain: ${_param:cluster_domain}
diff --git a/classes/cluster/k8s_aio_contrail/opencontrail/compute.yml b/classes/cluster/k8s_aio_contrail/opencontrail/compute.yml
index 912e753..d6f92b6 100644
--- a/classes/cluster/k8s_aio_contrail/opencontrail/compute.yml
+++ b/classes/cluster/k8s_aio_contrail/opencontrail/compute.yml
@@ -23,3 +23,8 @@
     pool:
       network:
         hash: 2276df10feae8f09fb50dce3a96fff6c
+  linux:
+    network:
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
\ No newline at end of file
diff --git a/classes/cluster/k8s_ha_calico/infra/config.yml b/classes/cluster/k8s_ha_calico/infra/config.yml
index 4965229..1eb842b 100644
--- a/classes/cluster/k8s_ha_calico/infra/config.yml
+++ b/classes/cluster/k8s_ha_calico/infra/config.yml
@@ -1,11 +1,10 @@
-alasses:
+classes:
 - system.linux.system.repo.ubuntu
 - system.openssh.client.lab
 - system.salt.master.pkg
 - system.salt.minion.ca.salt_master
 - system.salt.master.api
 - system.salt.minion.cert.k8s_server
-- system.mysql.client
 - system.reclass.storage.salt
 - system.reclass.storage.system.kubernetes_control_cluster
 - cluster.k8s_ha_calico
@@ -31,7 +30,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -40,24 +39,26 @@
           expression: <<node_hostname>>__startswith__cfg
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
         kubernetes_control01:
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             kubernetes_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             kubernetes_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             kubernetes_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
diff --git a/classes/cluster/k8s_ha_calico/infra/init.yml b/classes/cluster/k8s_ha_calico/infra/init.yml
index d6bda6d..3220d0e 100644
--- a/classes/cluster/k8s_ha_calico/infra/init.yml
+++ b/classes/cluster/k8s_ha_calico/infra/init.yml
@@ -7,7 +7,6 @@
 - system.openssh.server.team.tcpcloud
 - system.openssh.server.team.mcp_qa
 - system.openssh.server.team.k8s_team
-- system.rsyslog.client.single
 parameters:
   _param:
     # infra service addresses
diff --git a/classes/cluster/k8s_ha_calico/kubernetes/init.yml b/classes/cluster/k8s_ha_calico/kubernetes/init.yml
index 7533873..c3c13a4 100644
--- a/classes/cluster/k8s_ha_calico/kubernetes/init.yml
+++ b/classes/cluster/k8s_ha_calico/kubernetes/init.yml
@@ -51,12 +51,6 @@
 
   linux:
     network:
-      resolv:
-        domain: virtual-mcp11-k8s-calico.local
-        options:
-          - ndots:5
-          - timeout:2
-          - attempts:2
       host:
         ctl:
           address: ${_param:kubernetes_control_address}
diff --git a/classes/cluster/k8s_ha_contrail/infra/config.yml b/classes/cluster/k8s_ha_contrail/infra/config.yml
index d93ba67..30e09e7 100644
--- a/classes/cluster/k8s_ha_contrail/infra/config.yml
+++ b/classes/cluster/k8s_ha_contrail/infra/config.yml
@@ -19,27 +19,77 @@
     linux_system_codename: xenial
     salt_api_password_hash: "$6$WV0P1shnoDh2gI/Z$22/Bcd7ffMv0jDlFpT63cAU4PiXHz9pjXwngToKwqAsgoeK4HNR3PiKaushjxp3JsQ8hNoJmAC6TxzVqfV8WH/"
     salt_master_host: ${_param:infra_config_deploy_address}
+  salt:
+    master:
+      reactor:
+        reclass/minion/classify:
+        - salt://reclass/reactor/node_register.sls
+  linux:
+    network:
+      interface:
+        ens4:
+          enabled: true
+          type: eth
+          proto: static
+          address: ${_param:single_address}
+          netmask: 255.255.255.0
   reclass:
     storage:
+      class_mapping:
+        common_node:
+          expression: all
+          node_param:
+            single_address:
+              value_template: <<node_control_ip>>
+            linux_system_codename:
+              value_template: <<node_os>>
+            salt_master_host:
+              value_template: <<node_master_ip>>
+        infra_config:
+          expression: <<node_hostname>>__startswith__cfg
+          cluster_param:
+            infra_config_address:
+              value_template: <<node_control_ip>>
+            infra_config_deploy_address:
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
+        kubernetes_control01:
+          expression: <<node_hostname>>__equals__ctl01
+          cluster_param:
+            kubernetes_control_node01_address:
+              value_template: <<node_control_ip>>
+        kubernetes_control02:
+          expression: <<node_hostname>>__equals__ctl02
+          cluster_param:
+            kubernetes_control_node02_address:
+              value_template: <<node_control_ip>>
+        kubernetes_control03:
+          expression: <<node_hostname>>__equals__ctl03
+          cluster_param:
+            kubernetes_control_node03_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control01:
+          expression: <<node_hostname>>__equals__ntw01
+          cluster_param:
+            opencontrail_control_node01_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control02:
+          expression: <<node_hostname>>__equals__ntw02
+          cluster_param:
+            opencontrail_control_node02_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control03:
+          expression: <<node_hostname>>__equals__ntw03
+          cluster_param:
+            opencontrail_control_node03_address:
+              value_template: <<node_control_ip>>
+        kubernetes_compute:
+          expression: <<node_hostname>>__startswith__cmp
+          node_class:
+            value_template:
+              - cluster.<<node_cluster>>.kubernetes.compute
       node:
-        kubernetes_compute_node01:
-          name: ${_param:kubernetes_compute_node01_hostname}
-          domain: ${_param:cluster_domain}
-          classes:
-          - cluster.${_param:cluster_name}.kubernetes.compute
-          params:
-            salt_master_host: ${_param:infra_config_deploy_address}
-            linux_system_codename: xenial
-            single_address: ${_param:kubernetes_compute_node01_address}
-        kubernetes_compute_node02:
-          name: ${_param:kubernetes_compute_node02_hostname}
-          domain: ${_param:cluster_domain}
-          classes:
-          - cluster.${_param:cluster_name}.kubernetes.compute
-          params:
-            salt_master_host: ${_param:infra_config_deploy_address}
-            linux_system_codename: xenial
-            single_address: ${_param:kubernetes_compute_node02_address}
         opencontrail_control_node01:
           params:
             rabbitmq_cluster_role: master
diff --git a/classes/cluster/k8s_ha_contrail/infra/init.yml b/classes/cluster/k8s_ha_contrail/infra/init.yml
index d36c573..166a17b 100644
--- a/classes/cluster/k8s_ha_contrail/infra/init.yml
+++ b/classes/cluster/k8s_ha_contrail/infra/init.yml
@@ -1,13 +1,7 @@
-alasses:
-- system.linux.system.single
+classes:
 - system.linux.system.repo.mcp.extra
 - system.linux.system.repo.mcp.salt
 - system.linux.system.repo.ubuntu
-- system.openssh.server.team.lab
-- system.openssh.server.team.tcpcloud
-- system.openssh.server.team.mcp_qa
-- system.openssh.server.team.k8s_team
-- system.rsyslog.client.single
 parameters:
   _param:
     # infra service addresses
@@ -26,13 +20,6 @@
           names:
           - ${_param:infra_config_hostname}
           - ${_param:infra_config_hostname}.${_param:cluster_domain}
-      interface:
-        ens4:
-          enabled: true
-          type: eth
-          proto: static
-          address: ${_param:single_address}
-          netmask: 255.255.255.0
     system:
       name: ${_param:infra_config_hostname}
       domain: ${_param:cluster_domain}
diff --git a/classes/cluster/k8s_ha_contrail/init.yml b/classes/cluster/k8s_ha_contrail/init.yml
index 4cfdd17..7ea51c3 100644
--- a/classes/cluster/k8s_ha_contrail/init.yml
+++ b/classes/cluster/k8s_ha_contrail/init.yml
@@ -1,5 +1,10 @@
 classes:
+- system.linux.system.single
 - cluster.k8s_ha_contrail.kubernetes
 - cluster.k8s_ha_contrail.opencontrail
 - cluster.k8s_ha_contrail.infra
+- system.openssh.server.team.lab
+- system.openssh.server.team.tcpcloud
+- system.openssh.server.team.mcp_qa
+- system.openssh.server.team.k8s_team
 - cluster.overrides
diff --git a/classes/cluster/k8s_ha_contrail/kubernetes/compute.yml b/classes/cluster/k8s_ha_contrail/kubernetes/compute.yml
index b6340e5..4cad082 100644
--- a/classes/cluster/k8s_ha_contrail/kubernetes/compute.yml
+++ b/classes/cluster/k8s_ha_contrail/kubernetes/compute.yml
@@ -3,9 +3,8 @@
 - system.kubernetes.pool.cluster
 - system.salt.minion.cert.k8s_client
 - system.salt.minion.cert.etcd_client
-- cluster.k8s_ha_contrail.infra
 - cluster.k8s_ha_contrail.opencontrail.compute
-- cluster.overrides
+- cluster.k8s_ha_contrail
 parameters:
   linux:
     network:
@@ -33,8 +32,9 @@
     pool:
       network:
         engine: opencontrail
-        opencontrail:
-          address: ${_param:opencontrail_control_address}
+        config:
+          api:
+            host: ${_param:opencontrail_control_address}
         etcd:
           ssl:
             enabled: true
diff --git a/classes/cluster/k8s_ha_contrail/kubernetes/control.yml b/classes/cluster/k8s_ha_contrail/kubernetes/control.yml
index 19f9217..2e8fd73 100644
--- a/classes/cluster/k8s_ha_contrail/kubernetes/control.yml
+++ b/classes/cluster/k8s_ha_contrail/kubernetes/control.yml
@@ -5,7 +5,7 @@
 - system.salt.minion.cert.etcd_server
 - system.kubernetes.master.cluster
 - cluster.k8s_ha_contrail.kubernetes.compute
-- cluster.overrides
+- cluster.k8s_ha_contrail
 parameters:
   _param:
     keepalived_vip_interface: vhost0
@@ -44,5 +44,6 @@
         public_ip_range: 185.22.97.128/26
         public_network: default-domain:default-project:Public
         private_ip_range: 10.150.0.0/16
-        opencontrail:
-          address: ${_param:opencontrail_control_address}
+        config:
+          api:
+            host: ${_param:opencontrail_control_address}
diff --git a/classes/cluster/k8s_ha_contrail/kubernetes/init.yml b/classes/cluster/k8s_ha_contrail/kubernetes/init.yml
index acc7e93..d999c6b 100644
--- a/classes/cluster/k8s_ha_contrail/kubernetes/init.yml
+++ b/classes/cluster/k8s_ha_contrail/kubernetes/init.yml
@@ -30,13 +30,9 @@
     kubernetes_control_node01_hostname: ctl01
     kubernetes_control_node02_hostname: ctl02
     kubernetes_control_node03_hostname: ctl03
-    kubernetes_compute_node01_hostname: cmp01
-    kubernetes_compute_node02_hostname: cmp02
     kubernetes_control_node01_address: 172.16.10.101
     kubernetes_control_node02_address: 172.16.10.102
     kubernetes_control_node03_address: 172.16.10.103
-    kubernetes_compute_node01_address: 172.16.10.105
-    kubernetes_compute_node02_address: 172.16.10.106
     kubernetes_proxy_node01_hostname: prx01
     kubernetes_proxy_node01_address: 172.16.10.121
 
@@ -81,16 +77,6 @@
           names:
           - ${_param:kubernetes_control_node03_hostname}
           - ${_param:kubernetes_control_node03_hostname}.${_param:cluster_domain}
-        cmp01:
-          address: ${_param:kubernetes_compute_node01_address}
-          names:
-          - ${_param:kubernetes_compute_node01_hostname}
-          - ${_param:kubernetes_compute_node01_hostname}.${_param:cluster_domain}
-        cmp02:
-          address: ${_param:kubernetes_compute_node02_address}
-          names:
-          - ${_param:kubernetes_compute_node02_hostname}
-          - ${_param:kubernetes_compute_node02_hostname}.${_param:cluster_domain}
         prx01:
           address: ${_param:kubernetes_proxy_node01_address}
           names:
diff --git a/classes/cluster/k8s_ha_contrail/opencontrail/compute.yml b/classes/cluster/k8s_ha_contrail/opencontrail/compute.yml
index 912e753..d6f92b6 100644
--- a/classes/cluster/k8s_ha_contrail/opencontrail/compute.yml
+++ b/classes/cluster/k8s_ha_contrail/opencontrail/compute.yml
@@ -23,3 +23,8 @@
     pool:
       network:
         hash: 2276df10feae8f09fb50dce3a96fff6c
+  linux:
+    network:
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
\ No newline at end of file
diff --git a/classes/cluster/k8s_ha_contrail/opencontrail/control.yml b/classes/cluster/k8s_ha_contrail/opencontrail/control.yml
index f1b01e9..aa7e12a 100644
--- a/classes/cluster/k8s_ha_contrail/opencontrail/control.yml
+++ b/classes/cluster/k8s_ha_contrail/opencontrail/control.yml
@@ -14,7 +14,7 @@
 - system.opencontrail.client.resource.database_node
 - system.opencontrail.client.resource.analytics_node
 - system.haproxy.proxy.listen.opencontrail.analytics
-- cluster.k8s_ha_contrail.infra
+- cluster.k8s_ha_contrail
 parameters:
   _param:
     keepalived_vip_interface: eth1
diff --git a/classes/cluster/os_aio_contrail/infra/config.yml b/classes/cluster/os_aio_contrail/infra/config.yml
index c6f625f..1615fd4 100755
--- a/classes/cluster/os_aio_contrail/infra/config.yml
+++ b/classes/cluster/os_aio_contrail/infra/config.yml
@@ -28,8 +28,8 @@
   _param:
     reclass_data_repository: "https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab"
     reclass_data_revision: master
-    reclass_config_master: 192.168.10.100
-    single_address: 172.16.10.100
+    reclass_config_master: ${_param:infra_config_deploy_address}
+    single_address: ${_param:infra_config_address}
     salt_master_host: 127.0.0.1
     salt_master_base_environment: prd
     salt_minion_ca_host: ${linux:network:fqdn}
diff --git a/classes/cluster/os_aio_contrail/infra/init.yml b/classes/cluster/os_aio_contrail/infra/init.yml
index 5ac5070..5e41624 100755
--- a/classes/cluster/os_aio_contrail/infra/init.yml
+++ b/classes/cluster/os_aio_contrail/infra/init.yml
@@ -2,8 +2,10 @@
   _param:
     cluster_domain: os_aio_contrail.local
     cluster_name: os_aio_contrail
+    infra_config_deploy_address: 192.168.10.100
     infra_config_address: 172.16.10.100
     infra_config_hostname: cfg01
+    linux_system_repo_mcp_salt_version: nightly
   linux:
     network:
       host:
diff --git a/classes/cluster/os_aio_ovs/infra/config.yml b/classes/cluster/os_aio_ovs/infra/config.yml
index d3aa865..5c05f4c 100644
--- a/classes/cluster/os_aio_ovs/infra/config.yml
+++ b/classes/cluster/os_aio_ovs/infra/config.yml
@@ -27,8 +27,8 @@
     reclass_data_revision: master
     salt_master_environment_repository: "https://github.com/tcpcloud"
     salt_master_environment_revision: master
-    reclass_config_master: 192.168.10.100
-    single_address: 172.16.10.100
+    reclass_config_master: ${_param:infra_config_deploy_address}
+    single_address: ${_param:infra_config_address}
     salt_master_host: 127.0.0.1
     salt_master_base_environment: prd
     salt_minion_ca_host: ${linux:network:fqdn}
diff --git a/classes/cluster/os_aio_ovs/infra/init.yml b/classes/cluster/os_aio_ovs/infra/init.yml
index 365082d..517da8f 100644
--- a/classes/cluster/os_aio_ovs/infra/init.yml
+++ b/classes/cluster/os_aio_ovs/infra/init.yml
@@ -2,6 +2,7 @@
   _param:
     cluster_domain: os_aio_ovs.local
     cluster_name: os_aio_ovs
+    infra_config_deploy_address: 192.168.10.100
     infra_config_address: 172.16.10.100
   linux:
     network:
diff --git a/classes/cluster/os_ha_contrail/infra/config.yml b/classes/cluster/os_ha_contrail/infra/config.yml
index 950d35e..16d7f32 100755
--- a/classes/cluster/os_ha_contrail/infra/config.yml
+++ b/classes/cluster/os_ha_contrail/infra/config.yml
@@ -19,17 +19,15 @@
 - system.mysql.client.single
 - system.reclass.storage.system.openstack_control_cluster
 - system.reclass.storage.system.opencontrail_control_cluster
-- system.reclass.storage.system.openstack_compute_multi
-- system.reclass.storage.system.openstack_dashboard_single
-- system.reclass.storage.system.openstack_proxy_single
 - cluster.os_ha_contrail.openstack.proxy
+- cluster.os_ha_contrail.openstack.dashboard
 - cluster.os_ha_contrail
 parameters:
   _param:
     reclass_data_repository: "https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab"
     reclass_data_revision: master
-    reclass_config_master: 192.168.10.100
-    single_address: 172.16.10.100
+    reclass_config_master: ${_param:infra_config_deploy_address}
+    single_address: ${_param:infra_config_address}
     salt_master_host: 127.0.0.1
     salt_master_base_environment: prd
     salt_minion_ca_host: ${linux:network:fqdn}
@@ -51,8 +49,72 @@
             host: prx
         nginx_proxy_openstack_api_heat_cfn:
           enabled: false
+  salt:
+    master:
+      reactor:
+        reclass/minion/classify:
+        - salt://reclass/reactor/node_register.sls
   reclass:
     storage:
+      class_mapping:
+        common_node:
+          expression: all
+          node_param:
+            single_address:
+              value_template: <<node_control_ip>>
+            linux_system_codename:
+              value_template: <<node_os>>
+            salt_master_host:
+              value_template: <<node_master_ip>>
+        infra_config:
+          expression: <<node_hostname>>__startswith__cfg
+          cluster_param:
+            infra_config_address:
+              value_template: <<node_control_ip>>
+            infra_config_deploy_address:
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
+        openstack_control01:
+          expression: <<node_hostname>>__equals__ctl01
+          cluster_param:
+            openstack_control_node01_address:
+              value_template: <<node_control_ip>>
+        openstack_control02:
+          expression: <<node_hostname>>__equals__ctl02
+          cluster_param:
+            openstack_control_node02_address:
+              value_template: <<node_control_ip>>
+        openstack_control03:
+          expression: <<node_hostname>>__equals__ctl03
+          cluster_param:
+            openstack_control_node03_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control01:
+          expression: <<node_hostname>>__equals__ntw01
+          cluster_param:
+            opencontrail_control_node01_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control02:
+          expression: <<node_hostname>>__equals__ntw02
+          cluster_param:
+            opencontrail_control_node02_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control03:
+          expression: <<node_hostname>>__equals__ntw03
+          cluster_param:
+            opencontrail_control_node03_address:
+              value_template: <<node_control_ip>>  
+        openstack_compute:
+          expression: <<node_hostname>>__startswith__cmp
+          node_class:
+            value_template:
+              - cluster.<<node_cluster>>.openstack.compute
+          node_param:
+            tenant_address:
+              value_template: <<node_tenant_ip>>
+            external_address:
+              value_template: <<node_external_ip>>
       node:
         openstack_control_node01:
           classes:
@@ -72,8 +134,3 @@
           params:
             mysql_cluster_role: slave
             linux_system_codename: xenial
-        openstack_proxy_node01:
-          classes:
-          - cluster.os_ha_contrail.openstack.proxy
-          params:
-            linux_system_codename: xenial
diff --git a/classes/cluster/os_ha_contrail/infra/init.yml b/classes/cluster/os_ha_contrail/infra/init.yml
index 635aeb2..b80fa88 100755
--- a/classes/cluster/os_ha_contrail/infra/init.yml
+++ b/classes/cluster/os_ha_contrail/infra/init.yml
@@ -2,8 +2,10 @@
   _param:
     cluster_domain: os_ha_contrail.local
     cluster_name: os_ha_contrail
+    infra_config_deploy_address: 192.168.10.100
     infra_config_address: 172.16.10.100
     infra_config_hostname: cfg01
+    linux_system_repo_mcp_salt_version: nightly
   linux:
     network:
       host:
diff --git a/classes/cluster/os_ha_contrail/openstack/compute.yml b/classes/cluster/os_ha_contrail/openstack/compute.yml
index 18fca09..24612e8 100755
--- a/classes/cluster/os_ha_contrail/openstack/compute.yml
+++ b/classes/cluster/os_ha_contrail/openstack/compute.yml
@@ -25,6 +25,9 @@
     linux_system_codename: xenial
   linux:
     network:
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
       interface:
         ens4:
           enabled: true
diff --git a/classes/cluster/os_ha_contrail/openstack/init.yml b/classes/cluster/os_ha_contrail/openstack/init.yml
index 20d4c9b..b731b10 100755
--- a/classes/cluster/os_ha_contrail/openstack/init.yml
+++ b/classes/cluster/os_ha_contrail/openstack/init.yml
@@ -37,7 +37,7 @@
     apt_mk_version: nightly
     openstack_region: RegionOne
     admin_email: root@localhost
-    cluster_public_host: 172.16.10.254
+    cluster_public_host: ${_param:openstack_control_address}
     opencontrail_version: 3.0
     opencontrail_compute_dns: 8.8.8.8
     opencontrail_stats_password: contrail123
diff --git a/classes/cluster/os_ha_ovs/infra/config.yml b/classes/cluster/os_ha_ovs/infra/config.yml
index 0b119ef..3c16c65 100644
--- a/classes/cluster/os_ha_ovs/infra/config.yml
+++ b/classes/cluster/os_ha_ovs/infra/config.yml
@@ -17,6 +17,7 @@
 - system.mysql.client.single
 - system.reclass.storage.system.openstack_control_cluster
 - cluster.os_ha_ovs.openstack.proxy
+- cluster.os_ha_ovs.openstack.dashboard
 - cluster.os_ha_ovs
 parameters:
   _param:
@@ -59,7 +60,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -68,24 +69,26 @@
           expression: <<node_hostname>>__startswith__cfg
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
         openstack_control01:
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             openstack_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         openstack_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             openstack_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         openstack_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             openstack_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         openstack_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
diff --git a/classes/cluster/os_ha_ovs/infra/init.yml b/classes/cluster/os_ha_ovs/infra/init.yml
index 0862838..98ed614 100644
--- a/classes/cluster/os_ha_ovs/infra/init.yml
+++ b/classes/cluster/os_ha_ovs/infra/init.yml
@@ -2,6 +2,7 @@
   _param:
     cluster_domain: os_ha_ovs.local
     cluster_name: os_ha_ovs
+    infra_config_deploy_address: 192.168.10.100
     infra_config_address: 172.16.10.100
   linux:
     network:
diff --git a/classes/cluster/os_ha_ovs/openstack/compute.yml b/classes/cluster/os_ha_ovs/openstack/compute.yml
index 7b57a8f..f486cad 100644
--- a/classes/cluster/os_ha_ovs/openstack/compute.yml
+++ b/classes/cluster/os_ha_ovs/openstack/compute.yml
@@ -28,6 +28,9 @@
   linux:
     network:
       bridge: openvswitch
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
       interface:
         dhcp_int:
           enabled: true
diff --git a/classes/cluster/os_ha_ovs/openstack/init.yml b/classes/cluster/os_ha_ovs/openstack/init.yml
index 62e9b94..3c060f1 100644
--- a/classes/cluster/os_ha_ovs/openstack/init.yml
+++ b/classes/cluster/os_ha_ovs/openstack/init.yml
@@ -2,6 +2,10 @@
   _param:
     openstack_proxy_address: 172.16.10.121
     openstack_proxy_node01_address: 172.16.10.121
+    openstack_control_hostname: ctl
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
     openstack_control_address: 172.16.10.254
     openstack_control_node01_address: 172.16.10.101
     openstack_control_node02_address: 172.16.10.102
@@ -18,7 +22,7 @@
     openstack_region: RegionOne
     admin_email: root@localhost
     cluster_public_protocol: http
-    cluster_public_host: 172.16.10.254
+    cluster_public_host: ${_param:openstack_control_address}
     neutron_public_protocol: http
     neutron_control_dvr: False
     neutron_tenant_network_types: "flat,vxlan"
@@ -33,14 +37,14 @@
     galera_server_cluster_name: openstack_cluster
     galera_server_maintenance_password: workshop
     galera_server_admin_password: workshop
-    cluster_vip_address: 172.16.10.254
+    cluster_vip_address: ${_param:openstack_control_address}
     cluster_local_address: ${_param:single_address}
-    cluster_node01_hostname: ctl01
-    cluster_node01_address: 172.16.10.101
-    cluster_node02_hostname: ctl02
-    cluster_node02_address: 172.16.10.102
-    cluster_node03_hostname: ctl03
-    cluster_node03_address: 172.16.10.103
+    cluster_node01_hostname: ${_param:openstack_control_node01_hostname}
+    cluster_node01_address: ${_param:openstack_control_node01_address}
+    cluster_node02_hostname: ${_param:openstack_control_node02_hostname}
+    cluster_node02_address: ${_param:openstack_control_node02_address}
+    cluster_node03_hostname: ${_param:openstack_control_node03_hostname}
+    cluster_node03_address: ${_param:openstack_control_node03_address}
     rabbitmq_secret_key: workshop
     rabbitmq_admin_password: workshop
     rabbitmq_openstack_password: workshop
@@ -128,13 +132,3 @@
           names:
           - ctl03
           - ctl03.${_param:cluster_domain}
-        cmp01:
-          address: 172.16.10.105
-          names:
-          - cmp01
-          - cmp01.${_param:cluster_domain}
-        cmp02:
-          address: 172.16.10.106
-          names:
-          - cmp02
-          - cmp02.${_param:cluster_domain}
diff --git a/classes/cluster/sl_k8s_calico/infra/config.yml b/classes/cluster/sl_k8s_calico/infra/config.yml
index c957e6c..9108b97 100644
--- a/classes/cluster/sl_k8s_calico/infra/config.yml
+++ b/classes/cluster/sl_k8s_calico/infra/config.yml
@@ -9,6 +9,7 @@
 - system.mysql.client.database.grafana
 - system.reclass.storage.salt
 - system.reclass.storage.system.kubernetes_control_cluster
+- cluster.sl_k8s_calico.stacklight.proxy
 - cluster.sl_k8s_calico
 parameters:
   _param:
@@ -32,7 +33,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -41,9 +42,11 @@
           expression: <<node_hostname>>__startswith__cfg
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
         infra_proxy:
           expression: <<node_hostname>>__startswith__prx
           node_class:
@@ -53,17 +56,17 @@
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             kubernetes_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             kubernetes_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             kubernetes_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
@@ -73,24 +76,56 @@
           expression: <<node_hostname>>__equals__mon01
           cluster_param:
             stacklight_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         stacklight_monitor02:
           expression: <<node_hostname>>__equals__mon02
           cluster_param:
             stacklight_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         stacklight_monitor03:
           expression: <<node_hostname>>__equals__mon03
           cluster_param:
             stacklight_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
       node:
-        prx_node:
-          name: ${_param:kubernetes_proxy_node01_hostname}
+        stacklight_node01:
+          name: ${_param:stacklight_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.stacklight.proxy
+          - service.galera.master.cluster
+          - system.docker.swarm.master
+          - cluster.${_param:cluster_name}.stacklight.client
+          - cluster.${_param:cluster_name}.stacklight.server
           params:
             salt_master_host: ${_param:infra_config_deploy_address}
             linux_system_codename: xenial
-            single_address: ${_param:kubernetes_proxy_node01_address}
+            single_address: ${_param:stacklight_node01_address}
+            keepalived_vip_priority: 100
+            mysql_cluster_role: master
+        stacklight_node02:
+          name: ${_param:stacklight_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - service.galera.slave.cluster
+          - system.docker.swarm.manager
+          - cluster.${_param:cluster_name}.stacklight.server
+          params:
+            salt_master_host: ${_param:infra_config_deploy_address}
+            linux_system_codename: xenial
+            single_address: ${_param:stacklight_node02_address}
+            keepalived_vip_priority: 101
+            mysql_cluster_role: slave
+        stacklight_node03:
+          name: ${_param:stacklight_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - service.galera.slave.cluster
+          - system.docker.swarm.manager
+          - cluster.${_param:cluster_name}.stacklight.server
+          params:
+            salt_master_host: ${_param:infra_config_deploy_address}
+            linux_system_codename: xenial
+            single_address: ${_param:stacklight_node03_address}
+            keepalived_vip_priority: 102
+            mysql_cluster_role: slave
+
diff --git a/classes/cluster/sl_k8s_calico/stacklight/server.yml b/classes/cluster/sl_k8s_calico/stacklight/server.yml
index bef849f..f96c34f 100644
--- a/classes/cluster/sl_k8s_calico/stacklight/server.yml
+++ b/classes/cluster/sl_k8s_calico/stacklight/server.yml
@@ -21,16 +21,18 @@
 - system.prometheus.server.target.kubernetes
 - system.prometheus.server.target.dns
 - system.docker.swarm.stack.monitoring
-- system.docker.swarm.service.dashboard.grafana_server
+#- system.docker.swarm.service.dashboard.grafana_server
 - cluster.sl_k8s_calico
 parameters:
   _param:
     cluster_vip_address: ${_param:stacklight_address}
     cluster_public_host: mon
-    docker_image_alertmanager: alertmanager:latest
-    docker_image_pushgateway: pushgateway:latest
-    docker_image_prometheus: prometheus:latest
-    docker_image_grafana: grafana/grafana:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
+    docker_image_grafana: grafana/grafana:4.3.2
     grafana_admin_password: admin
     keepalived_prometheus_vip_address: ${_param:cluster_vip_address}
     keepalived_prometheus_vip_password: password
@@ -52,6 +54,10 @@
     grafana_database_host: ${_param:cluster_vip_address}
     grafana_database_password: ${_param:mysql_grafana_password}
     grafana_database_type: mysql
+    prometheus_influxdb_url: "http://${_param:stacklight_address}:8086/"
+    prometheus_influxdb_db: lma
+    prometheus_influxdb_username: lma
+    prometheus_influxdb_password: lmapass
   keepalived:
     cluster:
       instance:
diff --git a/classes/cluster/sl_k8s_contrail/infra/config.yml b/classes/cluster/sl_k8s_contrail/infra/config.yml
index a908d66..9af6915 100644
--- a/classes/cluster/sl_k8s_contrail/infra/config.yml
+++ b/classes/cluster/sl_k8s_contrail/infra/config.yml
@@ -8,7 +8,7 @@
 - system.salt.minion.cert.k8s_server
 - system.reclass.storage.system.kubernetes_control_cluster
 - system.reclass.storage.system.opencontrail_control_cluster
-- cluster.k8s_ha_contrail
+- cluster.sl_k8s_contrail
 parameters:
   _param:
     salt_master_base_environment: prd
@@ -19,27 +19,87 @@
     linux_system_codename: xenial
     salt_api_password_hash: "$6$WV0P1shnoDh2gI/Z$22/Bcd7ffMv0jDlFpT63cAU4PiXHz9pjXwngToKwqAsgoeK4HNR3PiKaushjxp3JsQ8hNoJmAC6TxzVqfV8WH/"
     salt_master_host: ${_param:infra_config_deploy_address}
+  salt:
+    master:
+      reactor:
+        reclass/minion/classify:
+        - salt://reclass/reactor/node_register.sls
   reclass:
     storage:
-      node:
-        kubernetes_compute_node01:
-          name: ${_param:kubernetes_compute_node01_hostname}
-          domain: ${_param:cluster_domain}
-          classes:
-          - cluster.${_param:cluster_name}.kubernetes.compute
-          params:
-            salt_master_host: ${_param:infra_config_deploy_address}
-            linux_system_codename: xenial
-            single_address: ${_param:kubernetes_compute_node01_address}
-        kubernetes_compute_node02:
-          name: ${_param:kubernetes_compute_node02_hostname}
-          domain: ${_param:cluster_domain}
-          classes:
-          - cluster.${_param:cluster_name}.kubernetes.compute
-          params:
-            salt_master_host: ${_param:infra_config_deploy_address}
-            linux_system_codename: xenial
-            single_address: ${_param:kubernetes_compute_node02_address}
+      class_mapping:
+        common_node:
+          expression: all
+          node_param:
+            single_address:
+              value_template: <<node_control_ip>>
+            linux_system_codename:
+              value_template: <<node_os>>
+            salt_master_host:
+              value_template: <<node_master_ip>>
+        infra_config:
+          expression: <<node_hostname>>__startswith__cfg
+          cluster_param:
+            infra_config_address:
+              value_template: <<node_control_ip>>
+            infra_config_deploy_address:
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
+        kubernetes_control01:
+          expression: <<node_hostname>>__equals__ctl01
+          cluster_param:
+            kubernetes_control_node01_address:
+              value_template: <<node_control_ip>>
+        kubernetes_control02:
+          expression: <<node_hostname>>__equals__ctl02
+          cluster_param:
+            kubernetes_control_node02_address:
+              value_template: <<node_control_ip>>
+        kubernetes_control03:
+          expression: <<node_hostname>>__equals__ctl03
+          cluster_param:
+            kubernetes_control_node03_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control01:
+          expression: <<node_hostname>>__equals__ntw01
+          cluster_param:
+            opencontrail_control_node01_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control02:
+          expression: <<node_hostname>>__equals__ntw02
+          cluster_param:
+            opencontrail_control_node02_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control03:
+          expression: <<node_hostname>>__equals__ntw03
+          cluster_param:
+            opencontrail_control_node03_address:
+              value_template: <<node_ip>
+        kubernetes_proxy:
+          expression: <<node_hostname>>__equals__prx01
+          cluster_param:
+            kubernetes_proxy_node01_address:
+              value_template: <<node_control_ip>>
+        stacklight_node01:
+          expression: <<node_hostname>>__equals__mon01
+          cluster_param:
+            stacklight_node03_address:
+              value_template: <<node_control_ip>>
+        stacklight_node02:
+          expression: <<node_hostname>>__equals__mon02
+          cluster_param:
+            stacklight_node03_address:
+              value_template: <<node_control_ip>>
+        stacklight_node03:
+          expression: <<node_hostname>>__equals__mon03
+          cluster_param:
+            stacklight_node03_address:
+              value_template: <<node_control_ip>>
+        kubernetes_compute:
+          expression: <<node_hostname>>__startswith__cmp
+          node_class:
+            value_template:
+              - cluster.<<node_cluster>>.kubernetes.compute
         prx_node:
           name: ${_param:kubernetes_proxy_node01_hostname}
           domain: ${_param:cluster_domain}
diff --git a/classes/cluster/sl_k8s_contrail/infra/init.yml b/classes/cluster/sl_k8s_contrail/infra/init.yml
index 78f83e8..92f6893 100644
--- a/classes/cluster/sl_k8s_contrail/infra/init.yml
+++ b/classes/cluster/sl_k8s_contrail/infra/init.yml
@@ -1,17 +1,11 @@
 classes:
-- system.linux.system.single
+- service.grafana.collector
 - system.linux.system.repo.mcp.extra
 - system.linux.system.repo.mcp.salt
 - system.linux.system.repo.ubuntu
-- system.openssh.server.team.lab
-- system.openssh.server.team.stacklight
-- system.openssh.server.team.tcpcloud
-- system.openssh.server.team.mcp_qa
-- system.openssh.server.team.k8s_team
 - system.rsyslog.client.single
 - system.telegraf.agent
 - system.prometheus.collector
-- service.grafana.collector
 parameters:
   _param:
     # infra service addresses
@@ -19,8 +13,8 @@
     infra_config_address: 172.16.10.100
     infra_config_deploy_address: 192.168.10.100
 
-    cluster_domain: k8s_ha_contrail.local
-    cluster_name: k8s_ha_contrail
+    cluster_domain: sl_k8s_contrail.local
+    cluster_name: sl_k8s_contrail
     apt_mk_version: nightly
   linux:
     network:
diff --git a/classes/cluster/sl_k8s_contrail/init.yml b/classes/cluster/sl_k8s_contrail/init.yml
index 650e6f1..f190b82 100644
--- a/classes/cluster/sl_k8s_contrail/init.yml
+++ b/classes/cluster/sl_k8s_contrail/init.yml
@@ -1,6 +1,12 @@
 classes:
-- cluster.k8s_ha_contrail.kubernetes
-- cluster.k8s_ha_contrail.opencontrail
-- cluster.k8s_ha_contrail.stacklight
-- cluster.k8s_ha_contrail.infra
+- system.linux.system.single
+- cluster.sl_k8s_contrail.kubernetes
+- cluster.sl_k8s_contrail.opencontrail
+- cluster.sl_k8s_contrail.stacklight
+- cluster.sl_k8s_contrail.infra
+- system.openssh.server.team.lab
+- system.openssh.server.team.stacklight
+- system.openssh.server.team.tcpcloud
+- system.openssh.server.team.mcp_qa
+- system.openssh.server.team.k8s_team
 - cluster.overrides
diff --git a/classes/cluster/sl_k8s_contrail/kubernetes/compute.yml b/classes/cluster/sl_k8s_contrail/kubernetes/compute.yml
index b6340e5..fb174a5 100644
--- a/classes/cluster/sl_k8s_contrail/kubernetes/compute.yml
+++ b/classes/cluster/sl_k8s_contrail/kubernetes/compute.yml
@@ -3,9 +3,8 @@
 - system.kubernetes.pool.cluster
 - system.salt.minion.cert.k8s_client
 - system.salt.minion.cert.etcd_client
-- cluster.k8s_ha_contrail.infra
-- cluster.k8s_ha_contrail.opencontrail.compute
-- cluster.overrides
+- cluster.sl_k8s_contrail.opencontrail.compute
+- cluster.sl_k8s_contrail
 parameters:
   linux:
     network:
diff --git a/classes/cluster/sl_k8s_contrail/kubernetes/control.yml b/classes/cluster/sl_k8s_contrail/kubernetes/control.yml
index 19f9217..71d1948 100644
--- a/classes/cluster/sl_k8s_contrail/kubernetes/control.yml
+++ b/classes/cluster/sl_k8s_contrail/kubernetes/control.yml
@@ -4,8 +4,8 @@
 - system.linux.system.repo.docker
 - system.salt.minion.cert.etcd_server
 - system.kubernetes.master.cluster
-- cluster.k8s_ha_contrail.kubernetes.compute
-- cluster.overrides
+- cluster.sl_k8s_contrail.kubernetes.compute
+- cluster.sl_k8s_contrail
 parameters:
   _param:
     keepalived_vip_interface: vhost0
diff --git a/classes/cluster/sl_k8s_contrail/kubernetes/init.yml b/classes/cluster/sl_k8s_contrail/kubernetes/init.yml
index acc7e93..d999c6b 100644
--- a/classes/cluster/sl_k8s_contrail/kubernetes/init.yml
+++ b/classes/cluster/sl_k8s_contrail/kubernetes/init.yml
@@ -30,13 +30,9 @@
     kubernetes_control_node01_hostname: ctl01
     kubernetes_control_node02_hostname: ctl02
     kubernetes_control_node03_hostname: ctl03
-    kubernetes_compute_node01_hostname: cmp01
-    kubernetes_compute_node02_hostname: cmp02
     kubernetes_control_node01_address: 172.16.10.101
     kubernetes_control_node02_address: 172.16.10.102
     kubernetes_control_node03_address: 172.16.10.103
-    kubernetes_compute_node01_address: 172.16.10.105
-    kubernetes_compute_node02_address: 172.16.10.106
     kubernetes_proxy_node01_hostname: prx01
     kubernetes_proxy_node01_address: 172.16.10.121
 
@@ -81,16 +77,6 @@
           names:
           - ${_param:kubernetes_control_node03_hostname}
           - ${_param:kubernetes_control_node03_hostname}.${_param:cluster_domain}
-        cmp01:
-          address: ${_param:kubernetes_compute_node01_address}
-          names:
-          - ${_param:kubernetes_compute_node01_hostname}
-          - ${_param:kubernetes_compute_node01_hostname}.${_param:cluster_domain}
-        cmp02:
-          address: ${_param:kubernetes_compute_node02_address}
-          names:
-          - ${_param:kubernetes_compute_node02_hostname}
-          - ${_param:kubernetes_compute_node02_hostname}.${_param:cluster_domain}
         prx01:
           address: ${_param:kubernetes_proxy_node01_address}
           names:
diff --git a/classes/cluster/sl_k8s_contrail/opencontrail/control.yml b/classes/cluster/sl_k8s_contrail/opencontrail/control.yml
index f1b01e9..a06f089 100644
--- a/classes/cluster/sl_k8s_contrail/opencontrail/control.yml
+++ b/classes/cluster/sl_k8s_contrail/opencontrail/control.yml
@@ -14,7 +14,7 @@
 - system.opencontrail.client.resource.database_node
 - system.opencontrail.client.resource.analytics_node
 - system.haproxy.proxy.listen.opencontrail.analytics
-- cluster.k8s_ha_contrail.infra
+- cluster.sl_k8s_contrail
 parameters:
   _param:
     keepalived_vip_interface: eth1
diff --git a/classes/cluster/sl_k8s_contrail/stacklight/proxy.yml b/classes/cluster/sl_k8s_contrail/stacklight/proxy.yml
index 20e5229..aea6b39 100644
--- a/classes/cluster/sl_k8s_contrail/stacklight/proxy.yml
+++ b/classes/cluster/sl_k8s_contrail/stacklight/proxy.yml
@@ -4,7 +4,7 @@
 - system.nginx.server.proxy.monitoring.prometheus_server
 - system.nginx.server.proxy.monitoring.prometheus_alertmanager
 - system.salt.minion.cert.proxy
-- cluster.k8s_ha_contrail.infra
+- cluster.sl_k8s_contrail.infra
 parameters:
   _param:
     nginx_proxy_grafana_port: 15013
diff --git a/classes/cluster/sl_k8s_contrail/stacklight/server.yml b/classes/cluster/sl_k8s_contrail/stacklight/server.yml
index be7150d..bb43c6e 100644
--- a/classes/cluster/sl_k8s_contrail/stacklight/server.yml
+++ b/classes/cluster/sl_k8s_contrail/stacklight/server.yml
@@ -29,17 +29,17 @@
 - system.prometheus.server.target.dns
 - system.docker.swarm.stack.monitoring
 - system.docker.swarm.stack.dashboard
-- cluster.k8s_ha_contrail.infra
+- cluster.sl_k8s_contrail.infra
 parameters:
   _param:
     cluster_public_host: mon
     cluster_vip_address: ${_param:stacklight_monitor_address}
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
-    docker_image_grafana: grafana/grafana:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
+    docker_image_grafana: grafana/grafana:4.3.2
     grafana_admin_password: admin
     keepalived_prometheus_vip_address: ${_param:cluster_vip_address}
     keepalived_prometheus_vip_password: password
diff --git a/classes/cluster/sl_os_contrail/infra/config.yml b/classes/cluster/sl_os_contrail/infra/config.yml
index d50097b..e1468e9 100755
--- a/classes/cluster/sl_os_contrail/infra/config.yml
+++ b/classes/cluster/sl_os_contrail/infra/config.yml
@@ -19,19 +19,17 @@
 - system.mysql.client.single
 - system.reclass.storage.system.openstack_control_cluster
 - system.reclass.storage.system.opencontrail_control_cluster
-- system.reclass.storage.system.openstack_compute_multi
-- system.reclass.storage.system.openstack_dashboard_single
-- system.reclass.storage.system.openstack_proxy_single
 - system.reclass.storage.system.stacklightv2_server_cluster
 - cluster.sl_os_contrail.openstack.proxy
 - cluster.sl_os_contrail.stacklight.proxy
+- cluster.sl_os_contrail.openstack.dashboard
 - cluster.sl_os_contrail
 parameters:
   _param:
     reclass_data_repository: "https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab"
     reclass_data_revision: master
-    reclass_config_master: 192.168.10.100
-    single_address: 172.16.10.100
+    reclass_config_master: ${_param:infra_config_deploy_address}
+    single_address: ${_param:infra_config_address}
     salt_master_host: 127.0.0.1
     salt_master_base_environment: prd
     salt_minion_ca_host: ${linux:network:fqdn}
@@ -53,8 +51,87 @@
             host: prx
         nginx_proxy_openstack_api_heat_cfn:
           enabled: false
+  salt:
+    master:
+      reactor:
+        reclass/minion/classify:
+        - salt://reclass/reactor/node_register.sls
   reclass:
     storage:
+      class_mapping:
+        common_node:
+          expression: all
+          node_param:
+            single_address:
+              value_template: <<node_control_ip>>
+            linux_system_codename:
+              value_template: <<node_os>>
+            salt_master_host:
+              value_template: <<node_master_ip>>
+        infra_config:
+          expression: <<node_hostname>>__startswith__cfg
+          cluster_param:
+            infra_config_address:
+              value_template: <<node_control_ip>>
+            infra_config_deploy_address:
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
+        openstack_control01:
+          expression: <<node_hostname>>__equals__ctl01
+          cluster_param:
+            openstack_control_node01_address:
+              value_template: <<node_control_ip>>
+        openstack_control02:
+          expression: <<node_hostname>>__equals__ctl02
+          cluster_param:
+            openstack_control_node02_address:
+              value_template: <<node_control_ip>>
+        openstack_control03:
+          expression: <<node_hostname>>__equals__ctl03
+          cluster_param:
+            openstack_control_node03_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control01:
+          expression: <<node_hostname>>__equals__ntw01
+          cluster_param:
+            opencontrail_control_node01_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control02:
+          expression: <<node_hostname>>__equals__ntw02
+          cluster_param:
+            opencontrail_control_node02_address:
+              value_template: <<node_control_ip>>
+        opencontrail_control03:
+          expression: <<node_hostname>>__equals__ntw03
+          cluster_param:
+            opencontrail_control_node03_address:
+              value_template: <<node_control_ip>>  
+        openstack_compute:
+          expression: <<node_hostname>>__startswith__cmp
+          node_class:
+            value_template:
+              - cluster.<<node_cluster>>.openstack.compute
+          node_param:
+            tenant_address:
+              value_template: <<node_tenant_ip>>
+            external_address:
+              value_template: <<node_external_ip>>
+        stacklight_monitor01:
+          expression: <<node_hostname>>__equals__mon01
+          cluster_param:
+            stacklight_node01_address:
+              value_template: <<node_control_ip>>
+        stacklight_monitor02:
+          expression: <<node_hostname>>__equals__mon02
+          cluster_param:
+            stacklight_node02_address:
+              value_template: <<node_control_ip>>
+        stacklight_monitor03:
+          expression: <<node_hostname>>__equals__mon03
+          cluster_param:
+            stacklight_node03_address:
+              value_template: <<node_control_ip>>
       node:
         openstack_control_node01:
           classes:
@@ -74,8 +151,3 @@
           params:
             mysql_cluster_role: slave
             linux_system_codename: xenial
-        openstack_proxy_node01:
-          classes:
-          - cluster.sl_os_contrail.openstack.proxy
-          params:
-            linux_system_codename: xenial
diff --git a/classes/cluster/sl_os_contrail/infra/init.yml b/classes/cluster/sl_os_contrail/infra/init.yml
index 886c2d1..38ef139 100755
--- a/classes/cluster/sl_os_contrail/infra/init.yml
+++ b/classes/cluster/sl_os_contrail/infra/init.yml
@@ -2,8 +2,10 @@
   _param:
     cluster_domain: sl_os_contrail.local
     cluster_name: sl_os_contrail
+    infra_config_deploy_address: 192.168.10.100
     infra_config_address: 172.16.10.100
     infra_config_hostname: cfg01
+    linux_system_repo_mcp_salt_version: nightly
   linux:
     network:
       host:
diff --git a/classes/cluster/sl_os_contrail/openstack/compute.yml b/classes/cluster/sl_os_contrail/openstack/compute.yml
index 9baddb6..9535c85 100755
--- a/classes/cluster/sl_os_contrail/openstack/compute.yml
+++ b/classes/cluster/sl_os_contrail/openstack/compute.yml
@@ -25,6 +25,9 @@
     linux_system_codename: xenial
   linux:
     network:
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
       interface:
         ens4:
           enabled: true
diff --git a/classes/cluster/sl_os_contrail/openstack/init.yml b/classes/cluster/sl_os_contrail/openstack/init.yml
index ee2c384..30ac661 100755
--- a/classes/cluster/sl_os_contrail/openstack/init.yml
+++ b/classes/cluster/sl_os_contrail/openstack/init.yml
@@ -37,7 +37,7 @@
     apt_mk_version: nightly
     openstack_region: RegionOne
     admin_email: root@localhost
-    cluster_public_host: 172.16.10.254
+    cluster_public_host: ${_param:openstack_control_address}
     opencontrail_version: 3.0
     opencontrail_compute_dns: 8.8.8.8
     opencontrail_stats_password: contrail123
diff --git a/classes/cluster/sl_os_contrail/stacklight/server.yml b/classes/cluster/sl_os_contrail/stacklight/server.yml
index 894dc0f..23acc64 100755
--- a/classes/cluster/sl_os_contrail/stacklight/server.yml
+++ b/classes/cluster/sl_os_contrail/stacklight/server.yml
@@ -46,12 +46,12 @@
     grafana_database_type: mysql
     grafana_database_host: ${_param:openstack_database_address}
     grafana_database_password: ${_param:mysql_grafana_password}
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
-    docker_image_grafana: grafana/grafana:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
+    docker_image_grafana: grafana/grafana:4.3.2
     prometheus_glusterfs_service_host: ${_param:openstack_control_address}
     glusterfs_node01_address: ${_param:openstack_control_node01_address}
     glusterfs_node02_address: ${_param:openstack_control_node02_address}
diff --git a/classes/cluster/sl_os_ovs/infra/config.yml b/classes/cluster/sl_os_ovs/infra/config.yml
index dfe2a2e..0d5da93 100644
--- a/classes/cluster/sl_os_ovs/infra/config.yml
+++ b/classes/cluster/sl_os_ovs/infra/config.yml
@@ -19,6 +19,7 @@
 - system.reclass.storage.system.stacklight_server_cluster
 - cluster.sl_os_ovs.openstack.proxy
 - cluster.sl_os_ovs.stacklight.proxy
+- cluster.sl_os_ovs.openstack.dashboard
 - cluster.sl_os_ovs
 parameters:
   _param:
@@ -61,7 +62,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -70,24 +71,26 @@
           expression: <<node_hostname>>__startswith__cfg
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
+            cluster_domain:
+              value_template: <<node_domain>>
         openstack_control01:
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             openstack_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         openstack_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             openstack_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         openstack_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             openstack_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         openstack_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
@@ -102,17 +105,17 @@
           expression: <<node_hostname>>__equals__mon01
           cluster_param:
             stacklight_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         stacklight_monitor02:
           expression: <<node_hostname>>__equals__mon02
           cluster_param:
             stacklight_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         stacklight_monitor03:
           expression: <<node_hostname>>__equals__mon03
           cluster_param:
             stacklight_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
       node:
         openstack_control_node01:
           classes:
diff --git a/classes/cluster/sl_os_ovs/infra/init.yml b/classes/cluster/sl_os_ovs/infra/init.yml
index 9c20b6b..9acca1d 100644
--- a/classes/cluster/sl_os_ovs/infra/init.yml
+++ b/classes/cluster/sl_os_ovs/infra/init.yml
@@ -2,6 +2,7 @@
   _param:
     cluster_domain: sl_os_ovs.local
     cluster_name: sl_os_ovs
+    infra_config_deploy_address: 192.168.10.100
     infra_config_address: 172.16.10.100
   linux:
     network:
diff --git a/classes/cluster/sl_os_ovs/openstack/compute.yml b/classes/cluster/sl_os_ovs/openstack/compute.yml
index b2a74c2..3140233 100644
--- a/classes/cluster/sl_os_ovs/openstack/compute.yml
+++ b/classes/cluster/sl_os_ovs/openstack/compute.yml
@@ -29,6 +29,9 @@
   linux:
     network:
       bridge: openvswitch
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
       interface:
         dhcp_int:
           enabled: true
@@ -63,4 +66,4 @@
           address: ${_param:tenant_address}
           netmask: 255.255.255.0
           use_interfaces:
-          - ${_param:tenant_interface}
\ No newline at end of file
+          - ${_param:tenant_interface}
diff --git a/classes/cluster/sl_os_ovs/openstack/init.yml b/classes/cluster/sl_os_ovs/openstack/init.yml
index 82f7f5a..3e59456 100644
--- a/classes/cluster/sl_os_ovs/openstack/init.yml
+++ b/classes/cluster/sl_os_ovs/openstack/init.yml
@@ -2,6 +2,10 @@
   _param:
     openstack_proxy_address: 172.16.10.121
     openstack_proxy_node01_address: 172.16.10.121
+    openstack_control_hostname: ctl
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
     openstack_control_address: 172.16.10.254
     openstack_control_node01_address: 172.16.10.101
     openstack_control_node02_address: 172.16.10.102
@@ -35,12 +39,12 @@
     galera_server_admin_password: workshop
     cluster_vip_address: 172.16.10.254
     cluster_local_address: ${_param:single_address}
-    cluster_node01_hostname: ctl01
-    cluster_node01_address: 172.16.10.101
-    cluster_node02_hostname: ctl02
-    cluster_node02_address: 172.16.10.102
-    cluster_node03_hostname: ctl03
-    cluster_node03_address: 172.16.10.103
+    cluster_node01_hostname: ${_param:openstack_control_node01_hostname}
+    cluster_node01_address: ${_param:openstack_control_node01_address}
+    cluster_node02_hostname: ${_param:openstack_control_node02_hostname}
+    cluster_node02_address: ${_param:openstack_control_node02_address}
+    cluster_node03_hostname: ${_param:openstack_control_node03_hostname}
+    cluster_node03_address: ${_param:openstack_control_node03_address}
     rabbitmq_secret_key: workshop
     rabbitmq_admin_password: workshop
     rabbitmq_openstack_password: workshop
diff --git a/classes/cluster/virtual-mcp-ocata-cicd/cicd/control/init.yml b/classes/cluster/virtual-mcp-ocata-cicd/cicd/control/init.yml
index 5f29948..974906b 100644
--- a/classes/cluster/virtual-mcp-ocata-cicd/cicd/control/init.yml
+++ b/classes/cluster/virtual-mcp-ocata-cicd/cicd/control/init.yml
@@ -15,6 +15,7 @@
   - system.glusterfs.client.volume.rundeck
   - system.glusterfs.client.volume.salt_pki
   - system.glusterfs.client.volume.security_monkey
+  - cluster.virtual-mcp-ocata-cicd.cicd.gluster
  #- system.glusterfs.client.volume.salt
   # Docker
   - system.docker.host
@@ -219,6 +220,13 @@
       IJA5GNU+Uj6+WbPO+hGn3NBWfb7/tR3ojSv7cBf2eEUh/vLSE9joKA==
       -----END RSA PRIVATE KEY-----
 
+    # Pushkin
+    webhook_from: pushkin@example.com
+    webhook_recipients: alerts@example.com
+    webhook_application_id: "1"
+    webhook_login_id: "1"
+    webhook_sfdc_username: pushkin
+
     # SecurityMonkey
     security_monkey_openstack:
       username: admin
diff --git a/classes/cluster/virtual-mcp-ocata-cicd/cicd/gluster.yml b/classes/cluster/virtual-mcp-ocata-cicd/cicd/gluster.yml
index 5a1d1a3..082902e 100644
--- a/classes/cluster/virtual-mcp-ocata-cicd/cicd/gluster.yml
+++ b/classes/cluster/virtual-mcp-ocata-cicd/cicd/gluster.yml
@@ -12,4 +12,5 @@
   - system.glusterfs.server.volume.pushkin
   - system.glusterfs.server.volume.registry
   - system.glusterfs.server.volume.rundeck
+  - system.glusterfs.server.volume.salt_pki
   - system.glusterfs.server.volume.security_monkey
diff --git a/classes/cluster/virtual-mcp11-contrail-nfv/opencontrail/control.yml b/classes/cluster/virtual-mcp11-contrail-nfv/opencontrail/control.yml
index 439ee4f..1d93eb1 100644
--- a/classes/cluster/virtual-mcp11-contrail-nfv/opencontrail/control.yml
+++ b/classes/cluster/virtual-mcp11-contrail-nfv/opencontrail/control.yml
@@ -13,6 +13,7 @@
 - system.opencontrail.client.resource.database_node
 - system.opencontrail.client.resource.analytics_node
 - system.haproxy.proxy.listen.opencontrail.analytics
+- system.prometheus.exporters.jmx
 - cluster.virtual-mcp11-contrail-nfv
 parameters:
   _param:
diff --git a/classes/cluster/virtual-mcp11-contrail/init.yml b/classes/cluster/virtual-mcp11-contrail/init.yml
index ade1433..a1e738d 100755
--- a/classes/cluster/virtual-mcp11-contrail/init.yml
+++ b/classes/cluster/virtual-mcp11-contrail/init.yml
@@ -60,6 +60,8 @@
     stacklight_monitor_node03_address: 172.16.10.109
 
     stacklight_log_address: ${_param:stacklight_monitor_address}
+    stacklight_telemetry_address: ${_param:stacklight_monitor_address}
+    stacklight_telemetry_node01_address: ${_param:stacklight_monitor_node01_address}
 
   linux:
     network:
diff --git a/classes/cluster/virtual-mcp11-contrail/opencontrail/control.yml b/classes/cluster/virtual-mcp11-contrail/opencontrail/control.yml
index d657e0f..bcc9094 100644
--- a/classes/cluster/virtual-mcp11-contrail/opencontrail/control.yml
+++ b/classes/cluster/virtual-mcp11-contrail/opencontrail/control.yml
@@ -13,6 +13,7 @@
 - system.opencontrail.client.resource.database_node
 - system.opencontrail.client.resource.analytics_node
 - system.haproxy.proxy.listen.opencontrail.analytics
+- system.prometheus.exporters.jmx
 - cluster.virtual-mcp11-contrail
 parameters:
   _param:
diff --git a/classes/cluster/virtual-mcp11-contrail/openstack/compute.yml b/classes/cluster/virtual-mcp11-contrail/openstack/compute.yml
index 967d151..3a894f8 100755
--- a/classes/cluster/virtual-mcp11-contrail/openstack/compute.yml
+++ b/classes/cluster/virtual-mcp11-contrail/openstack/compute.yml
@@ -4,6 +4,7 @@
 - system.linux.system.repo.mcp.extra
 - system.linux.system.repo.saltstack.xenial
 - system.nova.compute.cluster
+- system.ceilometer.agent.cluster
 - system.opencontrail.compute.cluster
 - system.opencontrail.client.cluster
 - system.opencontrail.client.resource.virtual_router
diff --git a/classes/cluster/virtual-mcp11-contrail/openstack/control.yml b/classes/cluster/virtual-mcp11-contrail/openstack/control.yml
index 03f23ef..8ad024a 100755
--- a/classes/cluster/virtual-mcp11-contrail/openstack/control.yml
+++ b/classes/cluster/virtual-mcp11-contrail/openstack/control.yml
@@ -28,7 +28,9 @@
 - system.designate.server.cluster
 - system.designate.server.backend.bind
 - system.ceilometer.server.cluster
+- system.ceilometer.server.backend.influxdb
 - system.aodh.server.cluster
+- system.heka.ceilometer_collector.single
 - system.galera.server.cluster
 - system.galera.server.database.aodh
 - system.galera.server.database.ceilometer
diff --git a/classes/cluster/virtual-mcp11-contrail/stacklight/server.yml b/classes/cluster/virtual-mcp11-contrail/stacklight/server.yml
index 8517382..099f7a6 100755
--- a/classes/cluster/virtual-mcp11-contrail/stacklight/server.yml
+++ b/classes/cluster/virtual-mcp11-contrail/stacklight/server.yml
@@ -19,6 +19,7 @@
 - service.haproxy.proxy.single
 - system.influxdb.server.single
 - system.influxdb.database.stacklight
+- system.influxdb.database.ceilometer
 - system.keepalived.cluster.instance.prometheus_server_vip
 - system.telegraf.agent.remote
 - system.prometheus.server.remote_write.docker
@@ -48,12 +49,12 @@
     grafana_database_type: mysql
     grafana_database_host: ${_param:openstack_database_address}
     grafana_database_password: ${_param:mysql_grafana_password}
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_collector: mirantis/heka:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
+    docker_image_remote_collector: docker-prod-virtual.docker.mirantis.net/openstack-docker/heka:latest
     docker_image_grafana: grafana/grafana:4.3.2
     prometheus_glusterfs_service_host: ${_param:openstack_control_address}
     glusterfs_node01_address: ${_param:openstack_control_node01_address}
diff --git a/classes/cluster/virtual-mcp11-dvr/infra/config.yml b/classes/cluster/virtual-mcp11-dvr/infra/config.yml
index 3a9c09e..8f0eaca 100644
--- a/classes/cluster/virtual-mcp11-dvr/infra/config.yml
+++ b/classes/cluster/virtual-mcp11-dvr/infra/config.yml
@@ -10,6 +10,7 @@
 - system.salt.minion.cert.proxy
 - system.sphinx.server.doc.reclass
 - system.keystone.client.single
+- system.keystone.client.service.aodh
 - system.keystone.client.service.ceilometer
 - system.keystone.client.service.nova21
 - system.keystone.client.service.glare
diff --git a/classes/cluster/virtual-mcp11-dvr/init.yml b/classes/cluster/virtual-mcp11-dvr/init.yml
index 0ac5d8a..6f2b69d 100644
--- a/classes/cluster/virtual-mcp11-dvr/init.yml
+++ b/classes/cluster/virtual-mcp11-dvr/init.yml
@@ -44,3 +44,5 @@
     stacklight_monitor_node02_address: 172.16.10.108
     stacklight_monitor_node03_address: 172.16.10.109
     stacklight_log_address: ${_param:stacklight_monitor_address}
+    stacklight_telemetry_address: ${_param:stacklight_monitor_address}
+    stacklight_telemetry_node01_address: ${_param:stacklight_monitor_node01_address}
diff --git a/classes/cluster/virtual-mcp11-dvr/openstack/compute.yml b/classes/cluster/virtual-mcp11-dvr/openstack/compute.yml
index e1363e8..f37432b 100644
--- a/classes/cluster/virtual-mcp11-dvr/openstack/compute.yml
+++ b/classes/cluster/virtual-mcp11-dvr/openstack/compute.yml
@@ -4,6 +4,7 @@
 - system.linux.system.repo.saltstack.xenial
 - system.nova.compute.cluster
 - system.neutron.compute.cluster
+- system.ceilometer.agent.cluster
 - system.linux.network.interface.single_ovs_dvr
 - system.prometheus.exporters.libvirt
 - cluster.virtual-mcp11-dvr
diff --git a/classes/cluster/virtual-mcp11-dvr/openstack/control.yml b/classes/cluster/virtual-mcp11-dvr/openstack/control.yml
index f06e83d..dd6fc11 100644
--- a/classes/cluster/virtual-mcp11-dvr/openstack/control.yml
+++ b/classes/cluster/virtual-mcp11-dvr/openstack/control.yml
@@ -21,7 +21,12 @@
 - system.neutron.control.openvswitch.cluster
 - system.cinder.control.cluster
 - system.heat.server.cluster
+- system.ceilometer.server.cluster
+- system.ceilometer.server.backend.influxdb
+- system.aodh.server.cluster
+- system.heka.ceilometer_collector.single
 - system.galera.server.cluster
+- system.galera.server.database.aodh
 - system.galera.server.database.ceilometer
 - system.galera.server.database.cinder
 - system.galera.server.database.glance
diff --git a/classes/cluster/virtual-mcp11-dvr/openstack/init.yml b/classes/cluster/virtual-mcp11-dvr/openstack/init.yml
index 204111e..1d76d2d 100644
--- a/classes/cluster/virtual-mcp11-dvr/openstack/init.yml
+++ b/classes/cluster/virtual-mcp11-dvr/openstack/init.yml
@@ -41,7 +41,9 @@
     heat_service_host: ${_param:cluster_vip_address}
     heat_domain_admin_password: workshop
     ceilometer_version: ${_param:openstack_version}
-    ceilometer_service_host: 172.16.10.108
+    ceilometer_service_host: ${_param:cluster_vip_address}
+    aodh_version: ${_param:openstack_version}
+    aodh_service_host: ${_param:cluster_vip_address}
     cinder_version: ${_param:openstack_version}
     cinder_service_host: ${_param:cluster_vip_address}
     ceilometer_graphite_publisher_host: 172.16.10.107
@@ -66,6 +68,7 @@
     mysql_aodh_password: workshop
     keystone_service_token: workshop
     keystone_admin_password: workshop
+    keystone_aodh_password: workshop
     keystone_ceilometer_password: workshop
     keystone_cinder_password: workshop
     keystone_glance_password: workshop
@@ -83,6 +86,7 @@
     mongodb_ceilometer_password: cloudlab
     mongodb_admin_password: cloudlab
     mongodb_shared_key: eoTh1AwahlahqueingeejooLughah4tei9feing0eeVaephooDi2li1TaeV1ooth
+    ceilometer_influxdb_password: lmapass
   linux:
     network:
       host:
@@ -135,4 +139,4 @@
       user:
         root:
           name: root
-          password: false
\ No newline at end of file
+          password: false
diff --git a/classes/cluster/virtual-mcp11-dvr/stacklight/server.yml b/classes/cluster/virtual-mcp11-dvr/stacklight/server.yml
index 4ccdb19..2f85a58 100644
--- a/classes/cluster/virtual-mcp11-dvr/stacklight/server.yml
+++ b/classes/cluster/virtual-mcp11-dvr/stacklight/server.yml
@@ -19,6 +19,7 @@
 - service.haproxy.proxy.single
 - system.influxdb.server.single
 - system.influxdb.database.stacklight
+- system.influxdb.database.ceilometer
 - system.keepalived.cluster.instance.prometheus_server_vip
 - system.telegraf.agent.remote
 - system.prometheus.server.remote_write.docker
@@ -48,12 +49,12 @@
     grafana_database_type: mysql
     grafana_database_host: ${_param:openstack_database_address}
     grafana_database_password: ${_param:mysql_grafana_password}
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_collector: mirantis/heka:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
+    docker_image_remote_collector: docker-prod-virtual.docker.mirantis.net/openstack-docker/heka:latest
     docker_image_grafana: grafana/grafana:4.3.2
     prometheus_glusterfs_service_host: ${_param:openstack_control_address}
     glusterfs_node01_address: ${_param:openstack_control_node01_address}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/config.yml b/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/config.yml
index 88bbc73..b840d0a 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/config.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/config.yml
@@ -32,7 +32,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -41,9 +41,9 @@
           expression: <<node_hostname>>__equals__cfg01
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
         infra_proxy:
           expression: <<node_hostname>>__startswith__prx
           node_class:
@@ -53,17 +53,17 @@
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             kubernetes_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             kubernetes_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             kubernetes_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
@@ -73,17 +73,17 @@
           expression: <<node_hostname>>__equals__mon01
           cluster_param:
             stacklight_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         stacklight_monitor02:
           expression: <<node_hostname>>__equals__mon02
           cluster_param:
             stacklight_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         stacklight_monitor03:
           expression: <<node_hostname>>__equals__mon03
           cluster_param:
             stacklight_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
       node:
         prx_node:
           name: ${_param:kubernetes_proxy_node01_hostname}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/init.yml b/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/init.yml
index 21675fb..864492b 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-dyn/infra/init.yml
@@ -27,7 +27,7 @@
       resolv:
         dns:
           - 172.18.176.4
-          - 172.18.176.7
+          - 172.18.208.44
       host:
         cfg01:
           address: ${_param:infra_config_address}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/compute.yml b/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/compute.yml
index 18d4302..79a552f 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/compute.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/compute.yml
@@ -31,8 +31,6 @@
       resolv:
         dns:
           - 10.254.0.10
-          - 172.18.176.4
-          - 172.18.176.7
       interface:
         ens4:
           route:
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/init.yml b/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/init.yml
index a381b5e..626a99d 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-dyn/kubernetes/init.yml
@@ -24,8 +24,9 @@
     kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
     kubernetes_calico_policy_image: calico/kube-policy-controller:v0.5.4
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
-    kubernetes_netchecker_agent_image: quay.io/l23network/k8s-netchecker-agent:v1.0
-    kubernetes_netchecker_server_image: quay.io/l23network/k8s-netchecker-server:v1.0
+    kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:v1.1.0
+    kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:v1.1.0
+    kubernetes_netchecker_agent_probeurls: "http://ipinfo.io"
 
     # switches of addons
     kubernetes_helm_enabled: true
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-dyn/stacklight/server.yml b/classes/cluster/virtual-mcp11-k8s-calico-dyn/stacklight/server.yml
index 6c49533..7720b8c 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-dyn/stacklight/server.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-dyn/stacklight/server.yml
@@ -29,11 +29,11 @@
   _param:
     cluster_vip_address: ${_param:stacklight_address}
     cluster_public_host: mon
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
     docker_image_grafana: grafana/grafana:4.3.2
     grafana_admin_password: admin
     keepalived_prometheus_vip_address: ${_param:cluster_vip_address}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/config.yml b/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/config.yml
index 1afe68f..c229379 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/config.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/config.yml
@@ -30,7 +30,7 @@
           expression: all
           node_param:
             single_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             linux_system_codename:
               value_template: <<node_os>>
             salt_master_host:
@@ -39,24 +39,24 @@
           expression: <<node_hostname>>__equals__cfg01
           cluster_param:
             infra_config_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
             infra_config_deploy_address:
-              value_template: <<node_ip>>
+              value_template: <<node_deploy_ip>>
         kubernetes_control01:
           expression: <<node_hostname>>__equals__ctl01
           cluster_param:
             kubernetes_control_node01_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control02:
           expression: <<node_hostname>>__equals__ctl02
           cluster_param:
             kubernetes_control_node02_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_control03:
           expression: <<node_hostname>>__equals__ctl03
           cluster_param:
             kubernetes_control_node03_address:
-              value_template: <<node_ip>>
+              value_template: <<node_control_ip>>
         kubernetes_compute:
           expression: <<node_hostname>>__startswith__cmp
           node_class:
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/init.yml b/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/init.yml
index e102028..6124602 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-minimal/infra/init.yml
@@ -24,7 +24,7 @@
       resolv:
         dns:
           - 172.18.176.4
-          - 172.18.176.7
+          - 172.18.208.44
       host:
         cfg01:
           address: ${_param:infra_config_address}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/compute.yml b/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/compute.yml
index 1df5f06..7f42665 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/compute.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/compute.yml
@@ -31,8 +31,6 @@
       resolv:
         dns:
           - 10.254.0.10
-          - 172.18.176.4
-          - 172.18.176.7
       interface:
         ens4:
           route:
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/control.yml b/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/control.yml
index b82b444..fa0bb5a 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/control.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/control.yml
@@ -43,3 +43,4 @@
           enabled: ${_param:kubernetes_netchecker_enabled}
           agent_image: ${_param:kubernetes_netchecker_agent_image}
           server_image: ${_param:kubernetes_netchecker_server_image}
+          agent_probeurls: ${_param:kubernetes_netchecker_agent_probeurls}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/init.yml b/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/init.yml
index 61a6be8..06b33d5 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico-minimal/kubernetes/init.yml
@@ -23,8 +23,9 @@
     kubernetes_calico_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/node:latest
     kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
-    kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:latest
-    kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:latest
+    kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:v1.1.0
+    kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:v1.1.0
+    kubernetes_netchecker_agent_probeurls: "http://ipinfo.io"
     kubernetes_calico_policy_image: calico/kube-policy-controller:v0.5.4
 
     # addresses and hostnames
diff --git a/classes/cluster/virtual-mcp11-k8s-calico/infra/init.yml b/classes/cluster/virtual-mcp11-k8s-calico/infra/init.yml
index a5d2d26..a55f484 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico/infra/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico/infra/init.yml
@@ -32,7 +32,7 @@
       resolv:
         dns:
           - 172.18.176.4
-          - 172.18.176.7
+          - 172.18.208.44
       host:
         cfg01:
           address: ${_param:infra_config_address}
diff --git a/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/compute.yml b/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/compute.yml
index 77ed2f5..5263ff6 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/compute.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/compute.yml
@@ -31,8 +31,6 @@
       resolv:
         dns:
           - 10.254.0.10
-          - 172.18.176.4
-          - 172.18.176.7
       interface:
         ens4:
           route:
diff --git a/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/init.yml b/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/init.yml
index 7f929d7..58860fa 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico/kubernetes/init.yml
@@ -24,8 +24,9 @@
     kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
     kubernetes_calico_policy_image: calico/kube-policy-controller:v0.5.4
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
-    kubernetes_netchecker_agent_image: quay.io/l23network/k8s-netchecker-agent:v1.0
-    kubernetes_netchecker_server_image: quay.io/l23network/k8s-netchecker-server:v1.0
+    kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:v1.1.0
+    kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:v1.1.0
+    kubernetes_netchecker_agent_probeurls: "http://ipinfo.io"
 
     # switches of addons
     kubernetes_helm_enabled: true
diff --git a/classes/cluster/virtual-mcp11-k8s-calico/stacklight/proxy.yml b/classes/cluster/virtual-mcp11-k8s-calico/stacklight/proxy.yml
index 49c16f0..1433a95 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico/stacklight/proxy.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico/stacklight/proxy.yml
@@ -1,6 +1,7 @@
 classes:
 - system.nginx.server.single
 - system.nginx.server.proxy.stacklight.grafana
+- system.nginx.server.proxy.stacklight.kibana
 - system.nginx.server.proxy.monitoring.prometheus_server
 - system.nginx.server.proxy.monitoring.prometheus_alertmanager
 - system.salt.minion.cert.proxy
diff --git a/classes/cluster/virtual-mcp11-k8s-calico/stacklight/server.yml b/classes/cluster/virtual-mcp11-k8s-calico/stacklight/server.yml
index 4de8d96..83a5a6e 100644
--- a/classes/cluster/virtual-mcp11-k8s-calico/stacklight/server.yml
+++ b/classes/cluster/virtual-mcp11-k8s-calico/stacklight/server.yml
@@ -34,11 +34,11 @@
   _param:
     cluster_vip_address: ${_param:stacklight_monitor_address}
     cluster_public_host: mon
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
     docker_image_grafana: grafana/grafana:4.3.2
     grafana_admin_password: admin
     keepalived_prometheus_vip_address: ${_param:cluster_vip_address}
@@ -66,6 +66,10 @@
     prometheus_influxdb_db: lma
     prometheus_influxdb_username: lma
     prometheus_influxdb_password: ${_param:influxdb_stacklight_password}
+  elasticsearch:
+    server:
+      heap:
+        size: 1
   keepalived:
     cluster:
       instance:
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/infra/config.yml b/classes/cluster/virtual-mcp11-k8s-contrail/infra/config.yml
index 4fd9100..b6e8f4a 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/infra/config.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/infra/config.yml
@@ -19,6 +19,15 @@
     linux_system_codename: xenial
     salt_api_password_hash: "$6$WV0P1shnoDh2gI/Z$22/Bcd7ffMv0jDlFpT63cAU4PiXHz9pjXwngToKwqAsgoeK4HNR3PiKaushjxp3JsQ8hNoJmAC6TxzVqfV8WH/"
     salt_master_host: ${_param:infra_config_deploy_address}
+  linux:
+    network:
+      interface:
+        ens4:
+          enabled: true
+          type: eth
+          proto: static
+          address: ${_param:single_address}
+          netmask: 255.255.255.0
   reclass:
     storage:
       node:
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/infra/init.yml b/classes/cluster/virtual-mcp11-k8s-contrail/infra/init.yml
index 092165c..5ffacc2 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/infra/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/infra/init.yml
@@ -36,13 +36,6 @@
           names:
           - ${_param:infra_config_hostname}
           - ${_param:infra_config_hostname}.${_param:cluster_domain}
-      interface:
-        ens4:
-          enabled: true
-          type: eth
-          proto: static
-          address: ${_param:single_address}
-          netmask: 255.255.255.0
     system:
       name: ${_param:infra_config_hostname}
       domain: ${_param:cluster_domain}
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/compute.yml b/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/compute.yml
index d9f03d1..728b82e 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/compute.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/compute.yml
@@ -35,7 +35,7 @@
         engine: opencontrail
         config:
           api:
-            address: ${_param:opencontrail_control_address}
+            host: ${_param:opencontrail_control_address}
         etcd:
           ssl:
             enabled: true
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/control.yml b/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/control.yml
index ed10734..00c9266 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/control.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/control.yml
@@ -36,6 +36,8 @@
         netchecker:
           enabled: ${_param:kubernetes_netchecker_enabled}
       addons:
+        dashboard:
+          enabled: false
         helm:
           enabled: ${_param:kubernetes_helm_enabled}
         netchecker:
@@ -48,9 +50,11 @@
           hosts:
           - ${_param:kubernetes_compute_node01_hostname}
           - ${_param:kubernetes_compute_node02_hostname}
-          image: ${_param:kubernetes_netchecker_server_image}
-        kube_network_manager:
-          enabled: ${_param:kubernetes_virtlet_image}
+          image: ${_param:kubernetes_virtlet_image}
+        contrail_network_controller:
+          namespace: kube-system
+          enabled: true
+          image: ${_param:kubernetes_contrail_network_controller_image}
       network:
         engine: opencontrail
         public_ip_range: 185.22.97.128/26
@@ -58,4 +62,4 @@
         private_ip_range: 10.150.0.0/16
         config:
           api:
-            address: ${_param:opencontrail_control_address}
+            host: ${_param:opencontrail_control_address}
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/init.yml b/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/init.yml
index a5e197f..5a5a26d 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/init.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/kubernetes/init.yml
@@ -24,16 +24,17 @@
     kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
     kubernetes_calico_policy_image: calico/kube-policy-controller:v0.5.4
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
-    kubernetes_netchecker_agent_image: quay.io/l23network/k8s-netchecker-agent:v1.0
-    kubernetes_netchecker_server_image: quay.io/l23network/k8s-netchecker-server:v1.0
     kubernetes_virtlet_image: mirantis/virtlet:latest
+    kubernetes_netchecker_agent_image: mirantis/k8s-netchecker-agent:v1.1.0
+    kubernetes_netchecker_server_image: mirantis/k8s-netchecker-server:v1.1.0
+    kubernetes_netchecker_agent_probeurls: "http://ipinfo.io"
+    kubernetes_virtlet_image: mirantis/virtlet:v0.7.0
 
     # switches of addons
     kubernetes_helm_enabled: true
     kubernetes_netchecker_enabled: true
     kubernetes_calico_policy_enabled: false
     kubernetes_virtlet_enabled: false
-    kubernetes_kube_network_manager_enabled: true
 
     # addresses and hostnames
     kubernetes_internal_api_address: 10.254.0.1
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/compute.yml b/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/compute.yml
index 0eec1b0..712dc36 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/compute.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/compute.yml
@@ -3,6 +3,7 @@
 - system.opencontrail.compute.cluster
 - system.opencontrail.client.cluster
 - system.opencontrail.client.resource.virtual_router
+- system.opencontrail.client.resource.k8s_api
 parameters:
   _param:
     opencontrail_compute_address: ${_param:single_address}
@@ -23,3 +24,8 @@
     pool:
       network:
         hash: ${_param:opencontrail_network_hash}
+  linux:
+    network:
+      concat_iface_files:
+      - src: '/etc/network/interfaces.d/50-cloud-init.cfg'
+        dst: '/etc/network/interfaces'
\ No newline at end of file
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/control.yml b/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/control.yml
index 0fdeb1d..35cead0 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/control.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/opencontrail/control.yml
@@ -14,6 +14,7 @@
 - system.opencontrail.client.resource.database_node
 - system.opencontrail.client.resource.analytics_node
 - system.haproxy.proxy.listen.opencontrail.analytics
+- system.prometheus.exporters.jmx
 - cluster.virtual-mcp11-k8s-contrail.infra
 parameters:
   _param:
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/proxy.yml b/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/proxy.yml
index 5c6a269..52b8fbf 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/proxy.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/proxy.yml
@@ -1,6 +1,7 @@
 classes:
 - system.nginx.server.single
 - system.nginx.server.proxy.stacklight.grafana
+- system.nginx.server.proxy.stacklight.kibana
 - system.nginx.server.proxy.monitoring.prometheus_server
 - system.nginx.server.proxy.monitoring.prometheus_alertmanager
 - system.salt.minion.cert.proxy
diff --git a/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/server.yml b/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/server.yml
index 33033d9..a637712 100644
--- a/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/server.yml
+++ b/classes/cluster/virtual-mcp11-k8s-contrail/stacklight/server.yml
@@ -34,11 +34,11 @@
   _param:
     cluster_public_host: mon
     cluster_vip_address: ${_param:stacklight_monitor_address}
-    docker_image_alertmanager: mirantis/alertmanager:latest
-    docker_image_pushgateway: mirantis/pushgateway:latest
-    docker_image_prometheus: mirantis/prometheus:latest
-    docker_image_remote_agent: mirantis/telegraf:latest
-    docker_image_remote_storage_adapter: mirantis/remote_storage_adapter:latest
+    docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:latest
+    docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:latest
+    docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:latest
+    docker_image_remote_agent: docker-prod-virtual.docker.mirantis.net/openstack-docker/telegraf:latest
+    docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:latest
     docker_image_grafana: grafana/grafana:4.3.2
     grafana_admin_password: admin
     keepalived_prometheus_vip_address: ${_param:cluster_vip_address}
@@ -66,6 +66,10 @@
     prometheus_influxdb_db: lma
     prometheus_influxdb_username: lma
     prometheus_influxdb_password: ${_param:influxdb_stacklight_password}
+  elasticsearch:
+    server:
+      heap:
+        size: 1
   keepalived:
     cluster:
       instance:
diff --git a/classes/system b/classes/system
index deebb6d..dacd875 160000
--- a/classes/system
+++ b/classes/system
@@ -1 +1 @@
-Subproject commit deebb6debf38c2a2df15581dbd364e5c827d1c76
+Subproject commit dacd875b680823c435cf78330fe6322d50ffadd4
diff --git a/scripts/bootstrap_all.sh b/scripts/bootstrap_all.sh
index 4e4d248..445464e 100755
--- a/scripts/bootstrap_all.sh
+++ b/scripts/bootstrap_all.sh
@@ -16,9 +16,6 @@
 if [[ "$K8S_BOOTSTRAP" == "true" ]]; then
     "$CWD"/kubernetes_install.sh
 fi
-if [[ "$STACKLIGHTV2_BOOTSTRAP" == "true" ]]; then
-    "$CWD"/stacklightv2_infra_install.sh
-fi
 if [[ "$OPENSTACK_BOOTSTRAP" == "true" ]]; then
     "$CWD"/openstack_control_install.sh
     "$CWD"/stacklight_infra_install.sh
@@ -30,3 +27,6 @@
     fi
     "$CWD"/stacklight_monitor_install.sh
 fi
+if [[ "$STACKLIGHTV2_BOOTSTRAP" == "true" ]]; then
+    "$CWD"/stacklightv2_infra_install.sh
+fi
diff --git a/scripts/stacklightv2_infra_install.sh b/scripts/stacklightv2_infra_install.sh
index 08cb962..8ce538a 100755
--- a/scripts/stacklightv2_infra_install.sh
+++ b/scripts/stacklightv2_infra_install.sh
@@ -14,14 +14,14 @@
 INFLUXDB_SERVICE=$(salt -C 'I@influxdb:server' test.ping 1>/dev/null 2>&1 && echo true)
 
 # Configure Telegraf
-salt -C 'I@telegraf:agent' state.sls telegraf
+salt -C 'I@telegraf:agent or I@telegraf:remote_agent' state.sls telegraf
+
+# Configure log_collector
+salt -C 'I@heka:log_collector' state.sls heka.log_collector
 
 # Configure Elasticsearch/Kibana services
 salt -C 'I@elasticsearch:server' state.sls elasticsearch.server -b 1
 salt -C 'I@kibana:server' state.sls kibana.server -b 1
-salt -C 'I@elasticsearch:client' state.sls elasticsearch.client.service
-salt -C 'I@elasticsearch:client' --async service.restart salt-minion
-sleep 10
 salt -C 'I@elasticsearch:client' state.sls elasticsearch.client
 salt -C 'I@kibana:client' state.sls kibana.client
 
@@ -35,16 +35,14 @@
 salt -C 'I@salt:minion' mine.update
 sleep 5
 
-# Configure the services running in Docker Swarm
-salt -C 'I@docker:swarm' state.sls prometheus.server,prometheus.alertmanager -b 1
-for img in pushgateway alertmanager prometheus telegraf remote_storage_adapter; do
-    salt -C 'I@docker:swarm' dockerng.pull "docker-sandbox.sandbox.mirantis.net/bkupidura/$img"
-    salt -C 'I@docker:swarm' dockerng.tag "docker-sandbox.sandbox.mirantis.net/bkupidura/$img:latest" "mirantis/$img:latest"
-done
+# Generate the configuration for services running in Docker Swarm
+salt -C 'I@docker:swarm' state.sls prometheus,heka.remote_collector -b 1
+
+# Kick off the services in Docker Swarm
 salt -C 'I@docker:swarm:role:master' state.sls docker
 salt -C 'I@docker:swarm' dockerng.ps
 
-# Configure Grafana dashboards and datasources
+# Configure the Grafana dashboards and datasources
 stacklight_vip=$(get_param_value stacklight_monitor_address)
 wait_for_http_service "http://${stacklight_vip}:15013/"
 salt -C 'I@grafana:client' state.sls grafana.client