Merge "Define auth/db settings of tacker service"
diff --git a/.gitignore b/.gitignore
index 485dee6..ae8e990 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 .idea
+.*.swp
diff --git a/.releasenotes/notes/kqueen-port-change-8b34593966336e27.yaml b/.releasenotes/notes/kqueen-port-change-8b34593966336e27.yaml
new file mode 100644
index 0000000..1021b5e
--- /dev/null
+++ b/.releasenotes/notes/kqueen-port-change-8b34593966336e27.yaml
@@ -0,0 +1,14 @@
+---
+
+summary: >
+  Changed default port for KQueen API service.
+
+upgrades:
+
+  .. code-block:: yaml
+
+     -    haproxy_kqueen_api_exposed_port: 15000
+     +    haproxy_kqueen_api_exposed_port: 15001
+
+fixes:
+  - https://mirantis.jira.com/browse/PROD-19571
diff --git a/.releasenotes/notes/prometheus-2.0-2a7b3bc4ad76e118.yaml b/.releasenotes/notes/prometheus-2.0-2a7b3bc4ad76e118.yaml
index af017f5..bb62760 100644
--- a/.releasenotes/notes/prometheus-2.0-2a7b3bc4ad76e118.yaml
+++ b/.releasenotes/notes/prometheus-2.0-2a7b3bc4ad76e118.yaml
@@ -25,10 +25,10 @@
     .. code-block:: yaml
 
        _param:
-         docker_image_alertmanager: docker-prod-virtual.docker.mirantis.net/openstack-docker/alertmanager:20171222124606
-         docker_image_pushgateway: docker-prod-virtual.docker.mirantis.net/openstack-docker/pushgateway:20171222124606
-         docker_image_prometheus: docker-prod-virtual.docker.mirantis.net/openstack-docker/prometheus:20171222124606
-         docker_image_remote_storage_adapter: docker-prod-virtual.docker.mirantis.net/openstack-docker/remote_storage_adapter:20171222124606
+         docker_image_alertmanager: docker-prod-local.artifactory.mirantis.com/openstack-docker/alertmanager:20171222124606
+         docker_image_pushgateway: docker-prod-local.artifactory.mirantis.com/openstack-docker/pushgateway:20171222124606
+         docker_image_prometheus: docker-prod-local.artifactory.mirantis.com/openstack-docker/prometheus:20171222124606
+         docker_image_remote_storage_adapter: docker-prod-local.artifactory.mirantis.com/openstack-docker/remote_storage_adapter:20171222124606
        docker:
          client:
            stack:
diff --git a/aodh/server/cluster.yml b/aodh/server/cluster.yml
index 00a8263..91ebe12 100644
--- a/aodh/server/cluster.yml
+++ b/aodh/server/cluster.yml
@@ -4,6 +4,8 @@
 - system.haproxy.proxy.listen.openstack.aodh
 - system.keepalived.cluster.instance.openstack_telemetry_vip
 parameters:
+  _param:
+    openstack_event_alarm_topic: alarm.all
   aodh:
     server:
       enabled: true
@@ -13,8 +15,9 @@
       debug: false
       verbose: true
       region: ${_param:openstack_region}
+      event_alarm_topic: ${_param:openstack_event_alarm_topic}
       database:
-        engine: "mysql+pymysql"
+        engine: "mysql"
         host: ${_param:openstack_database_address}
         port: 3306
         name: aodh
@@ -30,6 +33,7 @@
         tenant: service
         user: aodh
         password: ${_param:keystone_aodh_password}
+        region: ${_param:openstack_region}
       message_queue:
         engine: rabbitmq
         port: 5672
diff --git a/aodh/server/single.yml b/aodh/server/single.yml
index eba3fc1..6eec70e 100644
--- a/aodh/server/single.yml
+++ b/aodh/server/single.yml
@@ -1,2 +1,11 @@
 classes:
 - service.aodh.server.single
+parameters:
+  _param:
+    openstack_event_alarm_topic: alarm.all
+  aodh:
+    server:
+      region: ${_param:openstack_region}
+      event_alarm_topic: ${_param:openstack_event_alarm_topic}
+      identity:
+        region: ${_param:openstack_region}
diff --git a/aptly/server/single.yml b/aptly/server/single.yml
index e8da341..9f2d401 100644
--- a/aptly/server/single.yml
+++ b/aptly/server/single.yml
@@ -8,47 +8,6 @@
     aptly_server_secure: true
     aptly_server_mirror_sources: false
     aptly_server_mirror_ubuntu_sources: ${_param:aptly_server_mirror_sources}
-  iptables:
-    service:
-      enabled: true
-      chain:
-        INPUT:
-          rules:
-            # Only local network can access WebDav and aptly API
-            - destination_port: 8088
-              protocol: tcp
-              source_network: 10.0.107.0/24
-              jump: ACCEPT
-            - destination_port: 8088
-              protocol: tcp
-              source_network: 185.22.96.0/22
-              jump: ACCEPT
-            - destination_port: 8088
-              protocol: tcp
-              source_network: 10.0.174.0/23
-              jump: ACCEPT
-            - destination_port: 8088
-              protocol: tcp
-              source_network: 10.0.175.0/23
-              jump: ACCEPT
-            - destination_port: 8088
-              protocol: tcp
-              jump: DROP
-            - destination_port: 8081
-              protocol: tcp
-              source_network: 10.0.107.0/24
-              jump: ACCEPT
-            - destination_port: 8081
-              protocol: tcp
-              source_network: 10.0.174.0/23
-              jump: ACCEPT
-            - destination_port: 8081
-              protocol: tcp
-              source_network: 10.0.175.0/23
-              jump: ACCEPT
-            - destination_port: 8081
-              protocol: tcp
-              jump: DROP
   nginx:
     server:
       site:
diff --git a/auditd/server/ciscat.yml b/auditd/server/ciscat.yml
new file mode 100644
index 0000000..dc4baa7
--- /dev/null
+++ b/auditd/server/ciscat.yml
@@ -0,0 +1,3 @@
+classes:
+- service.auditd.server
+- service.auditd.rules.ciscat
diff --git a/barbican/server/cluster.yml b/barbican/server/cluster.yml
index ed45b47..d8b570c 100644
--- a/barbican/server/cluster.yml
+++ b/barbican/server/cluster.yml
@@ -6,5 +6,6 @@
     cluster_internal_protocol: 'http'
   barbican:
     server:
+      role: ${_param:openstack_node_role}
       identity:
         protocol: ${_param:cluster_internal_protocol}
diff --git a/barbican/server/single.yml b/barbican/server/single.yml
index aab0b18..b115e79 100644
--- a/barbican/server/single.yml
+++ b/barbican/server/single.yml
@@ -5,5 +5,6 @@
     internal_protocol: 'http'
   barbican:
     server:
+      role: ${_param:openstack_node_role}
       identity:
         protocol: ${_param:internal_protocol}
diff --git a/billometer/server/single.yml b/billometer/server/single.yml
index be13be2..8152202 100644
--- a/billometer/server/single.yml
+++ b/billometer/server/single.yml
@@ -22,7 +22,7 @@
       database:
         billometer:
           encoding: UTF8
-          locale: cs_CZ
+          locale: en_US
           users:
           - name: billometer
             createdb: true
diff --git a/ceilometer/agent/cluster.yml b/ceilometer/agent/cluster.yml
index 135dbe8..a598ee5 100644
--- a/ceilometer/agent/cluster.yml
+++ b/ceilometer/agent/cluster.yml
@@ -14,6 +14,7 @@
         tenant: service
         user: ceilometer
         password: ${_param:keystone_ceilometer_password}
+        region: ${_param:openstack_region}
       message_queue:
         engine: rabbitmq
         members:
@@ -24,7 +25,6 @@
         password: ${_param:rabbitmq_openstack_password}
         virtual_host: '/openstack'
         ha_queues: true
-        rpc_thread_pool_size: 5
   nova:
     compute:
       notification:
diff --git a/ceilometer/agent/telemetry/cluster.yml b/ceilometer/agent/telemetry/cluster.yml
new file mode 100644
index 0000000..bc67493
--- /dev/null
+++ b/ceilometer/agent/telemetry/cluster.yml
@@ -0,0 +1,31 @@
+classes:
+- service.ceilometer.agent.cluster.common
+parameters:
+  ceilometer:
+    agent:
+      region: ${_param:openstack_region}
+      enabled: true
+      version: ${_param:ceilometer_version}
+      secret: ${_param:ceilometer_secret_key}
+      identity:
+        engine: keystone
+        host: ${_param:keystone_service_host}
+        port: 35357
+        tenant: service
+        user: ceilometer
+        password: ${_param:keystone_ceilometer_password}
+        region: ${_param:openstack_region}
+      message_queue:
+        engine: rabbitmq
+        members:
+          - host: ${_param:openstack_message_queue_node01_address}
+          - host: ${_param:openstack_message_queue_node02_address}
+          - host: ${_param:openstack_message_queue_node03_address}
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+        ha_queues: true
+  nova:
+    compute:
+      notification:
+        driver: messagingv2
diff --git a/ceilometer/agent/telemetry/single.yml b/ceilometer/agent/telemetry/single.yml
new file mode 100644
index 0000000..6b42537
--- /dev/null
+++ b/ceilometer/agent/telemetry/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.ceilometer.agent.single.common
diff --git a/ceilometer/server/backend/default.yml b/ceilometer/server/backend/default.yml
index 542314c..071e4a1 100644
--- a/ceilometer/server/backend/default.yml
+++ b/ceilometer/server/backend/default.yml
@@ -2,6 +2,8 @@
 - service.ceilometer.server.publisher.gnocchi
 - service.ceilometer.server.publisher.panko
 parameters:
+  _param:
+    openstack_event_alarm_topic: alarm.all
   # gnocchi and panko are default backends for Ceilometer since Pike
   # they are incompatible with any legacy database publisher backends
   ceilometer:
@@ -12,3 +14,7 @@
       publisher:
         default:
           enabled: false
+        event_alarm_notifier:
+          enabled: true
+          url: "notifier://?topic=${_param:openstack_event_alarm_topic}"
+          publish_event: true
diff --git a/ceilometer/server/backend/gnocchi.yml b/ceilometer/server/backend/gnocchi.yml
new file mode 100644
index 0000000..723d58c
--- /dev/null
+++ b/ceilometer/server/backend/gnocchi.yml
@@ -0,0 +1,24 @@
+classes:
+- service.ceilometer.server.publisher.panko
+parameters:
+  _param:
+    openstack_event_alarm_topic: alarm.all
+    ceilometer_create_gnocchi_resources: false
+    ceilometer_gnocchi_filter_project: service
+  # gnocchi and panko are default backends for Ceilometer since Pike
+  # they are incompatible with any legacy database publisher backends
+  ceilometer:
+    server:
+      publisher:
+        gnocchi:
+          enabled: true
+          url: "gnocchi://?filter_project=${_param:ceilometer_gnocchi_filter_project}"
+          publish_metric: true
+          # filter_project is deprecated since queens
+          filter_project: ${_param:ceilometer_gnocchi_filter_project}
+          create_resources: ${_param:ceilometer_create_gnocchi_resources}
+          request_timeout: 30
+        event_alarm_notifier:
+          enabled: true
+          url: "notifier://?topic=${_param:openstack_event_alarm_topic}"
+          publish_event: true
diff --git a/ceilometer/server/cluster.yml b/ceilometer/server/cluster.yml
index 6f8d3f8..ad804f8 100644
--- a/ceilometer/server/cluster.yml
+++ b/ceilometer/server/cluster.yml
@@ -1,3 +1,4 @@
+# This class is deprecated since Openstack Pike
 classes:
 - service.ceilometer.server.cluster
 - service.haproxy.proxy.single
@@ -12,6 +13,10 @@
       cluster: true
       secret: ${_param:ceilometer_secret_key}
       ttl: 86400
+      role: ${_param:openstack_node_role}
+      notification:
+        workload_partitioning: true
+        batch_timeout: 30
       publisher:
         default: {}
       bind:
@@ -24,6 +29,7 @@
         tenant: service
         user: ceilometer
         password: ${_param:keystone_ceilometer_password}
+        region: ${_param:openstack_region}
       message_queue:
         engine: rabbitmq
         members:
@@ -33,5 +39,3 @@
         user: openstack
         password: ${_param:rabbitmq_openstack_password}
         virtual_host: '/openstack'
-        # Workaround for https://bugs.launchpad.net/ceilometer/+bug/1337715
-        rpc_thread_pool_size: 5
diff --git a/ceilometer/server/single.yml b/ceilometer/server/single.yml
index 9758af2..ae642f1 100644
--- a/ceilometer/server/single.yml
+++ b/ceilometer/server/single.yml
@@ -3,6 +3,7 @@
 parameters:
   ceilometer:
     server:
+      role: ${_param:openstack_node_role}
       database:
         influxdb:
           host: ${_param:stacklight_monitor_node01_address}
diff --git a/ceilometer/server/telemetry/cluster.yml b/ceilometer/server/telemetry/cluster.yml
new file mode 100644
index 0000000..d1c28ef
--- /dev/null
+++ b/ceilometer/server/telemetry/cluster.yml
@@ -0,0 +1,36 @@
+# This class intended to be used since Openstack Pike release
+classes:
+- service.ceilometer.server.cluster.common
+- system.keepalived.cluster.instance.openstack_telemetry_vip
+parameters:
+  ceilometer:
+    server:
+      enabled: true
+      version: ${_param:ceilometer_version}
+      region: ${_param:openstack_region}
+      cluster: true
+      secret: ${_param:ceilometer_secret_key}
+      ttl: 86400
+      notification:
+        workload_partitioning: true
+        batch_timeout: 30
+      bind:
+        host: ${_param:cluster_local_address}
+        port: 8777
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        tenant: service
+        user: ceilometer
+        password: ${_param:keystone_ceilometer_password}
+        region: ${_param:openstack_region}
+      message_queue:
+        engine: rabbitmq
+        members:
+          - host: ${_param:openstack_message_queue_node01_address}
+          - host: ${_param:openstack_message_queue_node02_address}
+          - host: ${_param:openstack_message_queue_node03_address}
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
diff --git a/ceilometer/server/telemetry/single.yml b/ceilometer/server/telemetry/single.yml
new file mode 100644
index 0000000..7a98b73
--- /dev/null
+++ b/ceilometer/server/telemetry/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.ceilometer.server.single.common
diff --git a/cinder/control/cluster.yml b/cinder/control/cluster.yml
index 1110c63..b5d6862 100644
--- a/cinder/control/cluster.yml
+++ b/cinder/control/cluster.yml
@@ -25,6 +25,7 @@
       default_volume_type: ""
       backend: {}
       version: ${_param:cinder_version}
+      role: ${_param:openstack_node_role}
       osapi:
         host: ${_param:cluster_local_address}
       database:
diff --git a/cinder/control/single.yml b/cinder/control/single.yml
index 66aea6d..89c5307 100644
--- a/cinder/control/single.yml
+++ b/cinder/control/single.yml
@@ -15,8 +15,10 @@
     controller:
       backend: {}
       default_volume_type: ''
+      role: ${_param:openstack_node_role}
       database:
         host: ${_param:single_address}
       identity:
         protocol: ${_param:internal_protocol}
+        region: ${_param:openstack_region}
 
diff --git a/cinder/volume/local.yml b/cinder/volume/local.yml
index 794a33e..d03d6f7 100644
--- a/cinder/volume/local.yml
+++ b/cinder/volume/local.yml
@@ -12,3 +12,4 @@
         host: ${_param:single_address}
       identity:
         host: ${_param:single_address}
+        region: ${_param:openstack_region}
diff --git a/cinder/volume/single.yml b/cinder/volume/single.yml
index 1b9948d..f66a190 100644
--- a/cinder/volume/single.yml
+++ b/cinder/volume/single.yml
@@ -16,6 +16,7 @@
         host: ${_param:openstack_database_address}
       glance:
         host: ${_param:openstack_control_address}
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         members:
           - host: ${_param:openstack_message_queue_node01_address}
@@ -24,3 +25,4 @@
       identity:
         host: ${_param:openstack_control_address}
         protocol: ${_param:cluster_internal_protocol}
+        region: ${_param:openstack_region}
diff --git a/debmirror/mirror_mirantis_com/glusterfs-3.8/xenial.yml b/debmirror/mirror_mirantis_com/glusterfs-3.8/xenial.yml
new file mode 100644
index 0000000..7c93811
--- /dev/null
+++ b/debmirror/mirror_mirantis_com/glusterfs-3.8/xenial.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    apt_mk_version: 'stable'
+    mirror_mirantis_com_glusterfs_3_8_xenial_force: False
+    debmirror_mirrors_base_target_dir: "/srv/volumes/aptly/public/${_param:apt_mk_version}/"
+  debmirror:
+    client:
+      enabled: true
+      mirrors:
+        mirror_mirantis_com_glusterfs_3_8_xenial:
+          force: ${_param:mirror_mirantis_com_glusterfs_3_8_xenial_force}
+          lock_target: True
+          extra_flags: [ '--verbose', '--progress', '--nosource', '--no-check-gpg', '--rsync-extra=none' ]
+          method: "rsync"
+          arch: [ 'amd64' ]
+          mirror_host: "mirror.mirantis.com"
+          mirror_root: ":mirror/${_param:apt_mk_version}/glusterfs-3.8/xenial/"
+          target_dir: "${_param:debmirror_mirrors_base_target_dir}/glusterfs-3.8/xenial/"
+          log_file: "/var/log/debmirror/mirror_mirantis_com_glusterfs_3_8_xenial.log"
+          dist: [ xenial ]
+          section: [ main ]
+          filter:
+            001: "--exclude='-dbg_'"
diff --git a/debmirror/mirror_mirantis_com/maas/xenial.yml b/debmirror/mirror_mirantis_com/maas/xenial.yml
new file mode 100644
index 0000000..3204fd0
--- /dev/null
+++ b/debmirror/mirror_mirantis_com/maas/xenial.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    apt_mk_version: 'stable'
+    mirror_mirantis_com_maas_xenial_force: False
+    debmirror_mirrors_base_target_dir: "/srv/volumes/aptly/public/${_param:apt_mk_version}/"
+  debmirror:
+    client:
+      enabled: true
+      mirrors:
+        mirror_mirantis_com_maas_xenial:
+          force: ${_param:mirror_mirantis_com_maas_xenial_force}
+          lock_target: True
+          extra_flags: [ '--verbose', '--progress', '--nosource', '--no-check-gpg', '--rsync-extra=none' ]
+          method: "rsync"
+          arch: [ 'amd64' ]
+          mirror_host: "mirror.mirantis.com"
+          mirror_root: ":mirror/${_param:apt_mk_version}/maas/xenial/"
+          target_dir: "${_param:debmirror_mirrors_base_target_dir}/maas/xenial/"
+          log_file: "/var/log/debmirror/mirror_mirantis_com_maas_xenial.log"
+          dist: [ xenial ]
+          section: [ main ]
diff --git a/debmirror/mirror_mirantis_com/saltstack-2016.3/xenial.yml b/debmirror/mirror_mirantis_com/saltstack-2016.3/xenial.yml
new file mode 100644
index 0000000..cec7c95
--- /dev/null
+++ b/debmirror/mirror_mirantis_com/saltstack-2016.3/xenial.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    apt_mk_version: 'stable'
+    mirror_mirantis_com_saltstack_2016_3_xenial_force: False
+    debmirror_mirrors_base_target_dir: "/srv/volumes/aptly/public/${_param:apt_mk_version}/"
+  debmirror:
+    client:
+      enabled: true
+      mirrors:
+        mirror_mirantis_com_saltstack_2016_3_xenial:
+          force: ${_param:mirror_mirantis_com_saltstack_2016_3_xenial_force}
+          lock_target: True
+          extra_flags: [ '--verbose', '--progress', '--nosource', '--no-check-gpg', '--rsync-extra=none' ]
+          method: "rsync"
+          arch: [ 'amd64' ]
+          mirror_host: "mirror.mirantis.com"
+          mirror_root: ":mirror/${_param:apt_mk_version}/saltstack-2016.3/xenial/"
+          target_dir: "${_param:debmirror_mirrors_base_target_dir}/saltstack-2016.3/xenial/"
+          log_file: "/var/log/debmirror/mirror_mirantis_com_saltstack_2016_3_xenial.log"
+          dist: [ xenial ]
+          section: [ main ]
diff --git a/debmirror/mirror_mirantis_com/saltstack-2017.7/xenial.yml b/debmirror/mirror_mirantis_com/saltstack-2017.7/xenial.yml
new file mode 100644
index 0000000..542afea
--- /dev/null
+++ b/debmirror/mirror_mirantis_com/saltstack-2017.7/xenial.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    apt_mk_version: 'stable'
+    mirror_mirantis_com_saltstack_2017_7_xenial_force: False
+    debmirror_mirrors_base_target_dir: "/srv/volumes/aptly/public/${_param:apt_mk_version}/"
+  debmirror:
+    client:
+      enabled: true
+      mirrors:
+        mirror_mirantis_com_saltstack_2017_7_xenial:
+          force: ${_param:mirror_mirantis_com_saltstack_2017_7_xenial_force}
+          lock_target: True
+          extra_flags: [ '--verbose', '--progress', '--nosource', '--no-check-gpg', '--rsync-extra=none' ]
+          method: "rsync"
+          arch: [ 'amd64' ]
+          mirror_host: "mirror.mirantis.com"
+          mirror_root: ":mirror/${_param:apt_mk_version}/saltstack-2017.7/xenial/"
+          target_dir: "${_param:debmirror_mirrors_base_target_dir}/saltstack-2017.7/xenial/"
+          log_file: "/var/log/debmirror/mirror_mirantis_com_saltstack_2017_7_xenial.log"
+          dist: [ xenial ]
+          section: [ main ]
diff --git a/debmirror/mirror_mirantis_com/ubuntu/xenial.yml b/debmirror/mirror_mirantis_com/ubuntu/xenial.yml
index 6a38787..d869e94 100644
--- a/debmirror/mirror_mirantis_com/ubuntu/xenial.yml
+++ b/debmirror/mirror_mirantis_com/ubuntu/xenial.yml
@@ -2,6 +2,7 @@
   _param:
     apt_mk_version: 'stable'
     mirror_mirantis_com_ubuntu_xenial_force: False
+    debmirror_mirrors_base_target_dir: "/srv/volumes/aptly/public/${_param:apt_mk_version}/"
   debmirror:
     client:
       enabled: true
@@ -15,10 +16,10 @@
           arch: [ 'amd64' ]
           mirror_host: "mirror.mirantis.com"
           mirror_root: ":mirror/${_param:apt_mk_version}/ubuntu/"
-          target_dir: "/srv/volumes/aptly/public/ubuntu/"
+          target_dir: "${_param:debmirror_mirrors_base_target_dir}/ubuntu/"
           log_file: "/var/log/debmirror/mirror_mirantis_com_ubuntu_xenial.log"
           dist: [ xenial , xenial-security, xenial-updates ]
-          section: [ main , multiverse, restricted, universe ]
+          section: [ main , restricted, universe ]
           # Don't exclude main/x11 - its required for many pkgs.
           exclude_deb_section:
           - games
@@ -135,6 +136,12 @@
             301: "--exclude='(main|universe)/l/linux-*-(.*azure|.*aws|gke|.*azure-edge|.*oem/|.*euclid/)'"
             302: "--exclude='/*universe.*(-armel-|-arm-)(?!.*amd64)'"
             303: "--exclude='/main/l/linux(.*)/linux-source-*'"
+            # Generic: Old minor version of kernels. Old - if minor less then 3 digits.
+            304: '--exclude="main/l/(linux|linux-signed)/linux-.*.4\.4\.0-[0-9]{1,2}\."'
+            # Hwe 4.8: Old minor version of kernels. Old - if minor in 30-40.
+            305: '--exclude="main/l/.*hwe.*/linux-.*.4\.8\.0-((3|4)[0-9])"'
+            # Hwe 4.10: Old minor version of kernels. Old - if minor in 20-30.
+            306: '--exclude="main/l/.*hwe.*/linux-.*.4\.10\.0-((2|3)[0-9])"'
             # List of packages, that should be fetched from fresh ppa or other mirror
             # So,removing them from upstream mirror.
             500: "--exclude='/main/m/maas/'"
diff --git a/designate/server/cluster.yml b/designate/server/cluster.yml
index afbb7df..f60f883 100644
--- a/designate/server/cluster.yml
+++ b/designate/server/cluster.yml
@@ -23,6 +23,7 @@
       region: ${_param:openstack_region}
       domain_id: ${_param:designate_domain_id}
       version: ${_param:designate_version}
+      role: ${_param:openstack_node_role}
       admin_api:
         enabled: ${_param:designate_admin_api_enabled}
         enabled_extensions_admin: quotas
diff --git a/designate/server/single.yml b/designate/server/single.yml
index 3fdd448..683180e 100644
--- a/designate/server/single.yml
+++ b/designate/server/single.yml
@@ -17,6 +17,7 @@
       region: ${_param:openstack_region}
       domain_id: ${_param:designate_domain_id}
       version: ${_param:designate_version}
+      role: ${_param:openstack_node_role}
       admin_api:
         enabled: ${_param:designate_admin_api_enabled}
         enabled_extensions_admin: quotas
diff --git a/docker/swarm/network/keycloak_backend.yml b/docker/swarm/network/keycloak_backend.yml
new file mode 100644
index 0000000..5b1c625
--- /dev/null
+++ b/docker/swarm/network/keycloak_backend.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    docker_keycloak_network_subnet: 10.70.0.0/24
+  docker:
+    client:
+      network:
+        keycloak_backend:
+          subnet: ${_param:docker_keycloak_network_subnet}
+          driver: overlay
+          attachable: true
+
diff --git a/docker/swarm/stack/jenkins/slave.yml b/docker/swarm/stack/jenkins/slave.yml
index 42a0031..e6ed298 100644
--- a/docker/swarm/stack/jenkins/slave.yml
+++ b/docker/swarm/stack/jenkins/slave.yml
@@ -35,7 +35,7 @@
               image: ${_param:docker_image_jenkins_slave}
               volumes:
                 - /etc/ssl/certs/java/cacerts:/etc/ssl/certs/java/cacerts:ro
-                - /etc/aptly-publisher.yaml:/etc/aptly-publisher.yaml:ro
+                - /etc/aptly:/etc/aptly:ro
                 - /var/run/docker.sock:/var/run/docker.sock
                 - /usr/bin/docker:/usr/bin/docker:ro
                 - /var/lib/jenkins:/var/lib/jenkins
@@ -59,7 +59,7 @@
               image: ${_param:docker_image_jenkins_slave}
               volumes:
                 - /etc/ssl/certs/java/cacerts:/etc/ssl/certs/java/cacerts:ro
-                - /etc/aptly-publisher.yaml:/etc/aptly-publisher.yaml:ro
+                - /etc/aptly:/etc/aptly:ro
                 - /var/run/docker.sock:/var/run/docker.sock
                 - /usr/bin/docker:/usr/bin/docker:ro
                 - /var/lib/jenkins:/var/lib/jenkins
@@ -83,7 +83,7 @@
               image: ${_param:docker_image_jenkins_slave}
               volumes:
                 - /etc/ssl/certs/java/cacerts:/etc/ssl/certs/java/cacerts:ro
-                - /etc/aptly-publisher.yaml:/etc/aptly-publisher.yaml:ro
+                - /etc/aptly:/etc/aptly:ro
                 - /var/run/docker.sock:/var/run/docker.sock
                 - /usr/bin/docker:/usr/bin/docker:ro
                 - /var/lib/jenkins:/var/lib/jenkins
diff --git a/docker/swarm/stack/keycloak.yml b/docker/swarm/stack/keycloak.yml
new file mode 100644
index 0000000..0187a08
--- /dev/null
+++ b/docker/swarm/stack/keycloak.yml
@@ -0,0 +1,38 @@
+parameters:
+  _param:
+    docker_keycloak_server_replicas: 3
+    docker_keycloak_proxy_replicas: 1
+    docker_image_keycloak_server: jboss/keycloak:3.4.2.Final
+    docker_image_keycloak_proxy: jboss/keycloak-proxy:3.4.2.h
+    keycloak_bind_port: ${_param:haproxy_keycloak_bind_port}
+    keycloak_proxy_bind_port: ${_param:haproxy_keycloak_proxy_bind_port}
+  docker:
+    client:
+      stack:
+        keycloak:
+          service:
+            keycloak-server:
+              image: ${_param:docker_image_keycloak_server}
+              deploy:
+                replicas: ${_param:docker_keycloak_server_replicas}
+                restart_policy:
+                  condition: any
+              ports:
+                - ${_param:haproxy_keycloak_exposed_port}:${_param:keycloak_bind_port}
+              volumes:
+                - /srv/volumes/keycloak/server/:/app
+            keycloak-proxy:
+              image: ${_param:docker_image_keycloak_proxy}
+              deploy:
+                replicas: ${_param:docker_keycloak_proxy_replicas}
+                restart_policy:
+                  condition: any
+              ports:
+                - ${_param:haproxy_keycloak_proxy_exposed_port}:${_param:keycloak_proxy_bind_port}
+              volumes:
+                - /srv/volumes/keycloak/proxy/proxy.json:/opt/jboss/conf/proxy.json
+          network:
+            default:
+              external:
+                name: keycloak_backend
+
diff --git a/docker/swarm/stack/kqueen.yml b/docker/swarm/stack/kqueen.yml
index 430a344..0c61ed9 100644
--- a/docker/swarm/stack/kqueen.yml
+++ b/docker/swarm/stack/kqueen.yml
@@ -33,24 +33,45 @@
     client:
       stack:
         kqueen:
+          environment:
+            KQUEEN_DEBUG: ${_param:kqueen_api_debug}
+            KQUEEN_CONFIG_FILE: config/prod.py
+            KQUEEN_LDAP_URI: ${_param:kqueen_api_ldap_uri}
+            KQUEEN_LDAP_DN: ${_param:kqueen_api_ldap_dn}
+            KQUEEN_LDAP_PASSWORD: ${_param:kqueen_api_ldap_password}
+            KQUEEN_AUTH_MODULES: ${_param:kqueen_api_auth_modules}
+            KQUEEN_ETCD_HOST: ${_param:kqueen_api_db_host}
+            KQUEEN_PROMETHEUS_WHITELIST: ${_param:kqueen_api_prometheus_whitelist}
+            KQUEEN_SECRET_KEY: ${_param:kqueen_credentials:kqueen_api_secret_key}
+            BOOTSTRAP_ADMIN: ${_param:kqueen_credentials:kqueen_api_bootstrap_admin}
+            BOOTSTRAP_ADMIN_USERNAME: ${_param:kqueen_credentials:kqueen_api_admin_username}
+            BOOTSTRAP_ADMIN_PASSWORD: ${_param:kqueen_credentials:kqueen_api_admin_password}
+            BOOTSTRAP_ADMIN_ORGANIZATION: ${_param:kqueen_credentials:kqueen_api_admin_organization}
+            BOOTSTRAP_ADMIN_NAMESPACE: ${_param:kqueen_credentials:kqueen_api_admin_namespace}
+            KQUEENUI_PREFERRED_URL_SCHEME: https
+            KQUEENUI_DEBUG: ${_param:kqueen_ui_debug}
+            KQUEEN_UI_CONFIG_FILE: config/prod.py
+            KQUEENUI_SECRET_KEY: ${_param:kqueen_credentials:kqueen_ui_secret_key}
+            KQUEENUI_KQUEEN_API_URL: http://${_param:kqueen_api_bind_host}:${_param:kqueen_api_bind_port}/api/v1/
+            KQUEENUI_KQUEEN_AUTH_URL: http://${_param:kqueen_api_bind_host}:${_param:kqueen_api_bind_port}/api/v1/auth
+            KQUEENUI_KQUEEN_SERVICE_USER_USERNAME: ${_param:kqueen_credentials:kqueen_api_admin_username}
+            KQUEENUI_KQUEEN_SERVICE_USER_PASSWORD: ${_param:kqueen_credentials:kqueen_api_admin_password}
+            KQUEENUI_MAIL_SERVER: ${_param:kqueen_ui_mail_host}
+            KQUEENUI_MAIL_PORT: ${_param:kqueen_ui_mail_port}
+            KQUEENUI_ENABLE_PUBLIC_REGISTRATION: ${_param:kqueen_ui_enable_public_registration}
+            KQUEENUI_LDAP_AUTH_NOTIFY: ${_param:kqueen_ui_ldap_auth_notify}
+            KQUEENUI_LOCAL_AUTH_NOTIFY: ${_param:kqueen_ui_local_auth_notify}
+            STATIC_DIR: /mnt/static/
+            ETCD_NAME: 0
+            ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd:2380
+            ETCD_INITIAL_CLUSTER_STATE: new
+            ETCD_INITIAL_CLUSTER_TOKEN: etcd-cluster-1
+            ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:${_param:haproxy_etcd_bind_port}
+            ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
+            ETCD_ADVERTISE_CLIENT_URLS: http://127.0.0.1:4001,http://etcd:${_param:haproxy_etcd_bind_port}
           service:
             kqueen-api:
               image: ${_param:docker_image_kqueen_api}
-              environment:
-                KQUEEN_DEBUG: ${_param:kqueen_api_debug}
-                KQUEEN_CONFIG_FILE: config/prod.py
-                KQUEEN_LDAP_URI: ${_param:kqueen_api_ldap_uri}
-                KQUEEN_LDAP_DN: ${_param:kqueen_api_ldap_dn}
-                KQUEEN_LDAP_PASSWORD: ${_param:kqueen_api_ldap_password}
-                KQUEEN_AUTH_MODULES: ${_param:kqueen_api_auth_modules}
-                KQUEEN_ETCD_HOST: ${_param:kqueen_api_db_host}
-                KQUEEN_PROMETHEUS_WHITELIST: ${_param:kqueen_api_prometheus_whitelist}
-                KQUEEN_SECRET_KEY: ${_param:kqueen_credentials:kqueen_api_secret_key}
-                BOOTSTRAP_ADMIN: ${_param:kqueen_credentials:kqueen_api_bootstrap_admin}
-                BOOTSTRAP_ADMIN_USERNAME: ${_param:kqueen_credentials:kqueen_api_admin_username}
-                BOOTSTRAP_ADMIN_PASSWORD: ${_param:kqueen_credentials:kqueen_api_admin_password}
-                BOOTSTRAP_ADMIN_ORGANIZATION: ${_param:kqueen_credentials:kqueen_api_admin_organization}
-                BOOTSTRAP_ADMIN_NAMESPACE: ${_param:kqueen_credentials:kqueen_api_admin_namespace}
               deploy:
                 replicas: ${_param:docker_kqueen_api_replicas}
                 restart_policy:
@@ -61,21 +82,6 @@
                 - /srv/volumes/kqueen/logs/:/var/log/kqueen-api
             kqueen-ui:
               image: ${_param:docker_image_kqueen_ui}
-              environment:
-                KQUEENUI_PREFERRED_URL_SCHEME: https
-                KQUEENUI_DEBUG: ${_param:kqueen_ui_debug}
-                KQUEEN_UI_CONFIG_FILE: config/prod.py
-                KQUEENUI_SECRET_KEY: ${_param:kqueen_credentials:kqueen_ui_secret_key}
-                KQUEENUI_KQUEEN_API_URL: http://${_param:kqueen_api_bind_host}:${_param:kqueen_api_bind_port}/api/v1/
-                KQUEENUI_KQUEEN_AUTH_URL: http://${_param:kqueen_api_bind_host}:${_param:kqueen_api_bind_port}/api/v1/auth
-                KQUEENUI_KQUEEN_SERVICE_USER_USERNAME: ${_param:kqueen_credentials:kqueen_api_admin_username}
-                KQUEENUI_KQUEEN_SERVICE_USER_PASSWORD: ${_param:kqueen_credentials:kqueen_api_admin_password}
-                KQUEENUI_MAIL_SERVER: ${_param:kqueen_ui_mail_host}
-                KQUEENUI_MAIL_PORT: ${_param:kqueen_ui_mail_port}
-                KQUEENUI_ENABLE_PUBLIC_REGISTRATION: ${_param:kqueen_ui_enable_public_registration}
-                KQUEENUI_LDAP_AUTH_NOTIFY: ${_param:kqueen_ui_ldap_auth_notify}
-                KQUEENUI_LOCAL_AUTH_NOTIFY: ${_param:kqueen_ui_local_auth_notify}
-                STATIC_DIR: /mnt/static/
               deploy:
                 replicas: ${_param:docker_kqueen_ui_replicas}
                 restart_policy:
@@ -86,14 +92,6 @@
                 - /srv/volumes/kqueen/logs/:/var/log/kqueen-ui
             etcd:
               image: quay.io/coreos/etcd:latest
-              environment:
-                ETCD_NAME: 0
-                ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd:2380
-                ETCD_INITIAL_CLUSTER_STATE: new
-                ETCD_INITIAL_CLUSTER_TOKEN: etcd-cluster-1
-                ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:${_param:haproxy_etcd_bind_port}
-                ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
-                ETCD_ADVERTISE_CLIENT_URLS: http://127.0.0.1:4001,http://etcd:${_param:haproxy_etcd_bind_port}
               ports:
                 - ${_param:haproxy_etcd_exposed_port}:${_param:haproxy_etcd_bind_port}
               volumes:
diff --git a/docker/swarm/stack/monitoring/alerta.yml b/docker/swarm/stack/monitoring/alerta.yml
index c0da7d5..858eb38 100644
--- a/docker/swarm/stack/monitoring/alerta.yml
+++ b/docker/swarm/stack/monitoring/alerta.yml
@@ -27,4 +27,5 @@
                 - ${prometheus:alerta:config_dir}/alerta.conf:/web/config.js
               environment:
                 ADMIN_USERS: ${_param:alerta_admin_username}
-                MONGO_URI: ${_param:alerta_mongodb_uri}
\ No newline at end of file
+                ADMIN_PASSWORD: ${_param:alerta_admin_password}
+                MONGO_URI: ${_param:alerta_mongodb_uri}
diff --git a/docker/swarm/stack/monitoring/gainsight.yml b/docker/swarm/stack/monitoring/gainsight.yml
new file mode 100644
index 0000000..11344b7
--- /dev/null
+++ b/docker/swarm/stack/monitoring/gainsight.yml
@@ -0,0 +1,53 @@
+classes:
+- system.prometheus.gainsight.container
+parameters:
+  _param:
+    gainsight_enabled: 'true'
+    gainsight_csv_upload_url: 'http://localhost:9999'
+    gainsight_account_id: 'default'
+    gainsight_environment_id: 'default'
+    gainsight_app_org_id: 'default'
+    gainsight_access_key: 'default'
+    gainsight_job_id: 'default'
+    gainsight_login: 'default'
+    gainsight_prometheus_url: "http://${_param:stacklight_monitor_address}:15010"
+    gainsight_config_directory: '/srv/gainsight'
+    gainsight_crontab_directory: '/etc/cron.d'
+    gainsight_config_path: "${_param:gainsight_config_directory}/config.ini"
+    docker_image_prometheus_gainsight: 'docker-prod-local.artifactory.mirantis.com/openstack-docker/gainsight:nightly'
+  docker:
+    client:
+      stack:
+        monitoring:
+          network:
+            monitoring:
+              driver: overlay
+              driver_opts:
+                encrypted: 1
+          service:
+            gainsight:
+              networks:
+                - monitoring
+              deploy:
+                replicas: 1
+                labels:
+                  com.mirantis.monitoring: "gainsight"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "gainsight"
+              image: ${_param:docker_image_prometheus_gainsight}
+              volumes:
+                - ${prometheus:gainsight:dir:config}:${_param:gainsight_config_directory}
+                - ${prometheus:gainsight:dir:crontab}:${_param:gainsight_crontab_directory}
+              environment:
+                CSV_UPLOAD_URL: "${_param:gainsight_csv_upload_url}"
+                ACCOUNT_ID: "${_param:gainsight_account_id}"
+                ENVIRONMENT_ID: "${_param:gainsight_environment_id}"
+                APP_ORG_ID: "${_param:gainsight_app_org_id}"
+                ACCESS_KEY: "${_param:gainsight_access_key}"
+                JOB_ID: "${_param:gainsight_job_id}"
+                LOGIN: "${_param:gainsight_login}"
+                PROMETHEUS_URL: "${_param:gainsight_prometheus_url}"
+                CONFIG_PATH: "${_param:gainsight_config_path}"
+                ENABLED: "${_param:gainsight_enabled}"
diff --git a/docker/swarm/stack/monitoring/pushgateway.yml b/docker/swarm/stack/monitoring/pushgateway.yml
index af108a6..461eb0b 100644
--- a/docker/swarm/stack/monitoring/pushgateway.yml
+++ b/docker/swarm/stack/monitoring/pushgateway.yml
@@ -23,8 +23,11 @@
               environment:
                 PUSHGATEWAY_BIND_PORT: ${prometheus:pushgateway:bind:port}
                 PUSHGATEWAY_BIND_ADDRESS: ${prometheus:pushgateway:bind:address}
+                PUSHGATEWAY_DATA_DIR: ${_param:prometheus_pushgateway_data_directory}
               labels:
                 com.mirantis.monitoring: "pushgateway"
               image: ${_param:docker_image_pushgateway}
               ports:
                 - 15012:${prometheus:pushgateway:bind:port}
+              volumes:
+                - ${prometheus:pushgateway:dir:data}:${_param:prometheus_pushgateway_data_directory}
diff --git a/elasticsearch/server/curator.yml b/elasticsearch/server/curator.yml
index e4e5ace..fe7383d 100644
--- a/elasticsearch/server/curator.yml
+++ b/elasticsearch/server/curator.yml
@@ -12,41 +12,33 @@
         actions:
           - action: delete_indices
             description: >-
-                Delete indices older than ${_param:elasticsearch_curator_retention_period} days (based on index name).
+                Delete indices older than ${_param:elasticsearch_curator_retention_period} days (based on index creation date).
             options:
               ignore_empty_list: True
-              timeout_override:
               continue_if_exception: False
               disable_action: False
             filters:
             - filtertype: pattern
               kind: regex
               value: "${_param:elasticsearch_curator_indices_pattern}"
-              exclude:
             - filtertype: age
-              source: name
+              source: creation_date
               direction: older
-              timestring: '%Y.%m.%d'
               unit: days
               unit_count: ${_param:elasticsearch_curator_retention_period}
-              exclude:
           - action: delete_indices
             description: >-
-                Delete indices older than ${_param:elasticsearch_curator_retention_period} days (based on index name).
+                Delete indices older than ${_param:elasticsearch_curator_retention_period} days (based on index creation date).
             options:
               ignore_empty_list: True
-              timeout_override:
               continue_if_exception: False
               disable_action: False
             filters:
             - filtertype: pattern
               kind: regex
               value: "^events_.*$"
-              exclude:
             - filtertype: age
-              source: name
+              source: creation_date
               direction: older
-              timestring: '%Y-%m-%d'
               unit: days
               unit_count: ${_param:elasticsearch_curator_retention_period}
-              exclude:
\ No newline at end of file
diff --git a/gerrit/client/init.yml b/gerrit/client/init.yml
index 5d719d4..16e4231 100644
--- a/gerrit/client/init.yml
+++ b/gerrit/client/init.yml
@@ -3,6 +3,7 @@
 parameters:
   _param:
     gerrit_try_login: true
+    gerrit_server_host: ${_param:cluster_vip_address}
   gerrit:
     client:
       enabled: True
@@ -12,7 +13,7 @@
         gerrit_config: /srv/volumes/gerrit/etc/gerrit.config
         gerrit_secure_config: /srv/volumes/gerrit/etc/secure.config
       server:
-        host: ${_param:cluster_vip_address}
+        host: ${_param:gerrit_server_host}
         user: admin
         email: ${_param:gerrit_admin_email}
         auth_method: basic
diff --git a/gerrit/server/single.yml b/gerrit/server/single.yml
index c279f00..f0f6492 100644
--- a/gerrit/server/single.yml
+++ b/gerrit/server/single.yml
@@ -61,7 +61,7 @@
         gerrit:
           enabled: true
           encoding: 'UTF8'
-          locale: 'cs_CZ'
+          locale: 'en_US'
           users:
           - name: gerrit
             password: ${_param:postgresql_gerrit_password}
diff --git a/glance/client/image/vnf_onboarding/metaswitch.yml b/glance/client/image/vnf_onboarding/metaswitch_vsbc.yml
similarity index 100%
rename from glance/client/image/vnf_onboarding/metaswitch.yml
rename to glance/client/image/vnf_onboarding/metaswitch_vsbc.yml
diff --git a/glance/control/cluster.yml b/glance/control/cluster.yml
index bb87f16..e218835 100644
--- a/glance/control/cluster.yml
+++ b/glance/control/cluster.yml
@@ -15,6 +15,7 @@
       enabled: true
       version: ${_param:glance_version}
       workers: 8
+      role: ${_param:openstack_node_role}
       database:
         engine: mysql
         host: ${_param:openstack_database_address}
diff --git a/glance/control/single.yml b/glance/control/single.yml
index b285d38..63e1b48 100644
--- a/glance/control/single.yml
+++ b/glance/control/single.yml
@@ -9,6 +9,9 @@
           version: latest
   glance:
     server:
+      role: ${_param:openstack_node_role}
       database:
         host: ${_param:single_address}
+      identity:
+        region: ${_param:openstack_region}
       show_multiple_locations: True
diff --git a/glusterfs/client/volume/keycloak.yml b/glusterfs/client/volume/keycloak.yml
new file mode 100644
index 0000000..06d6134
--- /dev/null
+++ b/glusterfs/client/volume/keycloak.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    keycloak_glusterfs_service_host: ${_param:glusterfs_service_host}
+    glusterfs_node01_address: ${_param:cluster_node01_address}
+    glusterfs_node02_address: ${_param:cluster_node02_address}
+    glusterfs_node03_address: ${_param:cluster_node03_address}
+  glusterfs:
+    client:
+      volumes:
+        keycloak:
+          path: /srv/volumes/keycloak
+          server: ${_param:keycloak_glusterfs_service_host}
+          opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
+          user: 1000
+          group: 1000
+
diff --git a/glusterfs/client/volume/keystone.yml b/glusterfs/client/volume/keystone.yml
index 39c5619..a93c0c1 100644
--- a/glusterfs/client/volume/keystone.yml
+++ b/glusterfs/client/volume/keystone.yml
@@ -12,6 +12,7 @@
           server: ${_param:keystone_glusterfs_service_host}
           user: keystone
           group: keystone
+          mode: 750
           opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
         keystone-credential-keys:
           path: /var/lib/keystone/credential-keys
diff --git a/glusterfs/server/volume/keycloak.yml b/glusterfs/server/volume/keycloak.yml
new file mode 100644
index 0000000..c8c71f0
--- /dev/null
+++ b/glusterfs/server/volume/keycloak.yml
@@ -0,0 +1,20 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        keycloak:
+          storage: /srv/glusterfs/keycloak
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/keycloak
+            - ${_param:cluster_node02_address}:/srv/glusterfs/keycloak
+            - ${_param:cluster_node03_address}:/srv/glusterfs/keycloak
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
+            cluster.favorite-child-policy: mtime
+
+
diff --git a/gnocchi/client/init.yml b/gnocchi/client/init.yml
new file mode 100644
index 0000000..2fcea87
--- /dev/null
+++ b/gnocchi/client/init.yml
@@ -0,0 +1,2 @@
+classes:
+- service.gnocchi.client
diff --git a/gnocchi/client/v1/archive_policy/default.yml b/gnocchi/client/v1/archive_policy/default.yml
new file mode 100644
index 0000000..82de812
--- /dev/null
+++ b/gnocchi/client/v1/archive_policy/default.yml
@@ -0,0 +1,27 @@
+parameters:
+  _param:
+    gnocchi_default_policy_granularity_1: '0:01:00'
+    gnocchi_default_policy_points_1: 10080
+    gnocchi_default_policy_timespan_1: '7 days'
+    gnocchi_default_policy_granularity_2: '1:00:00'
+    gnocchi_default_policy_points_2: 8760
+    gnocchi_default_policy_timespan_2: '365 days'
+    gnocchi_default_policy_rule_metric_pattern: '"*"'
+  gnocchi:
+    client:
+      resources:
+        v1:
+          enabled: true
+          cloud_name: 'admin_identity'
+          archive_policies:
+            default:
+              definition:
+                - granularity: "${_param:gnocchi_default_policy_granularity_1}"
+                  points: "${_param:gnocchi_default_policy_points_1}"
+                  timespan: "${_param:gnocchi_default_policy_timespan_1}"
+                - granularity: "${_param:gnocchi_default_policy_granularity_2}"
+                  points: "${_param:gnocchi_default_policy_points_2}"
+                  timespan: "${_param:gnocchi_default_policy_timespan_2}"
+              rules:
+                default:
+                  metric_pattern: "${_param:gnocchi_default_policy_rule_metric_pattern}"
diff --git a/gnocchi/server/cluster.yml b/gnocchi/server/cluster.yml
index 062b60e..ede63c5 100644
--- a/gnocchi/server/cluster.yml
+++ b/gnocchi/server/cluster.yml
@@ -12,8 +12,13 @@
   gnocchi:
     server:
       enable_proxy_headers_parsing: true
+      role: ${_param:openstack_node_role}
+      metricd:
+        metric_processing_delay: 15
+        metric_reporting_delay: 30
       identity:
         host: ${_param:openstack_control_address}
+        region: ${_param:openstack_region}
       cache:
         engine: memcached
         members:
diff --git a/gnocchi/server/single.yml b/gnocchi/server/single.yml
index 035491e..11ddf39 100644
--- a/gnocchi/server/single.yml
+++ b/gnocchi/server/single.yml
@@ -1,2 +1,11 @@
 classes:
 - service.gnocchi.server.single
+parameters:
+  gnocchi:
+    server:
+      role: ${_param:openstack_node_role}
+      identity:
+        region: ${_param:openstack_region}
+      metricd:
+        metric_processing_delay: 15
+        metric_reporting_delay: 30
diff --git a/grafana/client/datasource/prometheus.yml b/grafana/client/datasource/prometheus.yml
index 681b9df..22d5728 100644
--- a/grafana/client/datasource/prometheus.yml
+++ b/grafana/client/datasource/prometheus.yml
@@ -12,4 +12,3 @@
           host: ${_param:grafana_prometheus_address}
           port: ${_param:grafana_prometheus_port}
           is_default: ${_param:grafana_prometheus_is_default}
-
diff --git a/graphite/server/single.yml b/graphite/server/single.yml
index 364877e..237c65d 100644
--- a/graphite/server/single.yml
+++ b/graphite/server/single.yml
@@ -29,7 +29,7 @@
       database:
         graphite:
           encoding: UTF8
-          locale: cs_CZ
+          locale: en_US
           users:
           - name: graphite
             password: ${_param:postgresql_graphite_password}
diff --git a/haproxy/proxy/listen/cicd/kqueen.yml b/haproxy/proxy/listen/cicd/kqueen.yml
index 52b02d0..71b6f3c 100644
--- a/haproxy/proxy/listen/cicd/kqueen.yml
+++ b/haproxy/proxy/listen/cicd/kqueen.yml
@@ -2,7 +2,7 @@
   _param:
     haproxy_kqueen_api_bind_host: ${_param:haproxy_bind_address}
     haproxy_kqueen_api_bind_port: 5000
-    haproxy_kqueen_api_exposed_port: 15000
+    haproxy_kqueen_api_exposed_port: 15001
     haproxy_kqueen_ui_bind_host: ${_param:haproxy_bind_address}
     haproxy_kqueen_ui_bind_port: 5080
     haproxy_kqueen_ui_exposed_port: 15080
diff --git a/haproxy/proxy/listen/keycloak.yml b/haproxy/proxy/listen/keycloak.yml
new file mode 100644
index 0000000..73697a3
--- /dev/null
+++ b/haproxy/proxy/listen/keycloak.yml
@@ -0,0 +1,71 @@
+parameters:
+  _param:
+    haproxy_keycloak_bind_host: ${_param:haproxy_bind_address}
+    haproxy_keycloak_bind_port: 8086
+    haproxy_keycloak_exposed_port: 18086
+    haproxy_keycloak_ssl:
+      enabled: false
+    haproxy_keycloak_proxy_bind_host: ${_param:haproxy_bind_address}
+    haproxy_keycloak_proxy_bind_port: 8180
+    haproxy_keycloak_proxy_exposed_port: 18180
+    haproxy_keycloak_proxy_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      listen:
+        keycloak:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          binds:
+            - address: ${_param:haproxy_keycloak_bind_host}
+              port: ${_param:haproxy_keycloak_bind_port}
+              ssl: ${_param:haproxy_keycloak_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_keycloak_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_keycloak_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_keycloak_exposed_port}
+              params: backup check
+        keycloak_proxy:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          binds:
+            - address: ${_param:haproxy_keycloak_proxy_bind_host}
+              port: ${_param:haproxy_keycloak_proxy_bind_port}
+              ssl: ${_param:haproxy_keycloak_proxy_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_keycloak_proxy_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_keycloak_proxy_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_keycloak_proxy_exposed_port}
+              params: backup check
diff --git a/haproxy/proxy/listen/opencontrail/analytics.yml b/haproxy/proxy/listen/opencontrail/analytics.yml
index fd20277..14890ca 100644
--- a/haproxy/proxy/listen/opencontrail/analytics.yml
+++ b/haproxy/proxy/listen/opencontrail/analytics.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    opencontrail_stats_password: password
   haproxy:
     proxy:
       listen:
diff --git a/haproxy/proxy/listen/opencontrail/control.yml b/haproxy/proxy/listen/opencontrail/control.yml
index c389682..490d100 100644
--- a/haproxy/proxy/listen/opencontrail/control.yml
+++ b/haproxy/proxy/listen/opencontrail/control.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    opencontrail_stats_password: password
   haproxy:
     proxy:
       listen:
diff --git a/haproxy/proxy/listen/openstack/galera/init.yml b/haproxy/proxy/listen/openstack/galera/init.yml
index c9bd41c..1dd1a1c 100644
--- a/haproxy/proxy/listen/openstack/galera/init.yml
+++ b/haproxy/proxy/listen/openstack/galera/init.yml
@@ -3,12 +3,6 @@
     haproxy_params_check: 'check'
   haproxy:
     proxy:
-      timeout:
-        queue: '10s'
-        connect: '10s'
-        client: '10s'
-        server: '10s'
-        check: '10s'
       listen:
         mysql_cluster:
           type: mysql
diff --git a/haproxy/proxy/listen/openstack/horizon.yml b/haproxy/proxy/listen/openstack/horizon.yml
index 14f5c2b..d507b96 100644
--- a/haproxy/proxy/listen/openstack/horizon.yml
+++ b/haproxy/proxy/listen/openstack/horizon.yml
@@ -3,7 +3,7 @@
     proxy:
       listen:
         horizon_web:
-          type: general-service
+          type: horizon
           check: false
           binds:
           - address: ${_param:cluster_vip_address}
@@ -20,4 +20,4 @@
           - name: ${_param:cluster_node03_hostname}
             host: ${_param:cluster_node03_address}
             port: 8078
-            params: check
\ No newline at end of file
+            params: check
diff --git a/heat/server/cluster.yml b/heat/server/cluster.yml
index 5829aee..eee2b63 100644
--- a/heat/server/cluster.yml
+++ b/heat/server/cluster.yml
@@ -22,6 +22,7 @@
       enabled: true
       region: ${_param:openstack_region}
       version: ${_param:heat_version}
+      role: ${_param:openstack_node_role}
       bind:
         api_cfn:
           address: ${_param:cluster_local_address}
diff --git a/heat/server/single.yml b/heat/server/single.yml
index cd548bf..e686050 100644
--- a/heat/server/single.yml
+++ b/heat/server/single.yml
@@ -9,6 +9,8 @@
           version: latest
   heat:
     server:
+      role: ${_param:openstack_node_role}
+      region: ${_param:openstack_region}
       stack_domain_admin:
         name: heat_domain_admin
         password: ${_param:heat_domain_admin_password}
diff --git a/horizon/server/plugin/contrail.yml b/horizon/server/plugin/contrail.yml
index 03da87e..9166bce 100644
--- a/horizon/server/plugin/contrail.yml
+++ b/horizon/server/plugin/contrail.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    opencontrail_version: 3.2
   horizon:
     server:
       plugin:
@@ -6,8 +8,9 @@
           source:
             engine: pkg
             name: openstack-dashboard-contrail-panels
+          opencontrail_version: ${_param:opencontrail_version}
         horizon_overrides:
           overrides:
           - contrail_openstack_dashboard
       openstack_neutron_network:
-        enable_fip_topology_check: False
\ No newline at end of file
+        enable_fip_topology_check: False
diff --git a/horizon/server/plugin/theme.yml b/horizon/server/plugin/theme.yml
index 85475d7..cf83739 100644
--- a/horizon/server/plugin/theme.yml
+++ b/horizon/server/plugin/theme.yml
@@ -10,3 +10,12 @@
           source:
             engine: pkg
             name: openstack-dashboard-${_param:horizon_dashboard_theme}-theme
+      themes:
+        default: "mirantis"
+        available:
+          mirantis:
+            name: "Mirantis"
+            description: "Mirantis theme"
+            enabled: True
+          material:
+            enabled: False
diff --git a/ironic/api/cluster.yml b/ironic/api/cluster.yml
index 5522f3f..b0bb69f 100644
--- a/ironic/api/cluster.yml
+++ b/ironic/api/cluster.yml
@@ -11,5 +11,6 @@
     api:
       enabled: true
       version: ${_param:ironic_version}
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:cluster_baremetal_local_address}
diff --git a/ironic/api/single.yml b/ironic/api/single.yml
index ed73e90..51c3f9c 100644
--- a/ironic/api/single.yml
+++ b/ironic/api/single.yml
@@ -9,5 +9,6 @@
           version: latest
   ironic:
     api:
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:single_address}
diff --git a/jenkins/client/approved_scripts.yml b/jenkins/client/approved_scripts.yml
index 1fb68c9..65db576 100644
--- a/jenkins/client/approved_scripts.yml
+++ b/jenkins/client/approved_scripts.yml
@@ -151,3 +151,9 @@
         - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.util.Collection java.lang.String
         - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods init java.util.List
         - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods asBoolean java.lang.CharSequence
+        - staticMethod hudson.model.Hudson getInstance
+        - method hudson.model.Job getProperty java.lang.Class
+        - method hudson.model.ParametersDefinitionProperty getParameterDefinitions
+        - method hudson.model.ParameterDefinition getName
+        - method hudson.model.StringParameterDefinition getDefaultValue
+        - method java.util.Collection toArray
diff --git a/jenkins/client/init.yml b/jenkins/client/init.yml
index 856eec5..409b3f3 100644
--- a/jenkins/client/init.yml
+++ b/jenkins/client/init.yml
@@ -10,39 +10,56 @@
     jenkins_master_port: 8081
     jenkins_aptly_storages: "local"
     jenkins_pipelines_branch: "master"
+    jenkins_offline_deployment: "false"
   jenkins:
     client:
+      globalenvprop:
+        OFFLINE_DEPLOYMENT:
+          value: ${_param:jenkins_offline_deployment}
       master:
         host: ${_param:jenkins_master_host}
         port: ${_param:jenkins_master_port}
         username: ${_param:jenkins_client_user}
         password: ${_param:jenkins_client_password}
       plugin:
+        antisamy-markup-formatter: {}
         artifactory: {}
+        blueocean: {}
         build-blocker-plugin: {}
         build-monitor-plugin: {}
+        build-timeout: {}
         build-user-vars-plugin: {}
         categorized-view: {}
+        copyartifact: {}
         description-setter: {}
         discard-old-build: {}
         docker-workflow: {}
         email-ext: {}
+        envinject: {}
         extended-choice-parameter: {}
         extensible-choice-parameter: {}
         gerrit-trigger: {}
         git: {}
+        github: {}
         heavy-job: {}
         jobConfigHistory: {}
         jira: {}
         ldap: {}
+        lockable-resources: {}
         matrix-auth: {}
         monitoring: {}
+        multiple-scms: {}
         performance: {}
+        permissive-script-security: {}
         pipeline-utility-steps: {}
+        plot: {}
+        prometheus: {}
         rebuild: {}
         simple-theme-plugin: {}
         slack: {}
+        ssh-agent: {}
         test-stability: {}
+        throttle-concurrents: {}
         workflow-cps: {}
         workflow-remote-loader: {}
         workflow-scm-step:
@@ -52,6 +69,7 @@
           enabled: true
           url: ${_param:jenkins_gerrit_url}/mcp-ci/pipeline-library
           credential_id: gerrit
+          branch: ${_param:jenkins_pipelines_branch}
       view:
         Mirrors:
           enabled: true
diff --git a/jenkins/client/job/aptly.yml b/jenkins/client/job/aptly.yml
index 2ac90bb..55c7f88 100644
--- a/jenkins/client/job/aptly.yml
+++ b/jenkins/client/job/aptly.yml
@@ -97,7 +97,6 @@
                 type: string
                 default: "${_param:jenkins_aptly_storages}"
                 description: "Comma separated list of storage"
-      job_template:
         aptly-all:
           name: aptly-{{operation}}-all-{{source}}-{{target}}
           jobs:
diff --git a/jenkins/client/job/ceph/remove-node.yml b/jenkins/client/job/ceph/remove-node.yml
index af678b5..901e319 100644
--- a/jenkins/client/job/ceph/remove-node.yml
+++ b/jenkins/client/job/ceph/remove-node.yml
@@ -43,5 +43,5 @@
               description: Only if removing OSD host. Set to true if crush map file should be updated. Enforce has to happen manually unless it is specifically set to be enforced in pillar.
             WAIT_FOR_HEALTHY:
               type: boolean
-              default: 'false'
+              default: 'true'
               description: Wait for healthy during pipeline
diff --git a/jenkins/client/job/ceph/remove-osd.yml b/jenkins/client/job/ceph/remove-osd.yml
index 0a5801d..99dcb37 100644
--- a/jenkins/client/job/ceph/remove-osd.yml
+++ b/jenkins/client/job/ceph/remove-osd.yml
@@ -41,5 +41,5 @@
               description: Flags to be aplied before pipeline and after pipeline (comma-separated list)
             WAIT_FOR_HEALTHY:
               type: boolean
-              default: 'false'
+              default: 'true'
               description: Wait for healthy during pipeline
diff --git a/jenkins/client/job/ceph/replace-failed-osd.yml b/jenkins/client/job/ceph/replace-failed-osd.yml
index 43c2f0b..a342ffb 100644
--- a/jenkins/client/job/ceph/replace-failed-osd.yml
+++ b/jenkins/client/job/ceph/replace-failed-osd.yml
@@ -34,6 +34,9 @@
             DEVICE:
               type: string
               description: Comma separated list of failed devices that will be replaced at HOST (/dev/sdb,/dev/sdc)
+            DATA_PARTITION:
+              type: string
+              description: (Optional) Comma separated list of mounted partitions of failed device. These partitions will be unmounted. For ex. /dev/sdb1,/dev/sdb3
             JOURNAL_BLOCKDB_BLOCKWAL_PARTITION:
               type: string
               description: Comma separated list of partitions where journal, block_db or block_wal for the failed devices on this HOST were stored (/dev/sdh2,/dev/sdh3)
@@ -43,7 +46,7 @@
               default: 'cmn01*'
             WAIT_FOR_HEALTHY:
               type: boolean
-              default: 'false'
+              default: 'true'
               description: Wait for healthy during pipeline
             DMCRYPT:
               type: boolean
diff --git a/jenkins/client/job/debian/packages/horizon/modules.yml b/jenkins/client/job/debian/packages/horizon/modules.yml
index c908e5c..357be6e 100644
--- a/jenkins/client/job/debian/packages/horizon/modules.yml
+++ b/jenkins/client/job/debian/packages/horizon/modules.yml
@@ -126,6 +126,18 @@
               os_version: pike
               branch: stable/pike
             # Trusty
+            - name: horizon-contrail-panels
+              os: ubuntu
+              dist: trusty
+              os_version: queens
+              branch: stable/queens
+            # Xenial
+            - name: horizon-contrail-panels
+              os: ubuntu
+              dist: xenial
+              os_version: queens
+              branch: stable/queens
+            # Trusty
             - name: horizon-jenkins-dashboard
               os: ubuntu
               dist: trusty
diff --git a/jenkins/client/job/debian/packages/salt.yml b/jenkins/client/job/debian/packages/salt.yml
index ad35faa..7a9dd04 100644
--- a/jenkins/client/job/debian/packages/salt.yml
+++ b/jenkins/client/job/debian/packages/salt.yml
@@ -617,6 +617,10 @@
               upload_source_package: true
               upload_to_aptly: true
               dist: xenial
+            - name: hubble
+              upload_source_package: true
+              upload_to_aptly: true
+              dist: xenial
             - name: influxdb
               upload_source_package: true
               upload_to_aptly: true
@@ -749,6 +753,10 @@
               upload_source_package: true
               upload_to_aptly: true
               dist: xenial
+            - name: openscap
+              upload_source_package: true
+              upload_to_aptly: true
+              dist: xenial
             - name: openssh
               upload_source_package: true
               upload_to_aptly: true
diff --git a/jenkins/client/job/deploy/lab/deploy.yml b/jenkins/client/job/deploy/lab/deploy.yml
index 5b63d94..624e553 100644
--- a/jenkins/client/job/deploy/lab/deploy.yml
+++ b/jenkins/client/job/deploy/lab/deploy.yml
@@ -90,6 +90,10 @@
                 default: ""
 
               # salt
+              EXTRA_TARGET:
+                type: string
+                default: ""
+                description: "Salt extra target for edge clouds deployment"
               SALT_MASTER_CREDENTIALS:
                 type: string
                 default: "salt-qa-credentials"
@@ -100,6 +104,10 @@
                 type: text
                 default: ""
                 description: "YAML with overrides for Salt deployment"
+              SALT_VERSION:
+                type: text
+                default: "stable 2017.7"
+                description: "Version of Salt which is going to be installed i.e. 'stable 2016.3' or 'stable 2017.7' etc. Warning: This value doesn't override salt_version parameter set in the pillar."
               BOOTSTRAP_EXTRA_REPO_PARAMS:
                 type: string
                 default: ""
@@ -167,7 +175,7 @@
                 default: "http://127.0.0.1:8080"
               TEST_K8S_CONFORMANCE_IMAGE:
                 type: string
-                default: "docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/k8s-conformance:v1.8.9-7"
+                default: "docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/k8s-conformance:v1.10.4-4"
 
               TEST_TEMPEST_IMAGE:
                 type: string
diff --git a/jenkins/client/job/deploy/lab/init.yml b/jenkins/client/job/deploy/lab/init.yml
index 6d197a1..4953d19 100644
--- a/jenkins/client/job/deploy/lab/init.yml
+++ b/jenkins/client/job/deploy/lab/init.yml
@@ -12,6 +12,7 @@
   - system.jenkins.client.job.deploy.lab.component.openstack
   - system.jenkins.client.job.deploy.lab.component.stacklight
   - system.jenkins.client.job.deploy.lab.ironic
+  - system.jenkins.client.job.deploy.lab.mom_deploy
 
 parameters:
   jenkins:
diff --git a/jenkins/client/job/deploy/lab/mom_deploy.yml b/jenkins/client/job/deploy/lab/mom_deploy.yml
new file mode 100644
index 0000000..8ae8f53
--- /dev/null
+++ b/jenkins/client/job/deploy/lab/mom_deploy.yml
@@ -0,0 +1,126 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        deploy-virtual-edge-mom:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - edge MoM"
+          discard:
+            build:
+              keep_num: 50
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            branch: "${_param:jenkins_pipelines_branch}"
+            credentials: "gerrit"
+            script: deploy-virtual-edge-mom.groovy
+          param:
+            # general parameters
+            ASK_ON_ERROR:
+              type: boolean
+              default: 'false'
+            FORMULA_PKG_REVISION:
+              type: string
+              default: ""
+              description: "Formulas revision to install on Salt Master bootstrap stage"
+            # heat parameters
+            HEAT_STACK_ENVIRONMENT:
+              type: string
+              default: "devcloud"
+            HEAT_STACK_PUBLIC_NET:
+              type: string
+              default: "public"
+            HEAT_STACK_ZONE:
+              type: string
+              default: "mcp-oscore"
+            OPENSTACK_API_CLIENT:
+              type: string
+              default: ""
+            OPENSTACK_API_CREDENTIALS:
+              type: string
+              default: "openstack-devcloud-credentials"
+            OPENSTACK_API_PROJECT:
+              type: string
+              default: "mcp-oscore"
+            OPENSTACK_API_PROJECT_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_PROJECT_ID:
+              type: string
+              default: ""
+            OPENSTACK_API_URL:
+              type: string
+              default: "https://cloud-cz.bud.mirantis.net:5000"
+            OPENSTACK_API_USER_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_VERSION:
+              type: string
+              default: "3"
+            OPENSTACK_USER_DOMAIN:
+              type: string
+              default: "default"
+            # salt
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt-qa-credentials"
+            SALT_MASTER_URL:
+              type: string
+              default: ""
+            SALT_OVERRIDES:
+              type: text
+              default: ""
+            STACK_CLEANUP_JOB:
+              type: string
+              default: "deploy-stack-cleanup"
+            STACK_DELETE:
+              type: boolean
+              default: 'false'
+              description: "Don't enable it if you need to use the lab after"
+            STACK_INSTALL:
+              type: string
+              default: "core"
+            # deployments
+            STACK_CLUSTER_NAME:
+              type: string
+              default: "virtual-mcp11-aio"
+              description: "Cluster name to use from reclass"
+            STACK_RECLASS_ADDRESS:
+              type: string
+              default: "https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-aio"
+            STACK_RECLASS_BRANCH:
+              type: string
+              default: "stable/pike"
+            STACK_TEMPLATE:
+              type: string
+              default: "virtual_edge_mom"
+            STACK_TEMPLATE_BRANCH:
+              type: string
+              default: "master"
+            STACK_TEMPLATE_CREDENTIALS:
+              type: string
+              default: "gerrit"
+            STACK_TEMPLATE_URL:
+              type: string
+              default: "${_param:jenkins_gerrit_url}/mk/heat-templates"
+            STACK_TEST:
+              type: string
+              default: ""
+            STACK_TYPE:
+              type: string
+              default: "physical"
+            STATIC_MGMT_NETWORK:
+              type: boolean
+              default: 'false'
+              description: "Check if model contains static IP address definitions for all nodes"
+            TEST_DOCKER_INSTALL:
+              type: boolean
+              description: "Install docker on the target if true"
+              default: "false"
+             # edge deploy
+            EDGE_DEPLOY_SCHEMAS:
+              type: string
+              description: "JSON schemas of edge cloud environments"
+              default: ""
+
diff --git a/jenkins/client/job/deploy/update/cloud_update.yml b/jenkins/client/job/deploy/update/cloud_update.yml
index 3034ea5..d434850 100644
--- a/jenkins/client/job/deploy/update/cloud_update.yml
+++ b/jenkins/client/job/deploy/update/cloud_update.yml
@@ -156,3 +156,7 @@
               type: boolean
               default: 'false'
               description: "Restore Cassandra and Zookeeper DBs for OpenContrail"
+            RUN_CVP_TESTS:
+              type: boolean
+              default: 'false'
+              description: "Run cloud validation pipelines before and after update"
diff --git a/jenkins/client/job/deploy/update/init.yml b/jenkins/client/job/deploy/update/init.yml
index fb1f5cf..35a2912 100644
--- a/jenkins/client/job/deploy/update/init.yml
+++ b/jenkins/client/job/deploy/update/init.yml
@@ -15,3 +15,4 @@
   - system.jenkins.client.job.deploy.update.restore_zookeeper
   - system.jenkins.client.job.deploy.update.virt_snapshot
   - system.jenkins.client.job.deploy.update.cloud_update
+  - system.jenkins.client.job.deploy.update.kubernetes_update
diff --git a/jenkins/client/job/deploy/update/kubernetes_update.yml b/jenkins/client/job/deploy/update/kubernetes_update.yml
new file mode 100644
index 0000000..9fb23f9
--- /dev/null
+++ b/jenkins/client/job/deploy/update/kubernetes_update.yml
@@ -0,0 +1,51 @@
+#
+# Jobs to update cloud packages on given Salt master environment
+#
+parameters:
+  _param:
+    jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
+    kubernetes_hyperkube_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
+  jenkins:
+    client:
+      job:
+        deploy-k8s-upgrade:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - update kubernetes cluster"
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            branch: "${_param:jenkins_pipelines_branch}"
+            credentials: "gerrit"
+            script: k8s-upgrade-pipeline.groovy
+          param:
+            KUBERNETES_HYPERKUBE_IMAGE:
+              type: string
+              default: "${_param:kubernetes_hyperkube_repo}/hyperkube-amd64:v1.10.4-4"
+              description: "Versioned image to update control plane from. Should be null if update rolling via reclass-system level"
+            KUBERNETES_PAUSE_IMAGE:
+              type: string
+              default: "${_param:kubernetes_hyperkube_repo}/pause-amd64:v1.10.4-4"
+              description: "Versioned pause image to use in deployments. Should be null if update rolling via reclass-system level"
+            SALT_MASTER_URL:
+              type: string
+              default: "${_param:jenkins_salt_api_url}"
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt-qa-credentials"
+            PER_NODE:
+              type: boolean
+              default: 'true'
+              description: "Target nodes will be managed one by one"
+            TARGET_UPDATES:
+              type: string
+              default: "ctl,cmp"
+              description: "Comma separated list of nodes to update (Valid values are ctl,cmp)"
+            CTL_TARGET:
+              type: string
+              default: "I@kubernetes:master"
+              description: "Salt targeted kubernetes CTL nodes (ex. I@kubernetes:master). Kubernetes control plane"
+            CMP_TARGET:
+              type: string
+              default: "cmp* and I@kubernetes:pool"
+              description: "Salt targeted compute nodes (ex. 'cmp* and I@kubernetes:pool') Kubernetes computes"
diff --git a/jenkins/client/job/deploy/update/upgrade.yml b/jenkins/client/job/deploy/update/upgrade.yml
index 7e94c10..6ffc9c1 100644
--- a/jenkins/client/job/deploy/update/upgrade.yml
+++ b/jenkins/client/job/deploy/update/upgrade.yml
@@ -44,3 +44,7 @@
               type: boolean
               default: 'false'
               description: "Set to true if vms should not be recreated"
+            INTERACTIVE:
+              type: boolean
+              default: 'true'
+              description: "Ask interactive questions during pipeline run (bool)"
diff --git a/jenkins/client/job/deploy/update/upgrade_compute.yml b/jenkins/client/job/deploy/update/upgrade_compute.yml
index 90bfc76..3986997 100644
--- a/jenkins/client/job/deploy/update/upgrade_compute.yml
+++ b/jenkins/client/job/deploy/update/upgrade_compute.yml
@@ -35,3 +35,7 @@
               type: string
               default: '1'
               description: Number of selected nodes to live apply upgrade.
+            INTERACTIVE:
+              type: boolean
+              default: 'true'
+              description: "Ask interactive questions during pipeline run (bool)"
diff --git a/jenkins/client/job/deploy/update/upgrade_mcp_release.yml b/jenkins/client/job/deploy/update/upgrade_mcp_release.yml
index 8587140..c9b846f 100644
--- a/jenkins/client/job/deploy/update/upgrade_mcp_release.yml
+++ b/jenkins/client/job/deploy/update/upgrade_mcp_release.yml
@@ -10,7 +10,7 @@
         upgrade-mcp-release:
           type: workflow-scm
           concurrent: true
-          display_name: "Deploy - upgrade MCP Release"
+          display_name: "Deploy - upgrade MCP Drivetrain"
           scm:
             type: git
             url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
@@ -27,7 +27,19 @@
             MCP_VERSION:
               type: string
               default: ""
+            UPDATE_CLUSTER_MODEL:
+              type: boolean
+              default: 'true'
+              description: "Replace `apt_mk_version` parameter in cluster level Reclass model."
+            UPGRADE_SALTSTACK:
+              type: boolean
+              default: 'true'
+              description: "Upgrade SaltStack packages."
+            UPDATE_PIPELINES:
+              type: boolean
+              default: 'true'
+              description: "Mirror pipelines from upstream/local mirror to Gerrit."
             UPDATE_LOCAL_REPOS:
               type: boolean
               default: 'false'
-              description: "Use only when local repositories are present"
\ No newline at end of file
+              description: "Use only when local repositories are present."
\ No newline at end of file
diff --git a/jenkins/client/job/deploy/update/upgrade_ovs_gateway.yml b/jenkins/client/job/deploy/update/upgrade_ovs_gateway.yml
index 335492d..e7cdb12 100644
--- a/jenkins/client/job/deploy/update/upgrade_ovs_gateway.yml
+++ b/jenkins/client/job/deploy/update/upgrade_ovs_gateway.yml
@@ -35,3 +35,7 @@
               type: string
               default: '1'
               description: Number of selected nodes to live apply upgrade.
+            INTERACTIVE:
+              type: boolean
+              default: 'true'
+              description: "Ask interactive questions during pipeline run (bool)"
diff --git a/jenkins/client/job/docker/cicd/tempest.yml b/jenkins/client/job/docker/cicd/tempest.yml
index 7b68403..38cc667 100644
--- a/jenkins/client/job/docker/cicd/tempest.yml
+++ b/jenkins/client/job/docker/cicd/tempest.yml
@@ -22,6 +22,7 @@
                 "mcp/docker-ci-tempest":
                   branches:
                     - master
+                    - pike
               event:
                 patchset:
                   - created:
diff --git a/jenkins/client/job/opencontrail/git-mirrors/downstream.yml b/jenkins/client/job/opencontrail/git-mirrors/downstream.yml
index f92d1a7..891c244 100644
--- a/jenkins/client/job/opencontrail/git-mirrors/downstream.yml
+++ b/jenkins/client/job/opencontrail/git-mirrors/downstream.yml
@@ -16,7 +16,7 @@
             - name: contrail-third-party
               branches: ${_param:contrail_branches}
             - name: contrail-generateDS
-              branches: ${_param:contrail_branches}
+              branches: ${_param:contrail_branches_generateDS}
             - name: contrail-sandesh
               branches: ${_param:contrail_branches}
             - name: contrail-packages
@@ -47,6 +47,12 @@
               branches: ${_param:contrail_kubernetes_branches}
             - name: contrail-dpdk
               branches: ${_param:contrail_dpdk_branches}
+            - name: contrail-common
+              branches: ${_param:oc5_branches}
+            - name: contrail-analytics
+              branches: ${_param:oc5_branches}
+            - name: contrail-api-client
+              branches: ${_param:oc5_branches}
           template:
             discard:
               build:
diff --git a/jenkins/client/job/opencontrail/git-mirrors/upstream.yml b/jenkins/client/job/opencontrail/git-mirrors/upstream.yml
index 0f60c76..d36d725 100644
--- a/jenkins/client/job/opencontrail/git-mirrors/upstream.yml
+++ b/jenkins/client/job/opencontrail/git-mirrors/upstream.yml
@@ -48,6 +48,12 @@
               branches: ${_param:contrail_dpdk_branches}
             - name: contrail-third-party-cache-fixup
               branches: ${_param:contrail_third_party_cache_fixup_branches}
+            - name: contrail-common
+              branches: ${_param:oc5_branches}
+            - name: contrail-analytics
+              branches: ${_param:oc5_branches}
+            - name: contrail-api-client
+              branches: ${_param:oc5_branches}
           template:
             discard:
               build:
diff --git a/jenkins/client/job/opencontrail/init.yml b/jenkins/client/job/opencontrail/init.yml
index c6d1ca6..2072808 100644
--- a/jenkins/client/job/opencontrail/init.yml
+++ b/jenkins/client/job/opencontrail/init.yml
@@ -4,6 +4,10 @@
 parameters:
   _param:
     contrail_branches: "R3.0.2.x,R3.0.3.x,R3.1,R3.1.1.x,R3.2,R3.2.3.x,R4.0,R4.1,R5.0,master"
+    # from OC50 there are new repos without older branches
+    oc5_branches: "R5.0,master"
+    # generateDS does not have 5.0 branch
+    contrail_branches_generateDS: "R3.0.2.x,R3.0.3.x,R3.1,R3.1.1.x,R3.2,R3.2.3.x,R4.0,R4.1,master"
     contrail_kubernetes_branches: "master,release-1.2"
     contrail_dpdk_extra_branches: "mitaka,mitaka_dpdk_17_02,mitaka_dpdk_17_05,kilo,liberty-multiqueue,newton,ocata"
     contrail_ceilometer_plugin_branches: "master,R4.0,R4.1"
diff --git a/jenkins/client/job/oscore/cookiecutter.yml b/jenkins/client/job/oscore/cookiecutter.yml
new file mode 100644
index 0000000..bc180b4
--- /dev/null
+++ b/jenkins/client/job/oscore/cookiecutter.yml
@@ -0,0 +1,129 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        oscore-test-cookiecutter-model:
+          display_name: oscore-test-cookiecutter-model
+          name: oscore-test-cookiecutter-model
+          concurrent: true
+          description: Test specified cookiecutter context
+          discard:
+            build:
+             keep_num: 60
+            artifact:
+             keep_num: 60
+          type: workflow-scm
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines"
+            credentials: "gerrit"
+            branch: 'master'
+            script: test-cookiecutter-model-pipeline.groovy
+          param:
+            CREDENTIALS_ID:
+              type: string
+              description: "ID of jenkins credentials to be used when connecting to gerrit."
+              default: "gerrit"
+            COOKIECUTTER_TEMPLATE_CONTEXT_FILE:
+              type: choice
+              description: "Context for coockiecutter template specified as filename."
+              choices:
+                - openstack-ovs-core-ocata
+                - openstack-ovs-core-pike
+                - openstack-ovs-core-ssl-pike
+                - openstack-ovs-core-barbican-pike
+                - openstack-ovs-core-manila-pike
+                - openstack-ovs-core-telemetry-pike
+                - openstack-ovs-core-queens
+            STACK_INSTALL:
+              type: string
+              default: 'core,openstack,ovs'
+            STACK_DELETE:
+              type: boolean
+              description: "Delete Heat stack when finished (bool)"
+              default: 'false'
+            OPENSTACK_API_PROJECT:
+              type: string
+              default: "mcp-oscore"
+            HEAT_STACK_ZONE:
+              type: string
+              default: "mcp-oscore"
+            FLAVOR_PREFIX:
+              type: string
+              default: 'dev'
+            RUN_SMOKE:
+              type: boolean
+              description: "Run smoke after deployment or not. (bool)"
+              default: 'false'
+            COOKIECUTTER_EXTRA_CONTEXT:
+              type: text
+              description: "Extra context items, will be merged to COOKIECUTTER_TEMPLATE_CONTEXT_FILE"
+              default: |-
+                #Extra context that will be merged with content of COOKIECUTTER_TEMPLATE_CONTEXT_FILE
+                default_context:
+                  openssh_groups: "qa_scale,oscore_devops,networking,tcpcloud,stacklight,k8s_team"
+                  cookiecutter_template_url: https://gerrit.mcp.mirantis.net/mk/cookiecutter-templates.git
+                  cookiecutter_template_branch: 'master'
+                  shared_reclass_url: https://gerrit.mcp.mirantis.net/salt-models/reclass-system.git
+                  shared_reclass_branch: 'master'
+            STACK_INSTALL:
+              type: string
+              default: 'core,openstack,ovs'
+            STACK_DELETE:
+              type: boolean
+              description: "Delete Heat stack when finished (bool)"
+              default: 'false'
+        oscore-test-cookiecutter-models:
+          display_name: oscore-test-cookiecutter-models
+          name: oscore-test-cookiecutter-models
+          concurrent: true
+          discard:
+            build:
+              keep_num: 30
+            artifact:
+              keep_num: 30
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines.git"
+            credentials: "gerrit"
+            branch: 'master'
+            script: test-cookiecutter-models-pipeline.groovy
+          trigger:
+            gerrit:
+             project:
+               "^mk/cookiecutter-templates$":
+                 compare_type: 'REG_EXP'
+                 branches:
+                   - master
+             skip_vote:
+               - successful
+               - failed
+               - unstable
+               - not_built
+             event:
+               comment:
+                 - addedContains:
+                    commentAddedCommentContains: '^(?s:Patch Set \d+:.*(test|recheck|reverify)\s*)$'
+          param:
+            CREDENTIALS_ID:
+              type: string
+              default: "gerrit"
+              description: "ID of jenkins credentials to be used when connecting to gerrit."
+            OPENSTACK_API_PROJECT:
+              type: string
+              default: "mcp-oscore-ci"
+            HEAT_STACK_ZONE:
+              type: string
+              default: "mcp-oscore-ci"
+            FLAVOR_PREFIX:
+              type: string
+              default: 'dev'
+            TEST_SCHEME:
+              type: text
+              description: "Yaml based scheme to test specific models."
+              default: |-
+                openstack-ovs-core-pike:
+                  run_smoke: true
+                  stack_install: 'core,openstack,ovs'
diff --git a/jenkins/client/job/oscore/init.yml b/jenkins/client/job/oscore/init.yml
index 2f45ef8..61dbda8 100644
--- a/jenkins/client/job/oscore/init.yml
+++ b/jenkins/client/job/oscore/init.yml
@@ -3,6 +3,8 @@
   - system.jenkins.client.job.oscore.tests
   - system.jenkins.client.job.oscore.qa
   - system.jenkins.client.job.oscore.salt_virtual_models
+  - system.jenkins.client.job.oscore.cookiecutter
+  - system.jenkins.client.job.oscore.release
 parameters:
   _param:
      job_description_oscore: <br>Deploy and test OpenStack.<br>
diff --git a/jenkins/client/job/oscore/qa.yml b/jenkins/client/job/oscore/qa.yml
index 6d54082..13d0e76 100644
--- a/jenkins/client/job/oscore/qa.yml
+++ b/jenkins/client/job/oscore/qa.yml
@@ -25,6 +25,7 @@
                   mcp/{{oscore-qa-project}}:
                     branches:
                       - master
+                      - pike
                 event:
                   change:
                     - merged
@@ -43,7 +44,7 @@
                 default: "mirantis/oscore/{{oscore-qa-project}}"
               IMAGE_TAG:
                 type: string
-                default: "latest"
+                default: ""
               DOCKER_REGISTRY:
                 type: string
                 default: "docker-prod-local.docker.mirantis.net"
diff --git a/jenkins/client/job/oscore/release.yml b/jenkins/client/job/oscore/release.yml
new file mode 100644
index 0000000..f73bd22
--- /dev/null
+++ b/jenkins/client/job/oscore/release.yml
@@ -0,0 +1,69 @@
+parameters:
+  jenkins:
+    client:
+      job_template:
+        promote-release-component:
+          name: "{{job_prefix}}-promote-{{component}}-{{version}}-{{distribution}}"
+          template:
+            discard:
+              build:
+                keep_num: 30
+              artifact:
+                keep_num: 30
+            type: workflow-scm
+            concurrent: true
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines.git"
+              credentials: "gerrit"
+              branch: 'master'
+              script: promote-release-component.groovy
+            trigger:
+              timer:
+               spec: "{{timer_spec}}"
+            param:
+              # general
+              AIO_JOB:
+                type: string
+                description: "Job name to deploy all-ini-one envs are going to be tested"
+                default: "{{job_prefix}}-{{aioJobPrefix}}"
+              MULTINODE_JOB:
+                type: string
+                description: "Job name to deploy multinode envs are going to be tested"
+                default: "{{job_prefix}}-{{multinodeJobPrefix}}"
+              SYSTEM_DISTRIBUTION:
+                type: string
+                default: "{{distribution}}"
+                description: "Distribution of operating system"
+              COMPONENT:
+                type: string
+                default: "{{component}}"
+                description: "Tested MCP Component"
+              VERSION:
+                type: string
+                default: "{{version}}"
+                description: "Tested MCP Component"
+              SRC_REVISION:
+                type: string
+                default: "nightly"
+                description: "Tested revision of component - e.g. nightly"
+              SNAPSHOT_ID:
+                type: string
+                default: ""
+                description: "Tested snapshot id of component"
+              TARGET_REVISION:
+                type: string
+                default: "testing"
+                description: "Revision to promote SRC_REVISION to, e.g. testing"
+              TEST_SCHEME:
+                type: string
+                default: "{{test_scheme}}"
+                description: "Structure which defines parameters of deployment jobs"
+              MIRROR_HOST:
+                type: string
+                default: "mirror.mirantis.com"
+                description: "mirror with snapshots and packages"
+              AUTO_PROMOTE:
+                type: boolean
+                default: "{{auto_promote}}"
+                description: Enable to autopromote repo
diff --git a/jenkins/client/job/oscore/test_upgrades.yml b/jenkins/client/job/oscore/test_upgrades.yml
new file mode 100644
index 0000000..27619e3
--- /dev/null
+++ b/jenkins/client/job/oscore/test_upgrades.yml
@@ -0,0 +1,68 @@
+parameters:
+  jenkins:
+    client:
+      job_template:
+        test-opentack-upgrade:
+          name: "oscore-test-openstack-upgrade-{{openstack_version_old}}-{{openstack_version_new}}"
+          template:
+            concurrent: true
+            description: Test upgrade flow for opentack cluster
+            discard:
+              build:
+               keep_num: 60
+              artifact:
+               keep_num: 60
+            type: workflow-scm
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines"
+              credentials: "gerrit"
+              branch: 'master'
+              script: test-openstack-upgrade-pipeline.groovy
+            param:
+              CREDENTIALS_ID:
+                type: string
+                description: "ID of jenkins credentials to be used when connecting to gerrit."
+                default: "gerrit"
+              OPENSTACK_API_PROJECT:
+                type: string
+                default: "mcp-oscore"
+              HEAT_STACK_ZONE:
+                type: string
+                default: "mcp-oscore"
+              FLAVOR_PREFIX:
+                type: string
+                default: 'dev'
+              TEST_SCHEME:
+                type: string
+                description: "Yaml based scheme to be applied in testing"
+                default: '{"old": {"context_file_name": "openstack-ovs-core-{{openstack_version_old}}","extra_context": {"default_context": {"openstack_version": "{{openstack_version_old}}"}}}, "new": {"extra_context": {"default_context": {"openstack_version": "{{openstack_version_new}}"}}}}'
+      job:
+        oscore-test-adjust-cluster-model:
+          display_name: oscore-test-adjust-cluster-model
+          name: oscore-test-adjust-cluster-model
+          concurrent: true
+          description: Test upgrade flow for opentack cluster
+          discard:
+            build:
+             keep_num: 60
+            artifact:
+             keep_num: 60
+          type: workflow-scm
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines"
+            credentials: "gerrit"
+            branch: 'master'
+            script: adjust-cluster-model.groovy
+          param:
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              description: "ID of salt API credentials."
+              default: "salt-qa-credentials"
+            SALT_MASTER_URL:
+              type: string
+              description: 'Url for salt API.'
+            TEST_SCHEME:
+              type: text
+              description: "Yaml based scheme to be applied in testing"
diff --git a/jenkins/client/job/oscore/tests.yml b/jenkins/client/job/oscore/tests.yml
index be2326b..af33cc1 100644
--- a/jenkins/client/job/oscore/tests.yml
+++ b/jenkins/client/job/oscore/tests.yml
@@ -148,6 +148,10 @@
                 type: boolean
                 description: Whether to use container with rally
                 default: "{{use_rally}}"
+              TEST_MILESTONE:
+                type: string
+                description: Product milestone
+                default: ""
         test-openstack-component-periodic:
           name: "{{job_prefix}}-{{milestone}}-{{model}}-{{openstack_version}}-{{formula_pkg_revision}}"
           template:
@@ -704,7 +708,7 @@
             trigger:
               gerrit:
                 project:
-                  "^salt-formulas/(nova|cinder|glance|keystone|horizon|neutron|designate|heat|ironic|barbican|aodh|ceilometer|gnocchi|panko|manila|salt|linux|reclass|galera|memcached|rabbitmq|bind|apache|runtest)$":
+                  "^salt-formulas/(nova|cinder|glance|keystone|horizon|neutron|designate|heat|ironic|barbican|aodh|ceilometer|gnocchi|panko|manila|salt|linux|reclass|galera|memcached|rabbitmq|bind|apache|runtest|oslo-templates|auditd)$":
                     compare_type: 'REG_EXP'
                     branches:
                       - master
diff --git a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
index a2b000a..d8e9f22 100644
--- a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
+++ b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
@@ -26,6 +26,9 @@
             - name: avinetworks
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
+            - name: auditd
+              branches: ${_param:salt_formulas_branches}
+              notification_recipients: ${_param:salt_formulas_notification_recipients}
             - name: backupninja
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
diff --git a/jenkins/client/job/salt-formulas/tests.yml b/jenkins/client/job/salt-formulas/tests.yml
index 07a8fb4..1c9f4fb 100644
--- a/jenkins/client/job/salt-formulas/tests.yml
+++ b/jenkins/client/job/salt-formulas/tests.yml
@@ -54,6 +54,7 @@
             - name: heketi
             - name: helm
             - name: horizon
+            - name: hubble
             - name: influxdb
             - name: iptables
             - name: ironic
@@ -91,6 +92,7 @@
             - name: octavia
             - name: opencontrail
             - name: openldap
+            - name: openscap
             - name: openssh
             - name: openvpn
             - name: openvstorage
@@ -176,6 +178,12 @@
               PARALLEL_GROUP_SIZE:
                 type: string
                 default: "8"
+              RUN_TEST_IN_DOCKER:
+                type: boolean
+                description: "Run test stage in docker environment"
+              SMOKE_TEST_DOCKER_IMG:
+                type: string
+                default: "ubuntu:16.04"
       job:
         test-salt-formulas-env:
           name: test-salt-formulas-env
diff --git a/jenkins/client/job/salt-models/tests.yml b/jenkins/client/job/salt-models/tests.yml
index 80135b5..c820d26 100644
--- a/jenkins/client/job/salt-models/tests.yml
+++ b/jenkins/client/job/salt-models/tests.yml
@@ -294,7 +294,7 @@
                 default: "1"
               EXTRA_FORMULAS:
                 type: string
-                default: "aptly artifactory backupninja collectd devops-portal docker elasticsearch fluentd freeipa gerrit glusterfs grafana haproxy heka horizon influxdb jenkins keepalived kibana libvirt maas memcached mysql nginx ntp openldap openssh postfix prometheus rsync rsyslog rundeck sensu sphinx telegraf xtrabackup watchdog"
+                default: "aptly artifactory auditd backupninja collectd devops-portal docker elasticsearch fluentd freeipa gerrit glusterfs grafana haproxy heka horizon influxdb jenkins keepalived kibana libvirt maas memcached mysql nginx ntp openldap openssh postfix prometheus rsync rsyslog rundeck sensu sphinx telegraf xtrabackup watchdog"
       job:
         test-salt-model-node:
           name: test-salt-model-node
@@ -350,7 +350,11 @@
               default: ""
             RECLASS_VERSION:
               type: string
-              default: "master"
+              # In our repos the latest reclass we using is 1.4.1. The new version 1.5.2 is not compatible
+              # by syntax with 1.4.1 more details may be found here PROD-20425.
+              # Run rendering tests against version we using on customer side, until new version of reclass is
+              # packaged and placed to our repos, so we can do smooth transition to new syntax.
+              default: "reclass-1.4.1"
               description: "Version (branch) of Reclass we will use"
             MAX_CPU_PER_JOB:
               type: string
diff --git a/jenkins/client/job/test_pipelines.yml b/jenkins/client/job/test_pipelines.yml
index c9a2442..2b0fabe 100644
--- a/jenkins/client/job/test_pipelines.yml
+++ b/jenkins/client/job/test_pipelines.yml
@@ -46,7 +46,7 @@
                 default: "gerrit"
               GRADLE_IMAGE:
                 type: string
-                default: "niaquinto/gradle"
+                default: "docker-dev-local.docker.mirantis.net/mirantis/cicd/niaquinto_gradle"
               GRADLE_CMD:
                 type: string
                 default: "check --info"
diff --git a/jenkins/client/job/validate.yml b/jenkins/client/job/validate.yml
index c97c0ad..32b0c0f 100644
--- a/jenkins/client/job/validate.yml
+++ b/jenkins/client/job/validate.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
+    cvp_sanity_default_repo: "https://github.com/Mirantis/cvp-sanity-checks"
   jenkins:
     client:
       view:
@@ -162,7 +163,7 @@
             url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
             branch: "${_param:jenkins_pipelines_branch}"
             credentials: "gerrit"
-            script: cvp-sanity.groovy
+            script: cvp-runner.groovy
           param:
             SALT_MASTER_URL:
               type: string
@@ -171,17 +172,17 @@
             SALT_MASTER_CREDENTIALS:
               type: string
               default: "salt"
-            SANITY_TESTS_REPO:
+            TESTS_REPO:
               type: string
-              default: "https://github.com/Mirantis/cvp-sanity-checks"
+              default: "${_param:cvp_sanity_default_repo}"
               description: Url for cvp-sanity-checks
-            SANITY_TESTS_SETTINGS:
+            TESTS_SETTINGS:
               type: string
               default: ""
               description: e.g. skipped_nodes=nal01.local.com,ntw01.local.com
-            SANITY_TESTS_SET:
+            TESTS_SET:
               type: string
-              default: ""
+              default: "cvp-sanity-check/cvp_checks/tests/"
               description: Leave empty for full run or choose a file, e.g. test_mtu.py
             PROXY:
               type: string
@@ -404,3 +405,43 @@
               type: string
               default: ""
               description: Proxy address to clone repo and install python requirements
+        cvp-spt:
+          type: workflow-scm
+          name: cvp-spt
+          display_name: "CVP - Simplified Performance Tests (SPT)"
+          discard:
+            build:
+              keep_num: 20
+            artifact:
+              keep_num: 20
+          concurrent: false
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            branch: "${_param:jenkins_pipelines_branch}"
+            credentials: "gerrit"
+            script: cvp-spt.groovy
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: "${_param:jenkins_salt_api_url}"
+              description: Full Salt API address [e.g. https://10.10.10.2:6969]
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+            TESTS_REPO:
+              type: string
+              default: "https://github.com/Mirantis/cvp-spt"
+              description: Url for cvp-spt repository
+            TESTS_SETTINGS:
+              type: string
+              default: ""
+              description: "Additional environment variables to export"
+            TESTS_SET:
+              type: string
+              default: "cvp-spt/cvp_spt/tests/"
+              description: "Leave empty for full run or choose a file, e.g. test_glance.py"
+            PROXY:
+              type: string
+              default: ""
+              description: Proxy address to clone repo and install python requirements
diff --git a/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml b/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml
index 79d53aa..b63aa34 100644
--- a/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml
+++ b/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml
@@ -2,10 +2,10 @@
   jenkins:
     client:
       job:
-        deploy_cloudify:
+        deploy_cloudify_enterprise:
           type: workflow-scm
-          name: deploy-cloudify
-          display_name: "Deploy Cloudify"
+          name: deploy-cloudify-enterprise
+          display_name: "Deploy Cloudify Enterprise"
           discard:
             build:
               keep_num: 20
@@ -36,7 +36,7 @@
               default: "${_param:vnf_gerrit_credentials}"
             CFM_IMAGE:
               type: string
-              default: "cloudify-enterprise"
+              default: "cloudify-manager-4.3.1ga"
             CFM_FLAVOR:
               type: string
               default: "cfy.mngr"
@@ -69,4 +69,4 @@
               default: "latest"
             VNF_DOCKER_CLI_PLATFORM:
               type: string
-              default: "ubuntu"
\ No newline at end of file
+              default: "ubuntu"
diff --git a/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml b/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml
index 43586f7..ce28c72 100644
--- a/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml
+++ b/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml
@@ -1,133 +1,7 @@
 parameters:
-  jenkins:
-    client:
-      plugin:
-        gerrit-trigger: {}
-      job:
-        test_avi_loadbalancer:
-          type: workflow-scm
-          name: test-avi-loadbalancer
-          display_name: "Onboarding tests for the AVI Loadbalancer VNF"
-          discard:
-            build:
-              keep_num: 20
-          scm:
-            type: git
-            url: "${_param:jenkins_gerrit_url}/vnf-onboarding/pipelines"
-            credentials: "${_param:vnf_gerrit_credentials}"
-            script: test_vnf_onboarding.groovy
-          trigger:
-            gerrit:
-              project:
-                "vnf-onboarding/avi-loadbalancer":
-                  branches:
-                    - compare_type: "ANT"
-                      name: "**"
-              event:
-                patchset:
-                  - created:
-                      excludeDrafts: false
-                      excludeTrivialRebase: false
-                      excludeNoCodeChange: false
-                change:
-                 - merged
-                comment:
-                  - addedContains:
-                      commentAddedCommentContains: '(retest|recheck|reverify)'
-              message:
-                build_successful: "Build successful"
-                build_unstable: "Build unstable"
-                build_failure: "Build failed"
-          param:
-            DEFAULT_GIT_URL:
-              type: string
-              default: "${_param:jenkins_gerrit_url}/vnf-onboarding/avi-loadbalancer"
-            DEFAULT_GIT_REF:
-              type: string
-              default: master
-            OPENSTACK_API_URL:
-              type: string
-              default: "${_param:vnf_openstack_api_url}"
-            OPENSTACK_API_CREDENTIALS:
-              type: string
-              default: "${_param:vnf_openstack_api_credentials}"
-            OPENSTACK_API_TENANT:
-              type: string
-              default: "test-avi"
-            GERRIT_CREDENTIALS:
-              type: string
-              default: "${_param:vnf_gerrit_credentials}"
-            ELASTIC_URL:
-              type: string
-              default: "${_param:vnf_elastic_url}"
-            DEBUG_OPTIONS:
-              type: string
-              description: "Example: skip_all=1 skip_deploy=1 skip_inspection=1"
-            NFV_PLATFORM_REPO:
-              type: string
-              description: "Take Cloudify blueprints, Dockerfile and CI scripts from this repo"
-              default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nfv-platform"
-            NFV_PLATFORM_REPO_BRANCH:
-              type: string
-              default: "master"
-            NFV_PLATFORM_REPO_CREDENTIALS:
-              type: string
-              default: "${_param:vnf_gerrit_credentials}"
-            CONTRAIL_ENABLED:
-              type: boolean
-              default: false
-            CONTRAIL_API_URL:
-              type: string
-              default: "${_param:contrail_api_url}"
-            SETUP_OWN_CLOUDIFY:
-              type: boolean
-              description: "Use temporary private Cloudify instance"
-              default: false
-            CLOUDIFY_MANAGER_IP:
-              type: string
-              description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify job Cloudify instance"
-              default: "auto"
-            CLOUDIFY_MANAGER_OPTIONS:
-              type: string
-              description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
-              default: "CFM_IMAGE=cloudify-manager-4.3.1ga CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
-            CFM_SSH_KEY_ID:
-              type: string
-              description: "Credentials ID of ssh key for connection to Cloudify"
-              default: "${_param:vnf_openstack_ssh_key_credentials}"
-            CLOUDIFY_AGENT_OPTIONS:
-              type: string
-              description: "Parameters for cloudify agent VMs."
-              default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.avi CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
-            VNF_ARTIFACTORY_URL:
-              type: string
-              default: "${_param:vnf_artifactory_url}"
-            VNF_ARTIFACTORY_PLUGINS_DIR:
-              type: string
-              default: "${_param:vnf_artifactory_url}/cloudify/plugins/"
-            VNF_DOCKER_REGISTRY_PATH:
-              type: string
-              default: "${_param:vnf_docker_registry_path}"
-            VNF_DOCKER_CLI_TAG:
-              type: string
-              default: "latest"
-            VNF_DOCKER_SCRUN_TAG:
-              type: string
-              default: "latest"
-            VNF_DOCKER_AVICFG_TAG:
-              type: string
-              default: "latest"
-            VNF_PLUGINS:
-              type: string
-              description: "Plugins to fetch from artifactory and install during build package step"
-              default: "vnf_onboarding_tools-0.1-py27-none-linux_x86_64_Ubuntu_xenial"
-            VNF_OPTIONS:
-              type: string
-              default: "AVI_VERSION=17.2.3 AVI_USERNAME=admin AVI_PASSWORD=Swordfish1234 AVI_IMAGE_PASSWORD=58NFaGDJm(PJH0G AVI_OS_FLAVOR=avi_ctrl.small AVI_OS_IMAGE=avi-control-17.2.3"
-            VNF_DOCKER_CLI_PLATFORM:
-              type: string
-              default: "ubuntu"
-            CLOUDIFY_DEPLOYMENT_TIMEOUT:
-              type: string
-              description: "Set up timeout for cloudify deployment (depends on each VNF specific and network throughput)."
-              default: 1800
+  _param:
+    vnf_onboarding_avi_jobs:
+      - edition: enterprise
+        cfy_image: cloudify-manager-4.3.1ga
+      - edition: community
+        cfy_image: cloudify-manager-community-18.2.28
\ No newline at end of file
diff --git a/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer_template.yml b/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer_template.yml
new file mode 100644
index 0000000..54d82fc
--- /dev/null
+++ b/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer_template.yml
@@ -0,0 +1,143 @@
+parameters:
+  _param:
+    vnf_onboarding_avi_jobs: []
+  jenkins:
+    client:
+      plugin:
+        gerrit-trigger: {}
+      job-template:
+        test_avi_loadbalancer:
+          name: "test-avi-loadbalancer-{{edition}}"
+          template:
+            type: workflow-scm
+            display_name: "Onboarding tests for the AVI Loadbalancer VNF against CFY {{edition}} edition"
+            discard:
+              build:
+                keep_num: 20
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/vnf-onboarding/pipelines"
+              credentials: "${_param:vnf_gerrit_credentials}"
+              script: test_vnf_onboarding.groovy
+            trigger:
+              gerrit:
+                project:
+                  "vnf-onboarding/avi-loadbalancer":
+                    branches:
+                      - compare_type: "ANT"
+                        name: "**"
+                event:
+                  patchset:
+                    - created:
+                        excludeDrafts: false
+                        excludeTrivialRebase: false
+                        excludeNoCodeChange: false
+                  change:
+                   - merged
+                  comment:
+                    - addedContains:
+                        commentAddedCommentContains: '(retest|recheck|reverify)'
+                message:
+                  build_successful: "Build successful"
+                  build_unstable: "Build unstable"
+                  build_failure: "Build failed"
+            param:
+              DEFAULT_GIT_URL:
+                type: string
+                default: "${_param:jenkins_gerrit_url}/vnf-onboarding/avi-loadbalancer"
+              DEFAULT_GIT_REF:
+                type: string
+                default: master
+              OPENSTACK_API_URL:
+                type: string
+                default: "${_param:vnf_openstack_api_url}"
+              OPENSTACK_API_CREDENTIALS:
+                type: string
+                default: "${_param:vnf_openstack_api_credentials}"
+              OPENSTACK_API_TENANT:
+                type: string
+                default: "test-avi"
+              GERRIT_CREDENTIALS:
+                type: string
+                default: "${_param:vnf_gerrit_credentials}"
+              ELASTIC_URL:
+                type: string
+                default: "${_param:vnf_elastic_url}"
+              DEBUG_OPTIONS:
+                type: string
+                description: "Example: skip_all=1 skip_deploy=1 skip_inspection=1"
+              NFV_PLATFORM_REPO:
+                type: string
+                description: "Take Cloudify blueprints, Dockerfile and CI scripts from this repo"
+                default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nfv-platform"
+              NFV_PLATFORM_REPO_BRANCH:
+                type: string
+                default: "master"
+              NFV_PLATFORM_REPO_CREDENTIALS:
+                type: string
+                default: "${_param:vnf_gerrit_credentials}"
+              CONTRAIL_ENABLED:
+                type: boolean
+                default: false
+              CONTRAIL_API_URL:
+                type: string
+                default: "${_param:contrail_api_url}"
+              SETUP_OWN_CLOUDIFY:
+                type: boolean
+                description: "Use temporary private Cloudify instance"
+                default: false
+              CLOUDIFY_MANAGER_IP:
+                type: string
+                description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify_enterprise job Cloudify instance"
+                default: "auto"
+              CLOUDIFY_MANAGER_OPTIONS:
+                type: string
+                description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
+                default: "CFM_IMAGE={{cfy_image}} CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
+              CFM_SSH_KEY_ID:
+                type: string
+                description: "Credentials ID of ssh key for connection to Cloudify"
+                default: "${_param:vnf_openstack_ssh_key_credentials}"
+              CLOUDIFY_AGENT_OPTIONS:
+                type: string
+                description: "Parameters for cloudify agent VMs."
+                default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.avi CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
+              CLOUDIFY_MANAGER_VERSION:
+                type: choice
+                choices:
+                 - enterprise
+                 - community
+                default: "{{edition}}"
+                description: "CFY edition version, make sure that it is consistent with CFY Manager image"
+              VNF_ARTIFACTORY_URL:
+                type: string
+                default: "${_param:vnf_artifactory_url}"
+              VNF_ARTIFACTORY_PLUGINS_DIR:
+                type: string
+                default: "${_param:vnf_artifactory_url}/cloudify/plugins/"
+              VNF_DOCKER_REGISTRY_PATH:
+                type: string
+                default: "${_param:vnf_docker_registry_path}"
+              VNF_DOCKER_CLI_TAG:
+                type: string
+                default: "latest"
+              VNF_DOCKER_SCRUN_TAG:
+                type: string
+                default: "latest"
+              VNF_DOCKER_AVICFG_TAG:
+                type: string
+                default: "latest"
+              VNF_PLUGINS:
+                type: string
+                description: "Plugins to fetch from artifactory and install during build package step"
+                default: "vnf_onboarding_tools-0.2-py27-none-linux_x86_64_CentOS_Core"
+              VNF_OPTIONS:
+                type: string
+                default: "AVI_VERSION=17.2.3 AVI_USERNAME=admin AVI_PASSWORD=Swordfish1234 AVI_IMAGE_PASSWORD=58NFaGDJm(PJH0G AVI_OS_FLAVOR=avi_ctrl.small AVI_OS_IMAGE=avi-control-17.2.3"
+              VNF_DOCKER_CLI_PLATFORM:
+                type: string
+                default: "ubuntu"
+              VNF_DEPLOYMENT_TIMEOUT:
+                type: string
+                description: "Set up timeout for cloudify deployment (depends on each VNF specific and network throughput)."
+                default: 1800
diff --git a/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml b/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml
index cdb073a..e24850b 100644
--- a/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml
+++ b/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml
@@ -1,131 +1,7 @@
 parameters:
-  jenkins:
-    client:
-      plugin:
-        gerrit-trigger: {}
-      job:
-        test_nginx_vnf:
-          type: workflow-scm
-          name: test-nginx-vnf
-          display_name: "Onboarding tests for the NGINX VNF"
-          discard:
-            build:
-              keep_num: 20
-          scm:
-            type: git
-            url: "${_param:jenkins_gerrit_url}/vnf-onboarding/pipelines"
-            credentials: "${_param:vnf_gerrit_credentials}"
-            script: test_vnf_onboarding.groovy
-          trigger:
-            gerrit:
-              project:
-                "vnf-onboarding/nginx-vnf":
-                  branches:
-                    - compare_type: "ANT"
-                      name: "**"
-              event:
-                patchset:
-                  - created:
-                      excludeDrafts: false
-                      excludeTrivialRebase: false
-                      excludeNoCodeChange: false
-                change:
-                 - merged
-                comment:
-                  - addedContains:
-                      commentAddedCommentContains: '(retest|recheck|reverify)'
-              message:
-                build_successful: "Build successful"
-                build_unstable: "Build unstable"
-                build_failure: "Build failed"
-          param:
-            DEFAULT_GIT_URL:
-              type: string
-              default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nginx-vnf"
-            DEFAULT_GIT_REF:
-              type: string
-              default: master
-            OPENSTACK_API_URL:
-              type: string
-              default: "${_param:vnf_openstack_api_url}"
-            OPENSTACK_API_CREDENTIALS:
-              type: string
-              default: "${_param:vnf_openstack_api_credentials}"
-            OPENSTACK_API_TENANT:
-              type: string
-              default: "test-nginx"
-            GERRIT_CREDENTIALS:
-              type: string
-              default: "${_param:vnf_gerrit_credentials}"
-            ELASTIC_URL:
-              type: string
-              default: "${_param:vnf_elastic_url}"
-            DEBUG_OPTIONS:
-              type: string
-              default: "skip_inspection=1"
-              description: "Example: skip_all=1 skip_deploy=1 skip_inspection=1"
-            NFV_PLATFORM_REPO:
-              type: string
-              description: "Take Cloudify blueprints, Dockerfile and CI scripts from this repo"
-              default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nfv-platform"
-            NFV_PLATFORM_REPO_BRANCH:
-              type: string
-              default: "master"
-            NFV_PLATFORM_REPO_CREDENTIALS:
-              type: string
-              default: "${_param:vnf_gerrit_credentials}"
-            CONTRAIL_ENABLED:
-              type: boolean
-              default: false
-            CONTRAIL_API_URL:
-              type: string
-              default: "${_param:contrail_api_url}"
-            SETUP_OWN_CLOUDIFY:
-              type: boolean
-              description: "Use temporary private Cloudify instance"
-              default: false
-            CLOUDIFY_MANAGER_IP:
-              type: string
-              description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify job Cloudify instance"
-              default: "auto"
-            CLOUDIFY_MANAGER_OPTIONS:
-              type: string
-              description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
-              default: "CFM_IMAGE=cloudify-manager-4.3.1ga CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
-            CFM_SSH_KEY_ID:
-              type: string
-              description: "Credentials ID of ssh key for connection to Cloudify"
-              default: "${_param:vnf_openstack_ssh_key_credentials}"
-            CLOUDIFY_AGENT_OPTIONS:
-              type: string
-              description: "Parameters for cloudify agent VMs."
-              default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.nginx CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
-            VNF_ARTIFACTORY_URL:
-              type: string
-              default: "${_param:vnf_artifactory_url}"
-            VNF_ARTIFACTORY_PLUGINS_DIR:
-              type: string
-              default: "${_param:vnf_artifactory_url}/cloudify/plugins/"
-            VNF_DOCKER_REGISTRY_PATH:
-              type: string
-              default: "${_param:vnf_docker_registry_path}"
-            VNF_DOCKER_CLI_TAG:
-              type: string
-              default: "latest"
-            VNF_DOCKER_SCRUN_TAG:
-              type: string
-              default: "latest"
-            VNF_PLUGINS:
-              type: string
-              description: "Plugins to fetch from artifactory and install during build package step"
-              default: "vnf_onboarding_tools-0.1-py27-none-linux_x86_64_Ubuntu_xenial"
-            VNF_OPTIONS:
-              type: string
-              default: ""
-            VNF_DOCKER_CLI_PLATFORM:
-              type: string
-              default: "ubuntu"
-            CLOUDIFY_DEPLOYMENT_TIMEOUT:
-              type: string
-              description: "Set up timeout for cloudify deployment (depends on each VNF specific and network throughput)."
-              default: 900
+  _param:
+    vnf_onboarding_nginx_jobs:
+      - edition: enterprise
+        cfy_image: cloudify-manager-4.3.1ga
+      - edition: community
+        cfy_image: cloudify-manager-community-18.2.28
\ No newline at end of file
diff --git a/jenkins/client/job/vnf-onboarding/test_nginx_vnf_template.yml b/jenkins/client/job/vnf-onboarding/test_nginx_vnf_template.yml
new file mode 100644
index 0000000..e2f4cbd
--- /dev/null
+++ b/jenkins/client/job/vnf-onboarding/test_nginx_vnf_template.yml
@@ -0,0 +1,142 @@
+parameters:
+  _param:
+    vnf_onboarding_nginx_jobs: []
+  jenkins:
+    client:
+      plugin:
+        gerrit-trigger: {}
+      job_template:
+        test_nginx_vnf:
+          name: "test-nginx-vnf-{{edition}}"
+          template:
+            type: workflow-scm
+
+            display_name: "Onboarding tests for the NGINX VNF against CFY {{edition}} edition"
+            discard:
+              build:
+                keep_num: 20
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/vnf-onboarding/pipelines"
+              credentials: "${_param:vnf_gerrit_credentials}"
+              script: test_vnf_onboarding.groovy
+            trigger:
+              gerrit:
+                project:
+                  "vnf-onboarding/nginx-vnf":
+                    branches:
+                      - compare_type: "ANT"
+                        name: "**"
+                event:
+                  patchset:
+                    - created:
+                        excludeDrafts: false
+                        excludeTrivialRebase: false
+                        excludeNoCodeChange: false
+                  change:
+                   - merged
+                  comment:
+                    - addedContains:
+                        commentAddedCommentContains: '(retest|recheck|reverify)'
+                message:
+                  build_successful: "Build successful"
+                  build_unstable: "Build unstable"
+                  build_failure: "Build failed"
+            param:
+              DEFAULT_GIT_URL:
+                type: string
+                default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nginx-vnf"
+              DEFAULT_GIT_REF:
+                type: string
+                default: master
+              OPENSTACK_API_URL:
+                type: string
+                default: "${_param:vnf_openstack_api_url}"
+              OPENSTACK_API_CREDENTIALS:
+                type: string
+                default: "${_param:vnf_openstack_api_credentials}"
+              OPENSTACK_API_TENANT:
+                type: string
+                default: "test-nginx"
+              GERRIT_CREDENTIALS:
+                type: string
+                default: "${_param:vnf_gerrit_credentials}"
+              ELASTIC_URL:
+                type: string
+                default: "${_param:vnf_elastic_url}"
+              DEBUG_OPTIONS:
+                type: string
+                default: "skip_inspection=1"
+                description: "Example: skip_all=1 skip_deploy=1 skip_inspection=1"
+              NFV_PLATFORM_REPO:
+                type: string
+                description: "Take Cloudify blueprints, Dockerfile and CI scripts from this repo"
+                default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nfv-platform"
+              NFV_PLATFORM_REPO_BRANCH:
+                type: string
+                default: "master"
+              NFV_PLATFORM_REPO_CREDENTIALS:
+                type: string
+                default: "${_param:vnf_gerrit_credentials}"
+              CONTRAIL_ENABLED:
+                type: boolean
+                default: false
+              CONTRAIL_API_URL:
+                type: string
+                default: "${_param:contrail_api_url}"
+              SETUP_OWN_CLOUDIFY:
+                type: boolean
+                description: "Use temporary private Cloudify instance"
+                default: false
+              CLOUDIFY_MANAGER_IP:
+                type: string
+                description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify_enterprise job Cloudify instance"
+                default: "auto"
+              CLOUDIFY_MANAGER_OPTIONS:
+                type: string
+                description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
+                default: "CFM_IMAGE={{cfy_image}} CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
+              CFM_SSH_KEY_ID:
+                type: string
+                description: "Credentials ID of ssh key for connection to Cloudify"
+                default: "${_param:vnf_openstack_ssh_key_credentials}"
+              CLOUDIFY_AGENT_OPTIONS:
+                type: string
+                description: "Parameters for cloudify agent VMs."
+                default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.nginx CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
+              CLOUDIFY_MANAGER_VERSION:
+                type: choice
+                choices:
+                 - enterprise
+                 - community
+                default: "{{edition}}"
+                description: "CFY edition version, make sure that it is consistent with CFY Manager image"
+              VNF_ARTIFACTORY_URL:
+                type: string
+                default: "${_param:vnf_artifactory_url}"
+              VNF_ARTIFACTORY_PLUGINS_DIR:
+                type: string
+                default: "${_param:vnf_artifactory_url}/cloudify/plugins/"
+              VNF_DOCKER_REGISTRY_PATH:
+                type: string
+                default: "${_param:vnf_docker_registry_path}"
+              VNF_DOCKER_CLI_TAG:
+                type: string
+                default: "latest"
+              VNF_DOCKER_SCRUN_TAG:
+                type: string
+                default: "latest"
+              VNF_PLUGINS:
+                type: string
+                description: "Plugins to fetch from artifactory and install during build package step"
+                default: "vnf_onboarding_tools-0.2-py27-none-linux_x86_64_CentOS_Core"
+              VNF_OPTIONS:
+                type: string
+                default: ""
+              VNF_DOCKER_CLI_PLATFORM:
+                type: string
+                default: "ubuntu"
+              VNF_DEPLOYMENT_TIMEOUT:
+                type: string
+                description: "Set up timeout for cloudify deployment (depends on each VNF specific and network throughput)."
+                default: 900
diff --git a/keepalived/cluster/instance/kube_api_server_vip.yml b/keepalived/cluster/instance/kube_api_server_vip.yml
new file mode 100644
index 0000000..f7fbce8
--- /dev/null
+++ b/keepalived/cluster/instance/kube_api_server_vip.yml
@@ -0,0 +1,28 @@
+applications:
+- keepalived
+classes:
+- service.keepalived.support
+parameters:
+  _param:
+    keepalived_vip_priority: 101
+    keepalived_kube_apiserver_vrrp_script_content: "pidof haproxy && systemctl status kube-apiserver.service --quiet --no-pager"
+    keepalived_k8s_apiserver_vip_interface: ens3
+    keepalived_k8s_apiserver_vip_address: ${_param:kubernetes_control_address}
+    keepalived_k8s_apiserver_vip_password: password
+  keepalived:
+    cluster:
+      vrrp_scripts:
+        k8s_vip:
+          content: ${_param:keepalived_kube_apiserver_vrrp_script_content}
+          interval: 10
+          rise: 1
+          fall: 1
+      enabled: true
+      instance:
+        kube_apiserver_vip:
+          address: ${_param:keepalived_k8s_apiserver_vip_address}
+          password: ${_param:keepalived_k8s_apiserver_vip_password}
+          interface: ${_param:keepalived_k8s_apiserver_vip_interface}
+          virtual_router_id: 60
+          priority: ${_param:keepalived_vip_priority}
+          track_script: k8s_vip
\ No newline at end of file
diff --git a/keycloak/proxy/application/devops_portal.yml b/keycloak/proxy/application/devops_portal.yml
new file mode 100644
index 0000000..bf09f69
--- /dev/null
+++ b/keycloak/proxy/application/devops_portal.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    keycloak_proxy_devops_portal_base_path: "/"
+  keycloak:
+    proxy:
+      applications:
+        devops_portal:
+          base_path: "${_param:keycloak_proxy_devops_portal_base_path}"
+          adapter_config:
+            realm: "jaeger"
+            auth_server_url: "http://keycloak/auth"
+            resource: "proxy-jaeger"
+
diff --git a/keystone/client/core.yml b/keystone/client/core.yml
index f869059..899f4aa 100644
--- a/keystone/client/core.yml
+++ b/keystone/client/core.yml
@@ -1,3 +1,5 @@
+classes:
+- system.keystone.client.os_client_config.admin_identity
 parameters:
   _param:
     keystone_service_protocol: http
diff --git a/keystone/client/v3/init.yml b/keystone/client/v3/init.yml
new file mode 100644
index 0000000..148da41
--- /dev/null
+++ b/keystone/client/v3/init.yml
@@ -0,0 +1,15 @@
+parameters:
+  keystone:
+    client:
+      resources:
+        v3:
+          enabled: true
+      server:
+        identity:
+          admin:
+            api_version: 3
+        admin_identity:
+          admin:
+            api_version: ''
+            user_domain_name: 'Default'
+            project_domain_name: 'Default'
diff --git a/keystone/client/v3/service/panko.yml b/keystone/client/v3/service/panko.yml
index ee94697..cf09f34 100644
--- a/keystone/client/v3/service/panko.yml
+++ b/keystone/client/v3/service/panko.yml
@@ -15,7 +15,7 @@
                 service_admin:
                   name: admin
                   project_id: service
-          service:
+          services:
             panko:
               type: event
               description: OpenStack Event Service
diff --git a/keystone/client/vnf_onboarding/avi_loadbalancer.yml b/keystone/client/vnf_onboarding/avi_loadbalancer.yml
index d14576d..1acddad 100644
--- a/keystone/client/vnf_onboarding/avi_loadbalancer.yml
+++ b/keystone/client/vnf_onboarding/avi_loadbalancer.yml
@@ -20,3 +20,7 @@
                   is_admin: false
                   password: ${_param:vnf_openstack_test_user_password}
                   email: ${_param:vnf_openstack_test_user_email}
+                admin-test:
+                  is_admin: true
+                  password: ${_param:vnf_openstack_admin_user_password}
+                  email: ${_param:vnf_openstack_admin_user_email}
diff --git a/keystone/client/vnf_onboarding/metaswitch_vsbc.yml b/keystone/client/vnf_onboarding/metaswitch_vsbc.yml
index 42ed04f..0ec1be6 100644
--- a/keystone/client/vnf_onboarding/metaswitch_vsbc.yml
+++ b/keystone/client/vnf_onboarding/metaswitch_vsbc.yml
@@ -20,3 +20,7 @@
                   is_admin: false
                   password: ${_param:vnf_openstack_test_user_password}
                   email: ${_param:vnf_openstack_test_user_email}
+                admin-test:
+                  is_admin: true
+                  password: ${_param:vnf_openstack_admin_user_password}
+                  email: ${_param:vnf_openstack_admin_user_email}
diff --git a/keystone/client/vnf_onboarding/nginx_vnf.yml b/keystone/client/vnf_onboarding/nginx_vnf.yml
index be67940..283bb99 100644
--- a/keystone/client/vnf_onboarding/nginx_vnf.yml
+++ b/keystone/client/vnf_onboarding/nginx_vnf.yml
@@ -20,3 +20,7 @@
                   is_admin: false
                   password: ${_param:vnf_openstack_test_user_password}
                   email: ${_param:vnf_openstack_test_user_email}
+                admin-test:
+                  is_admin: true
+                  password: ${_param:vnf_openstack_admin_user_password}
+                  email: ${_param:vnf_openstack_admin_user_email}
diff --git a/keystone/server/cluster.yml b/keystone/server/cluster.yml
index 0ae502b..7e6980b 100644
--- a/keystone/server/cluster.yml
+++ b/keystone/server/cluster.yml
@@ -6,6 +6,7 @@
 parameters:
   _param:
     keystone_tokens_expiration: 3600
+    openstack_node_role: primary
   linux:
     system:
       package:
@@ -25,6 +26,7 @@
       admin_name: admin
       admin_password: ${_param:keystone_admin_password}
       admin_email: ${_param:admin_email}
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:cluster_local_address}
         private_address: ${_param:cluster_vip_address}
diff --git a/keystone/server/single.yml b/keystone/server/single.yml
index 16c26ca..2b1e89e 100644
--- a/keystone/server/single.yml
+++ b/keystone/server/single.yml
@@ -8,6 +8,7 @@
     mysql_admin_password: password
     mysql_keystone_password: password
     keystone_tokens_expiration: 3600
+    openstack_node_role: primary
   linux:
     system:
       package:
@@ -24,6 +25,7 @@
       admin_name: admin
       admin_password: ${_param:keystone_admin_password}
       admin_email: ${_param:admin_email}
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:single_address}
         private_address: ${_param:single_address}
diff --git a/kubernetes/common.yml b/kubernetes/common.yml
new file mode 100644
index 0000000..ddf6973
--- /dev/null
+++ b/kubernetes/common.yml
@@ -0,0 +1,131 @@
+parameters:
+  _param:
+    kubernetes_calico_calicoctl_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
+    kubernetes_calico_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
+    kubernetes_calico_cni_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
+    kubernetes_hyperkube_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
+    kubernetes_contrail_cni_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
+    kubernetes_contrail_network_controller_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/contrail-integration
+    kubernetes_netchecker_agent_repo: mirantis
+    kubernetes_netchecker_server_repo: mirantis
+    kubernetes_virtlet_repo: mirantis
+    kubernetes_kubedns_repo: gcr.io/google_containers
+    kubernetes_externaldns_repo: mirantis
+    kubernetes_genie_repo: https://artifactory.mcp.mirantis.net/artifactory/binary-prod-local/mirantis/kubernetes/cni-genie
+    kubernetes_flannel_repo: quay.io/coreos
+    kubernetes_metallb_repo: metallb
+    kubernetes_sriov_repo: https://artifactory.mcp.mirantis.net/artifactory/binary-prod-local/mirantis/kubernetes/sriov-cni
+    kubernetes_cniplugins_repo: https://artifactory.mcp.mirantis.net/artifactory/binary-prod-local/mirantis/kubernetes/containernetworking-plugins
+
+    # component docker images
+    kubernetes_docker_package: docker-engine=1.13.1-0~ubuntu-xenial
+    kubernetes_calico_calicoctl_image: ${_param:kubernetes_calico_calicoctl_repo}/ctl:v1.6.4
+    kubernetes_calico_image: ${_param:kubernetes_calico_repo}/node:v2.6.10
+    kubernetes_calico_cni_image: ${_param:kubernetes_calico_cni_repo}/cni:v1.11.6
+    kubernetes_hyperkube_image: ${_param:kubernetes_hyperkube_repo}/hyperkube-amd64:v1.10.4-4
+    kubernetes_pause_image: ${_param:kubernetes_hyperkube_repo}/pause-amd64:v1.10.4-4
+    kubernetes_contrail_cni_image: ${_param:kubernetes_contrail_cni_repo}/contrail-cni:v1.2.0
+    kubernetes_contrail_network_controller_image: ${_param:kubernetes_contrail_network_controller_repo}/contrail-network-controller:v1.2.0
+    kubernetes_virtlet_image: ${_param:kubernetes_virtlet_repo}/virtlet:v1.1.2
+    kubernetes_criproxy_version: v0.11.1
+    kubernetes_criproxy_checksum: md5=a3f1f08bdc7a8d6eb73b7c8fa5bae200
+    kubernetes_netchecker_agent_image: ${_param:kubernetes_netchecker_agent_repo}/k8s-netchecker-agent:v1.2.2
+    kubernetes_netchecker_server_image: ${_param:kubernetes_netchecker_server_repo}/k8s-netchecker-server:v1.2.2
+    kubernetes_kubedns_image: ${_param:kubernetes_kubedns_repo}/k8s-dns-kube-dns-amd64:1.14.5
+    kubernetes_dnsmasq_image: ${_param:kubernetes_kubedns_repo}/k8s-dns-dnsmasq-amd64:1.14.5
+    kubernetes_sidecar_image: ${_param:kubernetes_kubedns_repo}/k8s-dns-sidecar-amd64:1.14.5
+    kubernetes_dns_autoscaler_image: ${_param:kubernetes_kubedns_repo}/cluster-proportional-autoscaler-amd64:1.0.0
+    kubernetes_externaldns_image: ${_param:kubernetes_externaldns_repo}/external-dns:v0.5.3
+    kubernetes_genie_source: ${_param:kubernetes_genie_repo}/genie_v1.0-138-gbf5dbaa
+    kubernetes_genie_source_hash: md5=b024052ed4ecb1d5354e0cc8f51afaca
+    kubernetes_flannel_image: ${_param:kubernetes_flannel_repo}/flannel:v0.10.0-amd64
+    kubernetes_metallb_controller_image: ${_param:kubernetes_metallb_repo}/controller:v0.6.2
+    kubernetes_metallb_speaker_image: ${_param:kubernetes_metallb_repo}/speaker:v0.6.2
+    kubernetes_sriov_source: ${_param:kubernetes_sriov_repo}/sriov_v0.3-8-g8b7ed98
+    kubernetes_sriov_source_hash: md5=c0cc33202afd02e4cc44b977a8faf6e7
+    kubernetes_cniplugins_source: ${_param:kubernetes_cniplugins_repo}/cni-plugins_v0.7.1-48-g696b1f9.tar.gz
+    kubernetes_cniplugins_source_hash: md5=5ec1cf5e989097c6127ea5365e277b02
+
+    kubelet_fail_on_swap: true
+    kubernetes_kubedns_enabled: true
+    kubernetes_externaldns_enabled: false
+    kubernetes_coredns_enabled: false
+    kubernetes_externaldns_provider: coredns
+    kubernetes_virtlet_enabled: false
+    kubernetes_flannel_enabled: false
+    kubernetes_genie_enabled: false
+    kubernetes_calico_enabled: false
+    kubernetes_opencontrail_enabled: false
+    kubernetes_contrail_network_controller_enabled: false
+    kubernetes_metallb_enabled: false
+    kubernetes_sriov_enabled: false
+
+  docker:
+    host:
+      pkgs:
+        - ${_param:kubernetes_docker_package}
+        - python-docker
+      options:
+        bip: 172.31.255.1/24
+        storage-driver: overlay2
+
+  kubernetes:
+    common:
+      hyperkube:
+        image: ${_param:kubernetes_hyperkube_image}
+        pause_image: ${_param:kubernetes_pause_image}
+      cni:
+        plugins:
+          source: ${_param:kubernetes_cniplugins_source}
+          hash: ${_param:kubernetes_cniplugins_source_hash}
+      addons:
+        dns:
+          enabled: ${_param:kubernetes_kubedns_enabled}
+          kubedns_image: ${_param:kubernetes_kubedns_image}
+          dnsmasq_image: ${_param:kubernetes_dnsmasq_image}
+          sidecar_image: ${_param:kubernetes_sidecar_image}
+          autoscaler:
+            image: ${_param:kubernetes_dns_autoscaler_image}
+        externaldns:
+          enabled: ${_param:kubernetes_externaldns_enabled}
+          namespace: kube-system
+          image: ${_param:kubernetes_externaldns_image}
+          provider: ${_param:kubernetes_externaldns_provider}
+        coredns:
+          enabled: ${_param:kubernetes_coredns_enabled}
+        contrail_network_controller:
+          enabled: ${_param:kubernetes_contrail_network_controller_enabled}
+          image: ${_param:kubernetes_contrail_network_controller_image}
+        flannel:
+          enabled: ${_param:kubernetes_flannel_enabled}
+          image: ${_param:kubernetes_flannel_image}
+        virtlet:
+          enabled: ${_param:kubernetes_virtlet_enabled}
+          namespace: kube-system
+          image: ${_param:kubernetes_virtlet_image}
+          criproxy_version: ${_param:kubernetes_criproxy_version}
+          criproxy_source: ${_param:kubernetes_criproxy_checksum}
+        metallb:
+          enabled: ${_param:kubernetes_metallb_enabled}
+    pool:
+      enabled: false
+      kubelet:
+        fail_on_swap: ${_param:kubelet_fail_on_swap}
+      container: false
+      network:
+        genie:
+          enabled: ${_param:kubernetes_genie_enabled}
+          source: ${_param:kubernetes_genie_source}
+          source_hash: ${_param:kubernetes_genie_source_hash}
+        calico:
+          enabled: ${_param:kubernetes_calico_enabled}
+          image: ${_param:kubernetes_calico_image}
+          calicoctl_image: ${_param:kubernetes_calico_calicoctl_image}
+          cni_image: ${_param:kubernetes_calico_cni_image}
+        opencontrail:
+          enabled: ${_param:kubernetes_opencontrail_enabled}
+          cni_image: ${_param:kubernetes_contrail_cni_image}
+        sriov:
+          enabled: ${_param:kubernetes_sriov_enabled}
+          source: ${_param:kubernetes_sriov_source}
+          source_hash: ${_param:kubernetes_sriov_source_hash}
diff --git a/kubernetes/control/roles/cluster-admin.yml b/kubernetes/control/roles/cluster-admin.yml
new file mode 100644
index 0000000..6ee5d7d
--- /dev/null
+++ b/kubernetes/control/roles/cluster-admin.yml
@@ -0,0 +1,2 @@
+classes:
+  - service.kubernetes.control.roles.cluster-admin
\ No newline at end of file
diff --git a/kubernetes/control/roles/fluentd-view.yml b/kubernetes/control/roles/fluentd-view.yml
new file mode 100644
index 0000000..b7ab403
--- /dev/null
+++ b/kubernetes/control/roles/fluentd-view.yml
@@ -0,0 +1,2 @@
+classes:
+  - service.kubernetes.control.roles.fluentd-view
\ No newline at end of file
diff --git a/kubernetes/master/auth/rbac.yml b/kubernetes/master/auth/rbac.yml
new file mode 100644
index 0000000..be0577b
--- /dev/null
+++ b/kubernetes/master/auth/rbac.yml
@@ -0,0 +1,5 @@
+parameters:
+  kubernetes:
+    master:
+      auth:
+        mode: Node,RBAC
diff --git a/kubernetes/master/cluster.yml b/kubernetes/master/cluster.yml
index 1295f3a..7cddd21 100644
--- a/kubernetes/master/cluster.yml
+++ b/kubernetes/master/cluster.yml
@@ -1,19 +1,12 @@
 classes:
 - service.kubernetes.master.cluster
-- service.keepalived.cluster.single
 - service.haproxy.proxy.single
 - system.haproxy.proxy.listen.kubernetes.apiserver
+- system.keepalived.cluster.instance.kube_api_server_vip
+- system.kubernetes.master.common
 parameters:
-  _param:
-    kubernetes_netchecker_agent_repo: mirantis
-    kubernetes_netchecker_server_repo: mirantis
-    kubernetes_netchecker_agent_image: ${_param:kubernetes_netchecker_agent_repo}/k8s-netchecker-agent:v1.2.2
-    kubernetes_netchecker_server_image: ${_param:kubernetes_netchecker_server_repo}/k8s-netchecker-server:v1.2.2
   kubernetes:
     master:
-      container: false
-      network:
         calico:
           prometheus:
             enabled: true
-
diff --git a/kubernetes/master/common.yml b/kubernetes/master/common.yml
new file mode 100644
index 0000000..0923286
--- /dev/null
+++ b/kubernetes/master/common.yml
@@ -0,0 +1,26 @@
+classes:
+- system.kubernetes.common
+parameters:
+  kubernetes:
+    master:
+      enabled: true
+      kubelet:
+        fail_on_swap: ${_param:kubelet_fail_on_swap}
+      container: false
+      network:
+        genie:
+          enabled: ${_param:kubernetes_genie_enabled}
+          source: ${_param:kubernetes_genie_source}
+          source_hash: ${_param:kubernetes_genie_source_hash}
+        calico:
+          enabled: ${_param:kubernetes_calico_enabled}
+          image: ${_param:kubernetes_calico_image}
+          calicoctl_image: ${_param:kubernetes_calico_calicoctl_image}
+          cni_image: ${_param:kubernetes_calico_cni_image}
+        opencontrail:
+          enabled: ${_param:kubernetes_opencontrail_enabled}
+          cni_image: ${_param:kubernetes_contrail_cni_image}
+        sriov:
+          enabled: ${_param:kubernetes_sriov_enabled}
+          source: ${_param:kubernetes_sriov_source}
+          source_hash: ${_param:kubernetes_sriov_source_hash}
\ No newline at end of file
diff --git a/kubernetes/master/single.yml b/kubernetes/master/single.yml
index 7fada57..31cbc28 100644
--- a/kubernetes/master/single.yml
+++ b/kubernetes/master/single.yml
@@ -1,11 +1,3 @@
 classes:
 - service.kubernetes.master.single
-parameters:
-  _param:
-    kubernetes_netchecker_agent_repo: mirantis
-    kubernetes_netchecker_server_repo: mirantis
-    kubernetes_netchecker_agent_image: ${_param:kubernetes_netchecker_agent_repo}/k8s-netchecker-agent:v1.2.2
-    kubernetes_netchecker_server_image: ${_param:kubernetes_netchecker_server_repo}/k8s-netchecker-server:v1.2.2
-  kubernetes:
-    master:
-      container: false
+- system.kubernetes.master.common
diff --git a/kubernetes/pool/cluster.yml b/kubernetes/pool/cluster.yml
index 17e9006..61ebc3c 100644
--- a/kubernetes/pool/cluster.yml
+++ b/kubernetes/pool/cluster.yml
@@ -1,26 +1,11 @@
 classes:
 - service.kubernetes.pool.cluster
 - service.docker.host
+- system.kubernetes.common
 parameters:
-  _param:
-    kubernetes_calico_calicoctl_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
-    kubernetes_calico_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
-    kubernetes_calico_cni_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
-    kubernetes_hyperkube_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
-    kubernetes_contrail_cni_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
-    kubernetes_contrail_network_controller_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/contrail-integration
-
-    # component docker images
-    kubernetes_calico_calicoctl_image: ${_param:kubernetes_calico_calicoctl_repo}/ctl:v1.6.4
-    kubernetes_calico_image: ${_param:kubernetes_calico_repo}/node:v2.6.9
-    kubernetes_calico_cni_image: ${_param:kubernetes_calico_cni_repo}/cni:v1.11.5
-    kubernetes_hyperkube_image: ${_param:kubernetes_hyperkube_repo}/hyperkube-amd64:v1.8.11-9
-    kubernetes_contrail_cni_image: ${_param:kubernetes_contrail_cni_repo}/contrail-cni:v1.2.0
-    kubernetes_contrail_network_controller_image: ${_param:kubernetes_contrail_network_controller_repo}/contrail-network-controller:v1.2.0
-
   kubernetes:
     pool:
-      container: false
+      enabled: true
       network:
         calico:
           prometheus:
diff --git a/kubernetes/pool/single.yml b/kubernetes/pool/single.yml
index dcc3ac1..06178df 100644
--- a/kubernetes/pool/single.yml
+++ b/kubernetes/pool/single.yml
@@ -1,26 +1,11 @@
 classes:
 - service.kubernetes.pool.single
 - service.docker.host
+- system.kubernetes.common
 parameters:
-  _param:
-    kubernetes_calico_calicoctl_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
-    kubernetes_calico_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
-    kubernetes_calico_cni_repo: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico
-    kubernetes_hyperkube_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
-    kubernetes_contrail_cni_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes
-    kubernetes_contrail_network_controller_repo: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/contrail-integration
-
-    # component docker images
-    kubernetes_calico_calicoctl_image: ${_param:kubernetes_calico_calicoctl_repo}/ctl:v1.6.4
-    kubernetes_calico_image: ${_param:kubernetes_calico_repo}/node:v2.6.9
-    kubernetes_calico_cni_image: ${_param:kubernetes_calico_cni_repo}/cni:v1.11.5
-    kubernetes_hyperkube_image: ${_param:kubernetes_hyperkube_repo}/hyperkube-amd64:v1.8.11-9
-    kubernetes_contrail_cni_image: ${_param:kubernetes_contrail_cni_repo}/contrail-cni:v1.2.0
-    kubernetes_contrail_network_controller_image: ${_param:kubernetes_contrail_network_controller_repo}/contrail-network-controller:v1.2.0
-
   kubernetes:
     pool:
-      container: false
+      enabled: true
   docker:
     host:
       options:
diff --git a/linux/system/repo/glusterfs.yml b/linux/system/repo/glusterfs.yml
index fb331f0..d6f09da 100644
--- a/linux/system/repo/glusterfs.yml
+++ b/linux/system/repo/glusterfs.yml
@@ -1,11 +1,5 @@
+classes:
+- system.linux.system.repo.mcp.apt_mirantis.glusterfs
 parameters:
   _param:
-    glusterfs_version: 3.8
-  linux:
-    system:
-      repo:
-        glusterfs-ppa:
-          source: "deb http://ppa.launchpad.net/gluster/glusterfs-${_param:glusterfs_version}/ubuntu ${_param:linux_system_codename} main"
-          architectures: amd64
-          key_id: 3FE869A9
-          key_server: keyserver.ubuntu.com
+    linux_system_repo_mcp_glusterfs_version_number: "3.10"
diff --git a/linux/system/repo/keystorage/aptly.yml b/linux/system/repo/keystorage/aptly.yml
new file mode 100644
index 0000000..85997bc
--- /dev/null
+++ b/linux/system/repo/keystorage/aptly.yml
@@ -0,0 +1,59 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_aptly:
+          # pub   4096R/483DA07C 2018-03-15
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            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
+            UILGDNG5JA==
+            =uEdu
+            -----END PGP PUBLIC KEY BLOCK-----
diff --git a/linux/system/repo/keystorage/docker.yml b/linux/system/repo/keystorage/docker.yml
new file mode 100644
index 0000000..a93dece
--- /dev/null
+++ b/linux/system/repo/keystorage/docker.yml
@@ -0,0 +1,106 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_docker:
+          # pub   4096R/0EBFCD88 2017-02-22
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            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
+            ut0=
+            =jAMc
+            -----END PGP PUBLIC KEY BLOCK-----
diff --git a/linux/system/repo/keystorage/docker_legacy.yml b/linux/system/repo/keystorage/docker_legacy.yml
new file mode 100644
index 0000000..fe317fa
--- /dev/null
+++ b/linux/system/repo/keystorage/docker_legacy.yml
@@ -0,0 +1,116 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_docker_legacy:
+          # pub   4096R/2C52609D 2015-07-14
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            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
+            =lwu7
+            -----END PGP PUBLIC KEY BLOCK-----
+
+
diff --git a/linux/system/repo/keystorage/glusterfs.yml b/linux/system/repo/keystorage/glusterfs.yml
new file mode 100644
index 0000000..0c9f046
--- /dev/null
+++ b/linux/system/repo/keystorage/glusterfs.yml
@@ -0,0 +1,37 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_glusterfs:
+          # Launchpad PPA for Gluster
+          # pub   4096R/3FE869A9 2014-08-15
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            mQINBFPtYFcBEADcQMZ9aSR1ptbaEeq/8Bzu7kipaxVGh3Wcma4Lz+QPe0ofxRf+
+            oYR22UVGmJcPnVcGFbXJ50t8BAxwtQ/TSmGdQ93bl6LORAQBZ/ud1LTr2HKpaa0F
+            1bwpi/TAgBWqP64Hu0LBGISc0G5m3/hn/bi6XxIIOzJ/L/vqLh1deVaDrYYWy5Cm
+            e8AuPtqOARKsefvVgwlpnbCtk+QaE65vgl8MXiYCaOenT07GDCq1xb7hkoVlJS4b
+            f6F3UMJVMVy4oEyYkRw4SP7ULeT1s4yrBeDzbxhFaZRJFvGpvMW3AZxfrhX/5OpZ
+            SkQiFn5/2j4eJli4/MmptAAHpGr4tLA+s6mHmA9E9c7wMfyFZe+wMhvangSDp09g
+            SSZs00bqKSnYIJ/oGRjaxCllkw4SMfTOqv8l/GOxRs12yIcZD08SSmRpoyLffrl1
+            zElyaixtAJRenphTZyq7eRLPyQl6qEDA1XtLs3ThK5/4fghMbe7MOHiMB8MwL1Rz
+            LQkl/PU08vxfum9ki/m/LP5xpJopNHZs2L47RlX2+tq6FJWbDvQwOGoFTTnxmdDf
+            4EkMhlB4N+ujZw64pSMt3c08NShxty2UWpbSbc8/e7Ps4B7Lx6eq6AmqrcUChg8c
+            9+PI2LUqj6mDbc8jxpUslvjsLU05xnq6OLv4U//pUTUz6eI8FgFadVZcoQARAQAB
+            tBlMYXVuY2hwYWQgUFBBIGZvciBHbHVzdGVyiQI4BBMBAgAiBQJT7WBXAhsDBgsJ
+            CAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAT4Bt7P+hpqZ3LEACYYC4UjxwSHouV
+            295Cxfwt9P32GcWJbFmLYtLHWVTt2vdN/M9Xb02YgVLJm/nVy2vJhqcMowSW2jO5
+            03mLq672g5mHitnIq1lh4zXcHEvP79aDRQuvkgsLEHjlk2NzYqdAsdRk3TgOLcK0
+            SRM7Cwgwd/b/gVUtPYrX1hvQKrjGJM9VZFcCMX2RmGAS0ft3QHzEAPZCgyamk0qB
+            2eo8tLZYm42iMvq+ZSxGulhzi7gJkpv/wNdaP4E6o8o7KY3JIWMmxBn8QZUKYMob
+            ze4PSBg4G4iG2ue9IrGCb8M1o+46aOSyEIc99bznF8Jrw7a8sBufVRjSZIE9A/oM
+            EtB1pTRDn9lwx/DyYbCV16DOsk6d5x4P8cqvgdaGzl7VNLvkwmMaCH0gRFIBr937
+            rEUbeSJHTqrVG0zXzSaUHEwXPZE0Lt2C9dEmMnT6nxC7FbJB1ATPDNx8kL7MvB4j
+            l5HkjrD1W9Xu2y0dzwAKlg5jvzwP46MJgvm+AYK808XhOhMZjWzzt5POeDcDhGhp
+            RSfQtAhSnRkOtKS1drMCt27hLZDEZfCp//aj7jvVL8FjamGEMfm91FLQa5LY7OoJ
+            aYoZlYUtthrXV6w5KHFjFYAKgA8tJzebTvc1Q9avCo2G5qWNZq6TSLxHEMo/g4gu
+            2aGRPRrKu9w2Ibosg4OqZ/YbXC8SjA==
+            =+Qna
+            -----END PGP PUBLIC KEY BLOCK-----
diff --git a/linux/system/repo/keystorage/jenkins.yml b/linux/system/repo/keystorage/jenkins.yml
new file mode 100644
index 0000000..f50851a
--- /dev/null
+++ b/linux/system/repo/keystorage/jenkins.yml
@@ -0,0 +1,151 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_jenkins:
+          # pub   1024D/D50582E6 2009-02-01
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            mQGiBEmFQG0RBACXScOxb6BTV6rQE/tcJopAEWsdvmE0jNIRWjDDzB7HovX6Anrq
+            n7+Vq4spAReSFbBVaYiiOx2cGDymj2dyx2i9NAI/9/cQXJOU+RPdDzHVlO1Edksp
+            5rKn0cGPWY5sLxRf8s/tO5oyKgwCVgTaB5a8gBHaoGms3nNC4YYf+lqlpwCgjbti
+            3u1iMIx6Rs+dG0+xw1oi5FUD/2tLJMx7vCUQHhPRupeYFPoD8vWpcbGb5nHfHi4U
+            8/x4qZspAIwvXtGw0UBHildGpqe9onp22Syadn/7JgMWhHoFw5Ke/rTMlxREL7pa
+            TiXuagD2G84tjJ66oJP1FigslJzrnG61y85V7THL61OFqDg6IOP4onbsdqHby4VD
+            zZj9A/9uQxIn5250AGLNpARStAcNPJNJbHOQuv0iF3vnG8uO7/oscB0TYb8/juxr
+            hs9GdSN0U0BxENR+8KWy5lttpqLMKlKRknQYy34UstQiyFgAQ9Epncu9uIbVDgWt
+            y7utnqXN033EyYkcWx5EhLAgHkC7wSzeSWABV3JSXN7CeeOif7QiS29oc3VrZSBL
+            YXdhZ3VjaGkgPGtrQGtvaHN1a2Uub3JnPohjBBMRAgAjAhsDBgsJCAcDAgQVAggD
+            BBYCAwECHgECF4AFAko/7vYCGQEACgkQm30y8tUFguabhgCgi54IQR4rpJZ/uUHe
+            ZB879zUWTQwAniQDBO+Zly7Fsvm0Mcvqvl02UzxCiGAEExECACAFAkmFQG0CGwMG
+            CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCbfTLy1QWC5qtXAJ9hPRisOhkexWXJ
+            nXQMl9cOTvm4LgCdGint1TONoZ2I4JtOiFzOmeP3ju3RzcvNyQEQAAEBAAAAAAAA
+            AAAAAAAA/9j/4AAQSkZJRgABAQEAYABgAAD/4QBgRXhpZgAASUkqAAgAAAAEADEB
+            AgAZAAAAPgAAABBRAQABAAAAAUOQABFRBAABAAAAEgsAABJRBAABAAAAEgsAAAAA
+            AABNYWNyb21lZGlhIEZpcmV3b3JrcyA0LjAAAP/bAEMACAYGBwYFCAcHBwkJCAoM
+            FA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0
+            Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
+            MjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAK4AlgMBIgACEQEDEQH/xAAfAAAB
+            BQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0B
+            AgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp
+            KjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK
+            kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj
+            5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJ
+            Cgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGh
+            scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZ
+            WmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1
+            tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEA
+            AhEDEQA/APcBI/8Afb86XzH/AL7fnUYpwqRknmN/fP50u9v7x/OmCgUASb2/vH86
+            Xe394/nTBS0AP3t/eP50u4+p/OmUopgO3H1NO3H1NR5xThQA7cfWlyfU0ylFMQ/J
+            9aXPvTKdQAuaM0lLQAtJmiigAzRSdqKAKApwpopc1mUOpRSUopgKKWkFLQAueKzr
+            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
+            =fBn8
+            -----END PGP PUBLIC KEY BLOCK-----
diff --git a/linux/system/repo/keystorage/maas.yml b/linux/system/repo/keystorage/maas.yml
new file mode 100644
index 0000000..cac2c27
--- /dev/null
+++ b/linux/system/repo/keystorage/maas.yml
@@ -0,0 +1,36 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_maas:
+          # pub   4096R/684D4A1C 2015-08-20
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            mQINBFXVlyMBEACqM3iz2EGJE0iE3/AAbNCnbBB25m3AWaSxJk+GJfkAAYWGqAKi
+            uWceCcetdNKNTKd8frSZFsRB7IceZr0u5sWpSYur6uoMNHzS8Y5cGdyAVrnEZtbd
+            ak652x13jlX7nrcE9g//lD0w254XW1Loyy5YOGWfUmJkGImndFWtkqd1J7SCVMMW
+            5l/nS4LwsOx/wTxL5m/cFQLi67JyJGqszKXS88oHT1YFBWPyl1VcXifFwecH/32f
+            Rr6WGpEAaxGF4dO45WGvJIQs2yiT5f9ha3tuJCbzI58t9BxiR1MMZ9AAPjdNO6JZ
+            kX2q+/uqgJg9IWNcJ4E+fCgl/hvoB3AURXHmaagH7nMb/6OA/QFSbiR3eciSJ89c
+            EkK+7d0br+p2+shO/dOV6lUrbidVVjiiTdmYlyXzuPcvPWVYmXjDzsOi0sSZZNMq
+            8G3/pAavjyGUvZtb781V1j9/8l3o5ScAPzzamT2W4rF+nCh1iHYz7+wP2XDNifE/
+            oK7fLNb0ig1G5S4PCqZHUp95LUaJrFczYCPwlERUxIC3B9a+UC3SdZmRuuSENWNs
+            YxKUlbU07GCrjxtcDhQHGQDVJDUGbqqkA4B/iKrwW3reA5fHo3yocQMX7YR6C2/Q
+            n+wn/EoEPIB1wkzAQvarnNCCdwjD5AB1VhANEFwUKMWHDEsofKOSTBYvgQARAQAB
+            tBZMYXVuY2hwYWQgUFBBIGZvciBNQUFTiQI4BBMBAgAiBQJV1ZcjAhsDBgsJCAcD
+            AgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAE5/3FaE1KHDH8D/9Mdc+4tw8foj6lILCg
+            fBRi9S37tOyV2m5YvD+qRzefUYgFKXYxleO+H9cjFH2XyHIBwa15dD/Yg+DkcAKb
+            9f/a1llHNTzLkHiNVQl4tl8qeJPj2Obm53HsjhazIgh0L208GRGJxO4HSBbrBTo8
+            FNF00Cl52josZdG1mPCSDuJm1AkeY9q4WeAOnekquz2qjUa+L8J8z+HVPC9rUryE
+            NXdwCyh3TE0G0occjUAsb5oOu3bcKSbVraq+trhjp9sz7o7O4lc4+cT2gFIWl1Rp
+            1djzXH8flU/s3U1vl0RcIFEZbuqsuDWukpxozq4M5y7VKq4y5dq7Y0PbMuJ0Dvgn
+            Bn4fbboMji4LYfgn++vosZv/MXkPIg6wubxdejVdrEoFRFxCcYqW4wObY8vxrvDr
+            Mjp4HrQ2guN8OJDUYnLdVv9P1MMKDAMrDjRdy3NsBpd7GuA9hXRXBPZ8y74nIwCR
+            jEDnIz5jsws9PxZIVabieoCI6RibJMw8qpuicM97Ss2Uq5vURvTBQ3f6wYjCMsdt
+            yqjz6TVJ3zwK9NPfMhXGVrrsxBOxO382r6XXuUbTcXZTDjAkoMsBqfjidlGDGTb3
+            Un0LkZJfpXrmZehyvO/GlsoYiFDhGf+EXJzKwRUEuJlIkVEZ72OtuoUMoBrjuADR
+            lJQUW0ZbcmpOxjK1c6w08nhSvA==
+            =QeWQ
+            -----END PGP PUBLIC KEY BLOCK-----
diff --git a/linux/system/repo/keystorage/saltstack.yml b/linux/system/repo/keystorage/saltstack.yml
new file mode 100644
index 0000000..d217202
--- /dev/null
+++ b/linux/system/repo/keystorage/saltstack.yml
@@ -0,0 +1,38 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mcp_saltstack:
+          # pub   2048R/DE57BFBE 2014-06-24
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            mQENBFOpvpgBCADkP656H41i8fpplEEB8IeLhugyC2rTEwwSclb8tQNYtUiGdna9
+            m38kb0OS2DDrEdtdQb2hWCnswxaAkUunb2qq18vd3dBvlnI+C4/xu5ksZZkRj+fW
+            tArNR18V+2jkwcG26m8AxIrT+m4M6/bgnSfHTBtT5adNfVcTHqiT1JtCbQcXmwVw
+            WbqS6v/LhcsBE//SHne4uBCK/GHxZHhQ5jz5h+3vWeV4gvxS3Xu6v1IlIpLDwUts
+            kT1DumfynYnnZmWTGc6SYyIFXTPJLtnoWDb9OBdWgZxXfHEcBsKGha+bXO+m2tHA
+            gNneN9i5f8oNxo5njrL8jkCckOpNpng18BKXABEBAAG0MlNhbHRTdGFjayBQYWNr
+            YWdpbmcgVGVhbSA8cGFja2FnaW5nQHNhbHRzdGFjay5jb20+iQE4BBMBAgAiBQJT
+            qb6YAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAOCKFJ3le/vhkqB/0Q
+            WzELZf4d87WApzolLG+zpsJKtt/ueXL1W1KA7JILhXB1uyvVORt8uA9FjmE083o1
+            yE66wCya7V8hjNn2lkLXboOUd1UTErlRg1GYbIt++VPscTxHxwpjDGxDB1/fiX2o
+            nK5SEpuj4IeIPJVE/uLNAwZyfX8DArLVJ5h8lknwiHlQLGlnOu9ulEAejwAKt9CU
+            4oYTszYM4xrbtjB/fR+mPnYh2fBoQO4d/NQiejIEyd9IEEMd/03AJQBuMux62tjA
+            /NwvQ9eqNgLw9NisFNHRWtP4jhAOsshv1WW+zPzu3ozoO+lLHixUIz7fqRk38q8Q
+            9oNR31KvrkSNrFbA3D89uQENBFOpvpgBCADJ79iH10AfAfpTBEQwa6vzUI3Eltqb
+            9aZ0xbZV8V/8pnuU7rqM7Z+nJgldibFk4gFG2bHCG1C5aEH/FmcOMvTKDhJSFQUx
+            uhgxttMArXm2c22OSy1hpsnVG68G32Nag/QFEJ++3hNnbyGZpHnPiYgej3FrerQJ
+            zv456wIsxRDMvJ1NZQB3twoCqwapC6FJE2hukSdWB5yCYpWlZJXBKzlYz/gwD/Fr
+            GL578WrLhKw3UvnJmlpqQaDKwmV2s7MsoZogC6wkHE92kGPG2GmoRD3ALjmCvN1E
+            PsIsQGnwpcXsRpYVCoW7e2nW4wUf7IkFZ94yOCmUq6WreWI4NggRcFC5ABEBAAGJ
+            AR8EGAECAAkFAlOpvpgCGwwACgkQDgihSd5Xv74/NggA08kEdBkiWWwJZUZEy7cK
+            WWcgjnRuOHd4rPeT+vQbOWGu6x4bxuVf9aTiYkf7ZjVF2lPn97EXOEGFWPZeZbH4
+            vdRFH9jMtP+rrLt6+3c9j0M8SIJYwBL1+CNpEC/BuHj/Ra/cmnG5ZNhYebm76h5f
+            T9iPW9fFww36FzFka4VPlvA4oB7ebBtquFg3sdQNU/MmTVV4jPFWXxh4oRDDR+8N
+            1bcPnbB11b5ary99F/mqr7RgQ+YFF0uKRE3SKa7a+6cIuHEZ7Za+zhPaQlzAOZlx
+            fuBmScum8uQTrEF5+Um5zkwC7EXTdH1co/+/V/fpOtxIg4XO4kcugZefVm5ERfVS
+            MA==
+            =dtMN
+            -----END PGP PUBLIC KEY BLOCK-----
diff --git a/linux/system/repo/keystorage/ubuntu.yml b/linux/system/repo/keystorage/ubuntu.yml
new file mode 100644
index 0000000..aaa6f88
--- /dev/null
+++ b/linux/system/repo/keystorage/ubuntu.yml
@@ -0,0 +1,86 @@
+parameters:
+  linux:
+    system:
+      repo:
+        ubuntu:
+          key: |
+            -----BEGIN PGP PUBLIC KEY BLOCK-----
+            Version: GnuPG v1
+
+            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
+            Twx6DKLF+3rF5nf1F3Q=
+            =PBAe
+        ubuntu_updates:
+          key: ${linux:system:repo:ubuntu:key}
+        ubuntu_security:
+          key: ${linux:system:repo:ubuntu:key}
diff --git a/linux/system/repo/mcp/apt_mirantis/aptly.yml b/linux/system/repo/mcp/apt_mirantis/aptly.yml
index f563502..d0f04c4 100644
--- a/linux/system/repo/mcp/apt_mirantis/aptly.yml
+++ b/linux/system/repo/mcp/apt_mirantis/aptly.yml
@@ -1,13 +1,14 @@
+classes:
+- system.linux.system.repo.keystorage.aptly
 parameters:
   _param:
     apt_mk_version: stable
-    linux_system_repo_mcp_aptly_version: ${_param:apt_mk_version}
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_aptly_url: ${_param:linux_system_repo_url}/aptly/
   linux:
     system:
       repo:
         mcp_aptly:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_aptly_version}/aptly/${_param:linux_system_codename}/ squeeze main"
+          source: "deb [arch=amd64] ${_param:linux_system_repo_mcp_aptly_url}/${_param:linux_system_codename}/ squeeze main"
           architectures: amd64
-          key_id: ED75B5A4483DA07C
-          key_server: keys.gnupg.net
           clean_file: true
diff --git a/linux/system/repo/mcp/apt_mirantis/docker.yml b/linux/system/repo/mcp/apt_mirantis/docker.yml
index d3314a9..96080c8 100644
--- a/linux/system/repo/mcp/apt_mirantis/docker.yml
+++ b/linux/system/repo/mcp/apt_mirantis/docker.yml
@@ -1,13 +1,14 @@
+classes:
+- system.linux.system.repo.keystorage.docker
 parameters:
   _param:
     apt_mk_version: stable
-    linux_system_repo_mcp_docker_version: ${_param:apt_mk_version}
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_docker_url: ${_param:linux_system_repo_url}/docker/
   linux:
     system:
       repo:
         mcp_docker:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_docker_version}/docker/${_param:linux_system_codename}/ ${_param:linux_system_codename} stable"
+          source: "deb [arch=amd64] ${_param:linux_system_repo_mcp_docker_url}/${_param:linux_system_codename}/ ${_param:linux_system_codename} stable"
           architectures: amd64
-          key_id: 8D81803C0EBFCD88
-          key_server: keyserver.ubuntu.com
-          clean_file: true
\ No newline at end of file
+          clean_file: true
diff --git a/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml b/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml
index 2689869..bab50fa 100644
--- a/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml
+++ b/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml
@@ -1,12 +1,14 @@
+classes:
+- system.linux.system.repo.keystorage.docker_legacy
 parameters:
   _param:
     apt_mk_version: stable
-    linux_system_repo_mcp_docker_legacy_version: ${_param:apt_mk_version}
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_docker_legacy_url: ${_param:linux_system_repo_url}/docker-1.x/
   linux:
     system:
       repo:
         mcp_docker_legacy:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_docker_legacy_version}/docker-1.x/${_param:linux_system_codename}/ ubuntu-${_param:linux_system_codename} main"
+          source: "deb [arch=amd64] ${_param:linux_system_repo_mcp_docker_legacy_url}/${_param:linux_system_codename}/ ubuntu-${_param:linux_system_codename} main"
           architectures: amd64
-          key_id: 58118E89F3A912897C070ADBF76221572C52609D
-          key_server: keyserver.ubuntu.com
\ No newline at end of file
+          clean_file: true
diff --git a/linux/system/repo/mcp/apt_mirantis/glusterfs.yml b/linux/system/repo/mcp/apt_mirantis/glusterfs.yml
index 02f2fd9..3b2bd6d 100644
--- a/linux/system/repo/mcp/apt_mirantis/glusterfs.yml
+++ b/linux/system/repo/mcp/apt_mirantis/glusterfs.yml
@@ -1,14 +1,19 @@
+classes:
+- system.linux.system.repo.keystorage.glusterfs
 parameters:
   _param:
     apt_mk_version: stable
-    linux_system_repo_mcp_glusterfs_version: ${_param:apt_mk_version}
     linux_system_repo_mcp_glusterfs_version_number: "3.8"
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_glusterfs_url: ${_param:linux_system_repo_url}/glusterfs-${_param:linux_system_repo_mcp_glusterfs_version_number}/
   linux:
     system:
       repo:
         mcp_glusterfs:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_glusterfs_version}/glusterfs-${_param:linux_system_repo_mcp_glusterfs_version_number}/${_param:linux_system_codename}/ ${_param:linux_system_codename} main"
+          source: "deb ${_param:linux_system_repo_mcp_glusterfs_url}/${_param:linux_system_codename}/ ${_param:linux_system_codename} main"
           architectures: amd64
-          key_id: 3FE869A9
-          key_server: keyserver.ubuntu.com
           clean_file: true
+          pin:
+          - pin: "release o=LP-PPA-gluster-glusterfs-${_param:linux_system_repo_mcp_glusterfs_version_number}"
+            priority: 1100
+            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/jenkins.yml b/linux/system/repo/mcp/apt_mirantis/jenkins.yml
new file mode 100644
index 0000000..0c256b6
--- /dev/null
+++ b/linux/system/repo/mcp/apt_mirantis/jenkins.yml
@@ -0,0 +1,19 @@
+classes:
+- system.linux.system.repo.keystorage.jenkins
+parameters:
+  _param:
+    apt_mk_version: stable
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_jenkins_url: ${_param:linux_system_repo_url}/jenkins/
+  linux:
+    system:
+      repo:
+        mcp_jenkins:
+          # FIXME PROD-20733
+          source: "deb [arch=amd64 trusted=yes] ${_param:linux_system_repo_mcp_jenkins_url}/${_param:linux_system_codename}/ binary main"
+          architectures: amd64
+          clean_file: true
+          pin:
+          - pin: 'release o=jenkins.io'
+            priority: 1100
+            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/maas.yml b/linux/system/repo/mcp/apt_mirantis/maas.yml
index 7ee3537..c89e3fe 100644
--- a/linux/system/repo/mcp/apt_mirantis/maas.yml
+++ b/linux/system/repo/mcp/apt_mirantis/maas.yml
@@ -1,13 +1,18 @@
+classes:
+- system.linux.system.repo.keystorage.maas
 parameters:
   _param:
     apt_mk_version: stable
-    linux_system_repo_mcp_maas_version: ${_param:apt_mk_version}
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_maas_url: ${_param:linux_system_repo_url}/maas/
   linux:
     system:
       repo:
         mcp_maas:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_maas_version}/maas/${_param:linux_system_codename}/ ${_param:linux_system_codename} main"
+          source: "deb [arch=amd64] ${_param:linux_system_repo_mcp_maas_url}/${_param:linux_system_codename} ${_param:linux_system_codename} main"
           architectures: amd64
-          key_id: 684D4A1C
-          key_server: keyserver.ubuntu.com
           clean_file: true
+          pin:
+          - pin: 'release o=LP-PPA-maas-stable'
+            priority: 1100
+            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/saltstack.yml b/linux/system/repo/mcp/apt_mirantis/saltstack.yml
index 6fcd5a1..22b3bb8 100644
--- a/linux/system/repo/mcp/apt_mirantis/saltstack.yml
+++ b/linux/system/repo/mcp/apt_mirantis/saltstack.yml
@@ -1,14 +1,19 @@
+classes:
+- system.linux.system.repo.keystorage.saltstack
 parameters:
   _param:
     apt_mk_version: stable
-    salt_version: 2016.3
-    linux_system_repo_mcp_saltstack_version: ${_param:apt_mk_version}
+    salt_version: 2017.7
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_mcp_saltstack_url: ${_param:linux_system_repo_url}/saltstack-${_param:salt_version}/
   linux:
     system:
       repo:
         mcp_saltstack:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_saltstack_version}/saltstack-${_param:salt_version}/${_param:linux_system_codename}/ ${_param:linux_system_codename} main"
+          source: "deb [arch=amd64] ${_param:linux_system_repo_mcp_saltstack_url}/${_param:linux_system_codename}/ ${_param:linux_system_codename} main"
           architectures: amd64
-          key_id: 0E08A149DE57BFBE
-          key_server: keyserver.ubuntu.com
           clean_file: true
+          pin:
+          - pin: 'release o=SaltStack'
+            priority: 1100
+            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/saltstack_2016_3.yml b/linux/system/repo/mcp/apt_mirantis/saltstack_2016_3.yml
index c47e177..26f1a02 100644
--- a/linux/system/repo/mcp/apt_mirantis/saltstack_2016_3.yml
+++ b/linux/system/repo/mcp/apt_mirantis/saltstack_2016_3.yml
@@ -1,13 +1,6 @@
+classes:
+- system.linux.system.repo.keystorage.saltstack
+- system.linux.system.repo.mcp.apt_mirantis.saltstack
 parameters:
   _param:
-    apt_mk_version: stable
-    linux_system_repo_mcp_saltstack_version: ${_param:apt_mk_version}
-  linux:
-    system:
-      repo:
-        mcp_saltstack:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_saltstack_version}/saltstack-2016.3/${_param:linux_system_codename}/ ${_param:linux_system_codename} main"
-          architectures: amd64
-          key_id: 0E08A149DE57BFBE
-          key_server: keyserver.ubuntu.com
-          clean_file: true
+    salt_version: 2016.3
diff --git a/linux/system/repo/mcp/apt_mirantis/ubuntu.yml b/linux/system/repo/mcp/apt_mirantis/ubuntu.yml
index e254ed6..55f6387 100644
--- a/linux/system/repo/mcp/apt_mirantis/ubuntu.yml
+++ b/linux/system/repo/mcp/apt_mirantis/ubuntu.yml
@@ -1,24 +1,26 @@
+classes:
+- system.linux.system.repo.keystorage.ubuntu
 parameters:
   _param:
-    apt_mk_version: stable
+    apt_mk_version: 'stable'
+    linux_repo_refresh_db: true
+    linux_system_repo_url: http://mirror.mirantis.com/${_param:apt_mk_version}/
+    linux_system_repo_ubuntu_url: ${_param:linux_system_repo_url}/ubuntu/
   linux:
     system:
       repo:
         ubuntu:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:apt_mk_version}/ubuntu/ ${_param:linux_system_codename} main restricted universe"
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] ${_param:linux_system_repo_ubuntu_url} ${_param:linux_system_codename} main restricted universe"
           architectures: amd64
           default: true
-          key_id: 437D05B5
-          key_server: keyserver.ubuntu.com
         ubuntu_updates:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:apt_mk_version}/ubuntu/ ${_param:linux_system_codename}-updates main restricted universe"
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] ${_param:linux_system_repo_ubuntu_url} ${_param:linux_system_codename}-updates main restricted universe"
           architectures: amd64
           default: true
-          key_id: 437D05B5
-          key_server: keyserver.ubuntu.com
         ubuntu_security:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:apt_mk_version}/ubuntu/ ${_param:linux_system_codename}-security main restricted universe"
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] ${_param:linux_system_repo_ubuntu_url} ${_param:linux_system_codename}-security main restricted universe"
           architectures: amd64
           default: true
-          key_id: 437D05B5
-          key_server: keyserver.ubuntu.com
\ No newline at end of file
diff --git a/linux/system/repo/mcp/mirror/v1/openstack.yml b/linux/system/repo/mcp/mirror/v1/openstack.yml
new file mode 100644
index 0000000..a4a369b
--- /dev/null
+++ b/linux/system/repo/mcp/mirror/v1/openstack.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+    linux_system_architecture: 'amd64'
+  linux:
+    system:
+      repo:
+        mirantis_openstack:
+          source: "deb http://mirror.mirantis.com/${_param:apt_mk_version}/openstack-${_param:openstack_version}/${_param:linux_system_codename} ${_param:linux_system_codename} main"
+          architectures: ${_param:linux_system_architecture}
+          clean_file: true
+          key_url: https://mirror.mirantis.com/${_param:apt_mk_version}/openstack-${_param:openstack_version}/${_param:linux_system_codename}/archive-${_param:openstack_version}.key
+          pin:
+          - pin: 'release o=Mirantis'
+            priority: 1100
+            package: '*'
diff --git a/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml b/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml
index cb3444b..57625a3 100644
--- a/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml
+++ b/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml
@@ -1,3 +1,5 @@
+# DEPRECATED since 2018.7+ release.
+# Please use system/repo/mcp/apt_mirantis
 parameters:
   _param:
     apt_mk_version: stable
diff --git a/linux/system/repo_local/mcp/apt_mirantis/maas.yml b/linux/system/repo_local/mcp/apt_mirantis/maas.yml
index 63f82c2..f8bc651 100644
--- a/linux/system/repo_local/mcp/apt_mirantis/maas.yml
+++ b/linux/system/repo_local/mcp/apt_mirantis/maas.yml
@@ -1,3 +1,5 @@
+# DEPRECATED since 2018.7+ release.
+# Please use system/repo/mcp/apt_mirantis
 parameters:
   _param:
     apt_mk_version: stable
diff --git a/linux/system/repo_local/mcp/apt_mirantis/saltstack.yml b/linux/system/repo_local/mcp/apt_mirantis/saltstack.yml
index 5b2a904..c2e6db5 100644
--- a/linux/system/repo_local/mcp/apt_mirantis/saltstack.yml
+++ b/linux/system/repo_local/mcp/apt_mirantis/saltstack.yml
@@ -1,7 +1,9 @@
+# DEPRECATED since 2018.7+ release.
+# Please use system/repo/mcp/apt_mirantis
 parameters:
   _param:
     apt_mk_version: stable
-    salt_version: 2016.3
+    salt_version: 2017.7
     linux_system_repo_mcp_saltstack_version: ${_param:apt_mk_version}
   linux:
     system:
@@ -14,4 +16,4 @@
           pin:
           - pin: 'release a=${_param:linux_system_repo_mcp_saltstack_version}'
             priority: 1100
-            package: '*'
\ No newline at end of file
+            package: '*'
diff --git a/linux/system/repo_local/mcp/apt_mirantis/ubuntu.yml b/linux/system/repo_local/mcp/apt_mirantis/ubuntu.yml
index d510183..79c002f 100644
--- a/linux/system/repo_local/mcp/apt_mirantis/ubuntu.yml
+++ b/linux/system/repo_local/mcp/apt_mirantis/ubuntu.yml
@@ -1,23 +1,24 @@
+classes:
+- system.linux.system.repo.keystorage.ubuntu
 parameters:
+  _param:
+    apt_mk_version: 'stable'
+    linux_repo_refresh_db: true
   linux:
     system:
       repo:
         ubuntu:
           refresh_db: ${_param:linux_repo_refresh_db}
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu ${_param:linux_system_codename} main universe restricted"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/${_param:apt_mk_version}/ubuntu ${_param:linux_system_codename} main universe restricted"
           architectures: amd64
           default: true
-          key_url: "http://${_param:local_repo_url}/public.gpg"
-        ubuntu-updates:
+        ubuntu_updates:
           refresh_db: ${_param:linux_repo_refresh_db}
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu ${_param:linux_system_codename}-updates main universe restricted"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/${_param:apt_mk_version}/ubuntu ${_param:linux_system_codename}-updates main universe restricted"
           architectures: amd64
           default: true
-          key_url: "http://${_param:local_repo_url}/public.gpg"
-        ubuntu-security:
+        ubuntu_security:
           refresh_db: ${_param:linux_repo_refresh_db}
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu ${_param:linux_system_codename}-security main universe restricted"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/${_param:apt_mk_version}/ubuntu ${_param:linux_system_codename}-security main universe restricted"
           architectures: amd64
           default: true
-          key_url: "http://${_param:local_repo_url}/public.gpg"
-
diff --git a/linux/system/repo_local/ubuntu.yml b/linux/system/repo_local/ubuntu.yml
index 46994ee..e93a4b3 100644
--- a/linux/system/repo_local/ubuntu.yml
+++ b/linux/system/repo_local/ubuntu.yml
@@ -8,13 +8,13 @@
           architectures: amd64
           default: true
           key_url: "http://${_param:local_repo_url}/public.gpg"
-        ubuntu-updates:
+        ubuntu_updates:
           refresh_db: ${_param:linux_repo_refresh_db}
           source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu ${_param:linux_system_codename}-updates main universe restricted"
           architectures: amd64
           default: true
           key_url: "http://${_param:local_repo_url}/public.gpg"
-        ubuntu-security:
+        ubuntu_security:
           refresh_db: ${_param:linux_repo_refresh_db}
           source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu ${_param:linux_system_codename}-security main universe restricted"
           architectures: amd64
diff --git a/linux/system/single/init.yml b/linux/system/single/init.yml
index 4429a82..970184c 100644
--- a/linux/system/single/init.yml
+++ b/linux/system/single/init.yml
@@ -41,8 +41,6 @@
         en_US.UTF-8:
           enabled: true
           default: true
-        cs_CZ.UTF-8:
-          enabled: true
       limit:
         default:
           enabled: true
diff --git a/maas/region/boot_sources/maas_ephemeral_v3/bss_xenial.yml b/maas/region/boot_sources/maas_ephemeral_v3/bss_xenial.yml
new file mode 100644
index 0000000..ad54efa
--- /dev/null
+++ b/maas/region/boot_sources/maas_ephemeral_v3/bss_xenial.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  maas:
+    region:
+      boot_sources_selections:
+        mcp_xenial:
+          url: ${maas:region:boot_sources:mcp_resources_mirror:url}
+          os: "ubuntu"
+          release: "xenial"
+          arches: "amd64"
+          subarches: '"*"'
+          labels: '"*"'
diff --git a/maas/region/boot_sources/maas_ephemeral_v3/init.yml b/maas/region/boot_sources/maas_ephemeral_v3/init.yml
new file mode 100644
index 0000000..9d0abf2
--- /dev/null
+++ b/maas/region/boot_sources/maas_ephemeral_v3/init.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+    maas_region_boot_sources_maas_ephemeral_v3_bs_url: http://mirror.mirantis.com/${_param:apt_mk_version}/maas-ephemeral-v3/
+  maas:
+    region:
+      boot_sources_delete_all_others: true
+      boot_sources:
+        mcp_resources_mirror:
+          url: ${_param:maas_region_boot_sources_maas_ephemeral_v3_bs_url}
+          keyring_file: /usr/share/keyrings/ubuntu-cloudimage-keyring.gpg
diff --git a/maas/region/single.yml b/maas/region/single.yml
index 3fdc105..7c57d9e 100644
--- a/maas/region/single.yml
+++ b/maas/region/single.yml
@@ -4,6 +4,7 @@
 parameters:
   _param:
     maas_admin_username: mirantis
+    maas_region_main_archive: http://mirror.mirantis.com/${_param:apt_mk_version}/ubuntu/
   maas:
     cluster:
       enabled: true
@@ -28,6 +29,7 @@
         password: ${_param:maas_db_password}
         username: maas
       maas_config:
+        main_archive: ${_param:maas_region_main_archive}
         commissioning_distro_series: xenial
         default_distro_series: xenial
         default_osystem: 'ubuntu'
diff --git a/manila/common/cluster.yml b/manila/common/cluster.yml
index 8763903..d71364e 100644
--- a/manila/common/cluster.yml
+++ b/manila/common/cluster.yml
@@ -22,7 +22,7 @@
         password: ${_param:mysql_manila_password}
       identity:
         engine: keystone
-        region: RegionOne
+        region: ${_param:openstack_region}
         host: ${_param:cluster_vip_address}
         port: 35357
         user: manila
diff --git a/manila/common/single.yml b/manila/common/single.yml
index 362338f..1b139c2 100644
--- a/manila/common/single.yml
+++ b/manila/common/single.yml
@@ -20,7 +20,7 @@
         password: ${_param:mysql_manila_password}
       identity:
         engine: keystone
-        region: RegionOne
+        region: ${_param:openstack_region}
         host: ${_param:single_address}
         port: 35357
         user: manila
diff --git a/manila/control/cluster.yml b/manila/control/cluster.yml
index ff6ca10..7ea128b 100644
--- a/manila/control/cluster.yml
+++ b/manila/control/cluster.yml
@@ -10,6 +10,7 @@
     api:
       enabled: true
       version: ${_param:openstack_version}
+      role: ${_param:openstack_node_role}
     scheduler:
       enabled: true
       version: ${_param:openstack_version}
diff --git a/manila/control/single.yml b/manila/control/single.yml
index 3e14e96..262a158 100644
--- a/manila/control/single.yml
+++ b/manila/control/single.yml
@@ -9,6 +9,7 @@
     api:
       enabled: true
       version: ${_param:openstack_version}
+      role: ${_param:openstack_node_role}
     scheduler:
       enabled: true
       version: ${_param:openstack_version}
diff --git a/murano/server/cluster.yml b/murano/server/cluster.yml
index d698e7c..6c45f6d 100644
--- a/murano/server/cluster.yml
+++ b/murano/server/cluster.yml
@@ -8,6 +8,7 @@
     server:
       enabled: true
       version: ${_param:murano_version}
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:single_address}
         port: 8082
diff --git a/murano/server/single.yml b/murano/server/single.yml
index c3da9f8..938263d 100644
--- a/murano/server/single.yml
+++ b/murano/server/single.yml
@@ -6,6 +6,7 @@
     server:
       enabled: true
       version: ${_param:murano_version}
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:single_address}
         port: 8082
diff --git a/neutron/control/cluster.yml b/neutron/control/cluster.yml
index 166de3a..703f196 100644
--- a/neutron/control/cluster.yml
+++ b/neutron/control/cluster.yml
@@ -37,6 +37,7 @@
             params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
   neutron:
     server:
+      role: ${_param:openstack_node_role}
       plugin: contrail
     identity:
       protocol: ${_param:cluster_internal_protocol}
diff --git a/neutron/control/single.yml b/neutron/control/single.yml
index 067b4df..6196c0a 100644
--- a/neutron/control/single.yml
+++ b/neutron/control/single.yml
@@ -12,6 +12,7 @@
           version: latest
   neutron:
     server:
+      role: ${_param:openstack_node_role}
       database:
         host: ${_param:single_address}
       identity:
diff --git a/nova/client/flavor/vnf_onboarding/metaswitch.yml b/nova/client/flavor/vnf_onboarding/metaswitch_vsbc.yml
similarity index 100%
rename from nova/client/flavor/vnf_onboarding/metaswitch.yml
rename to nova/client/flavor/vnf_onboarding/metaswitch_vsbc.yml
diff --git a/nova/compute/libvirt/ssl/init.yml b/nova/compute/libvirt/ssl/init.yml
new file mode 100644
index 0000000..9931cbd
--- /dev/null
+++ b/nova/compute/libvirt/ssl/init.yml
@@ -0,0 +1,14 @@
+classes:
+- system.salt.minion.cert.libvirtd
+parameters:
+  nova:
+    compute:
+      libvirt:
+        tls:
+          enabled: True
+          key_file: ${_param:libvirtd_server_ssl_key_file}
+          cert_file: ${_param:libvirtd_server_ssl_cert_file}
+          ca_file: ${_param:libvirtd_ssl_ca_file}
+          client:
+            key_file: ${_param:libvirtd_client_ssl_key_file}
+            cert_file: ${_param:libvirtd_client_ssl_cert_file}
diff --git a/nova/compute/libvirt/ssl/vnc.yml b/nova/compute/libvirt/ssl/vnc.yml
new file mode 100644
index 0000000..f2c0ad4
--- /dev/null
+++ b/nova/compute/libvirt/ssl/vnc.yml
@@ -0,0 +1,12 @@
+classes:
+- system.salt.minion.cert.libvirtd.vnc_server
+parameters:
+  nova:
+    compute:
+      qemu:
+        vnc:
+          tls:
+            enabled: True
+            key_file: ${_param:qemu_vnc_server_ssl_key_file}
+            cert_file: ${_param:qemu_vnc_server_ssl_cert_file}
+            ca_file: ${_param:qemu_vnc_ssl_ca_file}
diff --git a/nova/compute/single.yml b/nova/compute/single.yml
index 786e792..67c329d 100644
--- a/nova/compute/single.yml
+++ b/nova/compute/single.yml
@@ -68,6 +68,7 @@
         password: ${_param:keystone_nova_password}
         tenant: service
         protocol: ${_param:cluster_internal_protocol}
+        region: ${_param:openstack_region}
       message_queue:
         engine: rabbitmq
         host: ${_param:control_address}
@@ -85,6 +86,7 @@
         host: ${_param:control_address}
         port: 9696
         protocol: ${_param:cluster_internal_protocol}
+        region: ${_param:openstack_region}
       cache:
         engine: memcached
         members:
diff --git a/nova/control/cluster.yml b/nova/control/cluster.yml
index be5f775..90a2bae 100644
--- a/nova/control/cluster.yml
+++ b/nova/control/cluster.yml
@@ -30,6 +30,7 @@
       ram_allocation_ratio: ${_param:nova_ram_allocation_ratio}
       disk_allocation_ratio: ${_param:nova_disk_allocation_ratio}
       workers: 8
+      role: ${_param:openstack_node_role}
       bind:
         private_address: ${_param:cluster_local_address}
         public_address: ${_param:cluster_vip_address}
diff --git a/nova/control/novncproxy/init.yml b/nova/control/novncproxy/init.yml
new file mode 100644
index 0000000..3cd04b8
--- /dev/null
+++ b/nova/control/novncproxy/init.yml
@@ -0,0 +1,13 @@
+classes:
+- system.salt.minion.cert.vnc.novncproxy_client
+parameters:
+  nova:
+    controller:
+      novncproxy:
+        tls:
+          enabled: True
+          key_file: ${_param:novncproxy_client_ssl_key_file}
+          cert_file: ${_param:novncproxy_client_ssl_cert_file}
+          ca_file: ${_param:novncproxy_ssl_ca_file}
+          all_file: ${_param:nova_websocketproxy_ssl_all_file}
+
diff --git a/nova/control/single.yml b/nova/control/single.yml
index ca21d05..4e3799b 100644
--- a/nova/control/single.yml
+++ b/nova/control/single.yml
@@ -11,11 +11,14 @@
           version: latest
   nova:
     controller:
+      role: ${_param:openstack_node_role}
       database:
         host: ${_param:single_address}
       identity:
         protocol: ${_param:cluster_internal_protocol}
+        region: ${_param:openstack_region}
       network:
         protocol: ${_param:cluster_internal_protocol}
+        region: ${_param:openstack_region}
       glance:
         protocol: ${_param:cluster_internal_protocol}
diff --git a/octavia/api/cluster.yml b/octavia/api/cluster.yml
index 958f3d4..9e5d0c9 100644
--- a/octavia/api/cluster.yml
+++ b/octavia/api/cluster.yml
@@ -7,6 +7,7 @@
   octavia:
     api:
       enabled: true
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:cluster_local_address}
       database:
diff --git a/octavia/api/single.yml b/octavia/api/single.yml
index a9d30a5..ff76e76 100644
--- a/octavia/api/single.yml
+++ b/octavia/api/single.yml
@@ -6,6 +6,7 @@
   octavia:
     api:
       enabled: true
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:single_address}
       database:
diff --git a/opencontrail/compute/cluster4_0.yml b/opencontrail/compute/cluster4_0.yml
index 68f8007..8c16c70 100644
--- a/opencontrail/compute/cluster4_0.yml
+++ b/opencontrail/compute/cluster4_0.yml
@@ -1,3 +1,5 @@
+classes:
+  - service.opencontrail.compute.cluster
 applications:
 - opencontrail
 parameters:
diff --git a/opencontrail/control/analytics4_0.yml b/opencontrail/control/analytics4_0.yml
index 9614d61..88abb7f 100644
--- a/opencontrail/control/analytics4_0.yml
+++ b/opencontrail/control/analytics4_0.yml
@@ -1,4 +1,5 @@
 classes:
+- service.docker.host
 - service.haproxy.proxy.single
 - service.keepalived.cluster.single
 - service.opencontrail.control.analytics
@@ -9,12 +10,13 @@
     opencontrail_kafka_log_cleanup_dir: '/usr/share/kafka/logs/'
     opencontrail_version: 4.0
     linux_repo_contrail_component: oc40
+    opencontrail_image_tag: latest
     opencontrail_message_queue_node01_address: ${_param:openstack_message_queue_node01_address}
     opencontrail_message_queue_node02_address: ${_param:openstack_message_queue_node02_address}
     opencontrail_message_queue_node03_address: ${_param:openstack_message_queue_node03_address}
     opencontrail_message_queue_address: ${_param:openstack_message_queue_address}
-    opencontrail_analytics_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analytics
-    opencontrail_analyticsdb_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analyticsdb
+    opencontrail_analytics_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analytics:${_param:opencontrail_image_tag}
+    opencontrail_analyticsdb_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analyticsdb:${_param:opencontrail_image_tag}
     opencontrail_analytics_container_name: opencontrail_analytics_1
     opencontrail_analyticsdb_container_name: opencontrail_analyticsdb_1
 # Temprorary fix for MOS9 packages to pin old version of kafka
@@ -83,6 +85,10 @@
               volumes:
                 - /etc/contrail:/etc/contrail
                 - /etc/redis/redis.conf:/etc/redis/redis.conf
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-analytics:/var/log/journal
+              env_file:
+                - contrail.env
             analyticsdb:
               image: ${_param:opencontrail_analyticsdb_image}
               container_name: ${_param:opencontrail_analyticsdb_container_name}
@@ -100,6 +106,10 @@
                 - /usr/share/kafka/logs:/usr/share/kafka/logs
                 - /etc/zookeeper/conf/zoo_analytics.cfg:/etc/zookeeper/conf/zoo.cfg
                 - /etc/zookeeper/conf/log4j.properties:/etc/zookeeper/conf/log4j.properties
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-analyticsdb:/var/log/journal
               network_mode: "host"
               privileged: true
               restart: always
+              env_file:
+                - contrail.env
\ No newline at end of file
diff --git a/opencontrail/control/cluster4_0.yml b/opencontrail/control/cluster4_0.yml
index 60749b3..05cf7d6 100644
--- a/opencontrail/control/cluster4_0.yml
+++ b/opencontrail/control/cluster4_0.yml
@@ -10,13 +10,14 @@
     opencontrail_kafka_log_cleanup_dir: '/usr/share/kafka/logs/'
     opencontrail_version: 4.0
     linux_repo_contrail_component: oc40
+    opencontrail_image_tag: latest
     opencontrail_message_queue_node01_address: ${_param:openstack_control_node01_address}
     opencontrail_message_queue_node02_address: ${_param:openstack_control_node02_address}
     opencontrail_message_queue_node03_address: ${_param:openstack_control_node03_address}
     opencontrail_message_queue_address: ${_param:openstack_control_address}
-    opencontrail_analytics_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analytics
-    opencontrail_analyticsdb_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analyticsdb
-    opencontrail_controller_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-controller
+    opencontrail_analytics_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analytics:${_param:opencontrail_image_tag}
+    opencontrail_analyticsdb_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analyticsdb:${_param:opencontrail_image_tag}
+    opencontrail_controller_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-controller:${_param:opencontrail_image_tag}
     opencontrail_controller_container_name: opencontrail_controller_1
     opencontrail_analytics_container_name: opencontrail_analytics_1
     opencontrail_analyticsdb_container_name: opencontrail_analyticsdb_1
@@ -145,9 +146,13 @@
                 - /etc/cassandra/logback.xml:/etc/cassandra/logback.xml
                 - /etc/zookeeper/conf/zoo.cfg:/etc/zookeeper/conf/zoo.cfg
                 - /etc/zookeeper/conf/log4j.properties:/etc/zookeeper/conf/log4j.properties
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-controller:/var/log/journal
               network_mode: "host"
               privileged: true
               restart: always
+              env_file:
+                - contrail.env
             analytics:
               image: ${_param:opencontrail_analytics_image}
               container_name: ${_param:opencontrail_analytics_container_name}
@@ -157,6 +162,10 @@
               volumes:
                 - /etc/contrail:/etc/contrail
                 - /etc/redis/redis.conf:/etc/redis/redis.conf
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-analytics:/var/log/journal
+              env_file:
+                - contrail.env
             analyticsdb:
               image: ${_param:opencontrail_analyticsdb_image}
               container_name: ${_param:opencontrail_analyticsdb_container_name}
@@ -174,6 +183,10 @@
                 - /usr/share/kafka/logs:/usr/share/kafka/logs
                 - /etc/zookeeper/conf/zoo_analytics.cfg:/etc/zookeeper/conf/zoo.cfg
                 - /etc/zookeeper/conf/log4j.properties:/etc/zookeeper/conf/log4j.properties
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-analyticsdb:/var/log/journal
               network_mode: "host"
               privileged: true
               restart: always
+              env_file:
+                - contrail.env
diff --git a/opencontrail/control/control4_0.yml b/opencontrail/control/control4_0.yml
index 02ab75e..932a789 100644
--- a/opencontrail/control/control4_0.yml
+++ b/opencontrail/control/control4_0.yml
@@ -1,4 +1,5 @@
 classes:
+- service.docker.host
 - service.keepalived.cluster.single
 - service.opencontrail.control.control
 - system.haproxy.proxy.listen.opencontrail.control
@@ -6,10 +7,11 @@
   _param:
     opencontrail_version: 4.0
     linux_repo_contrail_component: oc40
+    opencontrail_image_tag: latest
     opencontrail_message_queue_node01_address: ${_param:openstack_message_queue_node01_address}
     opencontrail_message_queue_node02_address: ${_param:openstack_message_queue_node02_address}
     opencontrail_message_queue_node03_address: ${_param:openstack_message_queue_node03_address}
-    opencontrail_controller_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-controller
+    opencontrail_controller_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-controller:${_param:opencontrail_image_tag}
     opencontrail_controller_container_name: opencontrail_controller_1
     analytics_vip_address: ${_param:opencontrail_analytics_address}
   opencontrail:
@@ -105,6 +107,10 @@
                 - /etc/cassandra/logback.xml:/etc/cassandra/logback.xml
                 - /etc/zookeeper/conf/zoo.cfg:/etc/zookeeper/conf/zoo.cfg
                 - /etc/zookeeper/conf/log4j.properties:/etc/zookeeper/conf/log4j.properties
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-controller:/var/log/journal
               network_mode: "host"
               privileged: true
               restart: always
+              env_file:
+                - contrail.env
diff --git a/opencontrail/control/single4_0.yml b/opencontrail/control/single4_0.yml
index a4fae18..4570e69 100644
--- a/opencontrail/control/single4_0.yml
+++ b/opencontrail/control/single4_0.yml
@@ -1,4 +1,5 @@
 classes:
+- service.docker.host
 - service.opencontrail.control.single
 - service.haproxy.proxy.single
 parameters:
@@ -7,9 +8,10 @@
     opencontrail_kafka_log_cleanup_dir: '/usr/share/kafka/logs/'
     opencontrail_version: 4.0
     linux_repo_contrail_component: oc40
-    opencontrail_analytics_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analytics
-    opencontrail_analyticsdb_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analyticsdb
-    opencontrail_controller_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-controller
+    opencontrail_image_tag: latest
+    opencontrail_analytics_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analytics:${_param:opencontrail_image_tag}
+    opencontrail_analyticsdb_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-analyticsdb:${_param:opencontrail_image_tag}
+    opencontrail_controller_image: docker-prod-local.artifactory.mirantis.com/opencontrail-${_param:linux_repo_contrail_component}/opencontrail-controller:${_param:opencontrail_image_tag}
     opencontrail_controller_container_name: opencontrail_controller_1
     opencontrail_analytics_container_name: opencontrail_analytics_1
     opencontrail_analyticsdb_container_name: opencontrail_analyticsdb_1
@@ -176,9 +178,13 @@
                 - /etc/cassandra/logback.xml:/etc/cassandra/logback.xml
                 - /etc/zookeeper/conf/zoo.cfg:/etc/zookeeper/conf/zoo.cfg
                 - /etc/zookeeper/conf/log4j.properties:/etc/zookeeper/conf/log4j.properties
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-controller:/var/log/journal
               network_mode: "host"
               privileged: true
               restart: always
+              env_file:
+                - contrail.env
             analytics:
               image: ${_param:opencontrail_analytics_image}
               container_name: ${_param:opencontrail_analytics_container_name}
@@ -188,6 +194,10 @@
               volumes:
                 - /etc/contrail:/etc/contrail
                 - /etc/redis/redis.conf:/etc/redis/redis.conf
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-analytics:/var/log/journal
+              env_file:
+                - contrail.env
             analyticsdb:
               image: ${_param:opencontrail_analyticsdb_image}
               container_name: ${_param:opencontrail_analyticsdb_container_name}
@@ -205,6 +215,10 @@
                 - /usr/share/kafka/logs:/usr/share/kafka/logs
                 - /etc/zookeeper/conf/zoo_analytics.cfg:/etc/zookeeper/conf/zoo.cfg
                 - /etc/zookeeper/conf/log4j.properties:/etc/zookeeper/conf/log4j.properties
+                - /var/log/contrail:/var/log/contrail
+                - /var/log/journal/contrail-analyticsdb:/var/log/journal
               network_mode: "host"
               privileged: true
               restart: always
+              env_file:
+                - contrail.env
diff --git a/openssh/client/root.yml b/openssh/client/root.yml
index 145f5da..66f8f88 100644
--- a/openssh/client/root.yml
+++ b/openssh/client/root.yml
@@ -36,7 +36,9 @@
       user:
         root:
           enabled: true
-          private_key:
-            type: rsa
-            key: ${_param:root_private_key}
           user: ${linux:system:user:root}
+          private_key: ${private_keys:root}
+  private_keys:
+    root:
+      type: rsa
+      key: ${_param:root_private_key}
diff --git a/openssh/server/team/members/andreidanin.yml b/openssh/server/team/members/andreidanin.yml
new file mode 100644
index 0000000..fb5f170
--- /dev/null
+++ b/openssh/server/team/members/andreidanin.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        adanin:
+          enabled: true
+          name: adanin
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Andrei Danin
+          home: /home/adanin
+          email: adanin@mirantis.com
+  openssh:
+    server:
+      user:
+        adanin:
+          enabled: true
+          public_keys:
+          - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2eqUIe2KkA5Zlr1yDoY0E5egIaqmbDvIZ+8gyduCDwqouqikgYdwQtMztlEWXEu8FsQqOHKLjBDvzEyFgpEfvRQLYFmp7HtZ32GntBDC9oigtm8OXJr0MEnyAMsdUioDOCD3ixuAGktpJjgIwPPqnMhXgAXuH6Ww7N8sSkN/8paRezQjqDgFZcxaEavse6kj+TdbJb5w382Z7sILss8vWmjhQlYUxc1ZWa/0BCVx9mLnEXAZKfOiEDOX6Pv89VGjOiP5VxmNUCRfuPVEtY671Z73jpqXwduLz6IMbPVdAvz8HQTKqZeuZMPPTasrgNqOIfrSrG5OM8DBqO8LnEffp
+          user: ${linux:system:user:adanin}
+
diff --git a/openssh/server/team/members/brucemathews.yml b/openssh/server/team/members/brucemathews.yml
new file mode 100644
index 0000000..0fc9b63
--- /dev/null
+++ b/openssh/server/team/members/brucemathews.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        bmathews:
+          enabled: true
+          name: bmathews
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Bruce Mathews
+          home: /home/bmathews
+          email: bmathews@mirantis.com
+  openssh:
+    server:
+      user:
+        bmathews:
+          enabled: true
+          public_keys:
+          - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1tsh+T2JRsyblZBrF17b/Q2AelpY+gTc9BaMQMj1J/Y/aJZUjD22knG8away01DQ+Qew5/Kcx5k4AvmxWkncRX+7ye9sVJA6BQhwewkN/MiiDJ3hC8hNFfk8ki8arqPxasXZOWacT2DDXw7/gc+/DA4F35UvsMmD+JLVr4fkdzQuHre2QPbqs+6+KdHIl0nI+d3hCCd9Zsd1mYlJkDU7oLC085oIsIqToWTYKw6HFKMqocYzuN4TQKI3dySFpkjMXLz8SK8UVjXA+Lyu0ymIVmvGnVDNAImc9ZMeU+l6W4gpuLY30Zw5/8q8FkKBw5FYWgllmoixlwhNRJJ1Hf7tJ
+          user: ${linux:system:user:bmathews}
+
diff --git a/openssh/server/team/members/dstremkouski.yml b/openssh/server/team/members/dstremkouski.yml
new file mode 100644
index 0000000..ba3233b
--- /dev/null
+++ b/openssh/server/team/members/dstremkouski.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        dstremkouski:
+          enabled: true
+          name: dstremkouski
+          sudo: true
+          full_name: Dzmitry Stremkouski
+          home: /home/dstremkouski
+          email: dstremkouski@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        dstremkouski:
+          enabled: true
+          public_keys:
+          - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDlvA0GjsFF4p0oRF/49/k0YYqkCpsmKHoMtM2b/ZgRAbUzuobEqOZILkGkbvWTKQrq1BbMjGk/11EvCA07f+N8Z2Rj9lw9+tlqPy4K/90BNPvLcjBlKXruZFZWtQmbBWsA150PjvrqSD1pju+qkpC3tavgC4S0HxT9Gl9F+IuqCEfvRSNhRJrl2UWPHTolTfE7NOlX3745OEXTH4AFp/lgy+wyvGJBujfGZOjjuiGyPl71cS9t7yJBxTXdZxDDrjmaFmsftpK0Q+JccNHLzlj2hrkrWTPnrP70hbzgyoxw+JwOXmsnE8Q8WHxEgYyPfA4dxkZsktQbE51zGvU/yIxGJ5zV9AF2Y7pxzOXHq9sPXwgoJneW9JHCkH7BSw56+EHagEDeYeKD/1aIaRJbeyfltTTbK05J8nhyrdKFGENazEHoDYmhWk7Jdd7X/E2nEYWmYTje4YacHVOM1P9Guqs8n8VrUnYXreogJ9tOZs/Ydl/+I52ITvuK7w+SsVcl5wuxuoclg6dsa1RrDpKm9emN2OKS3RqJBNjnfSUaeGLrDSYENm/+PUEhvhKAd+DTpjnYb+oKsf4QegGFJtoHoZNNIlSvnjpjO2VC+g0Ci11JTaq/LwfNb7OJMYURzFwlW8BRmJWZ8BnnhNhw+vZG6fa7yyeIW9OVpVtqQBPpA5Qumw== argentina
+          user: ${linux:system:user:dstremkouski}
diff --git a/openssh/server/team/members/hkraemer.yml b/openssh/server/team/members/hkraemer.yml
new file mode 100644
index 0000000..e6aca4e
--- /dev/null
+++ b/openssh/server/team/members/hkraemer.yml
@@ -0,0 +1,19 @@
+parameters:
+  linux:
+    system:
+      user:
+        hkraemer:
+          enabled: true
+          name: hkraemer
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Heiko Kraemer
+          home: /home/hkraemer
+          email: hkraemer@mirantis.com
+  openssh:
+    server:
+      user:
+        hkraemer:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDDwMJV5+Za6N2M2R9T+r0KAOVOLUHHjJVTq7gABUj4RmHZpkA/ZQhZZJUs6vrOHwGjITRPPSkJJtg9MIzFRNw+qAhrAZ+42CerKH4s+GgGWm48y+JM6RN8Ndy1YdQGRSs+VSrTGt2+XGm5wokr7yViH2ZsiQNbW/3rqSaaXojsL7NQKmQstgczIWrzUckEdCiNMG2ax0oOD/GGIWXDKVzHEiZHsusbhdxRAPjuiuKqM/YtmYDRT9QPwSWLrG5t6J/0OC5KyfrHch7eq6+je0xFSHDYXgDztvX64b6sXUBPnXpnwlQHbn0X6URzgwFQ8nKlVlChnAxTsA0Bi4pecI84Hvn77M2hsCb1wtClGtqUG2Sp+g7JeP5vLrFxeKVGWBkApx/MO8qDRlRM91TTlAv8GY79HfrqTVTLGr+RhKQbuyNKvNRLsnuxClSR4M1uzbLLPkPlwsC+Q+b6Gy8+KOHPjC0wWnxjSQUJZrbjPwGm34uarN2Q4IaPVFJmE0VBlZyoUpf0PCIgzZdfft8QMEeLcir20tZo3YUbfx3PdwD8eWv8d+df/IKMFIfFWosZEyBHOBktjoctPLLNIOeqNP8kWjElNuMPrK34cwTRWFiP19cwc0qB+HY3L8ULtyyNWhgjRte6De8kx9XGmBeOuDGqeLnP7jxMXgN5mdw3eDRBEQ== hkraemer@mirantis.com
+          user: ${linux:system:user:hkraemer}
diff --git a/openssh/server/team/members/ivasilevskaya.yml b/openssh/server/team/members/ivasilevskaya.yml
new file mode 100644
index 0000000..bc50441
--- /dev/null
+++ b/openssh/server/team/members/ivasilevskaya.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        ivasilevskaya:
+          enabled: true
+          name: ivasilevskaya
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Inessa Vasilevskaya
+          home: /home/ivasilevskaya
+          email: ivasilevskaya@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        ivasilevskaya:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJk2ip+Rn73D4vt47pe/Hv42ylKJv6JIzeF0k3OflH+RyliVelvo05KMcozfsmmvOKhwgDokBj3KjQ10ewDwD7Fz5H3tosa8JFOs36cuHx9aHrsEmj1oIcIyThrIBwSZGFApqJqj27sLtReVLQJPlYR59RJGw61TogkA/QooOABi+KHzuwPFjAcA1SMfFT8LwiaNPkyUdRb5EQeKCOHniRAEPGNIwskA0sxz25qbB1EU2XBFjkxRE1b5GHfUYL+c2YhAwRWTJbD2JbbcHI6HpsmJutzkS6YIkEn1CK4JuA40OQTYFSEutCk2uPPR0G+77Fec2+vD/8H+ncPxPeDqNR ina@ina-ThinkPad-X240 
+          user: ${linux:system:user:ivasilevskaya}
diff --git a/openssh/server/team/members/kkushaev.yml b/openssh/server/team/members/kkushaev.yml
new file mode 100644
index 0000000..978c6f1
--- /dev/null
+++ b/openssh/server/team/members/kkushaev.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        kkushaev:
+          enabled: true
+          name: kkushaev
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Kairat Kushaev
+          home: /home/kkushaev
+          email: kkushaev@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        kkushaev:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqsPMcXdObuEZCBqw3t+AutfjA6mxNJ9o4jZb+ov4Tatw0mlGZtpQXyOnn1kkvIW0TAmMdT8dXeSHusc/Ujd8MHFBDSnvGid/jtSpA7q4Op0VNo4cOFx1fw5KqnsZyymhafiVQywgj6UQOEYNpX7VHgPOMLL2Ymm3i9RF986jLpLqXJHWbJuy+0rOHzjFh127QuTV01AYONOaiDdcwZlHyFZgWShL5NSJCMhmREPLn118JTEsN8w+r10a51plzrrV3Tqcz6q7znfftBKlzKrPACVmbMdOzOQ+XBMuN3VmsFxtS//qcqd7y+YAgG1CJ+E+nk4JUYU5fxeiUWntvqFKl
+          user: ${linux:system:user:kkushaev}
diff --git a/openssh/server/team/members/mchernik.yml b/openssh/server/team/members/mchernik.yml
new file mode 100644
index 0000000..ca8a4b9
--- /dev/null
+++ b/openssh/server/team/members/mchernik.yml
@@ -0,0 +1,19 @@
+parameters:
+  linux:
+    system:
+      user:
+        mchernik:
+          enabled: true
+          name: mchernik
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Mykhailo Chernyk
+          home: /home/mchernik
+          email: mchernik@mirantis.com
+  openssh:
+    server:
+      user:
+        mchernik:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCiYzcWNIP1K3DnSfztIZdMTl6zSr133eixsHDWWqI71Fj5UOny4kMH2P/qYk0WHhm7P9kwBNDgmJBY/eO5jb00D2w9BGHyvsOnkpAgzw5neL4ivRT7qLWkRdbcLo8AAFQN7VW+bgMb8gFfYWfttHyfkbJOQlU2xmi8fvhQ+2IM/12S0f0lP2uIYgVn8g9f+1OmtXKOWi/cKx0+6NYsuFjM2oVRlBhwlhPD2mI00rSL6zYjz/8GapPPkylQnds09NueNmrScjsPmJl6lPzU8maxHABZ/KctIZW/0ucMolv/3Ybm5FJIsj6YGUdz7AWzdE9o4tSfugFR3P7Ng/scxXpZ mchernik@mirantis.com
+          user: ${linux:system:user:mchernik}
diff --git a/openssh/server/team/members/ogrudev.yml b/openssh/server/team/members/ogrudev.yml
new file mode 100644
index 0000000..71964a6
--- /dev/null
+++ b/openssh/server/team/members/ogrudev.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        ogrudev:
+          enabled: true
+          name: ogrudev
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Oleksii Grudev
+          home: /home/ogrudev
+          email: ogrudev@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        ogrudev:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDilSKhVkANZQLOY6zhLBxhKD0OabfORbuxL3H1o+Q0TfL223/I2A8FAqpZzu9RdX0FoOcP3S85S51IX1p4odipTAA9Wyp4jEtMNUUWvRkXWTvVR99+QNCq4QiB78c0JhtydKPu29DJNQr3/UHG877BCrLvOyiXFNrVZI+EBC+Md2SEqSN8e1P/DlORUrjgQKAxuKhMhDyoBbyBvnfK32IYbs8bKlYZRusj1dlL3Jv/nR4VvN4YT+CzNOPCBTljFdcxuqdPZvqdAyMBIYDxaCxx2id96L98kYavKlqUZJn0x6mJ8ndtHtfn+Fwjom/+8cPFUjuhULWsQiPRjfqA6p8r agrudev@agrudev-pc
+          user: ${linux:system:user:ogrudev}
diff --git a/openssh/server/team/members/ohryhorov.yml b/openssh/server/team/members/ohryhorov.yml
new file mode 100644
index 0000000..c58076e
--- /dev/null
+++ b/openssh/server/team/members/ohryhorov.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        ohryhorov:
+          enabled: true
+          name: ohryhorov
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Oleh Hryhorov
+          home: /home/ohryhorov
+          email: ohryhorov@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        ohryhorov:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDURrVLvo44rOSe/2GBh69SPS06Jam21dJrunM9TzuxcHkw7u/rVLMA+pDMMwu/x2n8fFkW7wrd3/6QH7cLOGt1Xw4PDfFA17ZGmV7HwZ1XOeoux2+47TFkGeHyeHOqf7xKMW4o35tKDXd5uipW9opl7+Zm/l7ucd6TKnGjh9vA3nD9xqF8Gxb6qvY7W35EFMPAwU9sK9lMwM/LkuUJirEP11sIK38OoEC2aysNtXZyKdQ9LgmBWZGbaCod0LzgAJd29zQOxWOHHWOE7PK4zHVWYN3AxfiIWSg2mxqARMnqZpPulqbgwVETxLsJJSnPOvvTwoVggimxXh1HPUI7wUnb ohryhorov@ohryhorov-pc
+          user: ${linux:system:user:ohryhorov}
diff --git a/openssh/server/team/members/oshyshko.yml b/openssh/server/team/members/oshyshko.yml
new file mode 100644
index 0000000..8d9fea0
--- /dev/null
+++ b/openssh/server/team/members/oshyshko.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        oshyshko:
+          enabled: true
+          name: oshyshko
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Oleksandr Shyshko
+          home: /home/oshyshko
+          email: oshyshko@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        oshyshko:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDHWGXkftochjnkEYF/2SqPp69zmy7pLICG9+DQjgGd6D8uX3lSqftKePqlIJLGn5ZfTpgVI5lIKO36Men95e6hixrlMeEdL2WCNx1yRGr3m1U+dZn3VGg35tqX1sV9eq+6+P8zkOoliCtc4GFbUB9Z683oJyiwtym/40t8qOAZwm4tvaQJ8fMhhnFk/agCN+V5B4hP0blgWpbodnStluiWr1Y6wT1IjCjwImYqTI5MyVlMTQKGewIj2u7eI8Qwtk0j44exjIa8HvN6RL430TTlzav8QrId+xRUBRnAZUpCd7s8Q75WjctCLAn2xGMkupqf4ANml6KP84hEVea9d/V oshyshko@oshyshko-pc
+          user: ${linux:system:user:oshyshko}
diff --git a/openssh/server/team/members/ryanday.yml b/openssh/server/team/members/ryanday.yml
new file mode 100644
index 0000000..455e4aa
--- /dev/null
+++ b/openssh/server/team/members/ryanday.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        rday:
+          enabled: true
+          name: rday
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Ryan Day
+          home: /home/rday
+          email: rday@mirantis.com
+  openssh:
+    server:
+      user:
+        rday:
+          enabled: true
+          public_keys:
+          - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5WnQjTI+Elg3I3MeuP1T9Y8FKjuLZSj9qiMbetVb9+AbvjbYqjtam7xWzLxsqeH15d/ZSRHnU4E8f0/Wvk1z9Bl+GKl9+IpLvurewl3WXe2yaeZl4Ey3G9goTLfhluB2BbLqf7gu7t02aei68NhYNkp0Ry1FDBQ75frN1EcUoDubHl4HWJWkTsGJFoiaBTmlNRIkbQBYSEGoY331c4e++W0ZLV+q1rjbXVWcWjzuK+i3wCBrDdAjm4LyPjD60yJ/0n8FO4ChlhnGowhkHxQf7Bt80/QhM8VZuWPG4sQReJ2uMBvkFWRYKf8p2h7MaouFLmUOzW0k/EcILBBZgssekaUhDDyXe3c0Qd6yC2Eb8CCRKgIuhTW9+xTfJhZAFLCPDYN/CDybzvgJSgRCa6esxfCQB+i4aRJOeL5IePXdkO+LY1GMbDzVhIxfPviN4/7NRidvtPHEYwLGvaIQUb/XWX4ILXAhdw/ilfOOu9DQkPzpBTQaAGl9+e2edRP3WAe4fjgCPmeTIruwSRqxJFLdLG19m1JaoRwc7H1cIiUQ1i/lMYq2ntA/60FZRQ/xsLdX5LT+wo896bc3pRxore+zs2o2sATEc84u5eCEFk3wMZvfeJdDz/l489G/1kp1SUKMI1ouyBWoP7qO/fI9m+TXg3jYJ3JOd3pYO7jd3kDBuZQ==
+          user: ${linux:system:user:rday}
+
diff --git a/openssh/server/team/members/sachintripathi.yml b/openssh/server/team/members/sachintripathi.yml
new file mode 100644
index 0000000..0a0092c
--- /dev/null
+++ b/openssh/server/team/members/sachintripathi.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        stripathi:
+          enabled: true
+          name: stripathi
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Sachin Tripathi
+          home: /home/stripathi
+          email: stripathi@mirantis.com
+  openssh:
+    server:
+      user:
+        stripathi:
+          enabled: true
+          public_keys:
+          - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB0W6+M9T/nsGzLRXcXbRwY9S6CfI5VgVWOrxYj190RenC+Z37gMlfwvR6+J2TgQ9NAos/ht7Si7qIjDDLw4UApPDErCTTKuU6cp4eVWR7U6ZDxWSjarGVYC+wOtcb59aTynZcU/W6l86EMjuGO917bxWt1QhR6SQuXGTxvVRbhqLci+APUYJouMwk4G4eia1Y5Pfk4x2+CaVu/7fnXD0YIHcqrujc4OaW3N2ayXCFTE/icBWlIgLv091MkkLgEIInXg2Q40hn9g9h8UMgbRCwyM4f1EwB2xdPQUNpGwtHENBB3fjLoN+IGDKhJsjcCkHsQwdC71O1URYdE6GTJ9sX
+          user: ${linux:system:user:stripathi}
+
diff --git a/openssh/server/team/members/samstoelinga.yml b/openssh/server/team/members/samstoelinga.yml
new file mode 100644
index 0000000..e4e45a4
--- /dev/null
+++ b/openssh/server/team/members/samstoelinga.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        sstoelinga:
+          enabled: true
+          name: sstoelinga
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Sam Stoelinga
+          home: /home/sstoelinga
+          email: sstoelinga@mirantis.com
+  openssh:
+    server:
+      user:
+        sstoelinga:
+          enabled: true
+          public_keys:
+          - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDh3j+qNzTJJJrbgWaNEJ4/wF0HZB8jFlz8jO3tA4QJCPJGT76LeFZgeFK1Avp0rRHD4dnHyDvjynJpE5TckBEFiQ2kbyRRiv4SmJe+cEaSz+okoXSuW4ZbsiOhX7IZfWqhR9ra0uxviiaecWOIwoci55EPob34stthIbLPlcSYS81kdivhJLUZwRTvVX4rRf6gFiAjYyv5Zc4ckwwtkIG0A6XiuoHEpO7lDlps12GfN9DEsNUfzFGrEWzucGsPIBIDmHiods4kMv3UNYKImX0EltLF5bGlSDOsy6t65Qr/zCXyB23yF4oU7991/yIjMWzSwUJzcmcHk+0Fr0b1WHh/
+          user: ${linux:system:user:sstoelinga}
+
diff --git a/openssh/server/team/members/sgarbuz.yml b/openssh/server/team/members/sgarbuz.yml
new file mode 100644
index 0000000..324d5b3
--- /dev/null
+++ b/openssh/server/team/members/sgarbuz.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        sgarbuz:
+          enabled: true
+          name: sgarbuz
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Serhii Garbuz
+          home: /home/sgarbuz
+          email: sgarbuz@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        sgarbuz:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKDwmQ8Zf6X4Ztu7MDaggm6Y2/hpf8Y7gQFcfqX0q84a9OZLw5jLgqTXewKW+0LPAsF7Gx0K7G9mFtcvXb5B74cbLg8SnETMET6t6fipOOVVu17/2N5RFGJ0Alwia0WQCDmGv6yYRB63NgFcavvcD8AEQ2LTlGIU8zPclq1j2kOJNLzH0xVsOiUTdEeUk8mOMBqSHQxVCZeyBBpkLHeECiM7AzsVtCWo1R+Sdo82BHs4+Ig9SOhIjLstBXS9DSjS6gzTOQLvCoGjB2P8spllSX0QtPXXNZndKfrj1YWht5O456ILTCocT8F/OGehy+7QL4+iq7JWBXn7ZamO+l8ceH sgarbuz@sgarbuz-pc
+          user: ${linux:system:user:sgarbuz}
diff --git a/openssh/server/team/members/vblokhin.yml b/openssh/server/team/members/vblokhin.yml
new file mode 100644
index 0000000..74ae49c
--- /dev/null
+++ b/openssh/server/team/members/vblokhin.yml
@@ -0,0 +1,21 @@
+parameters:
+  linux:
+    system:
+      user:
+        vblokhin:
+          enabled: true
+          name: vblokhin
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Volodymyr Blokhin
+          home: /home/vblokhin
+          email: vblokhin@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        vblokhin:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDY5F0bDcbiCtO5HkwIVgjwAwCHcTRDZwEIE5cwuGlXNKWk9JtlDKh724Dp8f/Yny1e30Kt9oqs23bv6xfMh4pU4vrajjSv9f+s3hCSs1X9JrlEw92CD7r+jpq2R0vz3ufeHZWSWmeMsRR62BodtYy4EkoyPKvq16guq745KHTYgATm/qJgCkjQ5lxca280i0z14Fv+JOtVxrk52xMTxHS+N6wzVOjuEjBbW2vyktsV/RidT/SoJAVMHoPISjJTR+q5usVuKb6J5U83Y2vbmUCnygAnPX6l9k8atsAvwl1v54QxWE6Qz61kMPpwZZ56BNGhCZ458HqqXiybx4lU4PN6eg/zPA9Eq+xj5ZoXaUK1hg2UpJrmrtCh8H4T+/dPySZ+HMDBp221DCuH43x9No6V0QWhifhHPaGWyeK+mGsznbaSnlZ0QxRun5qWgjG7xHu97zgxjlyxmQII8FWGaOSuv/w6jg894A4jcsDfH5oxDbgVTbqqZG9o7TszIXKTImt1f2fmKKr/CT7ixwIKO3MioUNu3PoQ/GhmKajqugV+TIRe4vJ2FD5hl11ythzLlZCchzlEoymap4P6Y5dMh60YErCtYftn7jATJKSq9EHiLEeTIQDBVqhJzdS9/QWAXBV97mNX7mib1dO0H9TBZu1mYMZio7udbx9oursrVPq3fw== vblokhin@mirantis.com
+          user: ${linux:system:user:vblokhin}
+
diff --git a/openssh/server/team/networking.yml b/openssh/server/team/networking.yml
index d912490..7e5f915 100644
--- a/openssh/server/team/networking.yml
+++ b/openssh/server/team/networking.yml
@@ -51,6 +51,13 @@
           full_name: Oleg Bondarev
           home: /home/obondarev
           email: obondarev@mirantis.com
+        akuznetsova:
+          enabled: true
+          name: akuznetsova
+          sudo: true
+          full_name: Anastasiia Kuznetcova
+          home: /home/akuznetsova
+          email: akuznetsova@mirantis.com
   openssh:
     server:
       enabled: true
@@ -85,6 +92,11 @@
           public_keys:
           - ${public_keys:obondarev}
           user: ${linux:system:user:obondarev}
+        akuznetsova:
+          enabled: true
+          public_keys:
+          - ${public_keys:akuznetsova}
+          user: ${linux:system:user:akuznetsova}
   public_keys:
     aignatov:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJFYznIFlCdxu5UXzThjYZlZfvXKCcDN0QxDEn7U7dNkK17SyzIJswQcxF7pTlvcuZ7XEskEqyXC8E6P5XyvBJO2xLGrFDJ4U3vf7MKsfwSFEj3NPUzV5bGTrKeKIHTL94L7lwMm1INE7lZzciiwvTxcKv//A+FgG8o1MDhefK56cBH4a9TSjEd+5ImcnCc5sf8B+csyWFPnksnv1zwu//T9aYXRITocdVzrfRHmEiZDpL3mNwpGT3O3XUTiMwdVpN2ImAqSF6XlQl0HlUkBT2idCIoXUR9lcGUx2Q+LSd62JgcVmQHCOmbUENj7NIDgWixgSJYLzsi//YNqJ9jccR aignatov@mirantis.com
@@ -98,3 +110,5 @@
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJk2ip+Rn73D4vt47pe/Hv42ylKJv6JIzeF0k3OflH+RyliVelvo05KMcozfsmmvOKhwgDokBj3KjQ10ewDwD7Fz5H3tosa8JFOs36cuHx9aHrsEmj1oIcIyThrIBwSZGFApqJqj27sLtReVLQJPlYR59RJGw61TogkA/QooOABi+KHzuwPFjAcA1SMfFT8LwiaNPkyUdRb5EQeKCOHniRAEPGNIwskA0sxz25qbB1EU2XBFjkxRE1b5GHfUYL+c2YhAwRWTJbD2JbbcHI6HpsmJutzkS6YIkEn1CK4JuA40OQTYFSEutCk2uPPR0G+77Fec2+vD/8H+ncPxPeDqNR ina@ina-ThinkPad-X240
     obondarev:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDca1gqXe14l9uho3t4mZT52lXmSuUxKVOCcSO9Dy+BAmtaVK39+t7la081S5c0H+oTPIXFb32/kO37+qpEgwyOv1zimWIqcR56xrr42gW/QzVLyY64qVnQ9QFiXlvXXBW4YgBuT//SE8upOshLYnznKHOi4IkoKrAE37K34Cz/DGQzFV6sKQSmP6fjJzli0Nzu+YPdBSZW9VH1m7IKxliGoZcjdIkJ+L92+h/mPuN95Bitfe+aoexBQq3u4WjYVVsCE/9TrwLoGlr3zd7VAyVdADJf6phfIMHGDxn8W8125r9UWp4X/36yAIudVC7kHLyr0AHTfYqCVH10nEJvUwRz obondarev@Olegs-MacBook-Pro.local
+    akuznetsova:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD033EOpc2jeEYkKPzmJL4j081hmt3Ml5hlrfJWYY7RRoKBugT1gF9zggI9GaFGn5F29g+92dYfLLH4yfkL91dkNtbsutl7XiHZYW5NIL5n8kHtb8Bahclid8ERMpLYlctqW/4RM5wfMyzh71TxbutN9ZjcbtAQ0bIaCoTyWRrIDiMeW/+Btf7bPpe7zyQMjkQu+F2iYxd6nERiMnVLq080XAqwuSGMy9NFBLvG+VoJV1w49f2Hf19TD1ILev/pttPYem/15/zAnwwR+nye91jBtBBaFI6V4aaYjgsrjEinNy48tfhMpbuELW5Nn3o8c+3Xfi2rRxtkNcfdpc/yvFz/
diff --git a/openssh/server/team/oscore_devops.yml b/openssh/server/team/oscore_devops.yml
index 89870b0..f629d9e 100644
--- a/openssh/server/team/oscore_devops.yml
+++ b/openssh/server/team/oscore_devops.yml
@@ -6,6 +6,11 @@
 - system.openssh.server.team.members.iudovichenko
 - system.openssh.server.team.members.vdrok
 - system.openssh.server.team.members.ikolodyazhny
+- system.openssh.server.team.members.ohryhorov
+- system.openssh.server.team.members.ogrudev
+- system.openssh.server.team.members.kkushaev
+- system.openssh.server.team.members.sgarbuz
+- system.openssh.server.team.members.oshyshko
 parameters:
   _param:
     linux_system_user_sudo: true
diff --git a/openssh/server/team/presales.yml b/openssh/server/team/presales.yml
index e2939be..8361a39 100644
--- a/openssh/server/team/presales.yml
+++ b/openssh/server/team/presales.yml
@@ -1,3 +1,11 @@
+classes:
+- system.openssh.server.team.members.samstoelinga
+- system.openssh.server.team.members.sachintripathi
+- system.openssh.server.team.members.ryanday
+- system.openssh.server.team.members.pmichalec
+- system.openssh.server.team.members.brucemathews
+- system.openssh.server.team.members.andreidanin
+
 parameters:
   _param:
     linux_system_user_sudo: true
diff --git a/openssh/server/team/services.yml b/openssh/server/team/services.yml
index a704e04..c2f4e28 100644
--- a/openssh/server/team/services.yml
+++ b/openssh/server/team/services.yml
@@ -15,6 +15,10 @@
 - system.openssh.server.team.members.tjaroszyk
 - system.openssh.server.team.members.sburns
 - system.openssh.server.team.members.yisakov
+- system.openssh.server.team.members.vblokhin
+- system.openssh.server.team.members.dstremkouski
+- system.openssh.server.team.members.mchernik
+- system.openssh.server.team.members.hkraemer
 parameters:
   _param:
     linux_system_user_sudo: true
diff --git a/prometheus/gainsight/container.yml b/prometheus/gainsight/container.yml
new file mode 100644
index 0000000..f98e052
--- /dev/null
+++ b/prometheus/gainsight/container.yml
@@ -0,0 +1,3 @@
+classes:
+- service.prometheus.gainsight.container
+
diff --git a/prometheus/gainsight/query/openstack.yml b/prometheus/gainsight/query/openstack.yml
new file mode 100644
index 0000000..9215d2e
--- /dev/null
+++ b/prometheus/gainsight/query/openstack.yml
@@ -0,0 +1,19 @@
+parameters:
+  prometheus:
+    gainsight:
+      queries:
+        vcpu_used: "'vCPU Used','sum(avg_over_time(openstack_nova_used_vcpus[24h]))'"
+        vcpu_free: "'vCPU Free','sum(avg_over_time(openstack_nova_free_vcpus[24h]))'"
+        vstorge_used: "'vStorage Used','sum(avg_over_time(openstack_nova_used_disk[24h]))'"
+        vstorage_free: "'vStorage Free','sum(avg_over_time(openstack_nova_free_disk[24h]))'"
+        vram_used: "'vRAM Used','sum(avg_over_time(openstack_nova_used_ram[24h]))'"
+        vram_free: "'vRAM Free','sum(avg_over_time(openstack_nova_free_ram[24h]))'"
+        instances: "'Instances','sum(avg_over_time(openstack_nova_instances[24h]))'"
+        compute_nodes: "'Compute Nodes','sum(openstack_nova_services{service=~\"nova.compute\"})'"
+        tenants: "'Tenants','sum(avg_over_time(openstack_keystone_tenants_total[24h]))'"
+        cinder_api: "'Cinder API','avg(avg_over_time(openstack_api_check_status{service=\"cinderv2\"}[24h]))'"
+        nova_api: "'Nova API','avg(avg_over_time(openstack_api_check_status{service=\"nova\"}[24h]))'"
+        keystone_api: "'Keystone API','avg(avg_over_time(openstack_api_check_status{service=\"keystone\"}[24h]))'"
+        glance_api: "'Glance API','avg(avg_over_time(openstack_api_check_status{service=\"glance\"}[24h]))'"
+        keystone_api: "'Keystone API','avg(avg_over_time(openstack_api_check_status{service=\"keystone\"}[24h]))'"
+        neutron_api: "'Neutron API','avg(avg_over_time(openstack_api_check_status{service=\"neutron\"}[24h]))'"
diff --git a/prometheus/pushgateway/container.yml b/prometheus/pushgateway/container.yml
index d0e986e..e4e9cd7 100644
--- a/prometheus/pushgateway/container.yml
+++ b/prometheus/pushgateway/container.yml
@@ -1,2 +1,3 @@
 classes:
 - service.prometheus.pushgateway.container
+- system.prometheus.pushgateway
diff --git a/prometheus/pushgateway/init.yml b/prometheus/pushgateway/init.yml
new file mode 100644
index 0000000..a906807
--- /dev/null
+++ b/prometheus/pushgateway/init.yml
@@ -0,0 +1,7 @@
+parameters:
+  _param:
+    prometheus_pushgateway_data_directory: /opt/pushgateway/data
+  prometheus:
+    pushgateway:
+      dir:
+        data: /srv/volumes/local/pushgateway/data
diff --git a/prometheus/relay/init.yml b/prometheus/relay/init.yml
index a240458..2841850 100644
--- a/prometheus/relay/init.yml
+++ b/prometheus/relay/init.yml
@@ -1,3 +1,11 @@
 classes:
  - service.prometheus.relay
  - service.prometheus.relay.cluster
+parameters:
+  _param:
+    prometheus_relay_bind_port: 9094
+  prometheus:
+    relay:
+      enabled: true
+      bind:
+        port: ${_param:prometheus_relay_bind_port}
diff --git a/prometheus/server/alert/alerta_relabel.yml b/prometheus/server/alert/alerta_relabel.yml
index a81c59a..ca0f4b4 100644
--- a/prometheus/server/alert/alerta_relabel.yml
+++ b/prometheus/server/alert/alerta_relabel.yml
@@ -11,9 +11,15 @@
           - replacement: "aggregated"
             source_labels: "instance"
             target_label: "instance"
+          - source_labels: "host"
+            target_label: "instance"
+            regex: "(.+)"
+          - source_labels: "job"
+            target_label: "instance"
+            regex: "(.+)"
           - source_labels: ["host", "job"]
             target_label: "instance"
-            regex: "([a-zA-Z0-9]+;[a-zA-Z0-9_]+)"
+            regex: "(.+;.+)"
           - source_labels: ["hostname", "job"]
             target_label: "instance"
-            regex: "([a-zA-Z0-9]+;[a-zA-Z0-9_]+)"
+            regex: "(.+;.+)"
\ No newline at end of file
diff --git a/rabbitmq/server/vhost/openstack/ha_for_all_queues.yml b/rabbitmq/server/vhost/openstack/ha_for_all_queues.yml
new file mode 100644
index 0000000..040a8ed
--- /dev/null
+++ b/rabbitmq/server/vhost/openstack/ha_for_all_queues.yml
@@ -0,0 +1,10 @@
+parameters:
+  rabbitmq:
+    server:
+      host:
+        '/openstack':
+          policies:
+          - name: ha-all
+            pattern: '.'
+            definition: '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 0
diff --git a/rabbitmq/server/vhost/openstack/ha_for_all_queues_except_telemetry.yml b/rabbitmq/server/vhost/openstack/ha_for_all_queues_except_telemetry.yml
new file mode 100644
index 0000000..a2eef5b
--- /dev/null
+++ b/rabbitmq/server/vhost/openstack/ha_for_all_queues_except_telemetry.yml
@@ -0,0 +1,10 @@
+parameters:
+  rabbitmq:
+    server:
+      host:
+        '/openstack':
+          policies:
+          - name: ha-all-except-notif
+            pattern: '^((?!(alarm|alarming|event|metering|notifications)\.).)*$'
+            definition: '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 0
diff --git a/rabbitmq/server/vhost/openstack/ha_for_telemetry_queues.yml b/rabbitmq/server/vhost/openstack/ha_for_telemetry_queues.yml
new file mode 100644
index 0000000..d456072
--- /dev/null
+++ b/rabbitmq/server/vhost/openstack/ha_for_telemetry_queues.yml
@@ -0,0 +1,10 @@
+parameters:
+  rabbitmq:
+    server:
+      host:
+        '/openstack':
+          policies:
+          - name: ha-notif
+            pattern: '^(alarm|alarming|event|metering|notifications)\.'
+            definition: '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 0
diff --git a/rabbitmq/server/vhost/openstack/rpc_ha.yml b/rabbitmq/server/vhost/openstack/rpc_ha.yml
new file mode 100644
index 0000000..a3c461d
--- /dev/null
+++ b/rabbitmq/server/vhost/openstack/rpc_ha.yml
@@ -0,0 +1,22 @@
+parameters:
+  rabbitmq:
+    server:
+      host:
+        '/openstack':
+          policies:
+          - name: heat_engine_rpc_expire
+            pattern: '^heat-engine-listener\.'
+            definition: '{"expires":3600000, "ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 1
+          - name: heat_worker_rpc_expire
+            pattern: '^engine_worker\.'
+            definition: '{"expires":3600000, "ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 1
+          - name: results_expire
+            pattern: '^results\.'
+            definition: '{"expires":3600000, "ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 1
+          - name: tasks_expire
+            pattern: '^tasks\.'
+            definition: '{"expires":3600000, "ha-mode":"all", "ha-sync-mode":"automatic"}'
+            priority: 1
diff --git a/rabbitmq/server/vhost/openstack/without_rpc_ha.yml b/rabbitmq/server/vhost/openstack/without_rpc_ha.yml
new file mode 100644
index 0000000..4b35c32
--- /dev/null
+++ b/rabbitmq/server/vhost/openstack/without_rpc_ha.yml
@@ -0,0 +1,22 @@
+parameters:
+  rabbitmq:
+    server:
+      host:
+        '/openstack':
+          policies:
+          - name: heat_engine_rpc_expire
+            pattern: '^heat-engine-listener\.'
+            definition: '{"expires":3600000}'
+            priority: 1
+          - name: heat_worker_rpc_expire
+            pattern: '^engine_worker\.'
+            definition: '{"expires":3600000}'
+            priority: 1
+          - name: results_expire
+            pattern: '^results\.'
+            definition: '{"expires":3600000}'
+            priority: 1
+          - name: tasks_expire
+            pattern: '^tasks\.'
+            definition: '{"expires":3600000}'
+            priority: 1
diff --git a/reclass/storage/system/kubernetes_proxy_cluster.yml b/reclass/storage/system/kubernetes_proxy_cluster.yml
new file mode 100644
index 0000000..b00c254
--- /dev/null
+++ b/reclass/storage/system/kubernetes_proxy_cluster.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    kubernetes_proxy_node01_hostname: prx01
+    kubernetes_proxy_node02_hostname: prx02
+    kubernetes_proxy_system_codename: xenial
+  reclass:
+    storage:
+      node:
+        kubernetes_proxy_node01:
+          name: ${_param:kubernetes_proxy_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.kubernetes.proxy
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:kubernetes_proxy_system_codename}
+            single_address: ${_param:kubernetes_proxy_node01_address}
+            keepalived_vip_priority: 102
+        kubernetes_proxy_node02:
+          name: ${_param:kubernetes_proxy_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.kubernetes.proxy
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:kubernetes_proxy_system_codename}
+            single_address: ${_param:kubernetes_proxy_node02_address}
+            keepalived_vip_priority: 101
diff --git a/reclass/storage/system/openstack_baremetal_cluster.yml b/reclass/storage/system/openstack_baremetal_cluster.yml
index 71f6034..ff6592f 100644
--- a/reclass/storage/system/openstack_baremetal_cluster.yml
+++ b/reclass/storage/system/openstack_baremetal_cluster.yml
@@ -21,6 +21,7 @@
             single_address: ${_param:openstack_baremetal_node01_address}
             keepalived_vip_priority: 101
             baremetal_address: ${_param:openstack_baremetal_node01_baremetal_address}
+            openstack_node_role: primary
         openstack_baremetal_node02:
           name: ${_param:openstack_baremetal_node02_hostname}
           domain: ${_param:cluster_domain}
@@ -32,6 +33,7 @@
             single_address: ${_param:openstack_baremetal_node02_address}
             keepalived_vip_priority: 102
             baremetal_address: ${_param:openstack_baremetal_node02_baremetal_address}
+            openstack_node_role: secondary
         openstack_baremetal_node03:
           name: ${_param:openstack_baremetal_node03_hostname}
           domain: ${_param:cluster_domain}
@@ -43,5 +45,6 @@
             single_address: ${_param:openstack_baremetal_node03_address}
             keepalived_vip_priority: 103
             baremetal_address: ${_param:openstack_baremetal_node03_baremetal_address}
+            openstack_node_role: secondary
 
 
diff --git a/reclass/storage/system/openstack_baremetal_single.yml b/reclass/storage/system/openstack_baremetal_single.yml
index 3b279b0..36e89d3 100644
--- a/reclass/storage/system/openstack_baremetal_single.yml
+++ b/reclass/storage/system/openstack_baremetal_single.yml
@@ -14,3 +14,4 @@
             linux_system_codename: ${_param:linux_system_codename}
             single_address: ${_param:openstack_baremetal_node01_address}
             baremetal_address: ${_param:openstack_baremetal_node01_baremetal_address}
+            openstack_node_role: primary
diff --git a/reclass/storage/system/openstack_control_cluster.yml b/reclass/storage/system/openstack_control_cluster.yml
index 300a04c..e05b3e9 100644
--- a/reclass/storage/system/openstack_control_cluster.yml
+++ b/reclass/storage/system/openstack_control_cluster.yml
@@ -19,6 +19,7 @@
             keepalived_vip_priority: 103
             opencontrail_database_id: 1
             rabbitmq_cluster_role: master
+            openstack_node_role: primary
         openstack_control_node02:
           name: ${_param:openstack_control_node02_hostname}
           domain: ${_param:cluster_domain}
@@ -31,6 +32,7 @@
             keepalived_vip_priority: 102
             opencontrail_database_id: 2
             rabbitmq_cluster_role: slave
+            openstack_node_role: secondary
         openstack_control_node03:
           name: ${_param:openstack_control_node03_hostname}
           domain: ${_param:cluster_domain}
@@ -43,3 +45,4 @@
             keepalived_vip_priority: 101
             opencontrail_database_id: 3
             rabbitmq_cluster_role: slave
+            openstack_node_role: secondary
diff --git a/reclass/storage/system/openstack_control_large.yml b/reclass/storage/system/openstack_control_large.yml
new file mode 100644
index 0000000..4ad2e90
--- /dev/null
+++ b/reclass/storage/system/openstack_control_large.yml
@@ -0,0 +1,66 @@
+parameters:
+  _param:
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
+    openstack_control_node04_hostname: ctl04
+    openstack_control_node05_hostname: ctl05
+    openstack_control_system_codename: xenial
+  reclass:
+    storage:
+      node:
+        openstack_control_node01:
+          name: ${_param:openstack_control_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.control
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:openstack_control_system_codename}
+            single_address: ${_param:openstack_control_node01_address}
+            keepalived_vip_priority: 105
+            openstack_node_role: primary
+        openstack_control_node02:
+          name: ${_param:openstack_control_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.control
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:openstack_control_system_codename}
+            single_address: ${_param:openstack_control_node02_address}
+            keepalived_vip_priority: 104
+            openstack_node_role: secondary
+        openstack_control_node03:
+          name: ${_param:openstack_control_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.control
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:openstack_control_system_codename}
+            single_address: ${_param:openstack_control_node03_address}
+            keepalived_vip_priority: 103
+            openstack_node_role: secondary
+        openstack_control_node04:
+          name: ${_param:openstack_control_node04_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.control
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:openstack_control_system_codename}
+            single_address: ${_param:openstack_control_node04_address}
+            keepalived_vip_priority: 102
+            openstack_node_role: secondary
+        openstack_control_node05:
+          name: ${_param:openstack_control_node05_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.control
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:openstack_control_system_codename}
+            single_address: ${_param:openstack_control_node05_address}
+            keepalived_vip_priority: 101
+            openstack_node_role: secondary
diff --git a/reclass/storage/system/openstack_control_single.yml b/reclass/storage/system/openstack_control_single.yml
index e7329da..fe5c870 100644
--- a/reclass/storage/system/openstack_control_single.yml
+++ b/reclass/storage/system/openstack_control_single.yml
@@ -14,3 +14,4 @@
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: ${_param:openstack_control_system_codename}
             single_address: ${_param:openstack_control_node01_address}
+            openstack_node_role: primary
diff --git a/reclass/storage/system/openstack_control_upgrade_single.yml b/reclass/storage/system/openstack_control_upgrade_single.yml
index e387062..b00cc81 100644
--- a/reclass/storage/system/openstack_control_upgrade_single.yml
+++ b/reclass/storage/system/openstack_control_upgrade_single.yml
@@ -14,3 +14,4 @@
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: ${_param:openstack_upgrade_system_codename}
             single_address: ${_param:openstack_upgrade_node01_address}
+            openstack_node_role: primary
diff --git a/reclass/storage/system/openstack_telemetry_cluster.yml b/reclass/storage/system/openstack_telemetry_cluster.yml
index 9dc6457..c33a8db 100644
--- a/reclass/storage/system/openstack_telemetry_cluster.yml
+++ b/reclass/storage/system/openstack_telemetry_cluster.yml
@@ -17,6 +17,7 @@
             linux_system_codename: ${_param:openstack_telemetry_system_codename}
             single_address: ${_param:openstack_telemetry_node01_address}
             keepalived_vip_priority: 103
+            openstack_node_role: primary
         openstack_telemetry_node02:
           name: ${_param:openstack_telemetry_node02_hostname}
           domain: ${_param:cluster_domain}
@@ -27,6 +28,7 @@
             linux_system_codename: ${_param:openstack_telemetry_system_codename}
             single_address: ${_param:openstack_telemetry_node02_address}
             keepalived_vip_priority: 102
+            openstack_node_role: secondary
         openstack_telemetry_node03:
           name: ${_param:openstack_telemetry_node03_hostname}
           domain: ${_param:cluster_domain}
@@ -37,3 +39,4 @@
             linux_system_codename: ${_param:openstack_telemetry_system_codename}
             single_address: ${_param:openstack_telemetry_node03_address}
             keepalived_vip_priority: 101
+            openstack_node_role: secondary
diff --git a/reclass/storage/system/physical_control_large.yml b/reclass/storage/system/physical_control_large.yml
new file mode 100644
index 0000000..1070f47
--- /dev/null
+++ b/reclass/storage/system/physical_control_large.yml
@@ -0,0 +1,251 @@
+parameters:
+  _param:
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
+    infra_kvm_node04_hostname: kvm04
+    infra_kvm_node05_hostname: kvm05
+    infra_kvm_node06_hostname: kvm06
+    infra_kvm_node07_hostname: kvm07
+    infra_kvm_node08_hostname: kvm08
+    infra_kvm_node09_hostname: kvm09
+    infra_kvm_node10_hostname: kvm10
+    infra_kvm_node11_hostname: kvm11
+    infra_kvm_node12_hostname: kvm12
+    infra_kvm_node13_hostname: kvm13
+    infra_kvm_node14_hostname: kvm14
+    infra_kvm_node15_hostname: kvm15
+
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_deploy_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_deploy_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_deploy_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_deploy_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_deploy_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_deploy_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node10_deploy_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node11_deploy_address: ${_param:infra_kvm_node10_address}
+    infra_kvm_node12_deploy_address: ${_param:infra_kvm_node12_address}
+    infra_kvm_node13_deploy_address: ${_param:infra_kvm_node13_address}
+    infra_kvm_node14_deploy_address: ${_param:infra_kvm_node14_address}
+    infra_kvm_node15_deploy_address: ${_param:infra_kvm_node15_address}
+
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_storage_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_storage_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_storage_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_storage_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_storage_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_storage_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node10_storage_address: ${_param:infra_kvm_node10_address}
+    infra_kvm_node11_storage_address: ${_param:infra_kvm_node11_address}
+    infra_kvm_node12_storage_address: ${_param:infra_kvm_node12_address}
+    infra_kvm_node13_storage_address: ${_param:infra_kvm_node13_address}
+    infra_kvm_node14_storage_address: ${_param:infra_kvm_node14_address}
+    infra_kvm_node15_storage_address: ${_param:infra_kvm_node15_address}
+
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_public_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_public_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_public_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_public_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_public_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_public_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node10_public_address: ${_param:infra_kvm_node10_address}
+    infra_kvm_node11_public_address: ${_param:infra_kvm_node11_address}
+    infra_kvm_node12_public_address: ${_param:infra_kvm_node12_address}
+    infra_kvm_node13_public_address: ${_param:infra_kvm_node13_address}
+    infra_kvm_node14_public_address: ${_param:infra_kvm_node14_address}
+    infra_kvm_node15_public_address: ${_param:infra_kvm_node15_address}
+
+    infra_kvm_system_codename: xenial
+
+  reclass:
+    storage:
+      node:
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
+        infra_kvm_node04:
+          name: ${_param:infra_kvm_node04_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node04_address}
+            deploy_address: ${_param:infra_kvm_node04_deploy_address}
+            public_address: ${_param:infra_kvm_node04_public_address}
+            storage_address: ${_param:infra_kvm_node04_storage_address}
+        infra_kvm_node05:
+          name: ${_param:infra_kvm_node05_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node05_address}
+            deploy_address: ${_param:infra_kvm_node05_deploy_address}
+            public_address: ${_param:infra_kvm_node05_public_address}
+            storage_address: ${_param:infra_kvm_node05_storage_address}
+        infra_kvm_node06:
+          name: ${_param:infra_kvm_node06_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node06_address}
+            deploy_address: ${_param:infra_kvm_node06_deploy_address}
+            public_address: ${_param:infra_kvm_node06_public_address}
+            storage_address: ${_param:infra_kvm_node06_storage_address}
+        infra_kvm_node07:
+          name: ${_param:infra_kvm_node07_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node07_address}
+            deploy_address: ${_param:infra_kvm_node07_deploy_address}
+            public_address: ${_param:infra_kvm_node07_public_address}
+            storage_address: ${_param:infra_kvm_node07_storage_address}
+        infra_kvm_node08:
+          name: ${_param:infra_kvm_node08_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node08_address}
+            deploy_address: ${_param:infra_kvm_node08_deploy_address}
+            public_address: ${_param:infra_kvm_node08_public_address}
+            storage_address: ${_param:infra_kvm_node08_storage_address}
+        infra_kvm_node09:
+          name: ${_param:infra_kvm_node09_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node09_address}
+            deploy_address: ${_param:infra_kvm_node09_deploy_address}
+            public_address: ${_param:infra_kvm_node09_public_address}
+            storage_address: ${_param:infra_kvm_node09_storage_address}
+        infra_kvm_node10:
+          name: ${_param:infra_kvm_node10_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node10_address}
+            deploy_address: ${_param:infra_kvm_node10_deploy_address}
+            public_address: ${_param:infra_kvm_node10_public_address}
+            storage_address: ${_param:infra_kvm_node10_storage_address}
+        infra_kvm_node11:
+          name: ${_param:infra_kvm_node11_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node11_address}
+            deploy_address: ${_param:infra_kvm_node11_deploy_address}
+            public_address: ${_param:infra_kvm_node11_public_address}
+            storage_address: ${_param:infra_kvm_node11_storage_address}
+        infra_kvm_node12:
+          name: ${_param:infra_kvm_node12_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node12_address}
+            deploy_address: ${_param:infra_kvm_node12_deploy_address}
+            public_address: ${_param:infra_kvm_node12_public_address}
+            storage_address: ${_param:infra_kvm_node12_storage_address}
+        infra_kvm_node13:
+          name: ${_param:infra_kvm_node13_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node13_address}
+            deploy_address: ${_param:infra_kvm_node13_deploy_address}
+            public_address: ${_param:infra_kvm_node13_public_address}
+            storage_address: ${_param:infra_kvm_node13_storage_address}
+        infra_kvm_node14:
+          name: ${_param:infra_kvm_node14_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node14_address}
+            deploy_address: ${_param:infra_kvm_node14_deploy_address}
+            public_address: ${_param:infra_kvm_node14_public_address}
+            storage_address: ${_param:infra_kvm_node14_storage_address}
+        infra_kvm_node15:
+          name: ${_param:infra_kvm_node15_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node15_address}
+            deploy_address: ${_param:infra_kvm_node15_deploy_address}
+            public_address: ${_param:infra_kvm_node15_public_address}
+            storage_address: ${_param:infra_kvm_node15_storage_address}
diff --git a/reclass/storage/system/physical_control_medium.yml b/reclass/storage/system/physical_control_medium.yml
new file mode 100644
index 0000000..5ad7d24
--- /dev/null
+++ b/reclass/storage/system/physical_control_medium.yml
@@ -0,0 +1,203 @@
+parameters:
+  _param:
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
+    infra_kvm_node04_hostname: kvm04
+    infra_kvm_node05_hostname: kvm05
+    infra_kvm_node06_hostname: kvm06
+    infra_kvm_node07_hostname: kvm07
+    infra_kvm_node08_hostname: kvm08
+    infra_kvm_node09_hostname: kvm09
+    infra_kvm_node10_hostname: kvm10
+    infra_kvm_node11_hostname: kvm11
+    infra_kvm_node12_hostname: kvm12
+
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_deploy_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_deploy_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_deploy_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_deploy_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_deploy_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_deploy_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node10_deploy_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node11_deploy_address: ${_param:infra_kvm_node10_address}
+    infra_kvm_node12_deploy_address: ${_param:infra_kvm_node12_address}
+
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_storage_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_storage_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_storage_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_storage_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_storage_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_storage_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node10_storage_address: ${_param:infra_kvm_node10_address}
+    infra_kvm_node11_storage_address: ${_param:infra_kvm_node11_address}
+    infra_kvm_node12_storage_address: ${_param:infra_kvm_node12_address}
+
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_public_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_public_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_public_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_public_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_public_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_public_address: ${_param:infra_kvm_node09_address}
+    infra_kvm_node10_public_address: ${_param:infra_kvm_node10_address}
+    infra_kvm_node11_public_address: ${_param:infra_kvm_node11_address}
+    infra_kvm_node12_public_address: ${_param:infra_kvm_node12_address}
+
+    infra_kvm_system_codename: xenial
+
+  reclass:
+    storage:
+      node:
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
+        infra_kvm_node04:
+          name: ${_param:infra_kvm_node04_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node04_address}
+            deploy_address: ${_param:infra_kvm_node04_deploy_address}
+            public_address: ${_param:infra_kvm_node04_public_address}
+            storage_address: ${_param:infra_kvm_node04_storage_address}
+        infra_kvm_node05:
+          name: ${_param:infra_kvm_node05_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node05_address}
+            deploy_address: ${_param:infra_kvm_node05_deploy_address}
+            public_address: ${_param:infra_kvm_node05_public_address}
+            storage_address: ${_param:infra_kvm_node05_storage_address}
+        infra_kvm_node06:
+          name: ${_param:infra_kvm_node06_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node06_address}
+            deploy_address: ${_param:infra_kvm_node06_deploy_address}
+            public_address: ${_param:infra_kvm_node06_public_address}
+            storage_address: ${_param:infra_kvm_node06_storage_address}
+        infra_kvm_node07:
+          name: ${_param:infra_kvm_node07_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node07_address}
+            deploy_address: ${_param:infra_kvm_node07_deploy_address}
+            public_address: ${_param:infra_kvm_node07_public_address}
+            storage_address: ${_param:infra_kvm_node07_storage_address}
+        infra_kvm_node08:
+          name: ${_param:infra_kvm_node08_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node08_address}
+            deploy_address: ${_param:infra_kvm_node08_deploy_address}
+            public_address: ${_param:infra_kvm_node08_public_address}
+            storage_address: ${_param:infra_kvm_node08_storage_address}
+        infra_kvm_node09:
+          name: ${_param:infra_kvm_node09_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node09_address}
+            deploy_address: ${_param:infra_kvm_node09_deploy_address}
+            public_address: ${_param:infra_kvm_node09_public_address}
+            storage_address: ${_param:infra_kvm_node09_storage_address}
+        infra_kvm_node10:
+          name: ${_param:infra_kvm_node10_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node10_address}
+            deploy_address: ${_param:infra_kvm_node10_deploy_address}
+            public_address: ${_param:infra_kvm_node10_public_address}
+            storage_address: ${_param:infra_kvm_node10_storage_address}
+        infra_kvm_node11:
+          name: ${_param:infra_kvm_node11_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node11_address}
+            deploy_address: ${_param:infra_kvm_node11_deploy_address}
+            public_address: ${_param:infra_kvm_node11_public_address}
+            storage_address: ${_param:infra_kvm_node11_storage_address}
+        infra_kvm_node12:
+          name: ${_param:infra_kvm_node12_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node12_address}
+            deploy_address: ${_param:infra_kvm_node12_deploy_address}
+            public_address: ${_param:infra_kvm_node12_public_address}
+            storage_address: ${_param:infra_kvm_node12_storage_address}
diff --git a/reclass/storage/system/physical_control_small.yml b/reclass/storage/system/physical_control_small.yml
new file mode 100644
index 0000000..4ce3759
--- /dev/null
+++ b/reclass/storage/system/physical_control_small.yml
@@ -0,0 +1,107 @@
+parameters:
+  _param:
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
+    infra_kvm_node04_hostname: kvm04
+    infra_kvm_node05_hostname: kvm05
+    infra_kvm_node06_hostname: kvm06
+
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_deploy_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_deploy_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_deploy_address: ${_param:infra_kvm_node06_address}
+
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_storage_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_storage_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_storage_address: ${_param:infra_kvm_node06_address}
+
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_public_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_public_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_public_address: ${_param:infra_kvm_node06_address}
+
+    infra_kvm_system_codename: xenial
+
+  reclass:
+    storage:
+      node:
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
+        infra_kvm_node04:
+          name: ${_param:infra_kvm_node04_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node04_address}
+            deploy_address: ${_param:infra_kvm_node04_deploy_address}
+            public_address: ${_param:infra_kvm_node04_public_address}
+            storage_address: ${_param:infra_kvm_node04_storage_address}
+        infra_kvm_node05:
+          name: ${_param:infra_kvm_node05_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node05_address}
+            deploy_address: ${_param:infra_kvm_node05_deploy_address}
+            public_address: ${_param:infra_kvm_node05_public_address}
+            storage_address: ${_param:infra_kvm_node05_storage_address}
+        infra_kvm_node06:
+          name: ${_param:infra_kvm_node06_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:infra_kvm_system_codename}
+            single_address: ${_param:infra_kvm_node06_address}
+            deploy_address: ${_param:infra_kvm_node06_deploy_address}
+            public_address: ${_param:infra_kvm_node06_public_address}
+            storage_address: ${_param:infra_kvm_node06_storage_address}
diff --git a/sahara/server/cluster.yml b/sahara/server/cluster.yml
index cdb7b04..b01ab3d 100644
--- a/sahara/server/cluster.yml
+++ b/sahara/server/cluster.yml
@@ -9,6 +9,7 @@
       enabled: true
       version: ${_param:sahara_version}
       notification: false
+      role: ${_param:openstack_node_role}
       bind:
         address: ${_param:single_address}
         port: 8386
diff --git a/sahara/server/single.yml b/sahara/server/single.yml
index 01e7b38..fcb26c9 100644
--- a/sahara/server/single.yml
+++ b/sahara/server/single.yml
@@ -5,6 +5,7 @@
     server:
       enabled: true
       version: ${_param:sahara_version}
+      role: ${_param:openstack_node_role}
       bind:
         host: ${_param:single_address}
         port: 8386
diff --git a/salt/control/cluster/kubernetes_proxy_cluster.yml b/salt/control/cluster/kubernetes_proxy_cluster.yml
new file mode 100644
index 0000000..d4251a2
--- /dev/null
+++ b/salt/control/cluster/kubernetes_proxy_cluster.yml
@@ -0,0 +1,25 @@
+parameters:
+  salt:
+    control:
+      size:
+        kubernetes.proxy:
+          cpu: 32
+          ram: 65536
+          disk_profile: small
+          net_profile: default
+      cluster:
+        internal:
+          domain: ${_param:cluster_domain}
+          engine: virt
+          node:
+            prx01:
+              name: ${_param:kubernetes_proxy_node01_hostname}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              image: ${_param:salt_control_trusty_image}
+              size: kubernetes.proxy
+            prx02:
+              name: ${_param:kubernetes_proxy_node02_hostname}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              image: ${_param:salt_control_trusty_image}
+              size: kubernetes.proxy
+
diff --git a/salt/control/placement/cicd/compact.yml b/salt/control/placement/cicd/compact.yml
new file mode 100644
index 0000000..9bdf4a4
--- /dev/null
+++ b/salt/control/placement/cicd/compact.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    cicd_control_node01_hostname: cid01
+    cicd_control_node02_hostname: cid02
+    cicd_control_node03_hostname: cid03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            cid01:
+              name: ${_param:cicd_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid02:
+              name: ${_param:cicd_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid03:
+              name: ${_param:cicd_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: cicd.control
\ No newline at end of file
diff --git a/salt/control/placement/cicd/large.yml b/salt/control/placement/cicd/large.yml
new file mode 100644
index 0000000..9bdf4a4
--- /dev/null
+++ b/salt/control/placement/cicd/large.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    cicd_control_node01_hostname: cid01
+    cicd_control_node02_hostname: cid02
+    cicd_control_node03_hostname: cid03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            cid01:
+              name: ${_param:cicd_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid02:
+              name: ${_param:cicd_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid03:
+              name: ${_param:cicd_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: cicd.control
\ No newline at end of file
diff --git a/salt/control/placement/cicd/medium.yml b/salt/control/placement/cicd/medium.yml
new file mode 100644
index 0000000..9bdf4a4
--- /dev/null
+++ b/salt/control/placement/cicd/medium.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    cicd_control_node01_hostname: cid01
+    cicd_control_node02_hostname: cid02
+    cicd_control_node03_hostname: cid03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            cid01:
+              name: ${_param:cicd_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid02:
+              name: ${_param:cicd_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid03:
+              name: ${_param:cicd_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: cicd.control
\ No newline at end of file
diff --git a/salt/control/placement/cicd/minimal.yml b/salt/control/placement/cicd/minimal.yml
new file mode 100644
index 0000000..9bdf4a4
--- /dev/null
+++ b/salt/control/placement/cicd/minimal.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    cicd_control_node01_hostname: cid01
+    cicd_control_node02_hostname: cid02
+    cicd_control_node03_hostname: cid03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            cid01:
+              name: ${_param:cicd_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid02:
+              name: ${_param:cicd_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid03:
+              name: ${_param:cicd_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: cicd.control
\ No newline at end of file
diff --git a/salt/control/placement/cicd/small.yml b/salt/control/placement/cicd/small.yml
new file mode 100644
index 0000000..9bdf4a4
--- /dev/null
+++ b/salt/control/placement/cicd/small.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    cicd_control_node01_hostname: cid01
+    cicd_control_node02_hostname: cid02
+    cicd_control_node03_hostname: cid03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            cid01:
+              name: ${_param:cicd_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid02:
+              name: ${_param:cicd_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: cicd.control
+            cid03:
+              name: ${_param:cicd_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: cicd.control
\ No newline at end of file
diff --git a/salt/control/placement/opencontrail/compact.yml b/salt/control/placement/opencontrail/compact.yml
new file mode 100644
index 0000000..a619956
--- /dev/null
+++ b/salt/control/placement/opencontrail/compact.yml
@@ -0,0 +1,46 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+    opencontrail_analytics_node01_hostname: nal01
+    opencontrail_analytics_node02_hostname: nal02
+    opencontrail_analytics_node03_hostname: nal03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ntw01:
+              name: ${_param:opencontrail_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw02:
+              name: ${_param:opencontrail_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw03:
+              name: ${_param:opencontrail_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            nal01:
+              name: ${_param:opencontrail_analytics_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal02:
+              name: ${_param:opencontrail_analytics_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal03:
+              name: ${_param:opencontrail_analytics_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
\ No newline at end of file
diff --git a/salt/control/placement/opencontrail/large.yml b/salt/control/placement/opencontrail/large.yml
new file mode 100644
index 0000000..1aabd0d
--- /dev/null
+++ b/salt/control/placement/opencontrail/large.yml
@@ -0,0 +1,46 @@
+parameters:
+  _param:
+    infra_kvm10_hostname: kvm10
+    infra_kvm11_hostname: kvm11
+    infra_kvm12_hostname: kvm12
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+    opencontrail_analytics_node01_hostname: nal01
+    opencontrail_analytics_node02_hostname: nal02
+    opencontrail_analytics_node03_hostname: nal03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ntw01:
+              name: ${_param:opencontrail_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node10_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw02:
+              name: ${_param:opencontrail_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node11_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw03:
+              name: ${_param:opencontrail_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node12_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            nal01:
+              name: ${_param:opencontrail_analytics_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node10_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal02:
+              name: ${_param:opencontrail_analytics_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node11_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal03:
+              name: ${_param:opencontrail_analytics_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node12_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
\ No newline at end of file
diff --git a/salt/control/placement/opencontrail/medium.yml b/salt/control/placement/opencontrail/medium.yml
new file mode 100644
index 0000000..dfc32f3
--- /dev/null
+++ b/salt/control/placement/opencontrail/medium.yml
@@ -0,0 +1,46 @@
+parameters:
+  _param:
+    infra_kvm07_hostname: kvm07
+    infra_kvm08_hostname: kvm08
+    infra_kvm09_hostname: kvm09
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+    opencontrail_analytics_node01_hostname: nal01
+    opencontrail_analytics_node02_hostname: nal02
+    opencontrail_analytics_node03_hostname: nal03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ntw01:
+              name: ${_param:opencontrail_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node07_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw02:
+              name: ${_param:opencontrail_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node08_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw03:
+              name: ${_param:opencontrail_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node09_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            nal01:
+              name: ${_param:opencontrail_analytics_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node07_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal02:
+              name: ${_param:opencontrail_analytics_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node08_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal03:
+              name: ${_param:opencontrail_analytics_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node09_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
\ No newline at end of file
diff --git a/salt/control/placement/opencontrail/minimal.yml b/salt/control/placement/opencontrail/minimal.yml
new file mode 100644
index 0000000..a619956
--- /dev/null
+++ b/salt/control/placement/opencontrail/minimal.yml
@@ -0,0 +1,46 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+    opencontrail_analytics_node01_hostname: nal01
+    opencontrail_analytics_node02_hostname: nal02
+    opencontrail_analytics_node03_hostname: nal03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ntw01:
+              name: ${_param:opencontrail_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw02:
+              name: ${_param:opencontrail_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw03:
+              name: ${_param:opencontrail_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            nal01:
+              name: ${_param:opencontrail_analytics_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal02:
+              name: ${_param:opencontrail_analytics_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal03:
+              name: ${_param:opencontrail_analytics_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
\ No newline at end of file
diff --git a/salt/control/placement/opencontrail/small.yml b/salt/control/placement/opencontrail/small.yml
new file mode 100644
index 0000000..a619956
--- /dev/null
+++ b/salt/control/placement/opencontrail/small.yml
@@ -0,0 +1,46 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+    opencontrail_analytics_node01_hostname: nal01
+    opencontrail_analytics_node02_hostname: nal02
+    opencontrail_analytics_node03_hostname: nal03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ntw01:
+              name: ${_param:opencontrail_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw02:
+              name: ${_param:opencontrail_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            ntw03:
+              name: ${_param:opencontrail_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: opencontrail.control
+            nal01:
+              name: ${_param:opencontrail_analytics_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal02:
+              name: ${_param:opencontrail_analytics_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
+            nal03:
+              name: ${_param:opencontrail_analytics_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: opencontrail.analytics
\ No newline at end of file
diff --git a/salt/control/placement/openstack/compact.yml b/salt/control/placement/openstack/compact.yml
new file mode 100644
index 0000000..8c62e28
--- /dev/null
+++ b/salt/control/placement/openstack/compact.yml
@@ -0,0 +1,76 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
+    openstack_database_node01_hostname: dbs01
+    openstack_database_node02_hostname: dbs02
+    openstack_database_node03_hostname: dbs03
+    openstack_message_queue_node01_hostname: msg01
+    openstack_message_queue_node02_hostname: msg02
+    openstack_message_queue_node03_hostname: msg03
+    openstack_proxy_node01_hostname: prx01
+    openstack_proxy_node02_hostname: prx02
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ctl01:
+              name: ${_param:openstack_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl02:
+              name: ${_param:openstack_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl03:
+              name: ${_param:openstack_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            dbs01:
+              name: ${_param:openstack_database_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs02:
+              name: ${_param:openstack_database_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs03:
+              name: ${_param:openstack_database_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            msg01:
+              name: ${_param:openstack_message_queue_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg02:
+              name: ${_param:openstack_message_queue_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg03:
+              name: ${_param:openstack_message_queue_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            prx01:
+              name: ${_param:openstack_proxy_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
+            prx02:
+              name: ${_param:openstack_proxy_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
diff --git a/salt/control/placement/openstack/large.yml b/salt/control/placement/openstack/large.yml
new file mode 100644
index 0000000..cb056dd
--- /dev/null
+++ b/salt/control/placement/openstack/large.yml
@@ -0,0 +1,93 @@
+parameters:
+  _param:
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    infra_kvm04_hostname: kvm04
+    infra_kvm05_hostname: kvm05
+    infra_kvm06_hostname: kvm06
+    infra_kvm07_hostname: kvm07
+    infra_kvm08_hostname: kvm08
+    infra_kvm09_hostname: kvm09
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
+    openstack_control_node04_hostname: ctl04
+    openstack_control_node05_hostname: ctl05
+    openstack_database_node01_hostname: dbs01
+    openstack_database_node02_hostname: dbs02
+    openstack_database_node03_hostname: dbs03
+    openstack_message_queue_node01_hostname: msg01
+    openstack_message_queue_node02_hostname: msg02
+    openstack_message_queue_node03_hostname: msg03
+    openstack_proxy_node01_hostname: prx01
+    openstack_proxy_node02_hostname: prx02
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ctl01:
+              name: ${_param:openstack_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl02:
+              name: ${_param:openstack_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl03:
+              name: ${_param:openstack_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl04:
+              name: ${_param:openstack_control_node04_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl05:
+              name: ${_param:openstack_control_node05_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node06_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            dbs01:
+              name: ${_param:openstack_database_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs02:
+              name: ${_param:openstack_database_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs03:
+              name: ${_param:openstack_database_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node06_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            msg01:
+              name: ${_param:openstack_message_queue_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node07_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg02:
+              name: ${_param:openstack_message_queue_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node08_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg03:
+              name: ${_param:openstack_message_queue_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node09_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            prx01:
+              name: ${_param:openstack_proxy_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node07_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
+            prx02:
+              name: ${_param:openstack_proxy_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node08_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
diff --git a/salt/control/placement/openstack/medium.yml b/salt/control/placement/openstack/medium.yml
new file mode 100644
index 0000000..7d0e166
--- /dev/null
+++ b/salt/control/placement/openstack/medium.yml
@@ -0,0 +1,79 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    infra_kvm04_hostname: kvm04
+    infra_kvm05_hostname: kvm05
+    infra_kvm06_hostname: kvm06
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
+    openstack_database_node01_hostname: dbs01
+    openstack_database_node02_hostname: dbs02
+    openstack_database_node03_hostname: dbs03
+    openstack_message_queue_node01_hostname: msg01
+    openstack_message_queue_node02_hostname: msg02
+    openstack_message_queue_node03_hostname: msg03
+    openstack_proxy_node01_hostname: prx01
+    openstack_proxy_node02_hostname: prx02
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ctl01:
+              name: ${_param:openstack_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl02:
+              name: ${_param:openstack_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl03:
+              name: ${_param:openstack_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            dbs01:
+              name: ${_param:openstack_database_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs02:
+              name: ${_param:openstack_database_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs03:
+              name: ${_param:openstack_database_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            msg01:
+              name: ${_param:openstack_message_queue_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg02:
+              name: ${_param:openstack_message_queue_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg03:
+              name: ${_param:openstack_message_queue_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node06_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            prx01:
+              name: ${_param:openstack_proxy_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
+            prx02:
+              name: ${_param:openstack_proxy_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
diff --git a/salt/control/placement/openstack/minimal.yml b/salt/control/placement/openstack/minimal.yml
new file mode 100644
index 0000000..8c62e28
--- /dev/null
+++ b/salt/control/placement/openstack/minimal.yml
@@ -0,0 +1,76 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
+    openstack_database_node01_hostname: dbs01
+    openstack_database_node02_hostname: dbs02
+    openstack_database_node03_hostname: dbs03
+    openstack_message_queue_node01_hostname: msg01
+    openstack_message_queue_node02_hostname: msg02
+    openstack_message_queue_node03_hostname: msg03
+    openstack_proxy_node01_hostname: prx01
+    openstack_proxy_node02_hostname: prx02
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ctl01:
+              name: ${_param:openstack_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl02:
+              name: ${_param:openstack_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl03:
+              name: ${_param:openstack_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            dbs01:
+              name: ${_param:openstack_database_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs02:
+              name: ${_param:openstack_database_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs03:
+              name: ${_param:openstack_database_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            msg01:
+              name: ${_param:openstack_message_queue_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg02:
+              name: ${_param:openstack_message_queue_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg03:
+              name: ${_param:openstack_message_queue_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            prx01:
+              name: ${_param:openstack_proxy_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
+            prx02:
+              name: ${_param:openstack_proxy_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
diff --git a/salt/control/placement/openstack/small.yml b/salt/control/placement/openstack/small.yml
new file mode 100644
index 0000000..8c62e28
--- /dev/null
+++ b/salt/control/placement/openstack/small.yml
@@ -0,0 +1,76 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    openstack_control_node01_hostname: ctl01
+    openstack_control_node02_hostname: ctl02
+    openstack_control_node03_hostname: ctl03
+    openstack_database_node01_hostname: dbs01
+    openstack_database_node02_hostname: dbs02
+    openstack_database_node03_hostname: dbs03
+    openstack_message_queue_node01_hostname: msg01
+    openstack_message_queue_node02_hostname: msg02
+    openstack_message_queue_node03_hostname: msg03
+    openstack_proxy_node01_hostname: prx01
+    openstack_proxy_node02_hostname: prx02
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            ctl01:
+              name: ${_param:openstack_control_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl02:
+              name: ${_param:openstack_control_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            ctl03:
+              name: ${_param:openstack_control_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.control
+            dbs01:
+              name: ${_param:openstack_database_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs02:
+              name: ${_param:openstack_database_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            dbs03:
+              name: ${_param:openstack_database_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.database
+            msg01:
+              name: ${_param:openstack_message_queue_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg02:
+              name: ${_param:openstack_message_queue_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            msg03:
+              name: ${_param:openstack_message_queue_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.message_queue
+            prx01:
+              name: ${_param:openstack_proxy_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
+            prx02:
+              name: ${_param:openstack_proxy_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: openstack.proxy
diff --git a/salt/control/placement/stacklight/compact.yml b/salt/control/placement/stacklight/compact.yml
new file mode 100644
index 0000000..2cde570
--- /dev/null
+++ b/salt/control/placement/stacklight/compact.yml
@@ -0,0 +1,64 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    stacklight_log_node01_hostname: log01
+    stacklight_log_node02_hostname: log02
+    stacklight_log_node03_hostname: log03
+    stacklight_monitor_node01_hostname: mon01
+    stacklight_monitor_node02_hostname: mon02
+    stacklight_monitor_node03_hostname: mon03
+    stacklight_telemetry_node01_hostname: mtr01
+    stacklight_telemetry_node02_hostname: mtr02
+    stacklight_telemetry_node03_hostname: mtr03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            mtr01:
+              name: ${_param:stacklight_telemetry_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr02:
+              name: ${_param:stacklight_telemetry_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr03:
+              name: ${_param:stacklight_telemetry_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            log01:
+              name: ${_param:stacklight_log_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log02:
+              name: ${_param:stacklight_log_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log03:
+              name: ${_param:stacklight_log_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            mon01:
+              name: ${_param:stacklight_monitor_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon02:
+              name: ${_param:stacklight_monitor_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon03:
+              name: ${_param:stacklight_monitor_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: stacklight.server
\ No newline at end of file
diff --git a/salt/control/placement/stacklight/large.yml b/salt/control/placement/stacklight/large.yml
new file mode 100644
index 0000000..7b380d8
--- /dev/null
+++ b/salt/control/placement/stacklight/large.yml
@@ -0,0 +1,64 @@
+parameters:
+  _param:
+    infra_kvm13_hostname: kvm13
+    infra_kvm14_hostname: kvm14
+    infra_kvm15_hostname: kvm15
+    stacklight_log_node01_hostname: log01
+    stacklight_log_node02_hostname: log02
+    stacklight_log_node03_hostname: log03
+    stacklight_monitor_node01_hostname: mon01
+    stacklight_monitor_node02_hostname: mon02
+    stacklight_monitor_node03_hostname: mon03
+    stacklight_telemetry_node01_hostname: mtr01
+    stacklight_telemetry_node02_hostname: mtr02
+    stacklight_telemetry_node03_hostname: mtr03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            mtr01:
+              name: ${_param:stacklight_telemetry_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node13_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr02:
+              name: ${_param:stacklight_telemetry_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node14_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr03:
+              name: ${_param:stacklight_telemetry_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node15_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            log01:
+              name: ${_param:stacklight_log_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node13_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log02:
+              name: ${_param:stacklight_log_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node14_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log03:
+              name: ${_param:stacklight_log_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node15_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            mon01:
+              name: ${_param:stacklight_monitor_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node13_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon02:
+              name: ${_param:stacklight_monitor_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node14_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon03:
+              name: ${_param:stacklight_monitor_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node15_hostname}.${_param:cluster_domain}
+              size: stacklight.server
\ No newline at end of file
diff --git a/salt/control/placement/stacklight/medium.yml b/salt/control/placement/stacklight/medium.yml
new file mode 100644
index 0000000..7f54f4d
--- /dev/null
+++ b/salt/control/placement/stacklight/medium.yml
@@ -0,0 +1,64 @@
+parameters:
+  _param:
+    infra_kvm10_hostname: kvm10
+    infra_kvm11_hostname: kvm11
+    infra_kvm12_hostname: kvm12
+    stacklight_log_node01_hostname: log01
+    stacklight_log_node02_hostname: log02
+    stacklight_log_node03_hostname: log03
+    stacklight_monitor_node01_hostname: mon01
+    stacklight_monitor_node02_hostname: mon02
+    stacklight_monitor_node03_hostname: mon03
+    stacklight_telemetry_node01_hostname: mtr01
+    stacklight_telemetry_node02_hostname: mtr02
+    stacklight_telemetry_node03_hostname: mtr03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            mtr01:
+              name: ${_param:stacklight_telemetry_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node10_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr02:
+              name: ${_param:stacklight_telemetry_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node11_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr03:
+              name: ${_param:stacklight_telemetry_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node12_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            log01:
+              name: ${_param:stacklight_log_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node10_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            lop02:
+              name: ${_param:stacklight_log_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node11_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log03:
+              name: ${_param:stacklight_log_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node12_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            mon01:
+              name: ${_param:stacklight_monitor_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node10_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon02:
+              name: ${_param:stacklight_monitor_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node11_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon03:
+              name: ${_param:stacklight_monitor_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node12_hostname}.${_param:cluster_domain}
+              size: stacklight.server
\ No newline at end of file
diff --git a/salt/control/placement/stacklight/minimal.yml b/salt/control/placement/stacklight/minimal.yml
new file mode 100644
index 0000000..2cde570
--- /dev/null
+++ b/salt/control/placement/stacklight/minimal.yml
@@ -0,0 +1,64 @@
+parameters:
+  _param:
+    infra_kvm01_hostname: kvm01
+    infra_kvm02_hostname: kvm02
+    infra_kvm03_hostname: kvm03
+    stacklight_log_node01_hostname: log01
+    stacklight_log_node02_hostname: log02
+    stacklight_log_node03_hostname: log03
+    stacklight_monitor_node01_hostname: mon01
+    stacklight_monitor_node02_hostname: mon02
+    stacklight_monitor_node03_hostname: mon03
+    stacklight_telemetry_node01_hostname: mtr01
+    stacklight_telemetry_node02_hostname: mtr02
+    stacklight_telemetry_node03_hostname: mtr03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            mtr01:
+              name: ${_param:stacklight_telemetry_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr02:
+              name: ${_param:stacklight_telemetry_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr03:
+              name: ${_param:stacklight_telemetry_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            log01:
+              name: ${_param:stacklight_log_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log02:
+              name: ${_param:stacklight_log_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log03:
+              name: ${_param:stacklight_log_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            mon01:
+              name: ${_param:stacklight_monitor_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon02:
+              name: ${_param:stacklight_monitor_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon03:
+              name: ${_param:stacklight_monitor_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node03_hostname}.${_param:cluster_domain}
+              size: stacklight.server
\ No newline at end of file
diff --git a/salt/control/placement/stacklight/small.yml b/salt/control/placement/stacklight/small.yml
new file mode 100644
index 0000000..e16a7cb
--- /dev/null
+++ b/salt/control/placement/stacklight/small.yml
@@ -0,0 +1,64 @@
+parameters:
+  _param:
+    infra_kvm04_hostname: kvm04
+    infra_kvm05_hostname: kvm05
+    infra_kvm06_hostname: kvm06
+    stacklight_log_node01_hostname: log01
+    stacklight_log_node02_hostname: log02
+    stacklight_log_node03_hostname: log03
+    stacklight_monitor_node01_hostname: mon01
+    stacklight_monitor_node02_hostname: mon02
+    stacklight_monitor_node03_hostname: mon03
+    stacklight_telemetry_node01_hostname: mtr01
+    stacklight_telemetry_node02_hostname: mtr02
+    stacklight_telemetry_node03_hostname: mtr03
+  salt:
+    control:
+      cluster:
+        internal:
+          node:
+            mtr01:
+              name: ${_param:stacklight_telemetry_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr02:
+              name: ${_param:stacklight_telemetry_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            mtr03:
+              name: ${_param:stacklight_telemetry_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node06_hostname}.${_param:cluster_domain}
+              size: stacklight.telemetry
+            log01:
+              name: ${_param:stacklight_log_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log02:
+              name: ${_param:stacklight_log_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            log03:
+              name: ${_param:stacklight_log_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node06_hostname}.${_param:cluster_domain}
+              size: stacklight.log
+            mon01:
+              name: ${_param:stacklight_monitor_node01_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node04_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon02:
+              name: ${_param:stacklight_monitor_node02_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node05_hostname}.${_param:cluster_domain}
+              size: stacklight.server
+            mon03:
+              name: ${_param:stacklight_monitor_node03_hostname}
+              image: ${_param:salt_control_xenial_image}
+              provider: ${_param:infra_kvm_node06_hostname}.${_param:cluster_domain}
+              size: stacklight.server
\ No newline at end of file
diff --git a/salt/control/sizes/cicd/compact.yml b/salt/control/sizes/cicd/compact.yml
new file mode 100644
index 0000000..65ad7b7
--- /dev/null
+++ b/salt/control/sizes/cicd/compact.yml
@@ -0,0 +1,6 @@
+parameters:
+  _param:
+    salt_control_size_cpu_cicd_control: 8
+    salt_control_size_ram_cicd_control: 12288
+    salt_control_size_disk_profile_cicd_control: large
+    salt_control_size_net_profile_cicd_control: default
\ No newline at end of file
diff --git a/salt/control/sizes/cicd/large.yml b/salt/control/sizes/cicd/large.yml
new file mode 100644
index 0000000..deb3722
--- /dev/null
+++ b/salt/control/sizes/cicd/large.yml
@@ -0,0 +1,6 @@
+parameters:
+  _param:
+    salt_control_size_cpu_cicd_control: 8
+    salt_control_size_ram_cicd_control: 32768
+    salt_control_size_disk_profile_cicd_control: xxxlarge
+    salt_control_size_net_profile_cicd_control: default
\ No newline at end of file
diff --git a/salt/control/sizes/cicd/medium.yml b/salt/control/sizes/cicd/medium.yml
new file mode 100644
index 0000000..2ef4866
--- /dev/null
+++ b/salt/control/sizes/cicd/medium.yml
@@ -0,0 +1,6 @@
+parameters:
+  _param:
+    salt_control_size_cpu_cicd_control: 8
+    salt_control_size_ram_cicd_control: 32768
+    salt_control_size_disk_profile_cicd_control: xxlarge
+    salt_control_size_net_profile_cicd_control: default
\ No newline at end of file
diff --git a/salt/control/sizes/cicd/minimal.yml b/salt/control/sizes/cicd/minimal.yml
new file mode 100644
index 0000000..876578b
--- /dev/null
+++ b/salt/control/sizes/cicd/minimal.yml
@@ -0,0 +1,6 @@
+parameters:
+  _param:
+    salt_control_size_cpu_cicd_control: 8
+    salt_control_size_ram_cicd_control: 8192
+    salt_control_size_disk_profile_cicd_control: small
+    salt_control_size_net_profile_cicd_control: default
\ No newline at end of file
diff --git a/salt/control/sizes/cicd/small.yml b/salt/control/sizes/cicd/small.yml
new file mode 100644
index 0000000..2ef4866
--- /dev/null
+++ b/salt/control/sizes/cicd/small.yml
@@ -0,0 +1,6 @@
+parameters:
+  _param:
+    salt_control_size_cpu_cicd_control: 8
+    salt_control_size_ram_cicd_control: 32768
+    salt_control_size_disk_profile_cicd_control: xxlarge
+    salt_control_size_net_profile_cicd_control: default
\ No newline at end of file
diff --git a/salt/control/sizes/opencontrail/compact.yml b/salt/control/sizes/opencontrail/compact.yml
new file mode 100644
index 0000000..5e70d89
--- /dev/null
+++ b/salt/control/sizes/opencontrail/compact.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    salt_control_size_cpu_opencontrail_control: 8
+    salt_control_size_ram_opencontrail_control: 32768
+    salt_control_size_disk_profile_opencontrail_control: small
+    salt_control_size_net_profile_opencontrail_control: default
+    salt_control_size_cpu_opencontrail_analytics: 8
+    salt_control_size_ram_opencontrail_analytics: 32768
+    salt_control_size_disk_profile_opencontrail_analytics: large
+    salt_control_size_net_profile_opencontrail_analytics: default
\ No newline at end of file
diff --git a/salt/control/sizes/opencontrail/large.yml b/salt/control/sizes/opencontrail/large.yml
new file mode 100644
index 0000000..3af75d7
--- /dev/null
+++ b/salt/control/sizes/opencontrail/large.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    salt_control_size_cpu_opencontrail_control: 16
+    salt_control_size_ram_opencontrail_control: 65536
+    salt_control_size_disk_profile_opencontrail_control: large
+    salt_control_size_net_profile_opencontrail_control: default
+    salt_control_size_cpu_opencontrail_analytics: 24
+    salt_control_size_ram_opencontrail_analytics: 131072
+    salt_control_size_disk_profile_opencontrail_analytics: xxhuge
+    salt_control_size_net_profile_opencontrail_analytics: default
\ No newline at end of file
diff --git a/salt/control/sizes/opencontrail/medium.yml b/salt/control/sizes/opencontrail/medium.yml
new file mode 100644
index 0000000..410092c
--- /dev/null
+++ b/salt/control/sizes/opencontrail/medium.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    salt_control_size_cpu_opencontrail_control: 8
+    salt_control_size_ram_opencontrail_control: 65536
+    salt_control_size_disk_profile_opencontrail_control: large
+    salt_control_size_net_profile_opencontrail_control: default
+    salt_control_size_cpu_opencontrail_analytics: 16
+    salt_control_size_ram_opencontrail_analytics: 98304
+    salt_control_size_disk_profile_opencontrail_analytics: xhuge
+    salt_control_size_net_profile_opencontrail_analytics: default
\ No newline at end of file
diff --git a/salt/control/sizes/opencontrail/minimal.yml b/salt/control/sizes/opencontrail/minimal.yml
new file mode 100644
index 0000000..ad80ca9
--- /dev/null
+++ b/salt/control/sizes/opencontrail/minimal.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    salt_control_size_cpu_opencontrail_control: 8
+    salt_control_size_ram_opencontrail_control: 12288
+    salt_control_size_disk_profile_opencontrail_control: small
+    salt_control_size_net_profile_opencontrail_control: default
+    salt_control_size_cpu_opencontrail_analytics: 12
+    salt_control_size_ram_opencontrail_analytics: 8192
+    salt_control_size_disk_profile_opencontrail_analytics: medium
+    salt_control_size_net_profile_opencontrail_analytics: default
\ No newline at end of file
diff --git a/salt/control/sizes/opencontrail/small.yml b/salt/control/sizes/opencontrail/small.yml
new file mode 100644
index 0000000..5e70d89
--- /dev/null
+++ b/salt/control/sizes/opencontrail/small.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    salt_control_size_cpu_opencontrail_control: 8
+    salt_control_size_ram_opencontrail_control: 32768
+    salt_control_size_disk_profile_opencontrail_control: small
+    salt_control_size_net_profile_opencontrail_control: default
+    salt_control_size_cpu_opencontrail_analytics: 8
+    salt_control_size_ram_opencontrail_analytics: 32768
+    salt_control_size_disk_profile_opencontrail_analytics: large
+    salt_control_size_net_profile_opencontrail_analytics: default
\ No newline at end of file
diff --git a/salt/control/sizes/openstack/compact.yml b/salt/control/sizes/openstack/compact.yml
new file mode 100644
index 0000000..16e5dba
--- /dev/null
+++ b/salt/control/sizes/openstack/compact.yml
@@ -0,0 +1,22 @@
+parameters:
+  _param:
+    salt_control_size_cpu_openstack_control: 8
+    salt_control_size_ram_openstack_control: 32768
+    salt_control_size_disk_profile_openstack_control: small
+    salt_control_size_net_profile_openstack_control: default
+    salt_control_size_cpu_openstack_database: 8
+    salt_control_size_ram_openstack_database: 16384
+    salt_control_size_disk_profile_openstack_database: large
+    salt_control_size_net_profile_openstack_database: default
+    salt_control_size_cpu_openstack_message_queue: 8
+    salt_control_size_ram_openstack_message_queue: 32768
+    salt_control_size_disk_profile_openstack_message_queue: small
+    salt_control_size_net_profile_openstack_message_queue: default
+    salt_control_size_cpu_openstack_proxy: 4
+    salt_control_size_ram_openstack_proxy: 8192
+    salt_control_size_disk_profile_openstack_proxy: small
+    salt_control_size_net_profile_openstack_proxy: default
+    salt_control_size_cpu_openstack_upgrade: 8
+    salt_control_size_ram_openstack_upgrade: 16384
+    salt_control_size_disk_profile_openstack_upgrade: medium
+    salt_control_size_net_profile_openstack_upgrade: default
\ No newline at end of file
diff --git a/salt/control/sizes/openstack/large.yml b/salt/control/sizes/openstack/large.yml
new file mode 100644
index 0000000..04aa0c4
--- /dev/null
+++ b/salt/control/sizes/openstack/large.yml
@@ -0,0 +1,22 @@
+parameters:
+  _param:
+    salt_control_size_cpu_openstack_control: 24
+    salt_control_size_ram_openstack_control: 131072
+    salt_control_size_disk_profile_openstack_control: large
+    salt_control_size_net_profile_openstack_control: default
+    salt_control_size_cpu_openstack_database: 24
+    salt_control_size_ram_openstack_database: 65536
+    salt_control_size_disk_profile_openstack_database: huge
+    salt_control_size_net_profile_openstack_database: default
+    salt_control_size_cpu_openstack_message_queue: 32
+    salt_control_size_ram_openstack_message_queue: 200704
+    salt_control_size_disk_profile_openstack_message_queue: large
+    salt_control_size_net_profile_openstack_message_queue: default
+    salt_control_size_cpu_openstack_proxy: 8
+    salt_control_size_ram_openstack_proxy: 32768
+    salt_control_size_disk_profile_openstack_proxy: large
+    salt_control_size_net_profile_openstack_proxy: default
+    salt_control_size_cpu_openstack_upgrade: 8
+    salt_control_size_ram_openstack_upgrade: 16384
+    salt_control_size_disk_profile_openstack_upgrade: medium
+    salt_control_size_net_profile_openstack_upgrade: default
\ No newline at end of file
diff --git a/salt/control/sizes/openstack/medium.yml b/salt/control/sizes/openstack/medium.yml
new file mode 100644
index 0000000..7fa5d24
--- /dev/null
+++ b/salt/control/sizes/openstack/medium.yml
@@ -0,0 +1,22 @@
+parameters:
+  _param:
+    salt_control_size_cpu_openstack_control: 16
+    salt_control_size_ram_openstack_control: 65536
+    salt_control_size_disk_profile_openstack_control: large
+    salt_control_size_net_profile_openstack_control: default
+    salt_control_size_cpu_openstack_database: 8
+    salt_control_size_ram_openstack_database: 32786
+    salt_control_size_disk_profile_openstack_database: large
+    salt_control_size_net_profile_openstack_database: default
+    salt_control_size_cpu_openstack_message_queue: 16
+    salt_control_size_ram_openstack_message_queue: 66553
+    salt_control_size_disk_profile_openstack_message_queue: large
+    salt_control_size_net_profile_openstack_message_queue: default
+    salt_control_size_cpu_openstack_proxy: 4
+    salt_control_size_ram_openstack_proxy: 16384
+    salt_control_size_disk_profile_openstack_proxy: small
+    salt_control_size_net_profile_openstack_proxy: default
+    salt_control_size_cpu_openstack_upgrade: 8
+    salt_control_size_ram_openstack_upgrade: 16384
+    salt_control_size_disk_profile_openstack_upgrade: medium
+    salt_control_size_net_profile_openstack_upgrade: default
\ No newline at end of file
diff --git a/salt/control/sizes/openstack/minimal.yml b/salt/control/sizes/openstack/minimal.yml
new file mode 100644
index 0000000..bee7c71
--- /dev/null
+++ b/salt/control/sizes/openstack/minimal.yml
@@ -0,0 +1,22 @@
+parameters:
+  _param:
+    salt_control_size_cpu_openstack_control: 8
+    salt_control_size_ram_openstack_control: 12288
+    salt_control_size_disk_profile_openstack_control: small
+    salt_control_size_net_profile_openstack_control: default
+    salt_control_size_cpu_openstack_database: 6
+    salt_control_size_ram_openstack_database: 8192
+    salt_control_size_disk_profile_openstack_database: medium
+    salt_control_size_net_profile_openstack_database: default
+    salt_control_size_cpu_openstack_message_queue: 6
+    salt_control_size_ram_openstack_message_queue: 8192
+    salt_control_size_disk_profile_openstack_message_queue: small
+    salt_control_size_net_profile_openstack_message_queue: default
+    salt_control_size_cpu_openstack_proxy: 4
+    salt_control_size_ram_openstack_proxy: 6144
+    salt_control_size_disk_profile_openstack_proxy: small
+    salt_control_size_net_profile_openstack_proxy: default
+    salt_control_size_cpu_openstack_upgrade: 8
+    salt_control_size_ram_openstack_upgrade: 16384
+    salt_control_size_disk_profile_openstack_upgrade: medium
+    salt_control_size_net_profile_openstack_upgrade: default
\ No newline at end of file
diff --git a/salt/control/sizes/openstack/small.yml b/salt/control/sizes/openstack/small.yml
new file mode 100644
index 0000000..9f820d6
--- /dev/null
+++ b/salt/control/sizes/openstack/small.yml
@@ -0,0 +1,22 @@
+parameters:
+  _param:
+    salt_control_size_cpu_openstack_control: 8
+    salt_control_size_ram_openstack_control: 32768
+    salt_control_size_disk_profile_openstack_control: large
+    salt_control_size_net_profile_openstack_control: default
+    salt_control_size_cpu_openstack_database: 8
+    salt_control_size_ram_openstack_database: 16384
+    salt_control_size_disk_profile_openstack_database: large
+    salt_control_size_net_profile_openstack_database: default
+    salt_control_size_cpu_openstack_message_queue: 8
+    salt_control_size_ram_openstack_message_queue: 65536
+    salt_control_size_disk_profile_openstack_message_queue: xxlarge
+    salt_control_size_net_profile_openstack_message_queue: default
+    salt_control_size_cpu_openstack_proxy: 4
+    salt_control_size_ram_openstack_proxy: 8192
+    salt_control_size_disk_profile_openstack_proxy: small
+    salt_control_size_net_profile_openstack_proxy: default
+    salt_control_size_cpu_openstack_upgrade: 8
+    salt_control_size_ram_openstack_upgrade: 16384
+    salt_control_size_disk_profile_openstack_upgrade: medium
+    salt_control_size_net_profile_openstack_upgrade: default
\ No newline at end of file
diff --git a/salt/control/sizes/stacklight.yml b/salt/control/sizes/stacklight.yml
index 5b09c14..c7b1875 100644
--- a/salt/control/sizes/stacklight.yml
+++ b/salt/control/sizes/stacklight.yml
@@ -10,7 +10,7 @@
     salt_control_size_net_profile_stacklight_server: default
     salt_control_size_cpu_stacklight_telemetry: 12
     salt_control_size_ram_stacklight_telemetry: 98304
-    salt_control_size_disk_profile_stacklight_telemetryr: huge
+    salt_control_size_disk_profile_stacklight_telemetry: huge
     salt_control_size_net_profile_stacklight_telemetry: default
   salt:
     control:
diff --git a/salt/control/sizes/stacklight/compact.yml b/salt/control/sizes/stacklight/compact.yml
new file mode 100644
index 0000000..8d67466
--- /dev/null
+++ b/salt/control/sizes/stacklight/compact.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_control_size_cpu_stacklight_log: 4
+    salt_control_size_ram_stacklight_log: 8192
+    salt_control_size_disk_profile_stacklight_log: xxxlarge
+    salt_control_size_net_profile_stacklight_log: default
+    salt_control_size_cpu_stacklight_server: 4
+    salt_control_size_ram_stacklight_server: 8192
+    salt_control_size_disk_profile_stacklight_server: xxlarge
+    salt_control_size_net_profile_stacklight_server: default
+    salt_control_size_cpu_stacklight_telemetry: 4
+    salt_control_size_ram_stacklight_telemetry: 8192
+    salt_control_size_disk_profile_stacklight_telemetry: xxlarge
+    salt_control_size_net_profile_stacklight_telemetry: default
\ No newline at end of file
diff --git a/salt/control/sizes/stacklight/large.yml b/salt/control/sizes/stacklight/large.yml
new file mode 100644
index 0000000..6e2463f
--- /dev/null
+++ b/salt/control/sizes/stacklight/large.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_control_size_cpu_stacklight_log: 16
+    salt_control_size_ram_stacklight_log: 49152
+    salt_control_size_disk_profile_stacklight_log: xxxxhuge
+    salt_control_size_net_profile_stacklight_log: default
+    salt_control_size_cpu_stacklight_server: 24
+    salt_control_size_ram_stacklight_server: 262144
+    salt_control_size_disk_profile_stacklight_server: huge
+    salt_control_size_net_profile_stacklight_server: default
+    salt_control_size_cpu_stacklight_telemetry: 16
+    salt_control_size_ram_stacklight_telemetry: 200704
+    salt_control_size_disk_profile_stacklight_telemetry: xxhuge
+    salt_control_size_net_profile_stacklight_telemetry: default
\ No newline at end of file
diff --git a/salt/control/sizes/stacklight/medium.yml b/salt/control/sizes/stacklight/medium.yml
new file mode 100644
index 0000000..6207f48
--- /dev/null
+++ b/salt/control/sizes/stacklight/medium.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_control_size_cpu_stacklight_log: 16
+    salt_control_size_ram_stacklight_log: 49152
+    salt_control_size_disk_profile_stacklight_log: xxhuge
+    salt_control_size_net_profile_stacklight_log: default
+    salt_control_size_cpu_stacklight_server: 12
+    salt_control_size_ram_stacklight_server: 65536
+    salt_control_size_disk_profile_stacklight_server: xxlarge
+    salt_control_size_net_profile_stacklight_server: default
+    salt_control_size_cpu_stacklight_telemetry: 12
+    salt_control_size_ram_stacklight_telemetry: 98304
+    salt_control_size_disk_profile_stacklight_telemetry: xhuge
+    salt_control_size_net_profile_stacklight_telemetry: default
\ No newline at end of file
diff --git a/salt/control/sizes/stacklight/minimal.yml b/salt/control/sizes/stacklight/minimal.yml
new file mode 100644
index 0000000..8d5c935
--- /dev/null
+++ b/salt/control/sizes/stacklight/minimal.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_control_size_cpu_stacklight_log: 4
+    salt_control_size_ram_stacklight_log: 4096
+    salt_control_size_disk_profile_stacklight_log: medium
+    salt_control_size_net_profile_stacklight_log: default
+    salt_control_size_cpu_stacklight_server: 4
+    salt_control_size_ram_stacklight_server: 6144
+    salt_control_size_disk_profile_stacklight_server: small
+    salt_control_size_net_profile_stacklight_server: default
+    salt_control_size_cpu_stacklight_telemetry: 4
+    salt_control_size_ram_stacklight_telemetry: 4096
+    salt_control_size_disk_profile_stacklight_telemetry: medium
+    salt_control_size_net_profile_stacklight_telemetry: default
\ No newline at end of file
diff --git a/salt/control/sizes/stacklight/small.yml b/salt/control/sizes/stacklight/small.yml
new file mode 100644
index 0000000..293e14d
--- /dev/null
+++ b/salt/control/sizes/stacklight/small.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_control_size_cpu_stacklight_log: 12
+    salt_control_size_ram_stacklight_log: 49152
+    salt_control_size_disk_profile_stacklight_log: xhuge
+    salt_control_size_net_profile_stacklight_log: default
+    salt_control_size_cpu_stacklight_server: 12
+    salt_control_size_ram_stacklight_server: 65536
+    salt_control_size_disk_profile_stacklight_server: xxlarge
+    salt_control_size_net_profile_stacklight_server: default
+    salt_control_size_cpu_stacklight_telemetry: 12
+    salt_control_size_ram_stacklight_telemetry: 65536
+    salt_control_size_disk_profile_stacklight_telemetry: xxxlarge
+    salt_control_size_net_profile_stacklight_telemetry: default
\ No newline at end of file
diff --git a/salt/control/virt.yml b/salt/control/virt.yml
index aea524c..0bbb7fa 100644
--- a/salt/control/virt.yml
+++ b/salt/control/virt.yml
@@ -57,3 +57,9 @@
       xxhuge:
         - system:
             size: 3000000
+      xxxhuge:
+        - system:
+            size: 4000000
+      xxxxhuge:
+        - system:
+            size: 5000000
\ No newline at end of file
diff --git a/salt/master/formula/git/auditd.yml b/salt/master/formula/git/auditd.yml
new file mode 100644
index 0000000..f88c0f9
--- /dev/null
+++ b/salt/master/formula/git/auditd.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            auditd:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-auditd.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/git/openstack.yml b/salt/master/formula/git/openstack.yml
index cd9df0a..093279a 100644
--- a/salt/master/formula/git/openstack.yml
+++ b/salt/master/formula/git/openstack.yml
@@ -104,6 +104,10 @@
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-opencontrail.git'
               revision: ${_param:salt_master_environment_revision}
+            oslo_templates:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-oslo-templates.git'
+              revision: ${_param:salt_master_environment_revision}
             python:
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-python.git'
diff --git a/salt/master/formula/git/saltstack.yml b/salt/master/formula/git/saltstack.yml
index d7dde48..b176a2e 100644
--- a/salt/master/formula/git/saltstack.yml
+++ b/salt/master/formula/git/saltstack.yml
@@ -60,6 +60,9 @@
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-sphinx.git'
               revision: ${_param:salt_master_environment_revision}
+            watchdog:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-watchdog.git'
             xtrabackup:
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-xtrabackup.git'
diff --git a/salt/master/formula/pkg/auditd.yml b/salt/master/formula/pkg/auditd.yml
new file mode 100644
index 0000000..b81c419
--- /dev/null
+++ b/salt/master/formula/pkg/auditd.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            auditd:
+              source: pkg
+              name: salt-formula-auditd
diff --git a/salt/master/formula/pkg/openstack.yml b/salt/master/formula/pkg/openstack.yml
index 3d22c41..381ae1a 100644
--- a/salt/master/formula/pkg/openstack.yml
+++ b/salt/master/formula/pkg/openstack.yml
@@ -76,6 +76,9 @@
             octavia:
               source: pkg
               name: salt-formula-octavia
+            oslo_templates:
+              source: pkg
+              name: salt-formula-oslo-templates
             opencontrail:
               source: pkg
               name: salt-formula-opencontrail
diff --git a/salt/master/formula/pkg/saltstack.yml b/salt/master/formula/pkg/saltstack.yml
index 963580c..a682f7f 100644
--- a/salt/master/formula/pkg/saltstack.yml
+++ b/salt/master/formula/pkg/saltstack.yml
@@ -39,6 +39,9 @@
             sphinx:
               source: pkg
               name: salt-formula-sphinx
+            watchdog:
+              source: pkg
+              name: salt-formula-watchdog
             xtrabackup:
               source: pkg
               name: salt-formula-xtrabackup
diff --git a/salt/master/pkg.yml b/salt/master/pkg.yml
index ac839f8..33c60d9 100644
--- a/salt/master/pkg.yml
+++ b/salt/master/pkg.yml
@@ -1,5 +1,6 @@
 classes:
 - system.salt.master.single
+- system.salt.master.formula.pkg.auditd
 - system.salt.master.formula.pkg.ccp
 - system.salt.master.formula.pkg.foundation
 - system.salt.master.formula.pkg.kubernetes
@@ -9,4 +10,4 @@
 - system.salt.master.formula.pkg.stacklight
 - system.salt.master.formula.pkg.monitoring
 - system.salt.master.formula.pkg.helm
-- system.salt.master.formula.pkg.ceph
\ No newline at end of file
+- system.salt.master.formula.pkg.ceph
diff --git a/salt/minion/ca/qemu-vnc_ca.yml b/salt/minion/ca/qemu-vnc_ca.yml
new file mode 100644
index 0000000..53778f1
--- /dev/null
+++ b/salt/minion/ca/qemu-vnc_ca.yml
@@ -0,0 +1,30 @@
+parameters:
+  _param:
+    qemu_vnc_ca_common_name: QEMU VNC CA
+    qemu_vnc_ca_country: cz
+    qemu_vnc_ca_locality: Prague
+    qemu_vnc_ca_organization: Mirantis
+    qemu_vnc_ca_days_valid_authority: 3650
+    qemu_vnc_ca_days_valid_certificate: 365
+  salt:
+    minion:
+      ca:
+        qemu_vnc_ca:
+          # We recommend using a dedicated certificate authority solely for the VNC service.
+          # This authority may be a child of the master certificate authority used for the OpenStack deployment.
+          # This is because libvirt does not currently have a mechanism to restrict what certificates can be presented by the proxy server.
+          # https://docs.openstack.org/nova/queens/admin/remote-console-access.html
+          common_name: ${_param:qemu_vnc_ca_common_name}
+          country: ${_param:qemu_vnc_ca_country}
+          locality: ${_param:qemu_vnc_ca_locality}
+          organization: ${_param:qemu_vnc_ca_organization}
+          signing_policy:
+            cert_server:
+              type: v3_edge_cert_server
+              minions: 'cmp*'
+            cert_client:
+              type: v3_edge_cert_client
+              minions: 'ctl*'
+          days_valid:
+            authority: ${_param:qemu_vnc_ca_days_valid_authority}
+            certificate: ${_param:qemu_vnc_ca_days_valid_certificate}
diff --git a/salt/minion/cert/libvirtd/client.yml b/salt/minion/cert/libvirtd/client.yml
new file mode 100644
index 0000000..bf0ce83
--- /dev/null
+++ b/salt/minion/cert/libvirtd/client.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    libvirtd_client_ssl_key_file: /etc/pki/libvirt/private/clientkey.pem
+    libvirtd_client_ssl_cert_file: /etc/pki/libvirt/clientcert.pem
+  salt:
+    minion:
+      cert:
+        libvirtd_client:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: ${linux:system:name}.${_param:cluster_domain}
+          signing_policy: cert_client
+          alternative_names: >
+            IP:${_param:cluster_local_address},
+            DNS:${_param:cluster_local_address},
+            DNS:${linux:system:name},
+            DNS:${linux:network:fqdn}
+          key_usage: "digitalSignature,nonRepudiation,keyEncipherment"
+          key_file: ${_param:libvirtd_client_ssl_key_file}
+          cert_file: ${_param:libvirtd_client_ssl_cert_file}
+          ca_file: ${_param:libvirtd_ssl_ca_file}
\ No newline at end of file
diff --git a/salt/minion/cert/libvirtd/init.yml b/salt/minion/cert/libvirtd/init.yml
new file mode 100644
index 0000000..735312e
--- /dev/null
+++ b/salt/minion/cert/libvirtd/init.yml
@@ -0,0 +1,9 @@
+classes:
+- system.salt.minion.cert.libvirtd.server
+- system.salt.minion.cert.libvirtd.client
+
+parameters:
+  _param:
+    salt_minion_ca_host: cfg01.${_param:cluster_domain}
+    salt_minion_ca_authority: salt_master_ca
+    libvirtd_ssl_ca_file: /etc/pki/CA/cacert.pem
\ No newline at end of file
diff --git a/salt/minion/cert/libvirtd/server.yml b/salt/minion/cert/libvirtd/server.yml
new file mode 100644
index 0000000..9080672
--- /dev/null
+++ b/salt/minion/cert/libvirtd/server.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    libvirtd_server_ssl_key_file: /etc/pki/libvirt/private/serverkey.pem
+    libvirtd_server_ssl_cert_file: /etc/pki/libvirt/servercert.pem
+  salt:
+    minion:
+      cert:
+        libvirtd_server:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: ${linux:system:name}.${_param:cluster_domain}
+          signing_policy: cert_server
+          alternative_names: >
+            IP:${_param:cluster_local_address},
+            DNS:${_param:cluster_local_address},
+            DNS:${linux:system:name},
+            DNS:${linux:network:fqdn}
+          key_usage: "digitalSignature,nonRepudiation,keyEncipherment"
+          key_file: ${_param:libvirtd_server_ssl_key_file}
+          cert_file: ${_param:libvirtd_server_ssl_cert_file}
+          ca_file: ${_param:libvirtd_ssl_ca_file}
\ No newline at end of file
diff --git a/salt/minion/cert/libvirtd/vnc_server.yml b/salt/minion/cert/libvirtd/vnc_server.yml
new file mode 100644
index 0000000..c49852e
--- /dev/null
+++ b/salt/minion/cert/libvirtd/vnc_server.yml
@@ -0,0 +1,27 @@
+parameters:
+  _param:
+    qemu_vnc_server_ssl_key_file: /etc/pki/libvirt-vnc/server-key.pem
+    qemu_vnc_server_ssl_cert_file: /etc/pki/libvirt-vnc/server-cert.pem
+    qemu_vnc_ssl_ca_file: /etc/pki/libvirt-vnc/ca-cert.pem
+    salt_minion_ca_host: cfg01.${_param:cluster_domain}
+    qemu_vnc_ca_authority: qemu_vnc_ca
+  salt:
+    minion:
+      cert:
+        qemu_vnc_server:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:qemu_vnc_ca_authority}
+          common_name: ${linux:system:name}.${_param:cluster_domain}
+          signing_policy: cert_server
+          alternative_names: >
+            IP:${_param:cluster_local_address},
+            DNS:${_param:cluster_local_address},
+            DNS:${linux:system:name},
+            DNS:${linux:network:fqdn}
+          key_usage: "digitalSignature,nonRepudiation,keyEncipherment"
+          key_file: ${_param:qemu_vnc_server_ssl_key_file}
+          cert_file: ${_param:qemu_vnc_server_ssl_cert_file}
+          ca_file: ${_param:qemu_vnc_ssl_ca_file}
+          user: libvirt-qemu
+          group: libvirt-qemu
+          mode: 640
diff --git a/salt/minion/cert/vnc/init.yml b/salt/minion/cert/vnc/init.yml
new file mode 100644
index 0000000..6f7f6ee
--- /dev/null
+++ b/salt/minion/cert/vnc/init.yml
@@ -0,0 +1,4 @@
+parameters:
+  _param:
+    salt_minion_ca_host: cfg01.${_param:cluster_domain}
+    qemu_vnc_ca_authority: qemu_vnc_ca
diff --git a/salt/minion/cert/vnc/novncproxy_client.yml b/salt/minion/cert/vnc/novncproxy_client.yml
new file mode 100644
index 0000000..7f695eb
--- /dev/null
+++ b/salt/minion/cert/vnc/novncproxy_client.yml
@@ -0,0 +1,29 @@
+classes:
+- system.salt.minion.cert.vnc
+parameters:
+  _param:
+    novncproxy_client_ssl_key_file: /etc/pki/nova-novncproxy/client-key.pem
+    novncproxy_client_ssl_cert_file: /etc/pki/nova-novncproxy/client-cert.pem
+    novncproxy_ssl_ca_file: /etc/pki/nova-novncproxy/ca-cert.pem
+    nova_websocketproxy_ssl_all_file: /var/lib/nova/self.pem
+  salt:
+    minion:
+      cert:
+        libvirt_novnc_client:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:qemu_vnc_ca_authority}
+          common_name: ${linux:system:name}.${_param:cluster_domain}
+          signing_policy: cert_client
+          alternative_names: >
+            IP:${_param:cluster_local_address},
+            DNS:${_param:cluster_local_address},
+            DNS:${linux:system:name},
+            DNS:${linux:network:fqdn}
+          key_usage: "digitalSignature,nonRepudiation,keyEncipherment"
+          key_file: ${_param:novncproxy_client_ssl_key_file}
+          cert_file: ${_param:novncproxy_client_ssl_cert_file}
+          ca_file: ${_param:novncproxy_ssl_ca_file}
+          all_file: ${_param:nova_websocketproxy_ssl_all_file}
+          user: nova
+          group: nova
+          mode: 640