Merge "Add cvp-stacklight job description"
diff --git a/.releasenotes/notes/fluentd_internal_log_rotate_size-7b2b6172650984be.yaml b/.releasenotes/notes/fluentd_internal_log_rotate_size-7b2b6172650984be.yaml
new file mode 100644
index 0000000..e4b1c18
--- /dev/null
+++ b/.releasenotes/notes/fluentd_internal_log_rotate_size-7b2b6172650984be.yaml
@@ -0,0 +1,39 @@
+---
+# Author the following sections or remove the section if it is not related.
+# Use one release note per a feature.
+#
+# If you miss a section from the list below, please first submit a review
+# adding it to .releasenotes/config.yaml.
+#
+# Format content with reStructuredText (RST).
+# **Formatting examples:**
+# - |
+#   This is a brief description of the feature. It may include a
+#   number of components:
+#
+#   * List item 1
+#   * List item 2.
+#     This code block below will appear as part of the list item 2:
+#
+#     .. code-block:: yaml
+#
+#        classes:
+#        - system.class.to.load
+#
+#   The code block below will appear on the same level as the feature
+#   description:
+#
+#   .. code-block:: text
+#
+#      provide model/formula pillar snippets
+
+
+summary: >
+   Added the ``td_agent_log_rotate_size`` parameter to Fluentd
+
+features:
+  - |
+    Added the capability to specify the log rotation size for Fluentd
+    ``td-agent`` using the ``td_agent_log_rotate_size`` parameter. This prevents a
+    single log file from taking too much disk space. This parameter is set to
+    10 MB by default.
diff --git a/.releasenotes/notes/parametric-telemetry-hostnames-06e14467d9a9077d.yaml b/.releasenotes/notes/parametric-telemetry-hostnames-06e14467d9a9077d.yaml
new file mode 100644
index 0000000..e75d549
--- /dev/null
+++ b/.releasenotes/notes/parametric-telemetry-hostnames-06e14467d9a9077d.yaml
@@ -0,0 +1,15 @@
+---
+upgrades:
+  - mongodb.server.cluster no longer hardcodes the telemetry nodes' hostnames
+    in favor of using `openstack_telemetry_node{01,02,03}_hostname` params,
+    allowing custom hostnames to be used.
+
+    Configuration example:
+
+    .. code-block:: yaml
+
+        parameters:
+          _param:
+            openstack_telemetry_node01_hostname: mdb01
+            openstack_telemetry_node02_hostname: mdb02
+            openstack_telemetry_node03_hostname: mdb03
diff --git a/.releasenotes/notes/proxy-prometheus-b48f1787735ae9d9.yaml b/.releasenotes/notes/proxy-prometheus-b48f1787735ae9d9.yaml
new file mode 100644
index 0000000..2dc0994
--- /dev/null
+++ b/.releasenotes/notes/proxy-prometheus-b48f1787735ae9d9.yaml
@@ -0,0 +1,10 @@
+---
+
+summary: >
+  Fixed the :guilabel:`Heatmaps` page in the DevOps Portal
+
+fixes:
+  - Fixed the issue with the DevOps Portal :guilabel:`Heatmaps` page
+    that was not available due to the disabled proxy for the
+    ``stacklight-prometeus`` endpoint and due to wrong
+    Prometheus URL configuration.
\ No newline at end of file
diff --git a/.releasenotes/notes/smtp_tls-907be4451c86b669.yaml b/.releasenotes/notes/smtp_tls-907be4451c86b669.yaml
new file mode 100644
index 0000000..3e79c8f
--- /dev/null
+++ b/.releasenotes/notes/smtp_tls-907be4451c86b669.yaml
@@ -0,0 +1,18 @@
+---
+summary: >
+  Additional option for push notification service to work with SMTP server
+
+features:
+  - Earlier the push notification service considered SMTP server working only under TLS.
+    In case of custom SMPT servers which use non-TLS connection the push notification service is
+    not working properly. This patch added the explicit definition of TLS using.
+    To define this parameter you need to set 'pushkin_smtp_use_tls' variable on cluster level metadata.
+
+    Example:
+    .. code-block:: yaml
+    parameters:
+      _param:
+        pushkin_smtp_use_tls: true
+
+fixes:
+  - related US: https://mirantis.jira.com/browse/PROD-14976
diff --git a/README.rst b/README.rst
index b418f37..231e9a9 100644
--- a/README.rst
+++ b/README.rst
@@ -25,14 +25,14 @@
   Name of the Physical Function interface (pF)
 
 `sriov_nic01_numvfs`
-  Number of Virtual Functions (VF), for number of 
+  Number of Virtual Functions (VF), for number of
   supported VF check documentation for your network interface card.
 
 `sriov_nic01_physical_network`
   Default **physnet1**, label for physical network the interface belongs to.
 
 `sriov_unsafe_interrupts`
-  Default **False**, needs to be set **True** if your hw platform does not 
+  Default **False**, needs to be set **True** if your hw platform does not
   support interrupt remapping.
 
 
@@ -112,7 +112,7 @@
   - grafana_prometheus_port
   - grafana_prometheus_is_default (default true)
 
-Backwark compatiblity
+Backward compatiblity
 ---------------------
 
 The class **grafana.client.single** configures grafana client and an InfluxDB
diff --git a/apache/server/proxy/openstack/cinder.yml b/apache/server/proxy/openstack/cinder.yml
new file mode 100644
index 0000000..8b3fb4f
--- /dev/null
+++ b/apache/server/proxy/openstack/cinder.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_cinder_host: ${_param:cinder_service_host}
+  apache:
+    server:
+      site:
+        apache_proxy_openstack_api_cinder:
+          enabled: true
+          type: proxy
+          name: openstack_api_cinder
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_cinder_host}
+            port: 8776
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 8776
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/designate.yml b/apache/server/proxy/openstack/designate.yml
new file mode 100644
index 0000000..b681cf7
--- /dev/null
+++ b/apache/server/proxy/openstack/designate.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_designate_host: ${_param:designate_service_host}
+  apache:
+    server:
+      modules:
+       - proxy
+       - proxy_http
+       - headers
+      enabled: true
+      site:
+        apache_proxy_openstack_api_designate:
+          enabled: true
+          type: proxy
+          name: openstack_api_designate
+          proxy:
+            host: ${_param:apache_proxy_openstack_designate_host}
+            port: 9001
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 9001
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/glance.yml b/apache/server/proxy/openstack/glance.yml
new file mode 100644
index 0000000..91bedea
--- /dev/null
+++ b/apache/server/proxy/openstack/glance.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_glance_host: ${_param:glance_service_host}
+  apache:
+    server:
+      enabled: true
+      site:
+        apache_proxy_openstack_api_glance:
+          enabled: true
+          type: proxy
+          name: openstack_api_glance
+          proxy:
+            host: ${_param:apache_proxy_openstack_glance_host}
+            port: 9292
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 9292
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/heat.yml b/apache/server/proxy/openstack/heat.yml
new file mode 100644
index 0000000..b844c45
--- /dev/null
+++ b/apache/server/proxy/openstack/heat.yml
@@ -0,0 +1,52 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_heat_host: ${_param:heat_service_host}
+  apache:
+    server:
+      site:
+        apache_proxy_openstack_api_heat:
+          enabled: true
+          type: proxy
+          name: openstack_api_heat
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_heat_host}
+            port: 8004
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 8004
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
+        apache_proxy_openstack_api_heat_cfn:
+          enabled: true
+          type: proxy
+          name: openstack_api_heat_cfn
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_heat_host}
+            port: 8000
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 8000
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
+        apache_proxy_openstack_api_heat_cloudwatch:
+          enabled: true
+          type: proxy
+          name: openstack_api_heat_cloudwatch
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_heat_host}
+            port: 8003
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 8003
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/ironic.yml b/apache/server/proxy/openstack/ironic.yml
new file mode 100644
index 0000000..d6bd7d3
--- /dev/null
+++ b/apache/server/proxy/openstack/ironic.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_ironic_host: ${_param:ironic_service_host}
+  apache:
+    server:
+      site:
+        apache_proxy_openstack_api_ironic:
+          enabled: true
+          type: proxy
+          name: openstack_api_ironic
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_ironic_host}
+            port: 6385
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 6385
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/neutron.yml b/apache/server/proxy/openstack/neutron.yml
new file mode 100644
index 0000000..dd18c40
--- /dev/null
+++ b/apache/server/proxy/openstack/neutron.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_neutron_host: ${_param:neutron_service_host}
+  apache:
+    server:
+      site:
+        apache_proxy_openstack_api_neutron:
+          enabled: true
+          type: proxy
+          name: openstack_api_neutron
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_neutron_host}
+            port: 9696
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 9696
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/nova.yml b/apache/server/proxy/openstack/nova.yml
new file mode 100644
index 0000000..66a0107
--- /dev/null
+++ b/apache/server/proxy/openstack/nova.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_nova_host: ${_param:nova_service_host}
+  apache:
+    server:
+      site:
+        apache_proxy_openstack_api_nova:
+          enabled: true
+          type: proxy
+          name: openstack_api_nova
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_nova_host}
+            port: 8774
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 8774
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/proxy/openstack/placement.yml b/apache/server/proxy/openstack/placement.yml
new file mode 100644
index 0000000..9e256b2
--- /dev/null
+++ b/apache/server/proxy/openstack/placement.yml
@@ -0,0 +1,25 @@
+parameters:
+  _param:
+    apache_proxy_ssl:
+      enabled: false
+    placement_service_host: ${_param:nova_service_host}
+    apache_proxy_openstack_api_host: ${_param:cluster_public_host}
+    apache_proxy_openstack_api_address: 0.0.0.0
+    apache_proxy_openstack_placement_host: ${_param:placement_service_host}
+  apache:
+    server:
+      site:
+        apache_proxy_openstack_api_placement:
+          enabled: true
+          type: proxy
+          name: openstack_api_placement
+          check: false
+          proxy:
+            host: ${_param:apache_proxy_openstack_placement_host}
+            port: 8778
+            protocol: http
+          host:
+            name: ${_param:apache_proxy_openstack_api_host}
+            port: 8778
+            address: ${_param:apache_proxy_openstack_api_address}
+          ssl: ${_param:apache_proxy_ssl}
diff --git a/apache/server/site/barbican.yml b/apache/server/site/barbican.yml
new file mode 100644
index 0000000..55f5cf5
--- /dev/null
+++ b/apache/server/site/barbican.yml
@@ -0,0 +1,61 @@
+parameters:
+  _param:
+    apache_barbican_ssl:
+      enabled: false
+    apache_barbican_api_address: 0.0.0.0
+    apache_barbican_api_host: ${linux:network:fqdn}
+  apache:
+    server:
+      enabled: true
+      site:
+        barbican:
+          enabled: false
+          available: true
+          type: wsgi
+          name: barbican
+          ssl: ${_param:apache_barbican_ssl}
+          wsgi:
+            daemon_process: barbican-api
+            processes: 3
+            threads: 10
+            user: barbican
+            group: barbican
+            display_name: '%{GROUP}'
+            script_alias: '/ /usr/bin/barbican-wsgi-api'
+            application_group: '%{GLOBAL}'
+            authorization: 'On'
+          host:
+            address: ${_param:apache_barbican_api_address}
+            name: ${_param:apache_barbican_api_host}
+            port: 9311
+          log:
+            custom:
+              format: 'combined'
+              file: '/var/log/barbican/barbican-api.log'
+            error:
+              enabled: true
+              file: '/var/log/barbican/barbican-api.log'
+        barbican_admin:
+          enabled: false
+          available: true
+          type: wsgi
+          name: barbican_admin
+          ssl: ${_param:apache_barbican_ssl}
+          wsgi:
+            daemon_process: barbican-api-admin
+            processes: 3
+            threads: 10
+            user: barbican
+            group: barbican
+            display_name: '%{GROUP}'
+          host:
+            address: ${_param:apache_barbican_api_address}
+            name: ${_param:apache_barbican_api_host}
+            port: 9312
+          log:
+            custom:
+              format: 'combined'
+              file: '/var/log/barbican/barbican-api.log'
+            error:
+              enabled: true
+              file: '/var/log/barbican/barbican-api.log'
diff --git a/apache/server/site/cinder.yml b/apache/server/site/cinder.yml
new file mode 100644
index 0000000..7338b6e
--- /dev/null
+++ b/apache/server/site/cinder.yml
@@ -0,0 +1,42 @@
+parameters:
+  _param:
+    apache_cinder_ssl:
+      enabled: false
+    apache_cinder_api_address: 0.0.0.0
+    apache_cinder_api_host: ${linux:network:fqdn}
+  cinder:
+    server:
+      service_name: apache2
+  apache:
+    server:
+      enabled: true
+      default_mpm: event
+      site:
+        cinder:
+          enabled: false
+          available: true
+          type: wsgi
+          name: cinder
+          ssl: ${_param:apache_cinder_ssl}
+          wsgi:
+            daemon_process: cinder-wsgi
+            processes: 5
+            threads: 1
+            user: cinder
+            group: cinder
+            display_name: '%{GROUP}'
+            script_alias: '/ /usr/bin/cinder-wsgi'
+            application_group: '%{GLOBAL}'
+            authorization: 'On'
+          host:
+            address: ${_param:apache_cinder_api_address}
+            name: ${_param:apache_cinder_api_host}
+            port: 8776
+          log:
+            custom:
+              format: >-
+                %v:%p %{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\"
+            error:
+              enabled: true
+              format: '%M'
+              file: '/var/log/apache2/cinder_error.log'
diff --git a/apache/server/site/gnocchi.yml b/apache/server/site/gnocchi.yml
new file mode 100644
index 0000000..a3d6def
--- /dev/null
+++ b/apache/server/site/gnocchi.yml
@@ -0,0 +1,35 @@
+parameters:
+  _param:
+    gnocchi_api_workers: 2
+    apache_gnocchi_ssl:
+      enabled: false
+    apache_gnocchi_api_host: ${linux:network:fqdn}
+    apache_gnocchi_api_address: ${_param:single_address}
+    apache_gnocchi_api_port: 8041
+  apache:
+    server:
+      site:
+        gnocchi:
+          enabled: false
+          available: true
+          type: wsgi
+          name: gnocchi
+          ssl: ${_param:apache_gnocchi_ssl}
+          host:
+            name: ${_param:apache_gnocchi_api_host}
+            address: ${_param:apache_gnocchi_api_address}
+            port: ${_param:apache_gnocchi_api_port}
+          log:
+            custom:
+              format: >-
+                %v:%p %{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\"
+          wsgi:
+            daemon_process: gnocchi-api
+            processes: ${_param:gnocchi_api_workers}
+            threads: 10
+            user: gnocchi
+            group: gnocchi
+            display_name: '%{GROUP}'
+            script_alias: '/ /usr/bin/gnocchi-api'
+            application_group: '%{GLOBAL}'
+            authorization: 'On'
diff --git a/apache/server/site/manila.yml b/apache/server/site/manila.yml
new file mode 100644
index 0000000..2161882
--- /dev/null
+++ b/apache/server/site/manila.yml
@@ -0,0 +1,44 @@
+parameters:
+  _param:
+    apache_manila_ssl:
+      enabled: false
+    apache_manila_api_address: 0.0.0.0
+    apache_manila_api_host: ${linux:network:fqdn}
+  manila:
+    server:
+      service_name: apache2
+  apache:
+    server:
+      enabled: true
+      default_mpm: event
+      site:
+        manila:
+          enabled: false
+          available: true
+          type: wsgi
+          name: manila
+          ssl: ${_param:apache_manila_ssl}
+          wsgi:
+            daemon_process: manila-api
+            threads: 2
+            user: manila
+            group: manila
+            display_name: '%{GROUP}'
+            script_alias: '/ /usr/bin/manila-wsgi'
+            application_group: '%{GLOBAL}'
+            authorization: 'On'
+          limits:
+            request_body: 114688
+          host:
+            address: ${_param:apache_manila_api_address}
+            name: ${_param:apache_manila_api_host}
+            port: 8786
+          log:
+            custom:
+              format: >-
+                %v:%p %{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\"
+            error:
+              enabled: true
+              level: debug
+              format: '%M'
+              file: '/var/log/manila/manila-api.log'
diff --git a/apache/server/site/nova-placement.yml b/apache/server/site/nova-placement.yml
new file mode 100644
index 0000000..9eeeae4
--- /dev/null
+++ b/apache/server/site/nova-placement.yml
@@ -0,0 +1,45 @@
+parameters:
+  _param:
+    apache_nova_placement_ssl:
+      enabled: false
+    apache_nova_placement_api_address: 0.0.0.0
+    apache_nova_placement_api_host: ${linux:network:fqdn}
+  nova_placement:
+    server:
+      service_name: apache2
+  apache:
+    server:
+      enabled: true
+      default_mpm: event
+      site:
+        nova_placement:
+          enabled: false
+          available: true
+          type: wsgi
+          name: nova_placement
+          ssl: ${_param:apache_nova_placement_ssl}
+          wsgi:
+            daemon_process: nova-placement
+            processes: 5
+            threads: 1
+            user: nova
+            group: nova
+            display_name: '%{GROUP}'
+            script_alias: '/ /usr/bin/nova-placement-api'
+            application_group: '%{GLOBAL}'
+            authorization: 'On'
+          limits:
+            request_body: 114688
+          host:
+            address: ${_param:apache_nova_placement_api_address}
+            name: ${_param:apache_nova_placement_api_host}
+            port: 8778
+          log:
+            custom:
+              format: >-
+                %v:%p %{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\"
+              file: '/var/log/apache2/nova_placement_access.log'
+            error:
+              enabled: true
+              format: '%M'
+              file: '/var/log/apache2/nova_placement_error.log'
diff --git a/apache/server/site/panko.yml b/apache/server/site/panko.yml
new file mode 100644
index 0000000..d052c37
--- /dev/null
+++ b/apache/server/site/panko.yml
@@ -0,0 +1,35 @@
+parameters:
+  _param:
+    apache_panko_ssl:
+      enabled: false
+    panko_api_workers: 2
+    apache_panko_api_host: ${linux:network:fqdn}
+    apache_panko_api_address: ${_param:single_address}
+    apache_panko_api_port: 8977
+  apache:
+    server:
+      site:
+        panko:
+          enabled: false
+          available: true
+          type: wsgi
+          name: panko
+          ssl: ${_param:apache_panko_ssl}
+          host:
+            name: ${_param:apache_panko_api_host}
+            address: ${_param:apache_panko_api_address}
+            port: ${_param:apache_panko_api_port}
+          log:
+            custom:
+              format: >-
+                %v:%p %{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\"
+          wsgi:
+            daemon_process: panko-api
+            processes: ${_param:panko_api_workers}
+            threads: 1
+            user: panko
+            group: panko
+            display_name: '%{GROUP}'
+            script_alias: '/ /usr/bin/panko-api'
+            application_group: '%{GLOBAL}'
+            authorization: 'On'
diff --git a/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/fluentd.yml b/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/fluentd.yml
new file mode 100644
index 0000000..ee765d4
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/fluentd.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+    mirror_mirantis_openstack_trusty_fluentd_source: http://mirror.mirantis.com/${_param:apt_mk_version}/td-agent/trusty
+    mirror_mirantis_openstack_trusty_fluentd_distribution: trusty
+    mirror_mirantis_openstack_trusty_fluentd_components: contrib
+    mirror_mirantis_openstack_trusty_fluentd_gpgkeys:
+      - 901F9177AB97ACBE
+  aptly:
+    server:
+      mirror:
+        mirantis_openstack_trusty_fluentd:
+          source: ${_param:mirror_mirantis_openstack_trusty_fluentd_source}
+          distribution: ${_param:mirror_mirantis_openstack_trusty_fluentd_distribution}
+          components: ${_param:mirror_mirantis_openstack_trusty_fluentd_components}
+          architectures: amd64
+          gpgkeys: ${_param:mirror_mirantis_openstack_trusty_fluentd_gpgkeys}
+          publisher:
+            component: contrib
+            distributions:
+              - ubuntu-trusty/fluentd/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/aptly.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/aptly.yml
index 507ed5e..72c20cb 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/aptly.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/aptly.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_aptly_source: http://apt.mirantis.com/xenial/aptly/
-    mirror_mirantis_openstack_xenial_aptly_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_aptly_source: http://mirror.mirantis.com/${_param:apt_mk_version}/aptly/xenial/
+    mirror_mirantis_openstack_xenial_aptly_distribution: squeeze
     mirror_mirantis_openstack_xenial_aptly_components: main
-    mirror_mirantis_openstack_xenial_aptly_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_aptly_gpgkeys:
-      - A76882D3
+      - 9C7DE460
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_aptly_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_aptly_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_aptly_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_aptly_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_aptly_components}
+            component: main
             distributions:
               - ubuntu-xenial/aptly/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/cassandra.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/cassandra.yml
index 5afbf77..c34a904 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/cassandra.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/cassandra.yml
@@ -1,12 +1,14 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_cassandra_source: http://apt.mirantis.com/xenial/cassandra/
-    mirror_mirantis_openstack_xenial_cassandra_distribution: ${_param:apt_mk_version}
-    mirror_mirantis_openstack_xenial_cassandra_components: 21x
-    mirror_mirantis_openstack_xenial_cassandra_key_url: "http://apt.mirantis.com/public.gpg"
+    mirror_mirantis_openstack_xenial_cassandra_source: http://mirror.mirantis.com/${_param:apt_mk_version}/cassandra/xenial/
+    mirror_mirantis_openstack_xenial_cassandra_distribution: 21x
+    mirror_mirantis_openstack_xenial_cassandra_components: main
     mirror_mirantis_openstack_xenial_cassandra_gpgkeys:
-      - A76882D3
+      - A278B781FE4B2BDA
+      - F758CE318D77295D
+      - 2B5C1B00
+      - 0353B12C
   aptly:
     server:
       mirror:
@@ -15,9 +17,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_cassandra_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_cassandra_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_cassandra_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_cassandra_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_cassandra_components}
+            component: 21x
             distributions:
               - ubuntu-xenial/cassandra/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/ceph.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/ceph.yml
index a0b1293..d997485 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/ceph.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/ceph.yml
@@ -1,10 +1,9 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_ceph_source: http://apt.mirantis.com/xenial/ceph/
+    mirror_mirantis_openstack_xenial_ceph_source: http://apt.mirantis.com/xenial/
     mirror_mirantis_openstack_xenial_ceph_distribution: ${_param:apt_mk_version}
-    mirror_mirantis_openstack_xenial_ceph_components: luminous
-    mirror_mirantis_openstack_xenial_ceph_key_url: "http://apt.mirantis.com/public.gpg"
+    mirror_mirantis_openstack_xenial_ceph_components: ceph-luminous
     mirror_mirantis_openstack_xenial_ceph_gpgkeys:
       - A76882D3
   aptly:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_ceph_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_ceph_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_ceph_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_ceph_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_ceph_components}
+            component: luminous
             distributions:
               - ubuntu-xenial/ceph/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker-legacy.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker-legacy.yml
index 03a5fae..c6814b7 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker-legacy.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker-legacy.yml
@@ -1,7 +1,7 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_docker_legacy_source: http://mirror.mirantis.com/${_param:apt_mk_version}/docker-1.x/
+    mirror_mirantis_openstack_xenial_docker_legacy_source: http://mirror.mirantis.com/${_param:apt_mk_version}/docker-1.x/xenial/
     mirror_mirantis_openstack_xenial_docker_legacy_distribution: ubuntu-xenial
     mirror_mirantis_openstack_xenial_docker_legacy_components: main
     mirror_mirantis_openstack_xenial_docker_legacy_gpgkeys:
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker.yml
index 703d202..2ae01f9 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/docker.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_docker_source: http://apt.mirantis.com/xenial/docker/
-    mirror_mirantis_openstack_xenial_docker_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_docker_source: http://mirror.mirantis.com/${_param:apt_mk_version}/docker/xenial/
+    mirror_mirantis_openstack_xenial_docker_distribution: xenial
     mirror_mirantis_openstack_xenial_docker_components: stable
-    mirror_mirantis_openstack_xenial_docker_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_docker_gpgkeys:
-      - A76882D3
+      - 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_docker_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_docker_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_docker_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_docker_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_docker_components}
+            component: stable
             distributions:
               - ubuntu-xenial/docker/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/2x.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/2x.yml
index 6b1c006..1bf92ed 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/2x.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/2x.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_elastic_2x_source: http://apt.mirantis.com/xenial/elastic/2.x/
-    mirror_mirantis_openstack_xenial_elastic_2x_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_elastic_2x_source: http://mirror.mirantis.com/${_param:apt_mk_version}/elasticsearch-2.x/xenial/
+    mirror_mirantis_openstack_xenial_elastic_2x_distribution: stable
     mirror_mirantis_openstack_xenial_elastic_2x_components: main
-    mirror_mirantis_openstack_xenial_elastic_2x_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_elastic_2x_gpgkeys:
-      - A76882D3
+      - D88E42B4
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_elastic_2x_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_elastic_2x_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_elastic_2x_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_elastic_2x_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_elastic_2x_components}
+            component: main
             distributions:
               - ubuntu-xenial/elastic/2.x/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/5x.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/5x.yml
index d7e92c6..1281c30 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/5x.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/elastic/5x.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_elastic_5x_source: http://apt.mirantis.com/xenial/elastic/5.x/
-    mirror_mirantis_openstack_xenial_elastic_5x_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_elastic_5x_source: http://mirror.mirantis.com/${_param:apt_mk_version}/elasticsearch-5.x/xenial/
+    mirror_mirantis_openstack_xenial_elastic_5x_distribution: stable
     mirror_mirantis_openstack_xenial_elastic_5x_components: main
-    mirror_mirantis_openstack_xenial_elastic_5x_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_elastic_5x_gpgkeys:
-      - A76882D3
+      - D88E42B4
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_elastic_5x_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_elastic_5x_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_elastic_5x_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_elastic_5x_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_elastic_5x_components}
+            component: main
             distributions:
               - ubuntu-xenial/elastic/5.x/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/fluentd.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/fluentd.yml
new file mode 100644
index 0000000..bba5d9c
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/fluentd.yml
@@ -0,0 +1,21 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+    mirror_mirantis_openstack_xenial_fluentd_source: http://mirror.mirantis.com/${_param:apt_mk_version}/td-agent/xenial
+    mirror_mirantis_openstack_xenial_fluentd_distribution: xenial
+    mirror_mirantis_openstack_xenial_fluentd_components: contrib
+    mirror_mirantis_openstack_xenial_fluentd_gpgkeys:
+      - 901F9177AB97ACBE
+  aptly:
+    server:
+      mirror:
+        mirantis_openstack_xenial_fluentd:
+          source: ${_param:mirror_mirantis_openstack_xenial_fluentd_source}
+          distribution: ${_param:mirror_mirantis_openstack_xenial_fluentd_distribution}
+          components: ${_param:mirror_mirantis_openstack_xenial_fluentd_components}
+          architectures: amd64
+          gpgkeys: ${_param:mirror_mirantis_openstack_xenial_fluentd_gpgkeys}
+          publisher:
+            component: contrib
+            distributions:
+              - ubuntu-xenial/fluentd/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/glusterfs.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/glusterfs.yml
index cfec221..c38aa6f 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/glusterfs.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/glusterfs.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_glusterfs_source: http://apt.mirantis.com/xenial/glusterfs/
-    mirror_mirantis_openstack_xenial_glusterfs_distribution: ${_param:apt_mk_version}
-    mirror_mirantis_openstack_xenial_glusterfs_components: '"3.12"'
-    mirror_mirantis_openstack_xenial_glusterfs_key_url: "http://apt.mirantis.com/public.gpg"
+    mirror_mirantis_openstack_xenial_glusterfs_source: http://mirror.mirantis.com/${_param:apt_mk_version}/glusterfs-3.8/xenial/
+    mirror_mirantis_openstack_xenial_glusterfs_distribution: xenial
+    mirror_mirantis_openstack_xenial_glusterfs_components: main
     mirror_mirantis_openstack_xenial_glusterfs_gpgkeys:
-      - A76882D3
+      - 3FE869A9
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_glusterfs_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_glusterfs_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_glusterfs_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_glusterfs_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_glusterfs_components}
+            component: '"3.8"'
             distributions:
               - ubuntu-xenial/glusterfs/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/grafana.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/grafana.yml
index e09ba61..7c159b8 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/grafana.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/grafana.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_grafana_source: http://apt.mirantis.com/xenial/grafana/
-    mirror_mirantis_openstack_xenial_grafana_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_grafana_source: http://mirror.mirantis.com/${_param:apt_mk_version}/grafana/xenial/
+    mirror_mirantis_openstack_xenial_grafana_distribution: jessie
     mirror_mirantis_openstack_xenial_grafana_components: main
-    mirror_mirantis_openstack_xenial_grafana_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_grafana_gpgkeys:
-      - A76882D3
+      - D59097AB
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_grafana_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_grafana_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_grafana_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_grafana_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_grafana_components}
+            component: main
             distributions:
               - ubuntu-xenial/grafana/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/influxdb.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/influxdb.yml
index 01093fe..e8838d9 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/influxdb.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/influxdb.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_influxdb_source: http://apt.mirantis.com/xenial/influxdb/
-    mirror_mirantis_openstack_xenial_influxdb_distribution: ${_param:apt_mk_version}
-    mirror_mirantis_openstack_xenial_influxdb_components: main
-    mirror_mirantis_openstack_xenial_influxdb_key_url: "http://apt.mirantis.com/public.gpg"
+    mirror_mirantis_openstack_xenial_influxdb_source: http://mirror.mirantis.com/${_param:apt_mk_version}/influxdb/xenial/
+    mirror_mirantis_openstack_xenial_influxdb_distribution: xenial
+    mirror_mirantis_openstack_xenial_influxdb_components: stable
     mirror_mirantis_openstack_xenial_influxdb_gpgkeys:
-      - A76882D3
+      - 2582E0C5
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_influxdb_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_influxdb_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_influxdb_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_influxdb_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_influxdb_components}
+            component: main
             distributions:
               - ubuntu-xenial/influxdb/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/46.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/46.yml
index 815185b..253c007 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/46.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/46.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_kibana_46_source: http://apt.mirantis.com/xenial/kibana/4.6/
-    mirror_mirantis_openstack_xenial_kibana_46_distribution: ${_param:apt_mk_version}
-    mirror_mirantis_openstack_xenial_kibana_46_components: "kibana-46"
-    mirror_mirantis_openstack_xenial_kibana_46_key_url: "http://apt.mirantis.com/public.gpg"
+    mirror_mirantis_openstack_xenial_kibana_46_source: http://mirror.mirantis.com/${_param:apt_mk_version}/kibana-4.6/xenial/
+    mirror_mirantis_openstack_xenial_kibana_46_distribution: stable
+    mirror_mirantis_openstack_xenial_kibana_46_components: main
     mirror_mirantis_openstack_xenial_kibana_46_gpgkeys:
-      - A76882D3
+      - D88E42B4
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_kibana_46_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_kibana_46_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_kibana_46_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_kibana_46_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_kibana_46_components}
+            component: kibana-46
             distributions:
               - ubuntu-xenial/kibana/4.6/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/5x.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/5x.yml
index c1b061e..58d26aa 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/5x.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/kibana/5x.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_kibana_5x_source: http://apt.mirantis.com/xenial/kibana/5.x/
-    mirror_mirantis_openstack_xenial_kibana_5x_distribution: ${_param:apt_mk_version}
-    mirror_mirantis_openstack_xenial_kibana_5x_components: "kibana-5x"
-    mirror_mirantis_openstack_xenial_kibana_5x_key_url: "http://apt.mirantis.com/public.gpg"
+    mirror_mirantis_openstack_xenial_kibana_5x_source: http://mirror.mirantis.com/${_param:apt_mk_version}/elasticsearch-5.x/xenial/
+    mirror_mirantis_openstack_xenial_kibana_5x_distribution: stable
+    mirror_mirantis_openstack_xenial_kibana_5x_components: main
     mirror_mirantis_openstack_xenial_kibana_5x_gpgkeys:
-      - A76882D3
+      - D88E42B4
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_kibana_5x_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_kibana_5x_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_kibana_5x_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_kibana_5x_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_kibana_5x_components}
+            component: kibana-5x
             distributions:
               - ubuntu-xenial/kibana/5.x/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/maas.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/maas.yml
index 3d63b00..acf5a63 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/maas.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/maas.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_maas_source: http://apt.mirantis.com/xenial/maas/
-    mirror_mirantis_openstack_xenial_maas_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_maas_source: http://mirror.mirantis.com/${_param:apt_mk_version}/maas/xenial/
+    mirror_mirantis_openstack_xenial_maas_distribution: xenial
     mirror_mirantis_openstack_xenial_maas_components: main
-    mirror_mirantis_openstack_xenial_maas_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_maas_gpgkeys:
-      - A76882D3
+      - 684D4A1C
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_maas_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_maas_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_maas_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_maas_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_maas_components}
+            component: main
             distributions:
               - ubuntu-xenial/maas/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2016-3.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2016-3.yml
index 86a33e6..bd6b440 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2016-3.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2016-3.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_saltstack_2016_3_source: http://apt.mirantis.com/xenial/salt/2016.3/
-    mirror_mirantis_openstack_xenial_saltstack_2016_3_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_saltstack_2016_3_source: http://mirror.mirantis.com/${_param:apt_mk_version}/saltstack-2016.3/xenial/
+    mirror_mirantis_openstack_xenial_saltstack_2016_3_distribution: xenial
     mirror_mirantis_openstack_xenial_saltstack_2016_3_components: main
-    mirror_mirantis_openstack_xenial_saltstack_2016_3_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_saltstack_2016_3_gpgkeys:
-      - A76882D3
+      - DE57BFBE
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_saltstack_2016_3_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_saltstack_2016_3_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_saltstack_2016_3_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_saltstack_2016_3_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_saltstack_2016_3_components}
+            component: main
             distributions:
               - ubuntu-xenial/salt/2016.3/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2017-7.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2017-7.yml
index 0478cde..019161b 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2017-7.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/saltstack/salt-2017-7.yml
@@ -1,12 +1,11 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_saltstack_2017_7_source: http://apt.mirantis.com/xenial/salt/2017.7/
-    mirror_mirantis_openstack_xenial_saltstack_2017_7_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_saltstack_2017_7_source: http://mirror.mirantis.com/${_param:apt_mk_version}/saltstack-2017.7/xenial/
+    mirror_mirantis_openstack_xenial_saltstack_2017_7_distribution: xenial
     mirror_mirantis_openstack_xenial_saltstack_2017_7_components: main
-    mirror_mirantis_openstack_xenial_saltstack_2017_7_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_saltstack_2017_7_gpgkeys:
-      - A76882D3
+      - DE57BFBE
   aptly:
     server:
       mirror:
@@ -15,9 +14,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_saltstack_2017_7_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_saltstack_2017_7_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_saltstack_2017_7_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_saltstack_2017_7_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_saltstack_2017_7_components}
+            component: main
             distributions:
               - ubuntu-xenial/salt/2017.7/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/sensu.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/sensu.yml
index 505ec97..ce42857 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/sensu.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/sensu.yml
@@ -1,12 +1,12 @@
 parameters:
   _param:
     apt_mk_version: stable
-    mirror_mirantis_openstack_xenial_sensu_source: http://apt.mirantis.com/xenial/sensu/
-    mirror_mirantis_openstack_xenial_sensu_distribution: ${_param:apt_mk_version}
+    mirror_mirantis_openstack_xenial_sensu_source: http://mirror.mirantis.com/${_param:apt_mk_version}/sensu/xenial/
+    mirror_mirantis_openstack_xenial_sensu_distribution: sensu
     mirror_mirantis_openstack_xenial_sensu_components: main
     mirror_mirantis_openstack_xenial_sensu_key_url: "http://apt.mirantis.com/public.gpg"
     mirror_mirantis_openstack_xenial_sensu_gpgkeys:
-      - A76882D3
+      - EB9C94BB
   aptly:
     server:
       mirror:
@@ -15,9 +15,8 @@
           distribution: ${_param:mirror_mirantis_openstack_xenial_sensu_distribution}
           components: ${_param:mirror_mirantis_openstack_xenial_sensu_components}
           architectures: amd64
-          key_url: ${_param:mirror_mirantis_openstack_xenial_sensu_key_url}
           gpgkeys: ${_param:mirror_mirantis_openstack_xenial_sensu_gpgkeys}
           publisher:
-            component: ${_param:mirror_mirantis_openstack_xenial_sensu_components}
+            component: main
             distributions:
               - ubuntu-xenial/sensu/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/barbican/server/cluster.yml b/barbican/server/cluster.yml
index 5b5bc5e..ed45b47 100644
--- a/barbican/server/cluster.yml
+++ b/barbican/server/cluster.yml
@@ -1,3 +1,10 @@
 classes:
 - service.barbican.server.cluster
-- system.haproxy.proxy.listen.openstack.barbican
\ No newline at end of file
+- system.haproxy.proxy.listen.openstack.barbican
+parameters:
+  _param:
+    cluster_internal_protocol: 'http'
+  barbican:
+    server:
+      identity:
+        protocol: ${_param:cluster_internal_protocol}
diff --git a/barbican/server/single.yml b/barbican/server/single.yml
index eb2b30b..aab0b18 100644
--- a/barbican/server/single.yml
+++ b/barbican/server/single.yml
@@ -1,2 +1,9 @@
 classes:
 - service.barbican.server.single
+parameters:
+  _param:
+    internal_protocol: 'http'
+  barbican:
+    server:
+      identity:
+        protocol: ${_param:internal_protocol}
diff --git a/cassandra/backup/client/single.yml b/cassandra/backup/client/single.yml
index 90fdc5d..892f92f 100644
--- a/cassandra/backup/client/single.yml
+++ b/cassandra/backup/client/single.yml
@@ -1,4 +1,5 @@
 classes:
+- service.cassandra.backup.client
 - system.openssh.client.root
 parameters:
   _param:
diff --git a/cassandra/backup/server/single.yml b/cassandra/backup/server/single.yml
index 1762504..ffb43cf 100644
--- a/cassandra/backup/server/single.yml
+++ b/cassandra/backup/server/single.yml
@@ -1,3 +1,5 @@
+classes:
+- service.cassandra.backup.server
 parameters:
   _param:
     cassandra_backup_public_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzLUiHKAjfFXiZ3fsgx35uXF6VivfC5WFafu4QMalxmj6W+s277oCfdWA8Du5f1wtQXM73VQ5nHkXhM2UIfUMarsyhXK+BxKVrcgEBNHdKlDytaecUPyuOxTDdGWhN/DPv5/vL8NYWweEYBbNbLgU0Td7Rvm52TUXKThIDjeF7XDxX4ShXWipBSwU4boOUBtR8KWfga8fsqeBN+eacuAQFR3MrrOfVvAuWW6Bsf047cmd+V6Qv0raoW73Nu4M/ZAdTsaR5k62a0cHsSRoi3hCmNRqw+CZaQi8prQU6t26eWPEtznjp5EkPF+LLh8LxUoCfWqWT+Lxe8QQwT1nx/LCN
diff --git a/ceilometer/agent/polling/default.yml b/ceilometer/agent/polling/default.yml
new file mode 100644
index 0000000..47b2d1d
--- /dev/null
+++ b/ceilometer/agent/polling/default.yml
@@ -0,0 +1,8 @@
+parameters:
+  ceilometer:
+    agent:
+      polling:
+        sources:
+          default_pollsters:
+            meters: ${_param:ceilometer_agent_default_polling_meters}
+            interval: ${_param:ceilometer_agent_default_polling_interval}
\ No newline at end of file
diff --git a/ceilometer/server/backend/default.yml b/ceilometer/server/backend/default.yml
new file mode 100644
index 0000000..8842e11
--- /dev/null
+++ b/ceilometer/server/backend/default.yml
@@ -0,0 +1,12 @@
+classes:
+- service.ceilometer.server.publisher.gnocchi
+- service.ceilometer.server.publisher.panko
+parameters:
+  # gnocchi and panko are default backends for Ceilometer since Pike
+  # they are incompatible with any legacy database publisher backends
+  ceilometer:
+    server:
+      database: ~
+      publisher:
+        default:
+          enabled: false
diff --git a/ceilometer/server/cluster.yml b/ceilometer/server/cluster.yml
index 11488fb..6f8d3f8 100644
--- a/ceilometer/server/cluster.yml
+++ b/ceilometer/server/cluster.yml
@@ -13,7 +13,7 @@
       secret: ${_param:ceilometer_secret_key}
       ttl: 86400
       publisher:
-        default:
+        default: {}
       bind:
         host: ${_param:cluster_local_address}
         port: 8777
diff --git a/ceilometer/server/coordination/redis.yml b/ceilometer/server/coordination/redis.yml
index e013e0f..e8610f3 100644
--- a/ceilometer/server/coordination/redis.yml
+++ b/ceilometer/server/coordination/redis.yml
@@ -1,7 +1,7 @@
 classes:
 - service.redis.server.single
 parameters:
-  aodh:
+  ceilometer:
     server:
       coordination_backend:
         url:  redis://${_param:single_address}:6379/${_param:cluster_node01_address}
diff --git a/cinder/control/cluster.yml b/cinder/control/cluster.yml
index c130e97..1110c63 100644
--- a/cinder/control/cluster.yml
+++ b/cinder/control/cluster.yml
@@ -4,13 +4,15 @@
 - service.keepalived.cluster.single
 - system.haproxy.proxy.listen.openstack.cinder
 parameters:
+  _param:
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
         python-pymysql:
           fromrepo: ${_param:openstack_version}
           version: latest
-  cinder:      
+  cinder:
     volume:
       enabled: false
       default_volume_type: ""
@@ -40,9 +42,11 @@
         tenant: service
         user: cinder
         password: ${_param:keystone_cinder_password}
+        protocol: ${_param:cluster_internal_protocol}
       glance:
         host: ${_param:cluster_vip_address}
         port: 9292
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         members:
diff --git a/cinder/control/single.yml b/cinder/control/single.yml
index 2d7f179..66aea6d 100644
--- a/cinder/control/single.yml
+++ b/cinder/control/single.yml
@@ -1,6 +1,8 @@
 classes:
 - service.cinder.control.single
 parameters:
+  _param:
+    internal_protocol: 'http'
   linux:
     system:
       package:
@@ -15,4 +17,6 @@
       default_volume_type: ''
       database:
         host: ${_param:single_address}
+      identity:
+        protocol: ${_param:internal_protocol}
 
diff --git a/cinder/volume/single.yml b/cinder/volume/single.yml
index de468ba..1b9948d 100644
--- a/cinder/volume/single.yml
+++ b/cinder/volume/single.yml
@@ -1,6 +1,8 @@
 classes:
 - service.cinder.volume.single
 parameters:
+  _param:
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
@@ -21,3 +23,4 @@
           - host: ${_param:openstack_message_queue_node03_address}
       identity:
         host: ${_param:openstack_control_address}
+        protocol: ${_param:cluster_internal_protocol}
diff --git a/debmirror/mirror_mirantis_com/ubuntu/xenial.yml b/debmirror/mirror_mirantis_com/ubuntu/xenial.yml
new file mode 100644
index 0000000..20cf1e0
--- /dev/null
+++ b/debmirror/mirror_mirantis_com/ubuntu/xenial.yml
@@ -0,0 +1,93 @@
+parameters:
+  _param:
+    apt_mk_version: 'stable'
+    mirror_mirantis_com_ubuntu_xenial_force: False
+  debmirror:
+    client:
+      enabled: true
+      mirrors:
+        mirror_mirantis_com_ubuntu_xenial:
+          force: ${_param:mirror_mirantis_com_ubuntu_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}/ubuntu/"
+          target_dir: "/srv/volumes/aptly/public/ubuntu/"
+          log_file: "/var/log/debmirror/mirror_mirantis_com_ubuntu_xenial.log"
+          dist: [ xenial , xenial-security, xenial-updates ]
+          section: [ main , multiverse, restricted, universe ]
+          # Don't exclude main/x11 - its required for many pkgs.
+          exclude_deb_section: [games, gnome, Xfce, sound, electronics, graphics, hamradio,
+            doc, localization, kde, video, translations, news, multiverse/games, multiverse/gnome,
+            multiverse/Xfce, multiverse/sound, multiverse/electronics, multiverse/graphics,
+            multiverse/hamradio, multiverse/doc, multiverse/localization, multiverse/kde, multiverse/video,
+            multiverse/translations, multiverse/news, multiverse/x11, universe/games, universe/gnome,
+            universe/Xfce, universe/sound, universe/electronics, universe/hamradio, universe/doc,
+            universe/localization, universe/kde, universe/video, universe/translations, universe/news,
+            universe/x11, universe/graphics, restricted/games, restricted/gnome, restricted/Xfce,
+            restricted/sound, restricted/electronics, restricted/graphics, restricted/hamradio,
+            restricted/doc, restricted/localization, restricted/kde, restricted/video, restricted/translations,
+            restricted/news, restricted/x11]
+          filter:
+            1: "--exclude='android*'"
+            2: "--exclude='/firefox*'"
+            3: "--exclude='/chromium-browser*'"
+            4: "--exclude='/ceph*'"
+            5: "--exclude='/*-wallpapers*'"
+            6: "--exclude='/language-pack-(?!en)'"
+            7: "--exclude='thunderbird*'"
+            8: "--exclude='libreoffice*'"
+            9: "--exclude='openoffice*'"
+            10: "--exclude='live-image-*-desktop*'"
+            11: "--exclude='lubuntu-*'"
+            12: "--exclude='kubuntu-*'"
+            13: "--exclude='cinnamon-*'"
+            14: "--exclude='mate-*'"
+            15: "--exclude='desktop-*'"
+            16: "--exclude='flashplugin*'"
+            17: "--exclude='gnome*'"
+            18: "--exclude='/unity*'"
+            20: "--exclude='openjdk-*-(dbg|demo|source).*'"
+            22: "--exclude='(kde|ubuntu|xfce4|sabily).*artwork*'"
+            23: "--exclude='ubuntu-touch*'"
+            24: "--exclude='remmina*'"
+            25: "--exclude='/libbluetooth*'"
+            26: "--exclude='/libandroid*'"
+            27: "--exclude='/banshee*'"
+            27: "--exclude='/*(.xorg)*joystick'"
+            28: "--exclude='/xserver-xorg-video(.*vivid|.*wily|.*utopic)'"
+            30: "--exclude='/*universe.*bluez.*'"
+            31: "--exclude='/main/m/maas/'" # ppa should be always used
+            32: "--exclude='/main/a/a11y-profile-manager/'"
+            33: "--exclude='/universe/.*(alsa|ubuntuone|telepathy|debian-multimedia|kodi|mediaplayer|nagios|getfem|gammaray|geotranz)'"
+            34: "--exclude='/universe/.*(pyqt|usb-creator|gcc-mingw-w64|gcc-snapshot)'"
+            35: "--exclude='/universe/q/qt'"
+            36: "--exclude='/universe/g/glusterfs/'" # ppa should be always used
+            37: "--exclude='/universe/d/docker.io/'" # ppa should be always used
+            38: "--exclude='/universe/a/aptly'" # ppa should be always used
+            39: "--exclude='/universe/e/elasticsearch'" # ppa should be always used
+            40: "--exclude='/universe/g/grafana/'" # ppa should be always used
+            41: "--exclude='/universe/i/influxdb(?!.*python)'" # ppa should be always used
+            42: "--exclude='/universe/s/salt'" # ppa should be always used
+            43: "--exclude='/universe/z/zabbix'" # ppa should be always used
+            44: "--exclude='/universe/.*(brasero|mediascanner2|mediatomb|mediawiki|qtmultimedia|pidgin|skype|eclipse|esys-particle|fusion)'"
+            89: "--exclude='/universe/k/(kde)'"
+            90: "--exclude='/universe/p/(psi-plus|puppet-module|plasma|pcl/)'"
+            91: "--exclude='golang-github-*'"
+            92: "--exclude='/(llvm-toolchain|address-book|amule|openclipart|rhythmbox|gimp|sonic-visualiser|games|bsdgame|gazebo|arduino|webkitgtk|widelands|wxwidget|warzone|wings3d).*'"
+            93: "--exclude='/(asterisk|abiword|webbrowser-app|imagemagick|.*clamav|wireshar|vlc|.*transmission|tryton-modules|trilinos|tomboy|wine1|wine-dev|compiz|mythtv|ubuntustudio).*'"
+            94: "--exclude='/(ceilometer|nova|openstack-debian-images).*'"
+            95: "--exclude='/gcc-.*-cross.*'"
+            96: "--exclude='/(nvidia).*'"
+            97: "--exclude='linux-*-(.*azure|.*aws|gke|.*azure-edge|.*linux-oem)'"
+            98: "--exclude='/.*(arm64|powerpc|s390x|armel|armhf|sparc64|mips64|ppc64el|mipsn32)(?!.*amd64)'"
+            99: "--exclude='/*universe.*(-armel-|-arm-)(?!.*amd64)'"
+            # List of extra includes, founded after tests.
+            100: "--include='/main(.*)manpages'"
+            101: "--include='/main(.*)python-(.*)doc'"
+            102: "--include='/main(.*)python-(.*)network'"
+            103: "--include='/main(.*)unittest2'" # openstack* pkgs
+            104: "--include='/main(.*)libbluetooth3'" # python-guestfs
+
diff --git a/designate/server/cluster.yml b/designate/server/cluster.yml
index 1030861..afbb7df 100644
--- a/designate/server/cluster.yml
+++ b/designate/server/cluster.yml
@@ -6,6 +6,7 @@
 parameters:
   _param:
     designate_admin_api_enabled: false
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
@@ -41,6 +42,7 @@
         tenant: service
         user: designate
         password: ${_param:keystone_designate_password}
+        protocol: ${_param:cluster_internal_protocol}
       bind:
         api:
           address: ${_param:single_address}
diff --git a/designate/server/single.yml b/designate/server/single.yml
index 765dcf8..3fdd448 100644
--- a/designate/server/single.yml
+++ b/designate/server/single.yml
@@ -3,6 +3,7 @@
 parameters:
   _param:
     designate_admin_api_enabled: false
+    internal_protocol: 'http'
   linux:
     system:
       package:
@@ -38,6 +39,7 @@
         tenant: service
         user: designate
         password: ${_param:keystone_designate_password}
+        protocol: ${_param:internal_protocol}
       message_queue:
         engine: rabbitmq
         host: ${_param:cluster_vip_address}
diff --git a/devops_portal/service/stacklight-prometheus.yml b/devops_portal/service/stacklight-prometheus.yml
index 119c13f..9b5a74f 100644
--- a/devops_portal/service/stacklight-prometheus.yml
+++ b/devops_portal/service/stacklight-prometheus.yml
@@ -6,7 +6,7 @@
     config:
       service:
         stacklight-prometheus:
-          configure_proxy: false
+          configure_proxy: true
           enabled: true
           endpoint:
             address: ${_param:grafana_prometheus_address}
diff --git a/docker/swarm/network/kqueen_backend.yml b/docker/swarm/network/kqueen_backend.yml
new file mode 100644
index 0000000..b246f86
--- /dev/null
+++ b/docker/swarm/network/kqueen_backend.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    docker_kqueen_network_subnet: 10.60.0.0/24
+  docker:
+    client:
+      network:
+        kqueen_backend:
+          subnet: ${_param:docker_kqueen_network_subnet}
+          driver: overlay
+          attachable: true
diff --git a/docker/swarm/stack/aptly.yml b/docker/swarm/stack/aptly.yml
index 36c719b..89ec5ec 100644
--- a/docker/swarm/stack/aptly.yml
+++ b/docker/swarm/stack/aptly.yml
@@ -2,6 +2,7 @@
 - system.docker
 parameters:
   _param:
+    docker_stack_aptly_public_replicas: 3
     docker_image_aptly:
       api: tcpcloud/aptly-api
       public: tcpcloud/aptly-public
@@ -25,7 +26,7 @@
                 - /srv/volumes/aptly:/var/lib/aptly
             public:
               deploy:
-                replicas: 3
+                replicas: ${_param:docker_stack_aptly_public_replicas}
                 restart_policy:
                   condition: any
               image: ${_param:docker_image_aptly:public}
diff --git a/docker/swarm/stack/docker.yml b/docker/swarm/stack/docker.yml
index 7f8c153..f861718 100644
--- a/docker/swarm/stack/docker.yml
+++ b/docker/swarm/stack/docker.yml
@@ -2,6 +2,7 @@
   _param:
     docker_image_registry: registry:2
     docker_image_visualizer: dockersamples/visualizer
+    docker_stack_registry_replicas: 3
   docker:
     client:
       stack:
@@ -11,7 +12,7 @@
               environment:
                 REGISTRY_HTTP_SECRET: ${_param:docker_registry_http_secret}
               deploy:
-                replicas: 3
+                replicas: ${_param:docker_stack_registry_replicas}
                 restart_policy:
                   condition: any
               image: ${_param:docker_image_registry}
diff --git a/docker/swarm/stack/kqueen.yml b/docker/swarm/stack/kqueen.yml
new file mode 100644
index 0000000..c6b608d
--- /dev/null
+++ b/docker/swarm/stack/kqueen.yml
@@ -0,0 +1,100 @@
+parameters:
+  _param:
+    docker_kqueen_api_replicas: 1
+    docker_image_kqueen_api: kqueen/api:v0.18
+    docker_image_kqueen_ui: kqueen/ui:v0.8
+    kqueen_api_bind_host: kqueen-api
+    kqueen_api_bind_port: ${_param:haproxy_kqueen_api_bind_port}
+    kqueen_api_db_host: etcd
+    kqueen_api_debug: True
+    kqueen_api_prometheus_whitelist: '172.16.10.0/24' ##REcheck with network
+    kqueen_api_ldap_uri: 'ldap://ldap'
+    kqueen_api_auth_modules: 'local'
+    docker_kqueen_ui_replicas: 1
+    kqueen_ui_bind_port: ${_param:haproxy_kqueen_ui_bind_port}
+    kqueen_ui_bind_host: kqueen-ui
+    kqueen_ui_mail_host: mail
+    kqueen_ui_mail_port: 10025
+    kqueen_ui_debug: True
+    kqueen_ui_enable_public_registration: False
+    kqueen_ui_ldap_auth_notify: False
+    kqueen_ui_local_auth_notify: True
+    kqueen_credentials:
+      kqueen_api_secret_key: 'pasteyoursecret'
+      kqueen_ui_secret_key: 'pasteyoursecret'
+      kqueen_api_bootstrap_admin: True
+      kqueen_api_admin_username: admin
+      kqueen_api_admin_password: default
+      kqueen_api_admin_organization: MirantisCloudPlatform
+      kqueen_api_admin_namespace: mcp
+  docker:
+    client:
+      stack:
+        kqueen:
+          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_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:
+                  condition: any
+              ports:
+                - ${_param:haproxy_kqueen_api_exposed_port}:${_param:haproxy_kqueen_api_bind_port}
+              volumes:
+                - /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:
+                  condition: any
+              ports:
+                - ${_param:haproxy_kqueen_ui_exposed_port}:${_param:haproxy_kqueen_ui_bind_port}
+              volumes:
+                - /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:
+                - /srv/volumes/etcd:/0.etcd/
+          network:
+            default:
+              external:
+                name: kqueen_backend
diff --git a/docker/swarm/stack/kqueen_mail.yml b/docker/swarm/stack/kqueen_mail.yml
new file mode 100644
index 0000000..dd03688
--- /dev/null
+++ b/docker/swarm/stack/kqueen_mail.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    mail_server_hostname: mail
+  docker:
+    client:
+      stack:
+        kqueen:
+          service:
+            mail:
+              image: modularitycontainers/postfix
+              environment:
+                MYHOSTNAME: ${_param:mail_server_hostname}
+          network:
+            default:
+              external:
+                name: kqueen_backend
diff --git a/docker/swarm/stack/monitoring/alertmanager.yml b/docker/swarm/stack/monitoring/alertmanager.yml
new file mode 100644
index 0000000..662baf4
--- /dev/null
+++ b/docker/swarm/stack/monitoring/alertmanager.yml
@@ -0,0 +1,37 @@
+classes:
+- system.prometheus.alertmanager.container
+parameters:
+  docker:
+    client:
+      stack:
+        monitoring:
+          network:
+            monitoring:
+              driver: overlay
+              driver_opts:
+                encrypted: 1
+          service:
+            alertmanager:
+              networks:
+                - monitoring
+              deploy:
+                replicas: 2
+                labels:
+                  com.mirantis.monitoring: "alertmanager"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "alertmanager"
+              image: ${_param:docker_image_alertmanager}
+              ports:
+                - 15011:${prometheus:alertmanager:bind:port}
+              volumes:
+                - ${prometheus:alertmanager:dir:config}:${_param:prometheus_alertmanager_config_directory}
+                - ${prometheus:alertmanager:dir:data}:${_param:prometheus_alertmanager_data_directory}
+              environment:
+                ALERTMANAGER_CONFIG_DIR: ${_param:prometheus_alertmanager_config_directory}
+                ALERTMANAGER_DATA_DIR: ${_param:prometheus_alertmanager_data_directory}
+                ALERTMANAGER_BIND_PORT: ${prometheus:alertmanager:bind:port}
+                ALERTMANAGER_BIND_ADDRESS: ${prometheus:alertmanager:bind:address}
+                ALERTMANAGER_DISCOVERY_DOMAIN: 'monitoring_alertmanager'
+                ALERTMANAGER_EXTERNAL_URL: "http://${_param:stacklight_monitor_address}:15011"
diff --git a/docker/swarm/stack/monitoring/init.yml b/docker/swarm/stack/monitoring/init.yml
index 57d7a5a..134efdc 100644
--- a/docker/swarm/stack/monitoring/init.yml
+++ b/docker/swarm/stack/monitoring/init.yml
@@ -1,131 +1,8 @@
 classes:
-- system.prometheus.alertmanager.container
-- system.prometheus.pushgateway.container
-- system.prometheus.remote_storage_adapter.container
-- system.prometheus.server.container
+- system.docker.swarm.stack.monitoring.prometheus
+- system.docker.swarm.stack.monitoring.prometheus.replicated
+- system.docker.swarm.stack.monitoring.alertmanager
+- system.docker.swarm.stack.monitoring.prometheus_relay
+- system.docker.swarm.stack.monitoring.pushgateway
 - system.docker.swarm.stack.monitoring.remote_agent
-parameters:
-  _param:
-    # Backward compatibility for Prometheus 1.7
-    prometheus_storage_local_engine: "persisted"
-    prometheus_storage_heap_size: 3221225472
-    prometheus_storage_num_fingerprint_mutexes: 4096
-
-  docker:
-    client:
-      stack:
-        monitoring:
-          network:
-            monitoring:
-              driver: overlay
-              driver_opts:
-                encrypted: 1
-          service:
-            relay:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "relay"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "relay"
-              image: ${_param:docker_image_prometheus_relay}
-              ports:
-                - 15016:8080
-              environment:
-                PROMETHEUS_RELAY_DNS: 'tasks.monitoring_server'
-            remote_storage_adapter:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 1
-                labels:
-                  com.mirantis.monitoring: "remote_storage_adapter"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "remote_storage_adapter"
-              image: ${_param:docker_image_remote_storage_adapter}
-              ports:
-                - 15015:${prometheus:remote_storage_adapter:bind:port}
-              environment:
-                RSA_BIND_PORT: ${prometheus:remote_storage_adapter:bind:port}
-                RSA_BIND_ADDRESS: ${prometheus:remote_storage_adapter:bind:address}
-                RSA_INFLUXDB_RETENTION_POLICY: 'lma'
-                RSA_INFLUXDB_URL: ${_param:prometheus_influxdb_url}
-                RSA_INFLUXDB_DB: ${_param:prometheus_influxdb_db}
-                RSA_INFLUXDB_USERNAME: ${_param:prometheus_influxdb_username}
-                RSA_INFLUXDB_PASSWORD: ${_param:prometheus_influxdb_password}
-            alertmanager:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "alertmanager"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "alertmanager"
-              image: ${_param:docker_image_alertmanager}
-              ports:
-                - 15011:${prometheus:alertmanager:bind:port}
-              volumes:
-                - ${prometheus:alertmanager:dir:config}:${_param:prometheus_alertmanager_config_directory}
-                - ${prometheus:alertmanager:dir:data}:${_param:prometheus_alertmanager_data_directory}
-              environment:
-                ALERTMANAGER_CONFIG_DIR: ${_param:prometheus_alertmanager_config_directory}
-                ALERTMANAGER_DATA_DIR: ${_param:prometheus_alertmanager_data_directory}
-                ALERTMANAGER_BIND_PORT: ${prometheus:alertmanager:bind:port}
-                ALERTMANAGER_BIND_ADDRESS: ${prometheus:alertmanager:bind:address}
-                ALERTMANAGER_DISCOVERY_DOMAIN: 'monitoring_alertmanager'
-                ALERTMANAGER_EXTERNAL_URL: "http://${_param:stacklight_monitor_address}:15011"
-            pushgateway:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "pushgateway"
-                restart_policy:
-                  condition: any
-              environment:
-                PUSHGATEWAY_BIND_PORT: ${prometheus:pushgateway:bind:port}
-                PUSHGATEWAY_BIND_ADDRESS: ${prometheus:pushgateway:bind:address}
-              labels:
-                com.mirantis.monitoring: "pushgateway"
-              image: ${_param:docker_image_pushgateway}
-              ports:
-                - 15012:${prometheus:pushgateway:bind:port}
-            server:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "prometheus"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "prometheus"
-              image: ${_param:docker_image_prometheus}
-              ports:
-                - 15010:${prometheus:server:bind:port}
-              volumes:
-                - ${prometheus:server:dir:config}:${_param:prometheus_server_config_directory}
-                - ${prometheus:server:dir:data}:${_param:prometheus_server_data_directory}
-              environment:
-                PROMETHEUS_CONFIG_DIR: ${_param:prometheus_server_config_directory}
-                PROMETHEUS_DATA_DIR: ${_param:prometheus_server_data_directory}
-                PROMETHEUS_BIND_PORT: ${prometheus:server:bind:port}
-                PROMETHEUS_BIND_ADDRESS: ${prometheus:server:bind:address}
-                PROMETHEUS_STORAGE_LOCAL_RETENTION: ${prometheus:server:storage:local:retention}
-                PROMETHEUS_EXTERNAL_URL: "http://${_param:stacklight_monitor_address}:15010"
-                # Backward compatibility for Prometheus 1.7
-                PROMETHEUS_STORAGE_LOCAL_ENGINE: ${_param:prometheus_storage_local_engine}
-                PROMETHEUS_STORAGE_LOCAL_TARGET_HEAP_SIZE: ${_param:prometheus_storage_heap_size}
-                PROMETHEUS_STORAGE_LOCAL_NUM_FINGERPRINT_MUTEXES: ${_param:prometheus_storage_num_fingerprint_mutexes}
- 
\ No newline at end of file
+- system.docker.swarm.stack.monitoring.remote_storage_adapter
diff --git a/docker/swarm/stack/monitoring/prometheus/global.yml b/docker/swarm/stack/monitoring/prometheus/global.yml
new file mode 100644
index 0000000..6114f44
--- /dev/null
+++ b/docker/swarm/stack/monitoring/prometheus/global.yml
@@ -0,0 +1,11 @@
+parameters:
+  docker:
+    client:
+      stack:
+        monitoring:
+          service:
+            server:
+              deploy:
+                mode: global
+              environment:
+                PROMETHEUS_USE_STATIC_DATADIR: "true"
diff --git a/docker/swarm/stack/monitoring/prometheus/init.yml b/docker/swarm/stack/monitoring/prometheus/init.yml
new file mode 100644
index 0000000..2d455f7
--- /dev/null
+++ b/docker/swarm/stack/monitoring/prometheus/init.yml
@@ -0,0 +1,45 @@
+classes:
+- system.prometheus.server.container
+parameters:
+  _param:
+    # Backward compatibility for Prometheus 1.7
+    prometheus_storage_local_engine: "persisted"
+    prometheus_storage_heap_size: 3221225472
+    prometheus_storage_num_fingerprint_mutexes: 4096
+  docker:
+    client:
+      stack:
+        monitoring:
+          network:
+            monitoring:
+              driver: overlay
+              driver_opts:
+                encrypted: 1
+          service:
+            server:
+              networks:
+                - monitoring
+              deploy:
+                labels:
+                  com.mirantis.monitoring: "prometheus"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "prometheus"
+              image: ${_param:docker_image_prometheus}
+              ports:
+                - 15010:${prometheus:server:bind:port}
+              volumes:
+                - ${prometheus:server:dir:config}:${_param:prometheus_server_config_directory}
+                - ${prometheus:server:dir:data}:${_param:prometheus_server_data_directory}
+              environment:
+                PROMETHEUS_CONFIG_DIR: ${_param:prometheus_server_config_directory}
+                PROMETHEUS_DATA_DIR: ${_param:prometheus_server_data_directory}
+                PROMETHEUS_BIND_PORT: ${prometheus:server:bind:port}
+                PROMETHEUS_BIND_ADDRESS: ${prometheus:server:bind:address}
+                PROMETHEUS_STORAGE_LOCAL_RETENTION: ${prometheus:server:storage:local:retention}
+                PROMETHEUS_EXTERNAL_URL: "http://${_param:stacklight_monitor_address}:15010"
+                # Backward compatibility for Prometheus 1.7
+                PROMETHEUS_STORAGE_LOCAL_ENGINE: ${_param:prometheus_storage_local_engine}
+                PROMETHEUS_STORAGE_LOCAL_TARGET_HEAP_SIZE: ${_param:prometheus_storage_heap_size}
+                PROMETHEUS_STORAGE_LOCAL_NUM_FINGERPRINT_MUTEXES: ${_param:prometheus_storage_num_fingerprint_mutexes}
diff --git a/docker/swarm/stack/monitoring/prometheus/replicated.yml b/docker/swarm/stack/monitoring/prometheus/replicated.yml
new file mode 100644
index 0000000..c201172
--- /dev/null
+++ b/docker/swarm/stack/monitoring/prometheus/replicated.yml
@@ -0,0 +1,9 @@
+parameters:
+  docker:
+    client:
+      stack:
+        monitoring:
+          service:
+            server:
+              deploy:
+                replicas: 2
diff --git a/docker/swarm/stack/monitoring/prometheus_global.yml b/docker/swarm/stack/monitoring/prometheus_global.yml
index 9745638..6d8e4ba 100644
--- a/docker/swarm/stack/monitoring/prometheus_global.yml
+++ b/docker/swarm/stack/monitoring/prometheus_global.yml
@@ -1,131 +1,8 @@
 classes:
-- system.prometheus.alertmanager.container
-- system.prometheus.pushgateway.container
-- system.prometheus.remote_storage_adapter.container
-- system.prometheus.server.container
+- system.docker.swarm.stack.monitoring.prometheus
+- system.docker.swarm.stack.monitoring.prometheus.global
+- system.docker.swarm.stack.monitoring.alertmanager
+- system.docker.swarm.stack.monitoring.prometheus_relay
+- system.docker.swarm.stack.monitoring.pushgateway
 - system.docker.swarm.stack.monitoring.remote_agent
-parameters:
-  _param:
-    # Backward compatibility for Prometheus 1.7
-    prometheus_storage_local_engine: "persisted"
-    prometheus_storage_heap_size: 3221225472
-    prometheus_storage_num_fingerprint_mutexes: 4096
-
-  docker:
-    client:
-      stack:
-        monitoring:
-          network:
-            monitoring:
-              driver: overlay
-              driver_opts:
-                encrypted: 1
-          service:
-            relay:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "relay"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "relay"
-              image: ${_param:docker_image_prometheus_relay}
-              ports:
-                - 15016:8080
-              environment:
-                PROMETHEUS_RELAY_DNS: 'tasks.monitoring_server'
-            remote_storage_adapter:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 1
-                labels:
-                  com.mirantis.monitoring: "remote_storage_adapter"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "remote_storage_adapter"
-              image: ${_param:docker_image_remote_storage_adapter}
-              ports:
-                - 15015:${prometheus:remote_storage_adapter:bind:port}
-              environment:
-                RSA_BIND_PORT: ${prometheus:remote_storage_adapter:bind:port}
-                RSA_BIND_ADDRESS: ${prometheus:remote_storage_adapter:bind:address}
-                RSA_INFLUXDB_RETENTION_POLICY: 'lma'
-                RSA_INFLUXDB_URL: ${_param:prometheus_influxdb_url}
-                RSA_INFLUXDB_DB: ${_param:prometheus_influxdb_db}
-                RSA_INFLUXDB_USERNAME: ${_param:prometheus_influxdb_username}
-                RSA_INFLUXDB_PASSWORD: ${_param:prometheus_influxdb_password}
-            alertmanager:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "alertmanager"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "alertmanager"
-              image: ${_param:docker_image_alertmanager}
-              ports:
-                - 15011:${prometheus:alertmanager:bind:port}
-              volumes:
-                - ${prometheus:alertmanager:dir:config}:${_param:prometheus_alertmanager_config_directory}
-                - ${prometheus:alertmanager:dir:data}:${_param:prometheus_alertmanager_data_directory}
-              environment:
-                ALERTMANAGER_CONFIG_DIR: ${_param:prometheus_alertmanager_config_directory}
-                ALERTMANAGER_DATA_DIR: ${_param:prometheus_alertmanager_data_directory}
-                ALERTMANAGER_BIND_PORT: ${prometheus:alertmanager:bind:port}
-                ALERTMANAGER_BIND_ADDRESS: ${prometheus:alertmanager:bind:address}
-                ALERTMANAGER_DISCOVERY_DOMAIN: 'monitoring_alertmanager'
-                ALERTMANAGER_EXTERNAL_URL: "http://${_param:stacklight_monitor_address}:15011"
-            pushgateway:
-              networks:
-                - monitoring
-              deploy:
-                replicas: 2
-                labels:
-                  com.mirantis.monitoring: "pushgateway"
-                restart_policy:
-                  condition: any
-              environment:
-                PUSHGATEWAY_BIND_PORT: ${prometheus:pushgateway:bind:port}
-                PUSHGATEWAY_BIND_ADDRESS: ${prometheus:pushgateway:bind:address}
-              labels:
-                com.mirantis.monitoring: "pushgateway"
-              image: ${_param:docker_image_pushgateway}
-              ports:
-                - 15012:${prometheus:pushgateway:bind:port}
-            server:
-              networks:
-                - monitoring
-              deploy:
-                mode: global
-                labels:
-                  com.mirantis.monitoring: "prometheus"
-                restart_policy:
-                  condition: any
-              labels:
-                com.mirantis.monitoring: "prometheus"
-              image: ${_param:docker_image_prometheus}
-              ports:
-                - 15010:${prometheus:server:bind:port}
-              volumes:
-                - ${prometheus:server:dir:config}:${_param:prometheus_server_config_directory}
-                - ${prometheus:server:dir:data}:${_param:prometheus_server_data_directory}
-              environment:
-                PROMETHEUS_CONFIG_DIR: ${_param:prometheus_server_config_directory}
-                PROMETHEUS_DATA_DIR: ${_param:prometheus_server_data_directory}
-                PROMETHEUS_BIND_PORT: ${prometheus:server:bind:port}
-                PROMETHEUS_BIND_ADDRESS: ${prometheus:server:bind:address}
-                PROMETHEUS_STORAGE_LOCAL_RETENTION: ${prometheus:server:storage:local:retention}
-                PROMETHEUS_EXTERNAL_URL: "http://${_param:stacklight_monitor_address}:15010"
-                # Backward compatibility for Prometheus 1.7
-                PROMETHEUS_STORAGE_LOCAL_ENGINE: ${_param:prometheus_storage_local_engine}
-                PROMETHEUS_STORAGE_LOCAL_TARGET_HEAP_SIZE: ${_param:prometheus_storage_heap_size}
-                PROMETHEUS_STORAGE_LOCAL_NUM_FINGERPRINT_MUTEXES: ${_param:prometheus_storage_num_fingerprint_mutexes}
-                PROMETHEUS_USE_STATIC_DATADIR: "true"
+- system.docker.swarm.stack.monitoring.remote_storage_adapter
diff --git a/docker/swarm/stack/monitoring/prometheus_relay.yml b/docker/swarm/stack/monitoring/prometheus_relay.yml
new file mode 100644
index 0000000..315ba1d
--- /dev/null
+++ b/docker/swarm/stack/monitoring/prometheus_relay.yml
@@ -0,0 +1,27 @@
+parameters:
+  docker:
+    client:
+      stack:
+        monitoring:
+          network:
+            monitoring:
+              driver: overlay
+              driver_opts:
+                encrypted: 1
+          service:
+            relay:
+              networks:
+                - monitoring
+              deploy:
+                replicas: 2
+                labels:
+                  com.mirantis.monitoring: "relay"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "relay"
+              image: ${_param:docker_image_prometheus_relay}
+              ports:
+                - 15016:8080
+              environment:
+                PROMETHEUS_RELAY_DNS: 'tasks.monitoring_server'
diff --git a/docker/swarm/stack/monitoring/pushgateway.yml b/docker/swarm/stack/monitoring/pushgateway.yml
new file mode 100644
index 0000000..af108a6
--- /dev/null
+++ b/docker/swarm/stack/monitoring/pushgateway.yml
@@ -0,0 +1,30 @@
+classes:
+- system.prometheus.pushgateway.container
+parameters:
+  docker:
+    client:
+      stack:
+        monitoring:
+          network:
+            monitoring:
+              driver: overlay
+              driver_opts:
+                encrypted: 1
+          service:
+            pushgateway:
+              networks:
+                - monitoring
+              deploy:
+                replicas: 2
+                labels:
+                  com.mirantis.monitoring: "pushgateway"
+                restart_policy:
+                  condition: any
+              environment:
+                PUSHGATEWAY_BIND_PORT: ${prometheus:pushgateway:bind:port}
+                PUSHGATEWAY_BIND_ADDRESS: ${prometheus:pushgateway:bind:address}
+              labels:
+                com.mirantis.monitoring: "pushgateway"
+              image: ${_param:docker_image_pushgateway}
+              ports:
+                - 15012:${prometheus:pushgateway:bind:port}
diff --git a/docker/swarm/stack/monitoring/remote_storage_adapter.yml b/docker/swarm/stack/monitoring/remote_storage_adapter.yml
new file mode 100644
index 0000000..04ffb90
--- /dev/null
+++ b/docker/swarm/stack/monitoring/remote_storage_adapter.yml
@@ -0,0 +1,35 @@
+classes:
+- system.prometheus.remote_storage_adapter.container
+parameters:
+  docker:
+    client:
+      stack:
+        monitoring:
+          network:
+            monitoring:
+              driver: overlay
+              driver_opts:
+                encrypted: 1
+          service:
+            remote_storage_adapter:
+              networks:
+                - monitoring
+              deploy:
+                replicas: 1
+                labels:
+                  com.mirantis.monitoring: "remote_storage_adapter"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "remote_storage_adapter"
+              image: ${_param:docker_image_remote_storage_adapter}
+              ports:
+                - 15015:${prometheus:remote_storage_adapter:bind:port}
+              environment:
+                RSA_BIND_PORT: ${prometheus:remote_storage_adapter:bind:port}
+                RSA_BIND_ADDRESS: ${prometheus:remote_storage_adapter:bind:address}
+                RSA_INFLUXDB_RETENTION_POLICY: 'lma'
+                RSA_INFLUXDB_URL: ${_param:prometheus_influxdb_url}
+                RSA_INFLUXDB_DB: ${_param:prometheus_influxdb_db}
+                RSA_INFLUXDB_USERNAME: ${_param:prometheus_influxdb_username}
+                RSA_INFLUXDB_PASSWORD: ${_param:prometheus_influxdb_password}
diff --git a/docker/swarm/stack/pushkin.yml b/docker/swarm/stack/pushkin.yml
index 22a921d..55f1fd6 100644
--- a/docker/swarm/stack/pushkin.yml
+++ b/docker/swarm/stack/pushkin.yml
@@ -11,6 +11,7 @@
     pushkin_db_host: ${_param:haproxy_postgresql_bind_host}
     pushkin_smtp_host: smtp.gmail.com
     pushkin_smtp_port: 587
+    pushkin_smtp_use_tls: true
     webhook_from: your_sender@mail.com
     pushkin_email_sender_password: your_sender_password
     webhook_recipients: "recepient1@mail.com,recepient2@mail.com"
@@ -38,6 +39,7 @@
             EMAIL_SENDER_PASSWORD: ${_param:pushkin_email_sender_password}
             SMTP_HOST: ${_param:pushkin_smtp_host}
             SMTP_PORT: ${_param:pushkin_smtp_port}
+            SMTP_USE_TLS: ${_param:pushkin_smtp_use_tls}
             WEBHOOK_RECIPIENTS: ${_param:webhook_recipients}
             WEBHOOK_LOGIN_ID: ${_param:webhook_login_id}
             WEBHOOK_APPLICATION_ID: ${_param:webhook_application_id}
diff --git a/dogtag/server/cluster.yml b/dogtag/server/cluster.yml
new file mode 100644
index 0000000..5ef3f4c
--- /dev/null
+++ b/dogtag/server/cluster.yml
@@ -0,0 +1,3 @@
+classes:
+- service.dogtag.server.cluster
+- system.haproxy.proxy.listen.dogtag
diff --git a/fluentd/init.yml b/fluentd/init.yml
index ebf469a..c6238e8 100644
--- a/fluentd/init.yml
+++ b/fluentd/init.yml
@@ -2,5 +2,9 @@
 - service.fluentd.agent.single
 - system
 parameters:
+  _param:
+    td_agent_log_rotate_size: 10000000
   fluentd:
+    agent:
+      td_agent_log_rotate_size: ${_param:td_agent_log_rotate_size}
     dollar: ${_param:dollarsign}
diff --git a/fluentd/label/default_metric/prometheus.yml b/fluentd/label/default_metric/prometheus.yml
index 9eb3b1b..a13b786 100644
--- a/fluentd/label/default_metric/prometheus.yml
+++ b/fluentd/label/default_metric/prometheus.yml
@@ -3,7 +3,7 @@
     agent:
       plugin:
         fluent-plugin-prometheus:
-          gem: ['fluent-plugin-prometheus']
+          deb: ['td-agent-additional-plugins']
       config:
         input:
           prometheus:
diff --git a/fluentd/label/default_output/elasticsearch.yml b/fluentd/label/default_output/elasticsearch.yml
index 3c26d15..5960c49 100644
--- a/fluentd/label/default_output/elasticsearch.yml
+++ b/fluentd/label/default_output/elasticsearch.yml
@@ -9,6 +9,32 @@
       config:
         label:
           default_output:
+            filter:
+              drop_nested_timestamp_and_sensitive_data:
+                tag: "openstack.**"
+                type: record_transformer
+                enable_ruby: true
+                remove_keys: '["_dummy_1", "_dummy_2", "_dummy_3"]'
+                record:
+                  - name: _dummy_1
+                    value: ${fluentd:dollar}{if record.has_key?("context"); record["context"].delete("timestamp") ; end; nil }
+                  - name: _dummy_2
+                    value: ${fluentd:dollar}{if record.has_key?("context"); record["context"].delete("auth_token"); end; nil}
+                  - name: _dummy_3
+                    value: ${fluentd:dollar}{if record.has_key?("context"); record["context"].delete("auth_token_info"); end; nil}
+              drop_hostname_field:
+                tag: "openstack.**"
+                type: record_transformer
+                enable_ruby: true
+                remove_keys: '["hostname"]'
+              change_pid_field_value:
+                tag: "haproxy.**"
+                type: record_transformer
+                enable_ruby: true
+                record:
+                  - name: Pid
+                    value: ${fluentd:dollar}{record["pid"]}
+                remove_keys: '["pid"]'
             match:
               elasticsearch_output:
                 host: ${_param:fluentd_elasticsearch_host}
diff --git a/galera/server/database/gnocchi.yml b/galera/server/database/gnocchi.yml
new file mode 100644
index 0000000..1ee36da
--- /dev/null
+++ b/galera/server/database/gnocchi.yml
@@ -0,0 +1,19 @@
+parameters:
+  _param:
+    mysql_gnocchi_ssl_option: []
+  mysql:
+    server:
+      database:
+        gnocchi:
+          encoding: utf8
+          users:
+          - name: gnocchi
+            password: ${_param:mysql_gnocchi_password}
+            host: '%'
+            rights: all
+            ssl_option: ${_param:mysql_gnocchi_ssl_option}
+          - name: gnocchi
+            password: ${_param:mysql_gnocchi_password}
+            host: ${_param:cluster_local_address}
+            rights: all
+            ssl_option: ${_param:mysql_gnocchi_ssl_option}
diff --git a/galera/server/database/manila.yml b/galera/server/database/manila.yml
new file mode 100644
index 0000000..3339b83
--- /dev/null
+++ b/galera/server/database/manila.yml
@@ -0,0 +1,15 @@
+parameters:
+  mysql:
+    server:
+      database:
+        manila:
+          encoding: utf8
+          users:
+          - name: manila
+            password: ${_param:mysql_manila_password}
+            host: '%'
+            rights: all
+          - name: manila
+            password: ${_param:mysql_manila_password}
+            host: ${_param:cluster_local_address}
+            rights: all
diff --git a/gerrit/client/init.yml b/gerrit/client/init.yml
index 8b097ee..5d719d4 100644
--- a/gerrit/client/init.yml
+++ b/gerrit/client/init.yml
@@ -59,13 +59,34 @@
             score: -1..+1
         "refs/tags/*":
           actions:
+          - name: pushTag
+            group: Administrators
+            force: true
+          - name: pushTag
+            group: Project Owners
+            force: true
           - name: pushSignedTag
             group: devops-core
+          - name: pushSignedTag
+            group: Administrators
+          - name: pushSignedTag
+            group: Project Owners
           - name: create
             group: devops-core
+          - name: create
+            group: Administrators
           - name: push
             group: devops-core
+          - name: push
+            group: Administrators
+            force: true
           - name: forgeCommitter
             group: devops-core
+          - name: forgeCommitter
+            group: Administrators
           - name: forgeAuthor
             group: devops-core
+          - name: forgeAuthor
+            group: Administrators
+          - name: forgeServerAsCommitter
+            group: Administrators
diff --git a/gerrit/client/project/vnf_onboarding.yml b/gerrit/client/project/vnf_onboarding.yml
index 9cefb95..1e7d238 100644
--- a/gerrit/client/project/vnf_onboarding.yml
+++ b/gerrit/client/project/vnf_onboarding.yml
@@ -42,3 +42,11 @@
           require_change_id: true
           require_agreement: false
           merge_content: true
+        vnf-onboarding/platform-tests:
+          enabled: true
+          description: VNF onboarding platform tests
+          upstream: https://gerrit.mcp.mirantis.net/vnf-onboarding/platform-tests
+          access: ${gerrit:client:default_access}
+          require_change_id: true
+          require_agreement: false
+          merge_content: true
diff --git a/glusterfs/client/volume/backup.yml b/glusterfs/client/volume/backup.yml
new file mode 100644
index 0000000..eded1ac
--- /dev/null
+++ b/glusterfs/client/volume/backup.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    backup_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:
+        backup:
+          path: /srv/volumes/backup
+          server: ${_param:backup_glusterfs_service_host}
+          opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
diff --git a/glusterfs/client/volume/etcd.yml b/glusterfs/client/volume/etcd.yml
new file mode 100644
index 0000000..49a173f
--- /dev/null
+++ b/glusterfs/client/volume/etcd.yml
@@ -0,0 +1,15 @@
+parameters:
+  _param:
+    etcd_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:
+        etcd:
+          path: /srv/volumes/etcd
+          server: ${_param:etcd_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/gnocchi.yml b/glusterfs/client/volume/gnocchi.yml
new file mode 100644
index 0000000..f6c3351
--- /dev/null
+++ b/glusterfs/client/volume/gnocchi.yml
@@ -0,0 +1,32 @@
+parameters:
+  _param:
+    gnocchi_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:
+        gnocchi:
+          path: /var/lib/gnocchi/
+          server: ${_param:gnocchi_glusterfs_service_host}
+          user: gnocchi
+          group: gnocchi
+          opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
+  linux:
+    system:
+      user:
+        gnocchi:
+          enabled: true
+          name: gnocchi
+          uid: 305
+          gid: 305
+          home: /var/lib/gnocchi
+          shell: /bin/false
+          system: True
+      group:
+        gnocchi:
+          enabled: true
+          name: gnocchi
+          gid: 305
+          system: True
diff --git a/glusterfs/client/volume/kqueen.yml b/glusterfs/client/volume/kqueen.yml
new file mode 100644
index 0000000..4417e11
--- /dev/null
+++ b/glusterfs/client/volume/kqueen.yml
@@ -0,0 +1,15 @@
+parameters:
+  _param:
+    kqueen_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:
+        kqueen:
+          path: /srv/volumes/kqueen
+          server: ${_param:kqueen_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/server/cluster.yml b/glusterfs/server/cluster.yml
index 87aa0e9..16453c9 100644
--- a/glusterfs/server/cluster.yml
+++ b/glusterfs/server/cluster.yml
@@ -2,6 +2,8 @@
 - service.glusterfs.server
 parameters:
   glusterfs:
+    monitoring:
+      glusterfs_service_host: ${_param:glusterfs_service_host}
     _support:
       iptables:
         enabled: false
diff --git a/glusterfs/server/volume/backup.yml b/glusterfs/server/volume/backup.yml
new file mode 100644
index 0000000..22e59e2
--- /dev/null
+++ b/glusterfs/server/volume/backup.yml
@@ -0,0 +1,18 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        backup:
+          storage: /srv/glusterfs/backup
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/backup
+            - ${_param:cluster_node02_address}:/srv/glusterfs/backup
+            - ${_param:cluster_node03_address}:/srv/glusterfs/backup
+          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/glusterfs/server/volume/etcd.yml b/glusterfs/server/volume/etcd.yml
new file mode 100644
index 0000000..874119e
--- /dev/null
+++ b/glusterfs/server/volume/etcd.yml
@@ -0,0 +1,18 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        etcd:
+          storage: /srv/glusterfs/etcd
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/etcd
+            - ${_param:cluster_node02_address}:/srv/glusterfs/etcd
+            - ${_param:cluster_node03_address}:/srv/glusterfs/etcd
+          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/glusterfs/server/volume/gnocchi.yml b/glusterfs/server/volume/gnocchi.yml
new file mode 100644
index 0000000..f8f5b6a
--- /dev/null
+++ b/glusterfs/server/volume/gnocchi.yml
@@ -0,0 +1,18 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        gnocchi:
+          storage: /srv/glusterfs/gnocchi
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/gnocchi
+            - ${_param:cluster_node02_address}:/srv/glusterfs/gnocchi
+            - ${_param:cluster_node03_address}:/srv/glusterfs/gnocchi
+          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/glusterfs/server/volume/kqueen.yml b/glusterfs/server/volume/kqueen.yml
new file mode 100644
index 0000000..0d09c51
--- /dev/null
+++ b/glusterfs/server/volume/kqueen.yml
@@ -0,0 +1,18 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        kqueen:
+          storage: /srv/glusterfs/kqueen
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/kqueen
+            - ${_param:cluster_node02_address}:/srv/glusterfs/kqueen
+            - ${_param:cluster_node03_address}:/srv/glusterfs/kqueen
+          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/common/coordination/redis.yml b/gnocchi/common/coordination/redis.yml
new file mode 100644
index 0000000..673d9bd
--- /dev/null
+++ b/gnocchi/common/coordination/redis.yml
@@ -0,0 +1,7 @@
+parameters:
+  _param:
+    gnocchi_coordination_url: redis://${_param:single_address}:6379
+  gnocchi:
+    common:
+      coordination_backend:
+        url: ${_param:gnocchi_coordination_url}
diff --git a/gnocchi/common/storage/file.yml b/gnocchi/common/storage/file.yml
new file mode 100644
index 0000000..c035723
--- /dev/null
+++ b/gnocchi/common/storage/file.yml
@@ -0,0 +1,9 @@
+parameters:
+  _param:
+    gnocchi_storage_file_basepath: /var/lib/gnocchi
+    gnocchi_storage_driver: file
+  gnocchi:
+    common:
+      storage:
+        driver: ${_param:gnocchi_storage_driver}
+        file_basepath: ${_param:gnocchi_storage_file_basepath}
diff --git a/gnocchi/common/storage/incoming/file.yml b/gnocchi/common/storage/incoming/file.yml
new file mode 100644
index 0000000..52d57f7
--- /dev/null
+++ b/gnocchi/common/storage/incoming/file.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    gnocchi_storage_incoming_file_basepath: /var/lib/gnocchi
+    gnocchi_storage_incoming_driver: file
+  gnocchi:
+    common:
+      storage:
+        incoming:
+          driver: ${_param:gnocchi_storage_incoming_driver}
+          file_basepath: ${_param:gnocchi_storage_incoming_file_basepath}
diff --git a/gnocchi/common/storage/incoming/redis.yml b/gnocchi/common/storage/incoming/redis.yml
new file mode 100644
index 0000000..d0f04d7
--- /dev/null
+++ b/gnocchi/common/storage/incoming/redis.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    gnocchi_storage_incoming_redis_url: redis://${_param:single_address}:6379
+    gnocchi_storage_incoming_driver: redis
+  gnocchi:
+    common:
+      storage:
+        incoming:
+          driver: ${_param:gnocchi_storage_incoming_driver}
+          redis_url: ${_param:gnocchi_storage_incoming_redis_url}
\ No newline at end of file
diff --git a/gnocchi/common/storage/redis.yml b/gnocchi/common/storage/redis.yml
new file mode 100644
index 0000000..d71fcf0
--- /dev/null
+++ b/gnocchi/common/storage/redis.yml
@@ -0,0 +1,9 @@
+parameters:
+  _param:
+    gnocchi_storage_redis_url: redis://${_param:single_address}:6379
+    gnocchi_storage_driver: redis
+  gnocchi:
+    common:
+      storage:
+        driver: ${_param:gnocchi_storage_driver}
+        redis_url: ${_param:gnocchi_storage_redis_url}
\ No newline at end of file
diff --git a/gnocchi/server/cluster.yml b/gnocchi/server/cluster.yml
new file mode 100644
index 0000000..062b60e
--- /dev/null
+++ b/gnocchi/server/cluster.yml
@@ -0,0 +1,25 @@
+classes:
+- service.gnocchi.server.cluster
+- service.haproxy.proxy.single
+- system.apache.server.site.gnocchi
+- system.haproxy.proxy.listen.openstack.gnocchi
+- system.keepalived.cluster.instance.openstack_telemetry_vip
+parameters:
+  _param:
+    gnocchi_memcached_node01_address: ${_param:cluster_node01_address}
+    gnocchi_memcached_node02_address: ${_param:cluster_node02_address}
+    gnocchi_memcached_node03_address: ${_param:cluster_node03_address}
+  gnocchi:
+    server:
+      enable_proxy_headers_parsing: true
+      identity:
+        host: ${_param:openstack_control_address}
+      cache:
+        engine: memcached
+        members:
+        - host: ${_param:gnocchi_memcached_node01_address}
+          port: 11211
+        - host: ${_param:gnocchi_memcached_node02_address}
+          port: 11211
+        - host: ${_param:gnocchi_memcached_node03_address}
+          port: 11211
diff --git a/gnocchi/server/single.yml b/gnocchi/server/single.yml
new file mode 100644
index 0000000..035491e
--- /dev/null
+++ b/gnocchi/server/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.gnocchi.server.single
diff --git a/gnocchi/statsd/single.yml b/gnocchi/statsd/single.yml
new file mode 100644
index 0000000..4be519f
--- /dev/null
+++ b/gnocchi/statsd/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.gnocchi.statsd.single
\ No newline at end of file
diff --git a/haproxy/proxy/listen/cicd/etcd.yml b/haproxy/proxy/listen/cicd/etcd.yml
new file mode 100644
index 0000000..27d8540
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/etcd.yml
@@ -0,0 +1,37 @@
+parameters:
+  _param:
+    haproxy_etcd_bind_host: ${_param:haproxy_bind_address}
+    haproxy_etcd_bind_port: 4001
+    haproxy_etcd_exposed_port: 14001
+    haproxy_etcd_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      timeout:
+        queue: '8h'
+        client: '8h'
+        server: '8h'
+        check: '10s'
+      listen:
+        etcd:
+          mode: http
+          balance: source
+          options:
+          - tcp-check
+          binds:
+            - address: ${_param:haproxy_etcd_bind_host}
+              port: ${_param:haproxy_etcd_bind_port}
+              ssl: ${_param:haproxy_etcd_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_etcd_exposed_port}
+              params: check port ${_param:haproxy_etcd_exposed_port}
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_etcd_exposed_port}
+              params: backup check port ${_param:haproxy_etcd_exposed_port}
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_etcd_exposed_port}
+              params: backup check port ${_param:haproxy_etcd_exposed_port}
diff --git a/haproxy/proxy/listen/cicd/kqueen.yml b/haproxy/proxy/listen/cicd/kqueen.yml
new file mode 100644
index 0000000..52b02d0
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/kqueen.yml
@@ -0,0 +1,76 @@
+parameters:
+  _param:
+    haproxy_kqueen_api_bind_host: ${_param:haproxy_bind_address}
+    haproxy_kqueen_api_bind_port: 5000
+    haproxy_kqueen_api_exposed_port: 15000
+    haproxy_kqueen_ui_bind_host: ${_param:haproxy_bind_address}
+    haproxy_kqueen_ui_bind_port: 5080
+    haproxy_kqueen_ui_exposed_port: 15080
+    haproxy_kqueen_api_ssl:
+      enabled: false
+    haproxy_kqueen_ui_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      listen:
+        kqueen_api:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk GET /api/v1/health
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          sticks:
+          - http-check expect string 'Gutten tag!'
+          binds:
+            - address: ${_param:haproxy_kqueen_api_bind_host}
+              port: ${_param:haproxy_kqueen_api_bind_port}
+              ssl: ${_param:haproxy_kqueen_api_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_kqueen_api_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_kqueen_api_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_kqueen_api_exposed_port}
+              params: backup check
+        kqueen_ui:
+          mode: http
+          balance: source
+          options:
+            - forwardfor
+            - httpchk GET /ui/login
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          sticks:
+          - http-check expect string 'KQueen'
+          binds:
+            - address: ${_param:haproxy_kqueen_ui_bind_host}
+              port: ${_param:haproxy_kqueen_ui_bind_port}
+              ssl: ${_param:haproxy_kqueen_ui_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_kqueen_ui_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_kqueen_ui_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_kqueen_ui_exposed_port}
+              params: backup check
diff --git a/haproxy/proxy/listen/dogtag.yml b/haproxy/proxy/listen/dogtag.yml
new file mode 100644
index 0000000..90761c0
--- /dev/null
+++ b/haproxy/proxy/listen/dogtag.yml
@@ -0,0 +1,25 @@
+parameters:
+  _param:
+    haproxy_dogtag_bind_port: ${_param:cluster_dogtag_port}
+    haproxy_dogtag_source_port: ${_param:cluster_dogtag_port}
+  haproxy:
+    proxy:
+      listen:
+        dogtag:
+          mode: tcp
+          binds:
+            - address: ${_param:cluster_vip_address}
+              port: ${_param:haproxy_dogtag_bind_port}
+          servers:
+            - name: ${_param:cluster_node01_hostname}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_dogtag_source_port}
+              params: check
+            - name: ${_param:cluster_node02_hostname}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_dogtag_source_port}
+              params: check
+            - name: ${_param:cluster_node03_hostname}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_dogtag_source_port}
+              params: check
\ No newline at end of file
diff --git a/haproxy/proxy/listen/openstack/gnocchi.yml b/haproxy/proxy/listen/openstack/gnocchi.yml
new file mode 100644
index 0000000..ec2bb20
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/gnocchi.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        gnocchi_api:
+          type: openstack-service
+          service_name: gnocchi
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8041
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: 8041
+            params: check
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: 8041
+            params: check
+          - name: ${_param:cluster_node03_hostname}
+            host: ${_param:cluster_node03_address}
+            port: 8041
+            params: check
\ No newline at end of file
diff --git a/haproxy/proxy/listen/openstack/manila.yml b/haproxy/proxy/listen/openstack/manila.yml
new file mode 100644
index 0000000..a28f365
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/manila.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        manila_api:
+          type: openstack-service
+          service_name: manila
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8786
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: 8786
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: 8786
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node03_hostname}
+            host: ${_param:cluster_node03_address}
+            port: 8786
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
diff --git a/haproxy/proxy/listen/openstack/nova-placement.yml b/haproxy/proxy/listen/openstack/nova-placement.yml
index 9fec963..58c9dd2 100644
--- a/haproxy/proxy/listen/openstack/nova-placement.yml
+++ b/haproxy/proxy/listen/openstack/nova-placement.yml
@@ -2,18 +2,21 @@
   haproxy:
     proxy:
       listen:
+        # Nova placement API returns 401 when doing GET to root URL, while
+        # other serivces normally returns 200 and API versions data.
         nova_placement_api:
           mode: http
-          binds:
-          - address: ${_param:cluster_vip_address}
-            port: 8778
+          service_name: nova_placement
           options:
-          - httpclose
-          - httplog
+            - httpclose
+            - httplog
           health-check:
             http:
               options:
               - expect status 401
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8778
           servers:
           - name: ${_param:cluster_node01_hostname}
             host: ${_param:cluster_node01_address}
diff --git a/haproxy/proxy/listen/openstack/panko.yml b/haproxy/proxy/listen/openstack/panko.yml
new file mode 100644
index 0000000..51eb030
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/panko.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        panko_api:
+          type: general-service
+          check: false
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8977
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: 8977
+            params: check
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: 8977
+            params: check
+          - name: ${_param:cluster_node03_hostname}
+            host: ${_param:cluster_node03_address}
+            port: 8977
+            params: check
\ No newline at end of file
diff --git a/haproxy/proxy/listen/openstack/placement.yml b/haproxy/proxy/listen/openstack/placement.yml
new file mode 100644
index 0000000..f3b2b99
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/placement.yml
@@ -0,0 +1,26 @@
+# Starting with Nova (17.0.0) Queens - accessing to / of placement service
+# returns 200 with version data instead of 401 as it was before.
+# This file should be included for nova/placement higher than Queens.
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        placement_api:
+          type: openstack-service
+          service_name: placement
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8778
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: 8778
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: 8778
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node03_hostname}
+            host: ${_param:cluster_node03_address}
+            port: 8778
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
diff --git a/haproxy/proxy/listen/radosgw.yml b/haproxy/proxy/listen/radosgw.yml
index ecdeb6b..434555d 100644
--- a/haproxy/proxy/listen/radosgw.yml
+++ b/haproxy/proxy/listen/radosgw.yml
@@ -2,6 +2,12 @@
   _param:
     haproxy_radosgw_bind_port: 8080
     haproxy_radosgw_source_port: 8080
+    ceph_rgw_node01_hostname: ${_param:cluster_node01_hostname}
+    ceph_rgw_node02_hostname: ${_param:cluster_node02_hostname}
+    ceph_rgw_node03_hostname: ${_param:cluster_node03_hostname}
+    ceph_rgw_node01_address: ${_param:cluster_node01_address}
+    ceph_rgw_node02_address: ${_param:cluster_node02_address}
+    ceph_rgw_node03_address: ${_param:cluster_node03_address}
   haproxy:
     proxy:
       listen:
@@ -12,15 +18,15 @@
             - address: ${_param:cluster_vip_address}
               port: ${_param:haproxy_radosgw_bind_port}
           servers:
-            - name: ${_param:cluster_node01_hostname}
-              host: ${_param:cluster_node01_address}
+            - name: ${_param:ceph_rgw_node01_hostname}
+              host: ${_param:ceph_rgw_node01_address}
               port: ${_param:haproxy_radosgw_source_port}
               params: check
-            - name: ${_param:cluster_node02_hostname}
-              host: ${_param:cluster_node02_address}
+            - name: ${_param:ceph_rgw_node02_hostname}
+              host: ${_param:ceph_rgw_node02_address}
               port: ${_param:haproxy_radosgw_source_port}
               params: check
-            - name: ${_param:cluster_node03_hostname}
-              host: ${_param:cluster_node03_address}
+            - name: ${_param:ceph_rgw_node03_hostname}
+              host: ${_param:ceph_rgw_node03_address}
               port: ${_param:haproxy_radosgw_source_port}
               params: check
diff --git a/haproxy/proxy/listen/stacklight/prometheus_relay.yml b/haproxy/proxy/listen/stacklight/prometheus_relay.yml
new file mode 100644
index 0000000..23c9286
--- /dev/null
+++ b/haproxy/proxy/listen/stacklight/prometheus_relay.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    cluster_prometheus_relay_port: 8080
+  haproxy:
+    proxy:
+      listen:
+        prometheus_relay:
+          service_name: prometheus_relay
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: ${_param:cluster_prometheus_relay_port}
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: ${_param:prometheus_relay_bind_port}
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: ${_param:prometheus_relay_bind_port}
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node03_hostname}
+            host: ${_param:cluster_node03_address}
+            port: ${_param:prometheus_relay_bind_port}
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
diff --git a/heat/server/cluster.yml b/heat/server/cluster.yml
index 8e38f4f..5829aee 100644
--- a/heat/server/cluster.yml
+++ b/heat/server/cluster.yml
@@ -5,7 +5,8 @@
 - system.haproxy.proxy.listen.openstack.heat
 parameters:
   _param:
-    cluster_public_protocol: https
+    cluster_public_protocol: 'https'
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
@@ -54,6 +55,7 @@
         tenant: service
         user: heat
         password: ${_param:keystone_heat_password}
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         port: 5672
diff --git a/heat/server/resource/networking_bgpvpn.yml b/heat/server/resource/networking_bgpvpn.yml
new file mode 100644
index 0000000..4fbd851
--- /dev/null
+++ b/heat/server/resource/networking_bgpvpn.yml
@@ -0,0 +1,11 @@
+parameters:
+  linux:
+    system:
+      package:
+        python-networking-bgpvpn:
+          version: latest
+  heat:
+    server:
+      dir:
+        plugins:
+        - /usr/lib/python2.7/dist-packages/networking_bgpvpn_heat
\ No newline at end of file
diff --git a/horizon/server/plugin/manila.yml b/horizon/server/plugin/manila.yml
new file mode 100644
index 0000000..ec00da6
--- /dev/null
+++ b/horizon/server/plugin/manila.yml
@@ -0,0 +1,17 @@
+parameters:
+  horizon:
+    server:
+      plugin:
+        manila:
+          source:
+            engine: pkg
+            name: python-manila-ui
+      policy:
+        share:
+          source: file
+          name: manila_policy.json
+          enabled: true
+        sharev2:
+          source: file
+          name: manila_policy.json
+          enabled: true
diff --git a/horizon/server/plugin/neutron_bgpvpn.yml b/horizon/server/plugin/neutron_bgpvpn.yml
new file mode 100644
index 0000000..7ad75ff
--- /dev/null
+++ b/horizon/server/plugin/neutron_bgpvpn.yml
@@ -0,0 +1,8 @@
+parameters:
+  horizon:
+    server:
+      plugin:
+        bgpvpn:
+          source:
+            engine: pkg
+            name: python-networking-bgpvpn
diff --git a/jenkins/client/approved_scripts.yml b/jenkins/client/approved_scripts.yml
index 80cfd95..8122e8c 100644
--- a/jenkins/client/approved_scripts.yml
+++ b/jenkins/client/approved_scripts.yml
@@ -15,6 +15,7 @@
         - method groovy.util.Node attributes
         - method groovy.util.XmlParser parse java.io.File
         - method groovy.util.XmlParser parseText java.lang.String
+        - method hudson.EnvVars get java.lang.String java.lang.String
         - method hudson.PluginManager getPlugins
         - method hudson.PluginWrapper getShortName
         - method hudson.model.Hudson getSlaves
diff --git a/jenkins/client/job/debian/packages/extra.yml b/jenkins/client/job/debian/packages/extra.yml
index 61d7ee2..0a21a55 100644
--- a/jenkins/client/job/debian/packages/extra.yml
+++ b/jenkins/client/job/debian/packages/extra.yml
@@ -205,6 +205,10 @@
               dist: xenial
               build: pipeline
               branch: debian/xenial
+            - package: python-backports.ssl-match-hostname
+              dist: xenial
+              build: pipeline
+              branch: debian/xenial
           template:
             type: workflow-scm
             concurrent: false
diff --git a/jenkins/client/job/debian/packages/salt-multi.yml b/jenkins/client/job/debian/packages/salt-multi.yml
index a81302e..e185b60 100644
--- a/jenkins/client/job/debian/packages/salt-multi.yml
+++ b/jenkins/client/job/debian/packages/salt-multi.yml
@@ -111,10 +111,10 @@
                 default: 'true'
               EXTRA_REPO_URL:
                 type: string
-                default: "deb ${_param:jenkins_aptly_url}/{{dist}}/ testing salt salt-latest"
+                default: "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main; deb ${_param:jenkins_aptly_url}/{{dist}}/ testing salt"
               EXTRA_REPO_KEY_URL:
                 type: string
-                default: "${_param:jenkins_aptly_url}/public.gpg"
+                default: "https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub; ${_param:jenkins_aptly_url}/public.gpg"
               APTLY_URL:
                 type: string
                 default: "${_param:jenkins_aptly_api_url}"
diff --git a/jenkins/client/job/debian/packages/salt.yml b/jenkins/client/job/debian/packages/salt.yml
index 6089195..ad35faa 100644
--- a/jenkins/client/job/debian/packages/salt.yml
+++ b/jenkins/client/job/debian/packages/salt.yml
@@ -5,680 +5,897 @@
         build-debian-salt-formula:
           name: build-debian-salt-formula-{{name}}-ubuntu-{{dist}}
           jobs:
-            - name: aide
-              upload_source_package: false
-              dist: trusty
             - name: aodh
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: apache
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: aptcacher
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: aptly
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: artifactory
               upload_source_package: false
-              dist: trusty
-            - name: auditd
-              upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: avinetworks
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: backupninja
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: baremetal-simulator
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: billometer
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: bind
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: bird
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: cadf
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: calico
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: cassandra
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: ccp
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: ceph
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: chrony
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: collectd
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: debmirror
               upload_source_package: true
+              upload_to_aptly: true
               dist: trusty
             - name: dekapod
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: designate
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: devops-portal
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: docker
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: dogtag
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: dovecot
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: elasticsearch
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: etcd
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: fluentbit
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: fluentd
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: foreman
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: freeipa
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: galera
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: gerrit
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: git
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: gitlab
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: glusterfs
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: grafana
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: graphite
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: haproxy
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: heka
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: heketi
               upload_source_package: true
+              upload_to_aptly: true
               dist: trusty
             - name: influxdb
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: iptables
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: ironic
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: isc-dhcp
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: java
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: jenkins
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: kedb
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: keepalived
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: kibana
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: letsencrypt
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: libvirt
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: linux
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: lldp
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: logrotate
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: maas
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: magnum
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: manila
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: memcached
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: mirascan
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: midonet
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: monasca
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: mongodb
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: murano
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: mysql
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: nagios
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: network
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: nfs
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: nginx
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: nodejs
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: ntp
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: octavia
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: opencontrail
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: openldap
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: openssh
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: openvpn
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: openvstorage
               upload_source_package: false
+              upload_to_aptly: true
+              dist: trusty
+            - name: oslo-templates
+              upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: owncloud
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: postfix
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: postgresql
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: powerdns
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: pritunl
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: prometheus
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: python
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: rabbitmq
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: reclass
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: redis
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: roundcube
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: rsync
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: rsyslog
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: rundeck
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: runtest
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: sahara
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: salt
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: sensu
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: sentry
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: shibboleth
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: sphinx
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: spinnaker
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: statsd
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: supervisor
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: taiga
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: telegraf
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: tinyproxy
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: tftpd-hpa
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: varnish
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: xtrabackup
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
             - name: zookeeper
               upload_source_package: false
+              upload_to_aptly: true
               dist: trusty
-            - name: aide
-              upload_source_package: true
-              dist: xenial
             - name: aodh
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: apache
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: aptcacher
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: aptly
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: artifactory
               upload_source_package: true
-              dist: xenial
-            - name: auditd
-              upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: avinetworks
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: barbican
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: baremetal-simulator
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: backupninja
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: billometer
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: bind
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: bird
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: cadf
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: calico
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: cassandra
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: ccp
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: ceph
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: chrony
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: collectd
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: debmirror
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: dekapod
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: designate
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: devops-portal
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: docker
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: dogtag
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: dovecot
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: elasticsearch
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: etcd
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: fluentbit
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: fluentd
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: foreman
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: freeipa
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: galera
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: gerrit
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: git
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: gitlab
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: glusterfs
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: gnocchi
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: grafana
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: graphite
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: haproxy
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: heka
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: heketi
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: helm
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: influxdb
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: iptables
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: ironic
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: isc-dhcp
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: java
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: jenkins
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: kedb
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: keepalived
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: kibana
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: letsencrypt
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: libvirt
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: linux
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: lldp
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: logrotate
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: maas
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: magnum
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: manila
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: memcached
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: mirascan
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: midonet
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: monasca
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: mongodb
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: murano
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: mysql
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: nagios
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: network
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: nfs
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: nginx
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: nodejs
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: ntp
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: octavia
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: opencontrail
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: openldap
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: openssh
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: openvpn
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: openvstorage
               upload_source_package: true
+              upload_to_aptly: true
+              dist: xenial
+            - name: oslo-templates
+              upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: owncloud
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: panko
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: postfix
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: postgresql
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: pritunl
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: prometheus
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: powerdns
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: python
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: rabbitmq
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: reclass
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: redis
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: roundcube
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: rsync
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: rundeck
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: rsyslog
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: runtest
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: sahara
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: salt
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: sensu
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: sentry
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: shibboleth
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: sphinx
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: spinnaker
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: statsd
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: supervisor
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: taiga
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: telegraf
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: tinyproxy
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: tftpd-hpa
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: varnish
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: watchdog
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: xtrabackup
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
             - name: zookeeper
               upload_source_package: true
+              upload_to_aptly: true
               dist: xenial
           template:
             discard:
@@ -725,10 +942,10 @@
                 default: '~{{dist}}1'
               EXTRA_REPO_URL:
                 type: string
-                default: "deb ${_param:jenkins_aptly_url}/{{dist}}/ testing salt salt-latest"
+                default: "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main; deb ${_param:jenkins_aptly_url}/{{dist}}/ testing salt"
               EXTRA_REPO_KEY_URL:
                 type: string
-                default: "${_param:jenkins_aptly_url}/public.gpg"
+                default: "https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub; ${_param:jenkins_aptly_url}/public.gpg"
               APTLY_URL:
                 type: string
                 default: "${_param:jenkins_aptly_api_url}"
@@ -752,7 +969,7 @@
                 default: '{{upload_source_package}}'
               UPLOAD_APTLY:
                 type: boolean
-                default: 'true'
+                default: '{{upload_to_aptly}}'
               DEBUG:
                 type: boolean
                 default: 'false'
diff --git a/jenkins/client/job/deploy/lab/cleanup.yml b/jenkins/client/job/deploy/lab/cleanup.yml
index 0db6463..6ecaeee 100644
--- a/jenkins/client/job/deploy/lab/cleanup.yml
+++ b/jenkins/client/job/deploy/lab/cleanup.yml
@@ -87,7 +87,7 @@
               default: "openstack-devcloud-credentials"
             OPENSTACK_API_PROJECT:
               type: string
-              default: "mcp-mk"
+              default: "mcp-k8s, mcp-maintenance, mcp-mk, mcp-networking, mcp-opencontrail, mcp-oss, mcp-platform,  mcp-scale, mcp-stacklight, mcp-support"
             OPENSTACK_API_CLIENT:
               type: string
               default: ""
diff --git a/jenkins/client/job/deploy/lab/component/aaa.yml b/jenkins/client/job/deploy/lab/component/aaa.yml
index 1c640d5..26a66fd 100644
--- a/jenkins/client/job/deploy/lab/component/aaa.yml
+++ b/jenkins/client/job/deploy/lab/component/aaa.yml
@@ -8,4 +8,4 @@
         stack_type: heat
         stack_install: core,aaa
         stack_test: ""
-        job_timer: ""
+        job_timer: "H H(0-6) * * *"
diff --git a/jenkins/client/job/deploy/lab/component/drivetrain.yml b/jenkins/client/job/deploy/lab/component/drivetrain.yml
index 945ac4a..6d05945 100644
--- a/jenkins/client/job/deploy/lab/component/drivetrain.yml
+++ b/jenkins/client/job/deploy/lab/component/drivetrain.yml
@@ -8,7 +8,7 @@
         stack_type: heat
         stack_install: core
         stack_test: ""
-        job_timer: ""
+        job_timer: "H H(0-6) * * *"
       - stack_name: drivetrain_ha_clusters
         stack_env: devcloud
         stack_type: heat
diff --git a/jenkins/client/job/deploy/lab/component/kubernetes.yml b/jenkins/client/job/deploy/lab/component/kubernetes.yml
index 62526f7..8cbf766 100644
--- a/jenkins/client/job/deploy/lab/component/kubernetes.yml
+++ b/jenkins/client/job/deploy/lab/component/kubernetes.yml
@@ -25,7 +25,7 @@
         stack_env: devcloud
         stack_type: heat
         stack_install: core,k8s,calico
-        stack_test: ""
+        stack_test: "k8s"
         job_timer: "H H(0-6) * * *"
       - stack_name: k8s_ha_contrail
         stack_env: devcloud
diff --git a/jenkins/client/job/deploy/lab/deploy.yml b/jenkins/client/job/deploy/lab/deploy.yml
index 9a04876..6e716f9 100644
--- a/jenkins/client/job/deploy/lab/deploy.yml
+++ b/jenkins/client/job/deploy/lab/deploy.yml
@@ -55,6 +55,10 @@
               STACK_COMPUTE_COUNT:
                 type: string
                 default: '2'
+              STACK_CLUSTER_NAME:
+                type: string
+                default: ""
+                description: "Cluster name to use from reclass"
 
               STACK_TEMPLATE:
                 type: string
@@ -161,7 +165,7 @@
                 default: "http://127.0.0.1:8080"
               TEST_K8S_CONFORMANCE_IMAGE:
                 type: string
-                default: "docker-dev-virtual.docker.mirantis.net/mirantis/kubernetes/k8s-conformance:v1.7.5-2_1504192939316"
+                default: "docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/k8s-conformance:v1.8.9-7"
 
               TEST_TEMPEST_IMAGE:
                 type: string
diff --git a/jenkins/client/job/deploy/lab/init.yml b/jenkins/client/job/deploy/lab/init.yml
index 52ec947..6d197a1 100644
--- a/jenkins/client/job/deploy/lab/init.yml
+++ b/jenkins/client/job/deploy/lab/init.yml
@@ -1,6 +1,5 @@
 classes:
   - system.jenkins.client.job.deploy.lab.cicd
-  - system.jenkins.client.job.deploy.lab.test-devops-portal-cicd
   - system.jenkins.client.job.deploy.lab.demo
   - system.jenkins.client.job.deploy.lab.cleanup
   - system.jenkins.client.job.deploy.lab.release.mcp05
diff --git a/jenkins/client/job/deploy/lab/release/mcp11.yml b/jenkins/client/job/deploy/lab/release/mcp11.yml
index 657e1d1..7f12594 100644
--- a/jenkins/client/job/deploy/lab/release/mcp11.yml
+++ b/jenkins/client/job/deploy/lab/release/mcp11.yml
@@ -27,6 +27,24 @@
         stack_type: heat
         stack_test: ""
         job_timer: ""
+      - stack_name: virtual_mcp11_ironic_ssl_small
+        stack_env: devcloud
+        stack_install: core,openstack
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
+      - stack_name: virtual_mcp11_aio_manila
+        stack_env: devcloud
+        stack_install: core,openstack,ovs
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
+      - stack_name: virtual_mcp11_aio_telemetry
+        stack_env: devcloud
+        stack_install: core,openstack,ovs
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
       - stack_name: virtual_mcp11_aio
         stack_env: devcloud
         stack_install: core,openstack,ovs
@@ -81,3 +99,27 @@
         stack_type: heat
         stack_test: ""
         job_timer: ""
+      - stack_name: virtual_mcp_pike_dvr
+        stack_env: devcloud
+        stack_install: core,openstack,dvr
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
+      - stack_name: virtual_mcp_pike_dvr_ssl
+        stack_env: devcloud
+        stack_install: core,openstack,dvr
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
+      - stack_name: virtual_mcp_pike_dvr_ssl_barbican
+        stack_env: devcloud
+        stack_install: core,openstack,ovs
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
+      - stack_name: virtual_mcp_pike_ovs
+        stack_env: devcloud
+        stack_install: core,openstack,ovs
+        stack_type: heat
+        stack_test: ""
+        job_timer: ""
diff --git a/jenkins/client/job/deploy/lab/test-devops-portal-cicd.yml b/jenkins/client/job/deploy/lab/test-devops-portal-cicd.yml
deleted file mode 100644
index 8dfc70e..0000000
--- a/jenkins/client/job/deploy/lab/test-devops-portal-cicd.yml
+++ /dev/null
@@ -1,115 +0,0 @@
-parameters:
-  jenkins:
-    client:
-      job_template:
-        deploy_heat_test_cicd:
-          name: deploy-heat-{{name}}
-          jobs:
-            - name: test-cicd-lab-dev
-              lab: cicd_lab_dev
-          template:
-            type: workflow-scm
-            concurrent: true
-            display_name: "Deploy {{name}} heat stack"
-            scm:
-              type: git
-              url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
-              credentials: "gerrit"
-              script: test-func-devops-portal-pipeline.groovy
-            param:
-              # heat
-              HEAT_STACK_DELETE:
-                type: boolean
-                default: 'true'
-                description: "Delete heat stack at the end of job"
-              HEAT_STACK_REUSE:
-                type: boolean
-                default: 'false'
-                description: "Reuse existing stack and only orchestrate deployment"
-              HEAT_STACK_KEEP_INTACT:
-                type: boolean
-                default: 'false'
-                description: "Save current deployment status without re-orchestrating"
-              HEAT_TEMPLATE_URL:
-                type: string
-                default: "${_param:jenkins_gerrit_url}/mk/heat-templates"
-              HEAT_TEMPLATE_CREDENTIALS:
-                type: string
-                default: "gerrit"
-              HEAT_TEMPLATE_BRANCH:
-                type: string
-                default: "master"
-              HEAT_STACK_NAME:
-                type: string
-                description: Heat stack name. Will be generated if missing.
-              HEAT_STACK_TEMPLATE:
-                type: string
-                default: "{{lab}}"
-              HEAT_STACK_ENVIRONMENT:
-                type: string
-                default: "devcloud"
-              HEAT_STACK_ZONE:
-                type: string
-                default: "mcp-oss"
-              HEAT_STACK_PUBLIC_NET:
-                type: string
-                default: "public"
-
-              # salt master
-              SALT_MASTER_CREDENTIALS:
-                type: string
-                default: "salt-qa-credentials"
-              SSH_PUBLIC_KEY:
-                type: string
-                description: "User's public SSH key to be able to login when stack is deployed"
-
-              # openstack api
-              OPENSTACK_API_URL:
-                type: string
-                default: "https://cloud-cz.bud.mirantis.net:5000"
-              OPENSTACK_API_CREDENTIALS:
-                type: string
-                default: "openstack-devcloud-credentials"
-              OPENSTACK_API_PROJECT:
-                type: string
-                default: "mcp-oss"
-              OPENSTACK_API_CLIENT:
-                type: string
-                default: ""
-              OPENSTACK_API_VERSION:
-                type: string
-                default: "3"
-              OPENSTACK_API_PROJECT_DOMAIN:
-                type: string
-                default: "default"
-              OPENSTACK_API_USER_DOMAIN_ID:
-                type: string
-                default: "default"
-              OPENSTACK_API_PROJECT_ID:
-                type: string
-                default: ""
-              OPENSTACK_API_USER_DOMAIN:
-                type: string
-                default: "default"
-
-              # devops-portal-tests
-              DEVOPS_PORTAL_TESTS_URL:
-                type: string
-                default: "${_param:jenkins_gerrit_url}/oss/devops-portal-tests"
-              DEVOPS_PORTAL_TESTS_CREDENTIALS:
-                type: string
-                default: "gerrit"
-              DEVOPS_PORTAL_TESTS_BRANCH:
-                type: string
-                default: "master"
-              DEVOPS_PORTAL_TESTS_RUN_LOCAL:
-                type: boolean
-                default: 'true'
-                description: "Run on swarm master node"
-              DEVOPS_PORTAL_TESTS_CONFIG:
-                type: string
-                description: "Path to the service-configuration file in json-format"
-              DEVOPS_PORTAL_TESTS_MARK:
-                type: string
-                default: "ALL"
-                description: "Mark specific tests to run: healthcheck, functional (default = all)"
diff --git a/jenkins/client/job/deploy/openstack.yml b/jenkins/client/job/deploy/openstack.yml
index d9b1c29..a9f2007 100644
--- a/jenkins/client/job/deploy/openstack.yml
+++ b/jenkins/client/job/deploy/openstack.yml
@@ -26,7 +26,7 @@
             STACK_INSTALL:
               type: string
               default: "core,kvm,openstack,stacklight"
-
+              description: "Components to be installed. Valid values are 'core,kvm,k8s,openstack,contrail,ovs,ceph,oss,cicd,stacklight,sl-legacy,finalize'. For all deployments it's recommended to run 'finalize' as a final step as Salt highstate on all nodes will be run."
             # salt master
             SALT_MASTER_CREDENTIALS:
               type: string
diff --git a/jenkins/client/job/deploy/update/cloud_update.yml b/jenkins/client/job/deploy/update/cloud_update.yml
new file mode 100644
index 0000000..0480557
--- /dev/null
+++ b/jenkins/client/job/deploy/update/cloud_update.yml
@@ -0,0 +1,150 @@
+#
+# Jobs to update cloud packages on given Salt master environment
+#
+parameters:
+  _param:
+    jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
+  jenkins:
+    client:
+      job:
+        deploy-update-cloud:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - update cloud"
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            branch: "${_param:jenkins_pipelines_branch}"
+            credentials: "gerrit"
+            script: cloud-update.groovy
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: "${_param:jenkins_salt_api_url}"
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+            SNAPSHOT_NAME:
+              type: string
+              default: "updateSnapshot1"
+              description: "Live snapshot name"
+            CFG_NODE_PROVIDER:
+              type: string
+              default: ""
+              description: "Physical machine hosting Salt-Master VM (ex. kvm01*)"
+            INTERACTIVE:
+              type: boolean
+              default: 'false'
+              description: "Ask interactive questions during pipeline run"
+            PER_NODE:
+              type: boolean
+              default: 'true'
+              description: "Target nodes will be managed one by one"
+            ROLLBACK_BY_REDEPLOY:
+              type: boolean
+              default: 'false'
+              description: "Omit taking live snapshots. Rollback is planned to be done by redeployment"
+            STOP_SERVICES:
+              type: boolean
+              default: 'true'
+              description: "Stop API services before update"
+            TARGET_UPDATES:
+              type: string
+              default: "cfg,ctl,prx,msg,dbs"
+              description: "Comma separated list of nodes to update (Valid values are cfg,ctl,prx,msg,dbs,log,mon,mtr,ntw,nal,gtw-virtual,cmn,rgw,cid,cmp,kvm,osd,gtw-physical)"
+            TARGET_ROLLBACKS:
+              type: string
+              default: ""
+              description: "Comma separated list of nodes to rollback (Valid values are ctl,prx,msg,dbs,log,mon,mtr,ntw,nal,gtw-virtual,cmn,rgw,cmp,kvm,osd,gtw-physical)"
+            TARGET_SNAPSHOT_MERGES:
+              type: string
+              default: ""
+              description: "Comma separated list of nodes to merge live snapshot for (Valid values are cfg,ctl,prx,msg,dbs,log,mon,mtr,ntw,nal,gtw-virtual,cmn,rgw,cid)"
+            CTL_TARGET:
+              type: string
+              default: "ctl*"
+              description: "Salt targeted CTL nodes (ex. ctl*)"
+            PRX_TARGET:
+              type: string
+              default: "prx*"
+              description: "Salt targeted PRX nodes (ex. prx*)"
+            MSG_TARGET:
+              type: string
+              default: "msg*"
+              description: "Salt targeted MSG nodes (ex. msg*)"
+            DBS_TARGET:
+              type: string
+              default: "dbs*"
+              description: "Salt targeted DBS nodes (ex. dbs*)"
+            LOG_TARGET:
+              type: string
+              default: "log*"
+              description: "Salt targeted LOG nodes (ex. log*)"
+            MON_TARGET:
+              type: string
+              default: "mon*"
+              description: "Salt targeted MON nodes (ex. mon*)"
+            MTR_TARGET:
+              type: string
+              default: "mtr*"
+              description: "Salt targeted MTR nodes (ex. mtr*)"
+            NTW_TARGET:
+              type: string
+              default: "ntw*"
+              description: "Salt targeted NTW nodes (ex. ntw*)"
+            NAL_TARGET:
+              type: string
+              default: "nal*"
+              description: "Salt targeted NAL nodes (ex. nal*)"
+            CMN_TARGET:
+              type: string
+              default: "cmn*"
+              description: "Salt targeted CMN nodes (ex. cmn*)"
+            RGW_TARGET:
+              type: string
+              default: "rgw*"
+              description: "Salt targeted RGW nodes (ex. rgw*)"
+            CID_TARGET:
+              type: string
+              default: "cid*"
+              description: "Salt targeted CID nodes (ex. cid*)"
+            CMP_TARGET:
+              type: string
+              default: "cmp001*"
+              description: "Salt targeted physical compute nodes (ex. cmp001*)"
+            KVM_TARGET:
+              type: string
+              default: "kvm01*"
+              description: "Salt targeted physical KVM nodes (ex. kvm01*)"
+            CEPH_OSD_TARGET:
+              type: string
+              default: "osd001*"
+              description: "Salt targeted physical Ceph OSD nodes (ex. osd001*)"
+            GTW_TARGET:
+              type: string
+              default: "gtw01*"
+              description: "Salt targeted physical or virtual GTW nodes (ex. gtw01*)"
+            REBOOT:
+              type: boolean
+              default: 'false'
+              description: "Reboot nodes after update"
+            ROLLBACK_PKG_VERSIONS:
+              type: string
+              default: ""
+              description: "Space separated list of pkgs=versions to rollback to on physical targeted machines (ex. pkg_name1=pkg_version1 pkg_name2=pkg_version2)"
+            PURGE_PKGS:
+              type: string
+              default: ""
+              description: "Space separated list of pkgs=versions to be purged on physical targeted machines (ex. pkg_name1=pkg_version1 pkg_name2=pkg_version2)"
+            REMOVE_PKGS:
+              type: string
+              default: ""
+              description: "Space separated list of pkgs=versions to be removed on physical targeted machines (ex. pkg_name1=pkg_version1 pkg_name2=pkg_version2)"
+            RESTORE_GALERA:
+              type: boolean
+              default: 'false'
+              description: "Restore Galera DB"
+            RESTORE_CONTRAIL_DB:
+              type: boolean
+              default: 'false'
+              description: "Restore Cassandra and Zookeeper DBs for OpenContrail"
diff --git a/jenkins/client/job/deploy/update/init.yml b/jenkins/client/job/deploy/update/init.yml
index 4e6f460..fb1f5cf 100644
--- a/jenkins/client/job/deploy/update/init.yml
+++ b/jenkins/client/job/deploy/update/init.yml
@@ -13,3 +13,5 @@
   - system.jenkins.client.job.deploy.update.restore_mysql
   - system.jenkins.client.job.deploy.update.restore_cassandra
   - system.jenkins.client.job.deploy.update.restore_zookeeper
+  - system.jenkins.client.job.deploy.update.virt_snapshot
+  - system.jenkins.client.job.deploy.update.cloud_update
diff --git a/jenkins/client/job/deploy/update/update_mirror_image.yml b/jenkins/client/job/deploy/update/update_mirror_image.yml
index ec812c4..2b2dc26 100644
--- a/jenkins/client/job/deploy/update/update_mirror_image.yml
+++ b/jenkins/client/job/deploy/update/update_mirror_image.yml
@@ -10,7 +10,7 @@
         deploy-update-mirror-image:
           type: workflow-scm
           concurrent: true
-          display_name: "Deploy - update mirror image"
+          display_name: "Deploy - update local mirror"
           scm:
             type: git
             url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
@@ -30,6 +30,9 @@
             UPDATE_APTLY_MIRRORS:
               type: string
               default: ""
+            RECREATE_APTLY_MIRRORS:
+              type: boolean
+              default: 'true'
             PUBLISH_APTLY:
               type: boolean
               default: 'true'
@@ -42,6 +45,9 @@
             CLEANUP_APTLY:
               type: boolean
               default: 'false'
+            UPDATE_DEBMIRRORS:
+              type: boolean
+              default: 'true'
             UPDATE_DOCKER_REGISTRY:
               type: boolean
               default: 'true'
@@ -54,6 +60,6 @@
             UPDATE_GIT:
               type: boolean
               default: 'true'
-            UPDATE_IMAGES:
+            UPDATE_FILES:
               type: boolean
               default: 'true'
\ No newline at end of file
diff --git a/jenkins/client/job/deploy/update/upgrade.yml b/jenkins/client/job/deploy/update/upgrade.yml
index 2c76753..7e94c10 100644
--- a/jenkins/client/job/deploy/update/upgrade.yml
+++ b/jenkins/client/job/deploy/update/upgrade.yml
@@ -36,6 +36,10 @@
               type: boolean
               default: 'true'
               description: "Rollback if control upgrade fails"
+            OPERATING_SYSTEM_RELEASE_UPGRADE:
+              type: boolean
+              default: 'false'
+              description: "Set to true if operating system release upgrade is desired. For ex. from Ubuntu 14.04 currently running on ctl and prx nodes to Ubuntu 16.04"
             SKIP_VM_RELAUNCH:
               type: boolean
               default: 'false'
diff --git a/jenkins/client/job/deploy/update/virt_snapshot.yml b/jenkins/client/job/deploy/update/virt_snapshot.yml
new file mode 100644
index 0000000..0388ed1
--- /dev/null
+++ b/jenkins/client/job/deploy/update/virt_snapshot.yml
@@ -0,0 +1,62 @@
+#
+# Job to manage libvirt live snapshots
+#
+parameters:
+  _param:
+    jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
+  jenkins:
+    client:
+      job:
+        manage-virt-snapshot:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - virt snapshot VM"
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            branch: "${_param:jenkins_pipelines_branch}"
+            credentials: "gerrit"
+            script: libvirt-live-snapshots.groovy
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: "${_param:jenkins_salt_api_url}"
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+            CREATE_LIVE_SNAPSHOT:
+              type: boolean
+              default: 'true'
+              description: "Ensures that the live snapshot exists"
+            ROLLBACK_LIVE_SNAPSHOT:
+              type: boolean
+              default: 'false'
+              description: "Rollback the VM to a state before live snapshot was taken"
+            REMOVE_LIVE_SNAPSHOT:
+              type: boolean
+              default: 'false'
+              description: "Ensures that the live snapshot does not exist"
+            MERGE_LIVE_SNAPSHOT:
+              type: boolean
+              default: 'false'
+              description: "Ensures that the live snapshot is merged into it's base image"
+            NODE_PROVIDER:
+              type: string
+              default: "kvm01"
+              description: "KVM node that hosts the VM (for ex. kvm02)"
+            TARGET:
+              type: string
+              default: "ctl01"
+              description: "Unique identification of the VM being snapshoted without domain name (for ex. ctl01)"
+            SNAPSHOT_NAME:
+              type: string
+              default: "snapshot1"
+              description: "Snapshot name"
+            PATH:
+              type: string
+              default: "/var/lib/libvirt/images"
+              description: "Path where snapshot image and dumpxml are being put"
+            DISK_NAME:
+              type: string
+              default: "vda"
+              description: "Disk name of the snapshot"
diff --git a/jenkins/client/job/docker/cicd/init.yml b/jenkins/client/job/docker/cicd/init.yml
new file mode 100644
index 0000000..5b1df1d
--- /dev/null
+++ b/jenkins/client/job/docker/cicd/init.yml
@@ -0,0 +1,3 @@
+classes:
+  - system.jenkins.client.job.docker.cicd.rally
+  - system.jenkins.client.job.docker.cicd.tempest
diff --git a/jenkins/client/job/docker/cicd/rally.yml b/jenkins/client/job/docker/cicd/rally.yml
new file mode 100644
index 0000000..849d453
--- /dev/null
+++ b/jenkins/client/job/docker/cicd/rally.yml
@@ -0,0 +1,56 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        docker-build-images-docker-ci-rally:
+          name: docker-build-images-docker-ci-rally
+          discard:
+            build:
+              keep_num: 30
+            artifact:
+              keep_num: 30
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
+            credentials: "gerrit"
+            script: docker-build-image-pipeline.groovy
+          trigger:
+            gerrit:
+              project:
+                "mcp/docker-ci-rally":
+                  branches:
+                    - master
+              event:
+                patchset:
+                  - created:
+                      excludeDrafts: false
+                      excludeNoCodeChange: false
+                change:
+                  - merged
+                comment:
+                  - addedContains:
+                      commentAddedCommentContains: 'rebuild'
+          param:
+            IMAGE_NAME:
+              type: string
+              default: "ci-rally"
+            IMAGE_TAGS:
+              type: string
+              default: ""
+            CREDENTIALS_ID:
+              type: string
+              default: "gerrit"
+            DOCKER_REGISTRY:
+              type: string
+              default: "docker-dev-virtual.docker.mirantis.net"
+            PROJECT_NAMESPACE:
+              type: string
+              default: "cicd"
+            DOCKERFILE_PATH:
+              type: string
+              default: "Dockerfile"
+            CONTEXT_PATH:
+              type: string
+              default: "."
diff --git a/jenkins/client/job/docker/cicd/tempest.yml b/jenkins/client/job/docker/cicd/tempest.yml
new file mode 100644
index 0000000..7b68403
--- /dev/null
+++ b/jenkins/client/job/docker/cicd/tempest.yml
@@ -0,0 +1,56 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        docker-build-images-docker-ci-tempest:
+          name: docker-build-images-docker-ci-tempest
+          discard:
+            build:
+              keep_num: 30
+            artifact:
+              keep_num: 30
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
+            credentials: "gerrit"
+            script: docker-build-image-pipeline.groovy
+          trigger:
+            gerrit:
+              project:
+                "mcp/docker-ci-tempest":
+                  branches:
+                    - master
+              event:
+                patchset:
+                  - created:
+                      excludeDrafts: false
+                      excludeNoCodeChange: false
+                change:
+                  - merged
+                comment:
+                  - addedContains:
+                      commentAddedCommentContains: 'rebuild'
+          param:
+            IMAGE_NAME:
+              type: string
+              default: "ci-tempest"
+            IMAGE_TAGS:
+              type: string
+              default: ""
+            CREDENTIALS_ID:
+              type: string
+              default: "gerrit"
+            DOCKER_REGISTRY:
+              type: string
+              default: "docker-dev-virtual.docker.mirantis.net"
+            PROJECT_NAMESPACE:
+              type: string
+              default: "cicd"
+            DOCKERFILE_PATH:
+              type: string
+              default: "Dockerfile"
+            CONTEXT_PATH:
+              type: string
+              default: "."
diff --git a/jenkins/client/job/docker/saas/init.yml b/jenkins/client/job/docker/saas/init.yml
new file mode 100644
index 0000000..0b872e7
--- /dev/null
+++ b/jenkins/client/job/docker/saas/init.yml
@@ -0,0 +1,70 @@
+parameters:
+  jenkins:
+    client:
+      job_template:
+        docker-build-saas:
+          name: docker-image-build-saas-{{subproject}}-{{name}}
+          jobs:
+            - name: auth
+              subproject: core
+            - name: application
+              subproject: core
+            - name: ui
+              subproject: frontend
+          template:
+            discard:
+              build:
+                keep_num: 25
+              artifact:
+                keep_num: 25
+            type: workflow-scm
+            concurrent: false
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
+              credentials: "gerrit"
+              script: docker-build-image-pipeline.groovy
+            trigger:
+              gerrit:
+                project:
+                  'saas\/{{subproject}}\/{{name}}':
+                    compare_type: REG_EXP
+                    branches:
+                      - master
+                skip_vote:
+                  - successful
+                  - failed
+                  - unstable
+                  - not_built
+                event:
+                    patchset:
+                        - create:
+                            excludeDrafts: false
+                            excludeNoCodeChange: false
+                    change:
+                        - merged
+                    comment:
+                        - addedContains:
+                            commentAddedCommentContains: '^(?s:Patch Set \d+:.*(rebuild)\s*)$'
+            param:
+                IMAGE_NAME:
+                    type: string
+                    default: "saas-{{name}}"
+                IMAGE_TAGS:
+                    type: string
+                    default: ""
+                CONTEXT_PATH:
+                    type: string
+                    default: "."
+                CREDENTIALS_ID:
+                    type: string
+                    default: "gerrit"
+                DOCKERFILE_PATH:
+                    type: string
+                    default: "Dockerfile"
+                DOCKER_REGISTRY:
+                    type: string
+                    default: "docker-dev-virtual.docker.mirantis.net"
+                PROJECT_NAMESPACE:
+                    type: string
+                    default: "saas"
diff --git a/jenkins/client/job/git-mirrors/2way.yml b/jenkins/client/job/git-mirrors/2way.yml
index 3b1a62f..0546d94 100644
--- a/jenkins/client/job/git-mirrors/2way.yml
+++ b/jenkins/client/job/git-mirrors/2way.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     jenkins_pollscm_spec: "H/60 * * * *"
+    job_description_2way: <br>Syncronizes code projects with GitHub.<br>
   jenkins:
     client:
       job_template:
@@ -11,7 +12,16 @@
               source: mcp/mcp-common-scripts
               target: Mirantis/mcp-common-scripts
               branches: "master"
+            - name: mcp-local-repo-model
+              source: mcp/mcp-local-repo-model
+              target: Mirantis/mcp-local-repo-model
+              branches: "master"
+            - name: mcp-offline-model
+              source: mcp/mcp-offline-model
+              target: Mirantis/mcp-offline-model
+              branches: "master"
           template:
+            description: ${_param:job_description_2way}
             discard:
               build:
                 keep_num: 10
diff --git a/jenkins/client/job/git-mirrors/downstream/pipelines.yml b/jenkins/client/job/git-mirrors/downstream/pipelines.yml
index 7bf366c..271a725 100644
--- a/jenkins/client/job/git-mirrors/downstream/pipelines.yml
+++ b/jenkins/client/job/git-mirrors/downstream/pipelines.yml
@@ -2,12 +2,14 @@
   - system.jenkins.client.job.git-mirrors.downstream
 parameters:
   _param:
+    gerrit_pipeline_library_repo: https://github.com/Mirantis/pipeline-library
+    gerrit_mk_pipelines_repo: https://github.com/Mirantis/mk-pipelines
     jenkins_git_mirror_downstream_jobs:
       - name: pipeline-library
         downstream: mcp-ci/pipeline-library
-        upstream: "https://github.com/Mirantis/pipeline-library"
+        upstream: "${_param:gerrit_pipeline_library_repo}"
         branches: master
       - name: mk-pipelines
         downstream: mk/mk-pipelines
-        upstream: "https://github.com/Mirantis/mk-pipelines"
+        upstream: "${_param:gerrit_mk_pipelines_repo}"
         branches: master
diff --git a/jenkins/client/job/git-mirrors/upstream/models.yml b/jenkins/client/job/git-mirrors/upstream/models.yml
new file mode 100644
index 0000000..9a16673
--- /dev/null
+++ b/jenkins/client/job/git-mirrors/upstream/models.yml
@@ -0,0 +1,13 @@
+classes:
+  - system.jenkins.client.job.git-mirrors.upstream
+parameters:
+  _param:
+    jenkins_git_mirror_upstream_jobs:
+      - name: kubernetes-aws-model
+        downstream: mk/kubernetes-aws-model
+        upstream: "git@github.com:Mirantis/kubernetes-aws-model"
+        branches: master
+      - name: ceph-ha-model
+        downstream: ceph/ceph-ha-model
+        upstream: "git@github.com:Mirantis/ceph-ha-model"
+        branches: master
diff --git a/jenkins/client/job/git-mirrors/upstream/templates.yml b/jenkins/client/job/git-mirrors/upstream/templates.yml
index 5ffaa43..a83a6de 100644
--- a/jenkins/client/job/git-mirrors/upstream/templates.yml
+++ b/jenkins/client/job/git-mirrors/upstream/templates.yml
@@ -7,7 +7,11 @@
         downstream: mk/cookiecutter-templates
         upstream: "git@github.com:Mirantis/mk2x-cookiecutter-reclass-model"
         branches: master,mcp10
+      - name: heat-fragments
+        downstream: mk/heat-fragments
+        upstream: "git@github.com:Mirantis/heat-fragments"
+        branches: master
       - name: heat-templates
         downstream: mk/heat-templates
         upstream: "git@github.com:Mirantis/mk-lab-heat-templates"
-        branches: master
\ No newline at end of file
+        branches: master
diff --git a/jenkins/client/job/opencontrail/git-mirrors/upstream.yml b/jenkins/client/job/opencontrail/git-mirrors/upstream.yml
index af4c6ac..0f60c76 100644
--- a/jenkins/client/job/opencontrail/git-mirrors/upstream.yml
+++ b/jenkins/client/job/opencontrail/git-mirrors/upstream.yml
@@ -46,6 +46,8 @@
               branches: ${_param:contrail_dpdk_extra_branches}
             - name: contrail-dpdk
               branches: ${_param:contrail_dpdk_branches}
+            - name: contrail-third-party-cache-fixup
+              branches: ${_param:contrail_third_party_cache_fixup_branches}
           template:
             discard:
               build:
diff --git a/jenkins/client/job/opencontrail/init.yml b/jenkins/client/job/opencontrail/init.yml
index 34cc4e5..d2ecdb6 100644
--- a/jenkins/client/job/opencontrail/init.yml
+++ b/jenkins/client/job/opencontrail/init.yml
@@ -9,6 +9,7 @@
     contrail_ceilometer_plugin_branches: "master,R4.0,R4.1"
     contrail_kubernetes_branches: "master,origin-1.1,origin-1.1.3,release-1.1,release-1.2"
     contrail_dpdk_branches: "master,R3.0.2.x,R3.0.3.x,R3.1,R3.1.1.x,R3.2,R3.2.3.x,R4.0,R4.0.1,R4.1,contrail_dpdk_17_02,contrail_dpdk_17_05,contrail_dpdk_1_7,contrail_dpdk_2_0,contrail_dpdk_2_1"
+    contrail_third_party_cache_fixup_branches: "master"
   jenkins:
     client:
       view:
diff --git a/jenkins/client/job/oscore/init.yml b/jenkins/client/job/oscore/init.yml
index 18dd008..2f45ef8 100644
--- a/jenkins/client/job/oscore/init.yml
+++ b/jenkins/client/job/oscore/init.yml
@@ -2,11 +2,17 @@
   - system.jenkins.client.job.oscore.security_tests
   - system.jenkins.client.job.oscore.tests
   - system.jenkins.client.job.oscore.qa
+  - system.jenkins.client.job.oscore.salt_virtual_models
 parameters:
+  _param:
+     job_description_oscore: <br>Deploy and test OpenStack.<br>
   jenkins:
     client:
       view:
         "OSCORE":
           enabled: true
-          type: ListView
+          type: CategorizedJobsView
           include_regex: "^oscore-.*"
+          categories:
+            - group_regex: "oscore-bandit-*"
+              naming_rule: "Bandit"
diff --git a/jenkins/client/job/oscore/qa.yml b/jenkins/client/job/oscore/qa.yml
index a8d4fae..eb565a2 100644
--- a/jenkins/client/job/oscore/qa.yml
+++ b/jenkins/client/job/oscore/qa.yml
@@ -5,6 +5,7 @@
         oscore-build-docker-image:
           name: "{{job_prefix}}-{{oscore-qa-project}}-build-docker-image"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 25
@@ -49,6 +50,7 @@
         oscore-docker-image-systest-template:
           name: "{{job_prefix}}-{{oscore-qa-project}}-image-systest-{{model}}"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -164,14 +166,14 @@
                 type: string
                 default: "3"
               # test
-              TEST_TEMPEST_CONF:
+              TEST_CONF:
                 type: string
                 description: Tempest configuration file path inside container
-                default: "{{tempest_conf}}"
-              TEST_TEMPEST_TARGET:
+                default: "{{test_conf}}"
+              TEST_TARGET:
                 type: string
                 description: Node to run tests
-                default: "{{tempest_target}}"
+                default: "{{test_target}}"
               TEST_MODEL:
                 type: string
                 description: Environment salt model
diff --git a/jenkins/client/job/oscore/salt_virtual_models.yml b/jenkins/client/job/oscore/salt_virtual_models.yml
new file mode 100644
index 0000000..911c1ce
--- /dev/null
+++ b/jenkins/client/job/oscore/salt_virtual_models.yml
@@ -0,0 +1,170 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        oscore-test_virtual_model:
+          concurrent: true
+          description: ${_param:job_description_oscore}
+          discard:
+            build:
+              keep_num: 30
+            artifact:
+              keep_num: 30
+          plugin_properties:
+            throttleconcurrents:
+              enabled: true
+              throttle_option: category
+              categories:
+                - oscore-ci-ha-builds
+          display_name: oscore-test-virtual-model
+          name: oscore-test-virtual-model
+          param:
+            CREDENTIALS_ID:
+              default: gerrit
+              type: string
+              description: "Name of creadentials to use when connecting to gerrit"
+            HEAT_STACK_ZONE:
+              type: string
+              description: "Heat stack zone where build stack"
+              default: "mcp-oscore-ci"
+            STACK_RECLASS_ADDRESS:
+              type: string
+              default: 'https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab'
+              description: 'Url to repository with stack salt models'
+            STACK_RECLASS_BRANCH:
+              type: string
+              default: 'master'
+              description: 'Branch of repository with stack salt models'
+            STACK_CLUSTER_NAME:
+              type: string
+              default: ""
+              description: "Cluster name to use from reclass"
+            STACK_DELETE:
+              type: boolean
+              default: 'false'
+              description: "Enable it when stack have to be deleted."
+            FORMULA_PKG_REVISION:
+              type: string
+              description: Version of formulas for salt-master bootstrap
+              default: "nightly"
+            # openstack api
+            OPENSTACK_API_URL:
+              type: string
+              default: "https://cloud-cz.bud.mirantis.net:5000"
+            OPENSTACK_API_CREDENTIALS:
+              type: string
+              default: "openstack-devcloud-credentials"
+            OPENSTACK_API_PROJECT:
+              type: string
+              default: "mcp-oscore-ci"
+            OPENSTACK_API_PROJECT_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_PROJECT_ID:
+              type: string
+              default: ""
+            OPENSTACK_API_USER_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_CLIENT:
+              type: string
+              default: ""
+            OPENSTACK_API_VERSION:
+              type: string
+              default: "3"
+            # Test params
+            TEST_CONF:
+              type: string
+              description: Tempest configuration file path inside container
+              default: "/home/rally/rally_reports/tempest_generated.conf"
+            TEST_TARGET:
+              type: string
+              description: Node to run tests
+              default: "cfg01*"
+            TEST_CONCURRENCY:
+              type: string
+              description: How much test threads to run
+              default: "2"
+            RUN_SMOKE:
+              type: boolean
+              default: "false"
+              description: Enabling of running smoke tests
+          scm:
+            script: test-virtual-model-pipeline.groovy
+            type: git
+            url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines"
+            credentials: "gerrit"
+          type: workflow-scm
+        oscore-test_virtual_models:
+          concurrent: true
+          description: ${_param:job_description_oscore}
+          discard:
+            build:
+              keep_num: 30
+            artifact:
+              keep_num: 30
+          trigger:
+              timer:
+               spec: "H 05 * * *"
+          display_name: oscore-test-virtual-models
+          name: oscore-test-virtual-models
+          param:
+            CREDENTIALS_ID:
+              default: gerrit
+              type: string
+              description: "Name of creadentials to use when connecting to gerrit"
+            HEAT_STACK_ZONE:
+              type: string
+              description: "Heat stack zone where build stack"
+              default: "mcp-oscore-ci"
+            STACK_RECLASS_ADDRESS:
+              type: string
+              default: 'https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab'
+              description: 'Url to repository with stack salt models'
+            STACK_RECLASS_BRANCH:
+              type: string
+              default: 'master'
+              description: 'Branch of repository with stack salt models'
+            STACK_CLUSTER_NAMES:
+              type: string
+              default: "virtual-mcp-pike-ovs,virtual-mcp-pike-dvr,virtual-mcp-pike-dvr-ssl"
+              description: "Comma separated list of cluster names to test."
+            STACK_DELETE:
+              type: boolean
+              default: 'true'
+              description: "Enable it when stack have to be deleted."
+            FORMULA_PKG_REVISION:
+              type: string
+              description: Version of formulas for salt-master bootstrap
+              default: "nightly"
+            # openstack api
+            OPENSTACK_API_URL:
+              type: string
+              default: "https://cloud-cz.bud.mirantis.net:5000"
+            OPENSTACK_API_CREDENTIALS:
+              type: string
+              default: "openstack-devcloud-credentials"
+            OPENSTACK_API_PROJECT:
+              type: string
+              default: "mcp-oscore-ci"
+            OPENSTACK_API_PROJECT_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_PROJECT_ID:
+              type: string
+              default: ""
+            OPENSTACK_API_USER_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_CLIENT:
+              type: string
+              default: ""
+            OPENSTACK_API_VERSION:
+              type: string
+              default: "3"
+          scm:
+            script: test-virtual-models-pipeline.groovy
+            type: git
+            url: "${_param:jenkins_gerrit_url}/openstack-ci/openstack-pipelines"
+            credentials: "gerrit"
+          type: workflow-scm
diff --git a/jenkins/client/job/oscore/security_tests.yml b/jenkins/client/job/oscore/security_tests.yml
index 36b5441..8c6e39d 100644
--- a/jenkins/client/job/oscore/security_tests.yml
+++ b/jenkins/client/job/oscore/security_tests.yml
@@ -5,6 +5,7 @@
         bandit-scanner-template-downstream:
           name: "{{job_prefix}}-bandit-downstream-{{project}}"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -94,6 +95,7 @@
         bandit-scanner-template-upstream:
           name: "{{job_prefix}}-bandit-upstream-{{project}}"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
diff --git a/jenkins/client/job/oscore/tests.yml b/jenkins/client/job/oscore/tests.yml
index f5bb092..367f32a 100644
--- a/jenkins/client/job/oscore/tests.yml
+++ b/jenkins/client/job/oscore/tests.yml
@@ -5,6 +5,7 @@
         test-openstack-component-formula:
           name: "{{job_prefix}}-formula-systest-{{model}}-{{openstack_version}}"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -64,6 +65,10 @@
                 type: string
                 default: '{{stack_reclass_branch}}'
                 description: 'Branch of repository with stack salt models'
+              STACK_CLUSTER_NAME:
+                type: string
+                default: ""
+                description: "Cluster name to use from reclass"
               # salt
               SALT_OVERRIDES:
                 type: text
@@ -99,15 +104,15 @@
                 type: string
                 default: "3"
               # test
-              TEST_TEMPEST_CONF:
+              TEST_CONF:
                 type: string
                 description: Tempest configuration file path inside container
-                default: "{{tempest_conf}}"
-              TEST_TEMPEST_TARGET:
+                default: "{{test_conf}}"
+              TEST_TARGET:
                 type: string
                 description: Node to run tests
-                default: "{{tempest_target}}"
-              TEST_TEMPEST_PATTERN:
+                default: "{{test_target}}"
+              TEST_PATTERN:
                 type: string
                 description: Run tests matched to pattern only
                 default: "tempest"
@@ -142,6 +147,7 @@
         test-openstack-component-periodic:
           name: "{{job_prefix}}-{{milestone}}-{{model}}-{{openstack_version}}-{{formula_pkg_revision}}"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -249,18 +255,18 @@
                 type: string
                 description: Product milestone
                 default: "{{milestone}}"
-              TEST_TEMPEST_CONF:
+              TEST_CONF:
                 type: string
                 description: Tempest configuration file path inside container
-                default: "{{tempest_conf}}"
-              TEST_TEMPEST_TARGET:
+                default: "{{test_conf}}"
+              TEST_TARGET:
                 type: string
                 description: Node to run tests
-                default: "{{tempest_target}}"
-              TEST_TEMPEST_PATTERN:
+                default: "{{test_target}}"
+              TEST_PATTERN:
                 type: string
                 description: Run tests matched to pattern only
-                default: "tempest --concurrency 2"
+                default: "{{test_pattern}}"
               TEST_MODEL:
                 type: string
                 description: Environment salt model
@@ -273,9 +279,14 @@
                 type: boolean
                 default: 'true'
                 description: Whether to fail build on test results
+              RUN_SMOKE:
+                type: boolean
+                default: "{{run_smoke}}"
+                description: Enabling of running smoke tests
         test-runner-template:
           name: "{{job_prefix}}-{{test_type}}-runner"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -308,6 +319,10 @@
                 type: string
                 description: Job for results processing
                 default: "{{proc_results_job}}"
+              TEST_TYPE:
+                type: string
+                description: Name of test type
+                default: "{{test_type}}"
               SLAVE_NODE:
                 type: string
                 default: 'python'
@@ -323,28 +338,28 @@
                 type: boolean
                 default: 'false'
                 description: Upload results to testrail or not
-              TEST_TEMPEST_TARGET:
+              TEST_TARGET:
                 type: string
                 description: Salt target to run tests
-              TEST_TEMPEST_IMAGE:
+              TEST_IMAGE:
                 type: string
                 description: Url to tempest docker image
-                default: 'docker-prod-local.artifactory.mirantis.com/mirantis/oscore/rally-tempest'
+                default: "{{test_image}}"
               LOCAL_TEMPEST_IMAGE:
                 type: string
                 description: Path to local docker image
                 default: ''
-              TEST_TEMPEST_PATTERN:
+              TEST_PATTERN:
                 type: string
                 description: Run tests matched to pattern only
-              TEST_TEMPEST_SET:
+              TEST_SET:
                 type: string
                 description: Run tests matched by tempest set only
-              TEST_TEMPEST_CONCURRENCY:
+              TEST_CONCURRENCY:
                 type: string
                 description: How much test threads to run
                 default: "2"
-              TEST_TEMPEST_CONF:
+              TEST_CONF:
                 type: string
                 description: Tempest configuration file path inside container
                 default: "mcp.conf"
@@ -366,6 +381,7 @@
         results-checker-template:
           name: "{{job_prefix}}-{{test_type}}-results-checker"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -403,7 +419,7 @@
                 type: string
                 default: "{{testrail_credentials}}"
                 description: Credentials for results upload to testrail
-              TEST_TEMPEST_TARGET:
+              TEST_TARGET:
                 type: string
                 description: Node to run tests
               TEST_MILESTONE:
@@ -412,8 +428,7 @@
               TEST_SUITE:
                 type: string
                 description: Testrail test suite
-                default: >-
-                  'Tempest 16.0.0 with designate tests'
+                default: "{{test_suite}}"
               TEST_PLAN:
                 type: string
                 description: Testrail test plan
@@ -439,6 +454,7 @@
         deploy-kvm-virtual-template:
           name: "{{job_prefix}}-deploy-kvm-VMs"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -520,6 +536,7 @@
         oscore-oscc-ci-template:
           name: "{{job_prefix}}-oscc-ci"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -584,6 +601,7 @@
         build-salt-formula-refspec-template:
           name: "{{job_prefix}}-build-salt-formula-refspec"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -620,11 +638,11 @@
                 description: Whether to make a snapshot build
               EXTRA_REPO_URL:
                 type: string
-                default: "deb ${_param:jenkins_aptly_url}/{{dist}}/ testing salt salt-latest"
+                default: "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main; deb ${_param:jenkins_aptly_url}/{{dist}}/ testing salt"
                 description: Extra repo for building process
               EXTRA_REPO_KEY_URL:
                 type: string
-                default: "${_param:jenkins_aptly_url}/public.gpg"
+                default: "https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub; ${_param:jenkins_aptly_url}/public.gpg"
                 description: Extra repo GPG public key URL
               OS:
                 type: string
@@ -653,6 +671,7 @@
         test-salt-formula-refspec-template:
           name: "{{job_prefix}}-test-salt-formula-refspec"
           template:
+            description: ${_param:job_description_oscore}
             discard:
               build:
                 keep_num: 30
@@ -669,7 +688,7 @@
             trigger:
               gerrit:
                 project:
-                  "^salt-formulas/(nova|cinder|glance|keystone|horizon|neutron|designate|heat|ironic|barbican|salt|linux|reclass|galera|memcached|rabbitmq|bind|apache)$":
+                  "^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)$":
                     compare_type: 'REG_EXP'
                     branches:
                       - master
@@ -734,3 +753,61 @@
                 type: string
                 default: "{{systestJobPrefix}}"
                 description: "Systest job prefix. I.e. oscore-formula-systest-virtual_mcp11_aio-"
+              OPENSTACK_COMPONENTS_LIST:
+                type: string
+                description: "OpenStack related components list"
+                default: "{{openstack_components_list}}"
+              SOURCE_REPO_NAME:
+                type: string
+                description: "Name of the repo where packages are stored"
+                default: "{{source_repo_name}}"
+        test-deploy-virtual-model-change-template:
+          name: "{{job_prefix}}-deploy-virtual-model-change-{{job_suffix}}"
+          template:
+            description: ${_param:job_description_oscore}
+            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: deploy-virtual-model-change-pipeline.groovy
+            trigger:
+              gerrit:
+                project:
+                  "^salt-models/mcp-virtual-aio$":
+                    compare_type: 'REG_EXP'
+                    branches:
+                      - master
+                      - stable/pike
+                      - stable/ocata
+                      - stable/newton
+                      - stable/mitaka
+                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: "{{credentials_id}}"
+              STACK_RECLASS_ADDRESS:
+                type: string
+                default: "{{stack_reclass_address}}"
+              STACK_RECLASS_BRANCH:
+                type: string
+                default: "{{stack_reclass_branch}}"
+              TEST_CLUSTER_NAMES:
+                type: string
+                default: "{{test_cluster_names}}"
diff --git a/jenkins/client/job/oss/init.yml b/jenkins/client/job/oss/init.yml
index 9478ffd..5aecb0b 100644
--- a/jenkins/client/job/oss/init.yml
+++ b/jenkins/client/job/oss/init.yml
@@ -1,5 +1,6 @@
 classes:
   - system.jenkins.client.job.oss.test_devops_portal
+  - system.jenkins.client.job.oss.test_devops_portal_backend
   - system.jenkins.client.job.oss.test_devops_portal_nightly
   - system.jenkins.client.job.oss.test_pushkin_codebase
   - system.jenkins.client.job.oss.test_security_monkey_openstack
diff --git a/jenkins/client/job/oss/test_devops_portal_backend.yml b/jenkins/client/job/oss/test_devops_portal_backend.yml
new file mode 100644
index 0000000..0c23847
--- /dev/null
+++ b/jenkins/client/job/oss/test_devops_portal_backend.yml
@@ -0,0 +1,99 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        test-oss-devops-portal-backend:
+          name: test-oss-devops-portal-backend
+          discard:
+            build:
+              keep_num: 15
+            artifact:
+              keep_num: 15
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
+            credentials: "gerrit"
+            script: test-devops-portal-backend-pipeline.groovy
+          param:
+            # heat
+            HEAT_STACK_NAME:
+              type: string
+              description: Heat stack name. Will be generated if missing.
+            # salt master
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt-qa-credentials"
+            SSH_PUBLIC_KEY:
+              type: string
+              description: "User's public SSH key to be able to login when stack is deployed"
+            # openstack api
+            OPENSTACK_API_URL:
+              type: string
+              default: "https://cloud-cz.bud.mirantis.net:5000"
+            OPENSTACK_API_CREDENTIALS:
+              type: string
+              default: "openstack-devcloud-credentials"
+            OPENSTACK_API_PROJECT:
+              type: string
+              default: "mcp-oss"
+            OPENSTACK_API_CLIENT:
+              type: string
+              default: ""
+            OPENSTACK_API_VERSION:
+              type: string
+              default: "3"
+            OPENSTACK_API_PROJECT_DOMAIN:
+              type: string
+              default: "default"
+            OPENSTACK_API_USER_DOMAIN_ID:
+              type: string
+              default: "default"
+            OPENSTACK_API_PROJECT_ID:
+              type: string
+              default: ""
+            OPENSTACK_API_USER_DOMAIN:
+              type: string
+              default: "default"
+            # devops-portal-tests
+            DEVOPS_PORTAL_TESTS_URL:
+              type: string
+              default: "${_param:jenkins_gerrit_url}/oss/devops-portal-tests"
+            DEVOPS_PORTAL_TESTS_CREDENTIALS:
+              type: string
+              default: "gerrit"
+            DEVOPS_PORTAL_TESTS_BRANCH:
+              type: string
+              default: "master"
+            DEVOPS_PORTAL_BIND_IP:
+              type: string
+              default: "0.0.0.0"
+            DEVOPS_PORTAL_BIND_PORT:
+              type: string
+              default: "8012"
+            # testrail
+            TESTRAIL_REPORT:
+                type: boolean
+                default: false
+            TESTRAIL_URL:
+                type: string
+                default: "https://mirantis.testrail.com"
+            TESTRAIL_QA_CREDENTIALS:
+                type: string
+                default: "oscore-qa-credentials"
+            TESTRAIL_PROJECT:
+                type: string
+                default: "Mirantis Cloud Platform"
+            TESTRAIL_PLAN:
+                type: string
+                default: "[MCP] [Auto] DevOps Portal"
+            TESTRAIL_SUITE:
+                type: string
+                default: "[MCP] DevOps Portal"
+            TESTRAIL_MILESTONE:
+                type: string
+                default: "MCP-Q18.1"
+            TESTRAIL_RUN:
+                type: string
+                default: "[MCP] [Auto] DevOps Portal test run"
diff --git a/jenkins/client/job/oss/test_devops_portal_nightly.yml b/jenkins/client/job/oss/test_devops_portal_nightly.yml
index 34a8bec..b654846 100644
--- a/jenkins/client/job/oss/test_devops_portal_nightly.yml
+++ b/jenkins/client/job/oss/test_devops_portal_nightly.yml
@@ -32,3 +32,27 @@
             NIGHTLY_BUILD:
                 type: boolean
                 default: true
+            TESTRAIL_REPORT:
+                type: boolean
+                default: false
+            TESTRAIL_URL:
+                type: string
+                default: "https://mirantis.testrail.com"
+            TESTRAIL_QA_CREDENTIALS:
+                type: string
+                default: "oscore-qa-credentials"
+            TESTRAIL_PROJECT:
+                type: string
+                default: "Mirantis Cloud Platform"
+            TESTRAIL_PLAN:
+                type: string
+                default: "[MCP] [Auto] DevOps Portal"
+            TESTRAIL_SUITE:
+                type: string
+                default: "[MCP] DevOps Portal"
+            TESTRAIL_MILESTONE:
+                type: string
+                default: "MCP-Q18.1"
+            TESTRAIL_RUN:
+                type: string
+                default: "[MCP] [Auto] DevOps Portal test run"
diff --git a/jenkins/client/job/saas/init.yml b/jenkins/client/job/saas/init.yml
new file mode 100644
index 0000000..33ebbe4
--- /dev/null
+++ b/jenkins/client/job/saas/init.yml
@@ -0,0 +1,3 @@
+classes:
+  - system.jenkins.client.job.saas.test_saas_ui
+  - system.jenkins.client.job.saas.test_saas_core_auth
diff --git a/jenkins/client/job/saas/test_saas_core_auth.yml b/jenkins/client/job/saas/test_saas_core_auth.yml
new file mode 100644
index 0000000..1ff2339
--- /dev/null
+++ b/jenkins/client/job/saas/test_saas_core_auth.yml
@@ -0,0 +1,43 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        test-saas-core-auth:
+          name: test-saas-core-auth
+          discard:
+            build:
+              keep_num: 15
+            artifact:
+              keep_num: 15
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
+            credentials: "gerrit"
+            script: test-saas-core-auth-pipeline.groovy
+          trigger:
+            gerrit:
+              project:
+                "saas/core/auth":
+                  branches:
+                    - master
+              event:
+                patchset:
+                  - created:
+                      excludeDrafts: false
+                      excludeTrivialRebase: false
+                      excludeNoCodeChange: false
+                comment:
+                  - addedContains:
+                      commentAddedCommentContains: '^(?s:Patch Set \d+:.*(test|recheck|reverify)\s*)$'
+          param:
+            CREDENTIALS_ID:
+              type: string
+              default: "gerrit"
+            DEFAULT_GIT_URL:
+                type: string
+                default: "${_param:jenkins_gerrit_url}/saas/core/auth"
+            DEFAULT_GIT_REF:
+                type: string
+                default: master
diff --git a/jenkins/client/job/saas/test_saas_ui.yml b/jenkins/client/job/saas/test_saas_ui.yml
new file mode 100644
index 0000000..f49dd7f
--- /dev/null
+++ b/jenkins/client/job/saas/test_saas_ui.yml
@@ -0,0 +1,43 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        test-saas-ui:
+          name: test-saas-ui
+          discard:
+            build:
+              keep_num: 15
+            artifact:
+              keep_num: 15
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/oss/jenkins/pipelines"
+            credentials: "gerrit"
+            script: test-saas-ui-pipeline.groovy
+          trigger:
+            gerrit:
+              project:
+                "saas/frontend/ui":
+                  branches:
+                    - master
+              event:
+                patchset:
+                  - created:
+                      excludeDrafts: false
+                      excludeTrivialRebase: false
+                      excludeNoCodeChange: false
+                comment:
+                  - addedContains:
+                      commentAddedCommentContains: '^(?s:Patch Set \d+:.*(test|recheck|reverify)\s*)$'
+          param:
+            CREDENTIALS_ID:
+              type: string
+              default: "gerrit"
+            DEFAULT_GIT_URL:
+                type: string
+                default: "${_param:jenkins_gerrit_url}/saas/frontend/ui"
+            DEFAULT_GIT_REF:
+                type: string
+                default: master
diff --git a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
index 249a7e5..a2b000a 100644
--- a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
+++ b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
@@ -1,14 +1,13 @@
 parameters:
   _param:
     jenkins_pollscm_spec: "H/60 * * * *"
+    job_description_2way: <br>Syncronizes code projects with GitHub.<br>
   jenkins:
     client:
       job_template:
         git-mirror-2way-salt-formula:
           name: git-mirror-2way-salt-formula-{{name}}
           jobs:
-            - name: aide
-              branches: ${_param:salt_formulas_branches}
             - name: aodh
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
@@ -24,9 +23,6 @@
             - name: artifactory
               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: avinetworks
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
@@ -36,6 +32,9 @@
             - name: barbican
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
+            - name: baremetal-simulator
+              branches: ${_param:salt_formulas_branches}
+              notification_recipients: ${_param:salt_formulas_notification_recipients}
             - name: billometer
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
@@ -84,6 +83,9 @@
             - name: docker
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
+            - name: dogtag
+              branches: ${_param:salt_formulas_branches}
+              notification_recipients: ${_param:salt_formulas_notification_recipients}
             - name: dovecot
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
@@ -367,6 +369,7 @@
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
           template:
+            description: ${_param:job_description_2way}
             discard:
               build:
                 keep_num: 10
@@ -412,6 +415,7 @@
                 default: "{{notification_recipients}}"
       job:
         git-mirror-2way-salt-formulas-scripts:
+          description: ${_param:job_description_2way}
           discard:
             build:
               keep_num: 10
@@ -445,6 +449,7 @@
               type: string
               default: "master"
         git-mirror-2way-salt-formulas-cookiecutter:
+          description: ${_param:job_description_2way}
           discard:
             build:
               keep_num: 10
diff --git a/jenkins/client/job/salt-formulas/tests.yml b/jenkins/client/job/salt-formulas/tests.yml
index b6d74f2..73d9083 100644
--- a/jenkins/client/job/salt-formulas/tests.yml
+++ b/jenkins/client/job/salt-formulas/tests.yml
@@ -5,13 +5,11 @@
         test-salt-formula:
           name: test-salt-formula-{{name}}-latest
           jobs:
-            - name: aide
             - name: aodh
             - name: apache
             - name: aptcacher
             - name: aptly
             - name: artifactory
-            - name: auditd
             - name: avinetworks
             - name: backupninja
             - name: barbican
@@ -53,6 +51,7 @@
             - name: haproxy
             - name: heat
             - name: heka
+            - name: heketi
             - name: helm
             - name: horizon
             - name: influxdb
@@ -95,6 +94,7 @@
             - name: openssh
             - name: openvpn
             - name: openvstorage
+            - name: oslo-templates
             - name: owncloud
             - name: panko
             - name: postfix
diff --git a/jenkins/client/job/salt-models/generate.yml b/jenkins/client/job/salt-models/generate.yml
index b2ef4e5..686e74d 100644
--- a/jenkins/client/job/salt-models/generate.yml
+++ b/jenkins/client/job/salt-models/generate.yml
@@ -19,25 +19,10 @@
               script: generate-cookiecutter-products.groovy
             param:
               # Cookiecutter
-              COOKIECUTTER_TEMPLATE_URL:
-                type: string
-                default: "${_param:jenkins_gerrit_url}/mk/cookiecutter-templates.git"
-              COOKIECUTTER_TEMPLATE_CREDENTIALS:
-                type: string
-                default: gerrit
-              COOKIECUTTER_TEMPLATE_BRANCH:
-                type: string
-                default: master
-              COOKIECUTTER_TEMPLATE_PATH:
-                type: string
-                default: "./"
               COOKIECUTTER_TEMPLATE_CONTEXT:
                 type: text
 
               # Other
-              SHARED_RECLASS_URL:
-                type: string
-                default: "${_param:jenkins_gerrit_url}/salt-models/reclass-system.git"
               EMAIL_ADDRESS:
                 type: string
               TEST_MODEL:
diff --git a/jenkins/client/job/salt-models/tests.yml b/jenkins/client/job/salt-models/tests.yml
index 9e6b8ac..80135b5 100644
--- a/jenkins/client/job/salt-models/tests.yml
+++ b/jenkins/client/job/salt-models/tests.yml
@@ -67,6 +67,9 @@
               CONFIG_NODE_NAME_PATTERN:
                 type: string
                 default: "{{config_node_name}}"
+              RECLASS_VERSION:
+                type: string
+                default: "master"
               MAX_CPU_PER_JOB:
                 type: string
                 default: "2"
@@ -82,6 +85,31 @@
               APT_REPOSITORY_GPG:
                 type: string
                 default: ""
+        test_customers_salt_models:
+          name: test-customers-salt-models
+          template:
+            type: workflow-scm
+            discard:
+              build:
+                keep_num: 50
+              artifact:
+                keep_num: 50
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+              branch: "${_param:jenkins_pipelines_branch}"
+              credentials: "gerrit"
+              script: test-customers-salt-models.groovy
+            concurrent: false
+            trigger:
+               timer:
+                 spec: "{{job_timer}}"
+            param:
+              CUSTOMERS:
+                type: string
+                description: "Comma separated list of customer model names"
+                default: "{{customers}}"
+
         test_salt_model_customer:
           name: test-salt-model-customer-{{name}}
           template:
@@ -110,6 +138,10 @@
                     - addedContains:
                         commentAddedCommentContains: '^(?s:Patch Set \d+:.*(test|recheck|reverify)\s*)$'
             param:
+              TEST_CLUSTER_NAMES:
+                type: string
+                description: "Comma separated list of cluster names, empty string means all valid clusters"
+                default: "{{test_cluster_names}}"
               SALT_OPTS:
                 type: string
                 default: "--force-color"
@@ -151,6 +183,10 @@
               RECLASS_IGNORE_CLASS_NOTFOUND:
                 type: boolean
                 default: "{{reclass_ignore_class_notfound}}"
+              RECLASS_VERSION:
+                type: string
+                default: "master"
+                description: "Version (branch) of Reclass we will use"
               LEGACY_TEST_MODE:
                 type: boolean
                 default: "{{legacy_test_mode}}"
@@ -244,6 +280,9 @@
               RECLASS_MODEL_BRANCH:
                 type: string
                 default: master
+              DISTRIB_REVISION:
+                type: string
+                default: 'nightly'
               SYSTEM_GIT_URL:
                 type: string
                 default: ""
@@ -255,7 +294,7 @@
                 default: "1"
               EXTRA_FORMULAS:
                 type: string
-                default: "aptly artifactory backupninja collectd devops-portal docker elasticsearch 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"
+                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"
       job:
         test-salt-model-node:
           name: test-salt-model-node
@@ -309,6 +348,10 @@
             SYSTEM_GIT_REF:
               type: string
               default: ""
+            RECLASS_VERSION:
+              type: string
+              default: "master"
+              description: "Version (branch) of Reclass we will use"
             MAX_CPU_PER_JOB:
               type: string
               default: "2"
diff --git a/jenkins/client/job/validate.yml b/jenkins/client/job/validate.yml
index e8ed6d6..c97c0ad 100644
--- a/jenkins/client/job/validate.yml
+++ b/jenkins/client/job/validate.yml
@@ -234,7 +234,7 @@
             TEMPEST_TEST_PATTERN:
               type: string
               default: "set=smoke"
-              description: Use set=smoke (or identity,full...] or just test name
+              description: Use set=smoke (or identity,full...) or just test name
             TEMPEST_ENDPOINT_TYPE:
               type: choice
               choices:
@@ -276,11 +276,11 @@
               description: Credentials to the Salt API
             TEMPEST_TARGET_NODE:
               type: string
-              default: ""
+              default: "${_param:cicd_control_node03_hostname}.${_param:cluster_domain}"
               description: Node where container with tempest will be run
             TEST_IMAGE:
               type: string
-              default: "rallyforge/rally"
+              default: "xrally/xrally-openstack:0.9.1"
               description: Docker image to use for running Rally/Tempest
             TARGET_NODES:
               type: string
@@ -296,7 +296,7 @@
               description: If you have any problems with timeouts (e.g. while waiting for node to be up/down), please increase this value
             SKIP_LIST_PATH:
               type: string
-              default: "/home/rally/cvp-configuration/tempest/skip-list.yaml"
+              default: "cvp-configuration/tempest/skip-list.yaml"
               description: path to skip-list file inside container
             PROXY:
               type: string
@@ -305,7 +305,7 @@
             TEMPEST_TEST_PATTERN:
               type: string
               default: "set=smoke"
-              description: Use set=smoke (or identity,full...] or just test name
+              description: Use set=smoke (or identity,full...) or just test name
             MANUAL_CONFIRMATION:
               type: boolean
               default: 'false'
@@ -316,7 +316,7 @@
               description: Can be repo url (local or remote) or path to folder (inside container) with Tempest
             TOOLS_REPO:
               type: string
-              default: "${_param:gerrit_public_host}/cvp-configuration"
+              default: "https://github.com/Mirantis/cvp-configuration"
               description: URL of repo where testing tools, scenarios, configs are located.
         cvp-perf:
           type: workflow-scm
diff --git a/jenkins/client/job/vnf-onboarding/init.yml b/jenkins/client/job/vnf-onboarding/init.yml
index cd97fef..19ba3f6 100644
--- a/jenkins/client/job/vnf-onboarding/init.yml
+++ b/jenkins/client/job/vnf-onboarding/init.yml
@@ -1,6 +1,7 @@
 classes:
   - system.jenkins.client.job.vnf-onboarding.test_avi_loadbalancer
   - system.jenkins.client.job.vnf-onboarding.test_nginx_vnf
+  - system.jenkins.client.job.vnf-onboarding.test_platform
 
 parameters:
   _param:
@@ -9,3 +10,4 @@
     vnf_openstack_api_url: "${_param:cluster_public_protocol}://${_param:cluster_public_host}:5000/v2.0"
     vnf_openstack_api_credentials: "test-openstack"
     vnf_elastic_url: "${_param:stacklight_log_address}:${_param:cluster_elasticsearch_port}"
+    vnf_docker_registry_path: "docker-dev-local.docker.mirantis.net/mirantis/vnf-onboarding"
diff --git a/jenkins/client/job/vnf-onboarding/test_platform.yml b/jenkins/client/job/vnf-onboarding/test_platform.yml
new file mode 100644
index 0000000..1dd0051
--- /dev/null
+++ b/jenkins/client/job/vnf-onboarding/test_platform.yml
@@ -0,0 +1,99 @@
+parameters:
+  jenkins:
+    client:
+      plugin:
+        gerrit-trigger: {}
+      job:
+        platform_validation_pipeline:
+          type: workflow-scm
+          name: platform_validation_pipeline
+          display_name: "Validate OpenStack platform before deploy of VNF"
+          discard:
+            build:
+              keep_num: 20
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/vnf-onboarding/pipelines"
+            credentials: "${_param:vnf_gerrit_credentials}"
+            script: test_platform.groovy
+          param:
+            OPENSTACK_API_CREDENTIALS:
+              type: string
+              description: "OpenStack admin user credentials for running tests"
+              default: "${_param:vnf_openstack_api_credentials}"
+            OS_PROJECT_NAME:
+              type: string
+              description: "OpenStack project name for running tests"
+              default: "platform-test"
+            OS_AUTH_URL:
+              type: string
+              description: "OpenStack auth url"
+              default: "http://${_param:openstack_control_address}:35357/v3"
+            IMAGE_ID:
+              type: string
+              description: "Specify image id to execute tests against custom images"
+              default: ""
+            FLAVOR_ID:
+              type: string
+              description: "Specify flavor id to execute tests against custom images"
+              default: ""
+            MIN_COMPUTE_NODES:
+              type: string
+              description: "Specify number of compute nodes of environment"
+              default: '2'
+            FIXED_SHARED_NETWORK_NAME:
+              type: string
+              description: "Shared network that will be used in tests."
+              default: "test-shared"
+            COMPUTE_NODE_HOST_NAME:
+              type: string
+              description: "To run CPU pinning/NUMA topology tests against specific node"
+              default: ''
+            COMPUTE_AVAILABILITY_ZONE:
+              type: string
+              description: "To run CPU pinning/NUMA topology tests against specific node"
+              default: 'nova'
+            COMPUTE_NUMA_NODE_COUNT:
+              type: string
+              description: "Number of NUMA node for NUMA topology testing."
+              default: '2'
+            IMAGE_SSH_USER:
+              type: string
+              description: "Specify user name to login in test OpenStack VMs"
+              default: "cirros"
+            VNF_PLATFORM_TESTS_REPO:
+              type: string
+              description: "Repository with testing framework"
+              default: "${_param:jenkins_gerrit_url}vnf-onboarding/platform-tests"
+            VNF_PLATFORM_TESTS_BRANCH:
+              type: string
+              default: "master"
+            VNF_PLATFORM_TESTS_REPO_CREDENTIALS:
+              type: string
+              default: "${_param:vnf_gerrit_credentials}"
+            TEMPEST_IMAGE_DOCKER_REGISTRY_PATH:
+              type: string
+              description: "Path for docker image with testing tool.  If empty, image will be build using VNF_PLATFORM_TESTS_* parameters."
+              default: ${_param:vnf_docker_registry_path}
+            TEMPEST_IMAGE_NAME:
+              type: string
+              description: "Name of docker image with testing tool"
+              default: "platform_tests:latest"
+            ELASTIC_URL:
+              type: string
+              description: "URL to elastic search API"
+              default: "${_param:vnf_elastic_url}"
+            ELASTIC_TRANSFER_REPO:
+              type: string
+              description: "Repository with scripts for transfering test results to elastic search"
+              default: "${_param:jenkins_gerrit_url}/vnf-onboarding/nfv-platform"
+            ELASTIC_TRANSFER_REPO_CREDENTIALS:
+              type: string
+              default: "${_param:vnf_gerrit_credentials}"
+            ELASTIC_TRANSFER_REPO_BRANCH:
+              type: string
+              default: "master"
+            DOCKER_TEMPEST_PARAMS:
+              type: string
+              description: "Pass custom parameters for tempest container"
+              default: ""
diff --git a/jenkins/slave/libvirt.yml b/jenkins/slave/libvirt.yml
index e40b841..4ebaae2 100644
--- a/jenkins/slave/libvirt.yml
+++ b/jenkins/slave/libvirt.yml
@@ -14,6 +14,9 @@
           version: latest
         libvirt-bin:
           version: latest
+        # Reguired to simplify building custom cloud-init.iso
+        cloud-image-utils:
+          version: latest
   # Ensure FORWARD chain to be ACCEPT to avoid issue when running with docker
   # 1.13 and newer that sets chain to DROP, see:
   #   https://github.com/docker/docker/pull/28257
diff --git a/keepalived/cluster/instance/cicd_control_vip.yml b/keepalived/cluster/instance/cicd_control_vip.yml
index ab7f413..462cbd6 100644
--- a/keepalived/cluster/instance/cicd_control_vip.yml
+++ b/keepalived/cluster/instance/cicd_control_vip.yml
@@ -5,6 +5,12 @@
 parameters:
   keepalived:
     cluster:
+      vrrp_scripts:
+        vip:
+          content: "pidof haproxy && docker service ls"
+          interval: 30
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         cicd_control_vip:
@@ -13,3 +19,4 @@
           interface: ${_param:keepalived_vip_interface}
           virtual_router_id: ${_param:keepalived_vip_virtual_router_id}
           priority: ${_param:keepalived_vip_priority}
+          track_script: vip
diff --git a/keepalived/cluster/instance/openstack_baremetal_vip.yml b/keepalived/cluster/instance/openstack_baremetal_vip.yml
index c3141b6..355cf53 100644
--- a/keepalived/cluster/instance/openstack_baremetal_vip.yml
+++ b/keepalived/cluster/instance/openstack_baremetal_vip.yml
@@ -11,6 +11,12 @@
     keepalived_openstack_baremetal_vip_priority: ${_param:keepalived_vip_priority}
   keepalived:
     cluster:
+      vrrp_scripts:
+        check_pidof:
+          args: "haproxy"
+          interval: 10
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         openstack_baremetal_vip:
@@ -19,3 +25,4 @@
           interface: ${_param:keepalived_openstack_baremetal_vip_interface}
           virtual_router_id: ${_param:keepalived_openstack_baremetal_vip_virtual_router_id}
           priority: ${_param:keepalived_openstack_baremetal_vip_priority}
+          track_script: check_pidof
diff --git a/keepalived/cluster/instance/openstack_web_public_vip.yml b/keepalived/cluster/instance/openstack_web_public_vip.yml
index 8279b65..1080e62 100644
--- a/keepalived/cluster/instance/openstack_web_public_vip.yml
+++ b/keepalived/cluster/instance/openstack_web_public_vip.yml
@@ -9,6 +9,12 @@
     keepalived_openstack_web_public_vip_interface: eth1
   keepalived:
     cluster:
+      vrrp_scripts:
+        check_pidof:
+          args: "haproxy"
+          interval: 10
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         openstack_web_public_vip:
@@ -17,3 +23,4 @@
           interface: ${_param:keepalived_openstack_web_public_vip_interface}
           virtual_router_id: 132
           priority: ${_param:keepalived_vip_priority}
+          track_script: check_pidof
diff --git a/keepalived/cluster/instance/prometheus_server_vip.yml b/keepalived/cluster/instance/prometheus_server_vip.yml
index 7bde702..aea8b55 100644
--- a/keepalived/cluster/instance/prometheus_server_vip.yml
+++ b/keepalived/cluster/instance/prometheus_server_vip.yml
@@ -5,8 +5,15 @@
 parameters:
   _param:
     keepalived_vip_priority: 101
+    keepalived_prometheus_vrrp_script_content: "pidof haproxy && docker service ls"
   keepalived:
     cluster:
+      vrrp_scripts:
+        vip:
+          content: ${_param:keepalived_prometheus_vrrp_script_content}
+          interval: 30
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         prometheus_server_vip:
@@ -15,4 +22,4 @@
           interface: ${_param:keepalived_prometheus_vip_interface}
           virtual_router_id: 105
           priority: ${_param:keepalived_vip_priority}
-
+          track_script: vip
diff --git a/keepalived/cluster/instance/stacklight_log_vip.yml b/keepalived/cluster/instance/stacklight_log_vip.yml
index caa6754..44d3527 100644
--- a/keepalived/cluster/instance/stacklight_log_vip.yml
+++ b/keepalived/cluster/instance/stacklight_log_vip.yml
@@ -5,6 +5,12 @@
 parameters:
   keepalived:
     cluster:
+      vrrp_scripts:
+        check_pidof:
+          args: "haproxy"
+          interval: 10
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         stacklight_log_vip:
@@ -13,3 +19,4 @@
           interface: ${_param:keepalived_stacklight_log_vip_interface}
           virtual_router_id: 110
           priority: 101
+          track_script: check_pidof
diff --git a/keepalived/cluster/instance/stacklight_monitor_vip.yml b/keepalived/cluster/instance/stacklight_monitor_vip.yml
index 28a6b69..51283b2 100644
--- a/keepalived/cluster/instance/stacklight_monitor_vip.yml
+++ b/keepalived/cluster/instance/stacklight_monitor_vip.yml
@@ -3,8 +3,16 @@
 classes:
 - service.keepalived.support
 parameters:
+  _param:
+    keepalived_docker_vrrp_script_content: "docker service ls"
   keepalived:
     cluster:
+      vrrp_scripts:
+        docker_service_ls:
+          content: ${_param:keepalived_docker_vrrp_script_content}
+          interval: 10
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         stacklight_monitor_vip:
@@ -13,3 +21,4 @@
           interface: ${_param:keepalived_stacklight_monitor_vip_interface}
           virtual_router_id: 100
           priority: 101
+          track_script: docker_service_ls
diff --git a/keepalived/cluster/instance/stacklight_telemetry_vip.yml b/keepalived/cluster/instance/stacklight_telemetry_vip.yml
index e7d31a5..95d4d80 100644
--- a/keepalived/cluster/instance/stacklight_telemetry_vip.yml
+++ b/keepalived/cluster/instance/stacklight_telemetry_vip.yml
@@ -5,6 +5,12 @@
 parameters:
   keepalived:
     cluster:
+      vrrp_scripts:
+        check_pidof:
+          args: "haproxy"
+          interval: 10
+          rise: 1
+          fall: 1
       enabled: true
       instance:
         stacklight_telemetry_vip:
@@ -13,3 +19,4 @@
           interface: ${_param:keepalived_stacklight_telemetry_vip_interface}
           virtual_router_id: 120
           priority: 101
+          track_script: check_pidof
diff --git a/keystone/client/service/aodh.yml b/keystone/client/service/aodh.yml
index c4d49b8..e7b0dbb 100644
--- a/keystone/client/service/aodh.yml
+++ b/keystone/client/service/aodh.yml
@@ -2,6 +2,7 @@
   _param:
     cluster_public_protocol: https
     aodh_service_protocol: http
+    aodh_public_host: ${_param:cluster_public_host}
   keystone:
     client:
       server:
@@ -19,7 +20,7 @@
               description: OpenStack Alarming Service
               endpoints:
               - region: ${_param:openstack_region}
-                public_address: ${_param:cluster_public_host}
+                public_address: ${_param:aodh_public_host}
                 public_protocol: ${_param:cluster_public_protocol}
                 public_port: 8042
                 public_path: '/'
diff --git a/keystone/client/service/ceilometer.yml b/keystone/client/service/ceilometer.yml
index 90e0d3e..40f4ebf 100644
--- a/keystone/client/service/ceilometer.yml
+++ b/keystone/client/service/ceilometer.yml
@@ -2,6 +2,7 @@
   _param:
     cluster_public_protocol: https
     ceilometer_service_protocol: http
+    ceilometer_public_host: ${_param:cluster_public_host}
   keystone:
     client:
       server:
@@ -19,7 +20,7 @@
               description: OpenStack Telemetry Service
               endpoints:
               - region: ${_param:openstack_region}
-                public_address: ${_param:cluster_public_host}
+                public_address: ${_param:ceilometer_public_host}
                 public_protocol: ${_param:cluster_public_protocol}
                 public_port: 8777
                 public_path: '/'
diff --git a/keystone/client/service/gnocchi.yml b/keystone/client/service/gnocchi.yml
new file mode 100644
index 0000000..6707764
--- /dev/null
+++ b/keystone/client/service/gnocchi.yml
@@ -0,0 +1,34 @@
+parameters:
+  _param:
+    cluster_public_protocol: https
+    gnocchi_service_protocol: http
+    gnocchi_public_host: ${_param:cluster_public_host}
+  keystone:
+    client:
+      server:
+        identity:
+          project:
+            service:
+              user:
+                gnocchi:
+                  is_admin: true
+                  password: ${_param:keystone_gnocchi_password}
+                  email: ${_param:admin_email}
+          service:
+            gnocchi:
+              type: metric
+              description: OpenStack Metric Service
+              endpoints:
+              - region: ${_param:openstack_region}
+                public_address: ${_param:gnocchi_public_host}
+                public_protocol: ${_param:cluster_public_protocol}
+                public_port: 8041
+                public_path: '/'
+                internal_address: ${_param:gnocchi_service_host}
+                internal_port: 8041
+                internal_path: '/'
+                internal_protocol: ${_param:gnocchi_service_protocol}
+                admin_protocol: ${_param:gnocchi_service_protocol}
+                admin_address: ${_param:gnocchi_service_host}
+                admin_port: 8041
+                admin_path: '/'
diff --git a/keystone/client/service/keystone.yml b/keystone/client/service/keystone.yml
index d9092e0..ba116f8 100644
--- a/keystone/client/service/keystone.yml
+++ b/keystone/client/service/keystone.yml
@@ -2,6 +2,9 @@
   _param:
     cluster_public_protocol: https
     keystone_service_protocol: http
+    keystone_public_path: "/v2.0"
+    keystone_internal_path: "/v2.0"
+    keystone_admin_path: "/v2.0"
   keystone:
     client:
       server:
@@ -15,12 +18,12 @@
                 public_address: ${_param:cluster_public_host}
                 public_protocol: ${_param:cluster_public_protocol}
                 public_port: 5000
-                public_path: '/v2.0'
+                public_path: ${_param:keystone_public_path}
                 internal_address: ${_param:keystone_service_host}
                 internal_port: 5000
-                internal_path: '/v2.0'
+                internal_path: ${_param:keystone_internal_path}
                 internal_protocol: ${_param:keystone_service_protocol}
                 admin_address: ${_param:keystone_service_host}
                 admin_port: 35357
-                admin_path: '/v2.0'
+                admin_path: ${_param:keystone_admin_path}
                 admin_protocol: ${_param:keystone_service_protocol}
diff --git a/keystone/client/service/manila.yml b/keystone/client/service/manila.yml
new file mode 100644
index 0000000..07e88b2
--- /dev/null
+++ b/keystone/client/service/manila.yml
@@ -0,0 +1,33 @@
+parameters:
+  _param:
+    cluster_public_protocol: https
+    manila_service_protocol: http
+  keystone:
+    client:
+      server:
+        identity:
+          project:
+            service:
+              user:
+                manila:
+                  is_admin: true
+                  password: ${_param:keystone_manila_password}
+                  email: ${_param:admin_email}
+          service:
+            manila:
+              type: share
+              description: OpenStack Shared File Systems V1
+              endpoints:
+              - region: ${_param:openstack_region}
+                public_address: ${_param:cluster_public_host}
+                public_protocol: ${_param:cluster_public_protocol}
+                public_port: 8786
+                public_path: '/v1/$(tenant_id)s'
+                internal_address: ${_param:manila_service_host}
+                internal_port: 8786
+                internal_path: '/v1/$(tenant_id)s'
+                internal_protocol: ${_param:manila_service_protocol}
+                admin_protocol: ${_param:manila_service_protocol}
+                admin_address: ${_param:manila_service_host}
+                admin_port: 8786
+                admin_path: '/v1/$(tenant_id)s'
diff --git a/keystone/client/service/manila2.yml b/keystone/client/service/manila2.yml
new file mode 100644
index 0000000..1a3a125
--- /dev/null
+++ b/keystone/client/service/manila2.yml
@@ -0,0 +1,33 @@
+parameters:
+  _param:
+    cluster_public_protocol: https
+    manila_service_protocol: http
+  keystone:
+    client:
+      server:
+        identity:
+          project:
+            service:
+              user:
+                manila:
+                  is_admin: true
+                  password: ${_param:keystone_manila_password}
+                  email: ${_param:admin_email}
+          service:
+            manilav2:
+              type: sharev2
+              description: OpenStack Shared File Systems V2
+              endpoints:
+              - region: ${_param:openstack_region}
+                public_address: ${_param:cluster_public_host}
+                public_protocol: ${_param:cluster_public_protocol}
+                public_port: 8786
+                public_path: '/v2/$(tenant_id)s'
+                internal_address: ${_param:manila_service_host}
+                internal_port: 8786
+                internal_path: '/v2/$(tenant_id)s'
+                internal_protocol: ${_param:manila_service_protocol}
+                admin_protocol: ${_param:manila_service_protocol}
+                admin_address: ${_param:manila_service_host}
+                admin_port: 8786
+                admin_path: '/v2/$(tenant_id)s'
diff --git a/keystone/client/service/panko.yml b/keystone/client/service/panko.yml
index 05f9453..6f86b36 100644
--- a/keystone/client/service/panko.yml
+++ b/keystone/client/service/panko.yml
@@ -1,6 +1,8 @@
 parameters:
   _param:
     cluster_public_protocol: https
+    panko_service_protocol: http
+    panko_public_host: ${_param:cluster_public_host}
   keystone:
     client:
       server:
@@ -18,13 +20,15 @@
               description: OpenStack Event Service
               endpoints:
               - region: ${_param:openstack_region}
-                public_address: ${_param:cluster_public_host}
+                public_address: ${_param:panko_public_host}
                 public_protocol: ${_param:cluster_public_protocol}
                 public_port: 8977
                 public_path: '/'
                 internal_address: ${_param:panko_service_host}
                 internal_port: 8977
                 internal_path: '/'
+                internal_protocol: ${_param:panko_service_protocol}
+                admin_protocol: ${_param:panko_service_protocol}
                 admin_address: ${_param:panko_service_host}
                 admin_port: 8977
                 admin_path: '/'
diff --git a/kubernetes/master/cluster.yml b/kubernetes/master/cluster.yml
index f21f003..78e91a0 100644
--- a/kubernetes/master/cluster.yml
+++ b/kubernetes/master/cluster.yml
@@ -11,7 +11,6 @@
     master:
       container: false
       network:
-        engine: calico
-        private_ip_range: ${_param:calico_private_network}/${_param:calico_private_netmask}
-        prometheus:
-          enabled: true
+        calico:
+          prometheus:
+            enabled: true
diff --git a/kubernetes/master/single.yml b/kubernetes/master/single.yml
index cc8d8ab..684af64 100644
--- a/kubernetes/master/single.yml
+++ b/kubernetes/master/single.yml
@@ -7,5 +7,3 @@
   kubernetes:
     master:
       container: false
-      network:
-        engine: calico
diff --git a/kubernetes/pool/cluster.yml b/kubernetes/pool/cluster.yml
index 3dd0c40..d223d57 100644
--- a/kubernetes/pool/cluster.yml
+++ b/kubernetes/pool/cluster.yml
@@ -4,7 +4,7 @@
 parameters:
   _param:
     # component docker images
-    kubernetes_calicoctl_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/ctl:latest
+    kubernetes_calico_calicoctl_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/ctl:latest
     kubernetes_calico_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/node:latest
     kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
@@ -15,9 +15,9 @@
     pool:
       container: false
       network:
-        engine: calico
-        prometheus:
-          enabled: true
+        calico:
+          prometheus:
+            enabled: true
   docker:
     host:
       options:
diff --git a/kubernetes/pool/single.yml b/kubernetes/pool/single.yml
index 67363a6..d6282c3 100644
--- a/kubernetes/pool/single.yml
+++ b/kubernetes/pool/single.yml
@@ -4,7 +4,7 @@
 parameters:
   _param:
     # component docker images
-    kubernetes_calicoctl_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/ctl:latest
+    kubernetes_calico_calicoctl_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/ctl:latest
     kubernetes_calico_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/node:latest
     kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
     kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
@@ -14,8 +14,6 @@
   kubernetes:
     pool:
       container: false
-      network:
-        engine: calico
   docker:
     host:
       options:
diff --git a/linux/storage/loopback_manila.yml b/linux/storage/loopback_manila.yml
new file mode 100644
index 0000000..6a9986c
--- /dev/null
+++ b/linux/storage/loopback_manila.yml
@@ -0,0 +1,8 @@
+parameters:
+  linux:
+    storage:
+      enabled: true
+      loopback:
+        loop1:
+          file: "/srv/disk1"
+          size: ${_param:loopback_device1_size}G
diff --git a/linux/system/repo/mcp/apt_mirantis/aptly.yml b/linux/system/repo/mcp/apt_mirantis/aptly.yml
index b0cf536..5a023a5 100644
--- a/linux/system/repo/mcp/apt_mirantis/aptly.yml
+++ b/linux/system/repo/mcp/apt_mirantis/aptly.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_aptly:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/aptly/ ${_param:linux_system_repo_mcp_aptly_version} main"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_aptly_version}/aptly/${_param:linux_system_codename}/ squeeze main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: 9E3E53F19C7DE460
+          key_server: keys.gnupg.net
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_aptly_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/cassandra.yml b/linux/system/repo/mcp/apt_mirantis/cassandra.yml
index 308f555..8bf3583 100644
--- a/linux/system/repo/mcp/apt_mirantis/cassandra.yml
+++ b/linux/system/repo/mcp/apt_mirantis/cassandra.yml
@@ -7,11 +7,8 @@
     system:
       repo:
         mcp_cassandra:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/cassandra/ ${_param:linux_system_repo_mcp_cassandra_version} ${_param:linux_system_repo_mcp_cassandra_version_number}"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_cassandra_version}/cassandra/${_param:linux_system_codename}/ ${_param:linux_system_repo_mcp_cassandra_version_number} main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: F8358FA2F2833C93
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_cassandra_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/ceph.yml b/linux/system/repo/mcp/apt_mirantis/ceph.yml
index 2532f86..40c8d87 100644
--- a/linux/system/repo/mcp/apt_mirantis/ceph.yml
+++ b/linux/system/repo/mcp/apt_mirantis/ceph.yml
@@ -7,11 +7,11 @@
     system:
       repo:
         mcp_ceph:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/ceph/ ${_param:linux_system_repo_mcp_ceph_version} ${_param:linux_system_repo_mcp_ceph_codename}"
+          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/ ${_param:linux_system_repo_mcp_ceph_version} ceph-${_param:linux_system_repo_mcp_ceph_codename}"
           architectures: amd64
           key_url: "http://apt.mirantis.com/public.gpg"
           clean_file: true
           pin:
           - pin: 'release a=${_param:linux_system_repo_mcp_ceph_version}'
             priority: 1100
-            package: '*'
\ No newline at end of file
+            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/docker.yml b/linux/system/repo/mcp/apt_mirantis/docker.yml
index cbd3097..d3314a9 100644
--- a/linux/system/repo/mcp/apt_mirantis/docker.yml
+++ b/linux/system/repo/mcp/apt_mirantis/docker.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_docker:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/docker/ ${_param:linux_system_repo_mcp_docker_version} stable"
+          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"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
-          clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_docker_version}'
-            priority: 1100
-            package: '*'
+          key_id: 8D81803C0EBFCD88
+          key_server: keyserver.ubuntu.com
+          clean_file: true
\ No newline at end of file
diff --git a/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml b/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml
index cf49630..2689869 100644
--- a/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml
+++ b/linux/system/repo/mcp/apt_mirantis/docker_legacy.yml
@@ -6,7 +6,7 @@
     system:
       repo:
         mcp_docker_legacy:
-          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_docker_legacy_version}/docker-1.x/ ubuntu-${_param:linux_system_codename} main"
+          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"
           architectures: amd64
           key_id: 58118E89F3A912897C070ADBF76221572C52609D
           key_server: keyserver.ubuntu.com
\ No newline at end of file
diff --git a/linux/system/repo/mcp/apt_mirantis/elastic/2x.yml b/linux/system/repo/mcp/apt_mirantis/elastic/2x.yml
index 4add81e..1db8267 100644
--- a/linux/system/repo/mcp/apt_mirantis/elastic/2x.yml
+++ b/linux/system/repo/mcp/apt_mirantis/elastic/2x.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_elastic_2x:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/elastic/2.x/ ${_param:linux_system_repo_mcp_elastic_2x_version} main"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_elastic_2x_version}/elasticsearch-2.x/${_param:linux_system_codename}/ stable main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: D88E42B4
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_elastic_2x_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/elastic/5x.yml b/linux/system/repo/mcp/apt_mirantis/elastic/5x.yml
index 8876c51..453b3bc 100644
--- a/linux/system/repo/mcp/apt_mirantis/elastic/5x.yml
+++ b/linux/system/repo/mcp/apt_mirantis/elastic/5x.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_elastic_5x:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/elastic/5.x/ ${_param:linux_system_repo_mcp_elastic_5x_version} main"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_elastic_5x_version}/elasticsearch-5.x/${_param:linux_system_codename}/ stable main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: D88E42B4
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_elastic_5x_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/fluentd.yml b/linux/system/repo/mcp/apt_mirantis/fluentd.yml
index da7d3ca..58df85f 100644
--- a/linux/system/repo/mcp/apt_mirantis/fluentd.yml
+++ b/linux/system/repo/mcp/apt_mirantis/fluentd.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_fluentd:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/fluentd/ ${_param:linux_system_repo_mcp_fluentd_version} main"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_fluentd_version}/td-agent/${_param:linux_system_codename} ${_param:linux_system_codename} contrib"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: 901F9177AB97ACBE
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_fluentd_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/glusterfs.yml b/linux/system/repo/mcp/apt_mirantis/glusterfs.yml
index 1f5dd0e..02f2fd9 100644
--- a/linux/system/repo/mcp/apt_mirantis/glusterfs.yml
+++ b/linux/system/repo/mcp/apt_mirantis/glusterfs.yml
@@ -2,16 +2,13 @@
   _param:
     apt_mk_version: stable
     linux_system_repo_mcp_glusterfs_version: ${_param:apt_mk_version}
-    linux_system_repo_mcp_glusterfs_version_number: "3.12"
+    linux_system_repo_mcp_glusterfs_version_number: "3.8"
   linux:
     system:
       repo:
         mcp_glusterfs:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/glusterfs/ ${_param:linux_system_repo_mcp_glusterfs_version} ${_param:linux_system_repo_mcp_glusterfs_version_number}"
+          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"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: 3FE869A9
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_glusterfs_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/grafana.yml b/linux/system/repo/mcp/apt_mirantis/grafana.yml
index 2d71740..5bf9396 100644
--- a/linux/system/repo/mcp/apt_mirantis/grafana.yml
+++ b/linux/system/repo/mcp/apt_mirantis/grafana.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_grafana:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/grafana/ ${_param:linux_system_repo_mcp_grafana_version} main"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_grafana_version}/grafana/${_param:linux_system_codename}/ jessie main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: C2E73424D59097AB
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_grafana_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/influxdb.yml b/linux/system/repo/mcp/apt_mirantis/influxdb.yml
index f3c1fec..e6ebcb3 100644
--- a/linux/system/repo/mcp/apt_mirantis/influxdb.yml
+++ b/linux/system/repo/mcp/apt_mirantis/influxdb.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_influxdb:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/influxdb/ ${_param:linux_system_repo_mcp_influxdb_version} main"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_influxdb_version}/influxdb/${_param:linux_system_codename}/ ${_param:linux_system_codename} stable"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: 684A14CF2582E0C5
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_influxdb_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/kibana/46.yml b/linux/system/repo/mcp/apt_mirantis/kibana/46.yml
index f3795ad..21ab878 100644
--- a/linux/system/repo/mcp/apt_mirantis/kibana/46.yml
+++ b/linux/system/repo/mcp/apt_mirantis/kibana/46.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_kibana_46:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/kibana/4.6/ ${_param:linux_system_repo_mcp_kibana_46_version} kibana-46"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_kibana_46_version}/kibana-4.6/${_param:linux_system_codename}/ stable main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: D88E42B4
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_kibana_46_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/kibana/5x.yml b/linux/system/repo/mcp/apt_mirantis/kibana/5x.yml
index e2f4795..3c3d128 100644
--- a/linux/system/repo/mcp/apt_mirantis/kibana/5x.yml
+++ b/linux/system/repo/mcp/apt_mirantis/kibana/5x.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_kibana_5x:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/kibana/5.x/ ${_param:linux_system_repo_mcp_kibana_5x_version} kibana-5x"
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_kibana_5x_version}/elasticsearch-5.x/${_param:linux_system_codename}/ stable main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: D88E42B4
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_kibana_5x_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/apt_mirantis/maas.yml b/linux/system/repo/mcp/apt_mirantis/maas.yml
index b18bf65..7ee3537 100644
--- a/linux/system/repo/mcp/apt_mirantis/maas.yml
+++ b/linux/system/repo/mcp/apt_mirantis/maas.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_maas:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/maas/ ${_param:linux_system_repo_mcp_maas_version} main"
+          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"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: 684D4A1C
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_maas_version}'
-            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 bec95cd..c47e177 100644
--- a/linux/system/repo/mcp/apt_mirantis/saltstack_2016_3.yml
+++ b/linux/system/repo/mcp/apt_mirantis/saltstack_2016_3.yml
@@ -6,11 +6,8 @@
     system:
       repo:
         mcp_saltstack:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/salt/2016.3/ ${_param:linux_system_repo_mcp_saltstack_version} main"
+          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_url: "http://apt.mirantis.com/public.gpg"
+          key_id: 0E08A149DE57BFBE
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_saltstack_version}'
-            priority: 1100
-            package: '*'
\ No newline at end of file
diff --git a/linux/system/repo/mcp/apt_mirantis/sensu.yml b/linux/system/repo/mcp/apt_mirantis/sensu.yml
index f86b88a..fb1045f 100644
--- a/linux/system/repo/mcp/apt_mirantis/sensu.yml
+++ b/linux/system/repo/mcp/apt_mirantis/sensu.yml
@@ -1,16 +1,13 @@
 parameters:
   _param:
     apt_mk_version: stable
-    linux_system_repo_mcp_extra_version: ${_param:apt_mk_version}
+    linux_system_repo_mcp_sensu_version: ${_param:apt_mk_version}
   linux:
     system:
       repo:
-        mcp_extra:
-          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/sensu/ ${_param:linux_system_repo_mcp_extra_version} main"
+        mcp_sensu:
+          source: "deb [arch=amd64] http://mirror.mirantis.com/${_param:linux_system_repo_mcp_sensu_version}/sensu/${_param:linux_system_codename}/ sensu main"
           architectures: amd64
-          key_url: "http://apt.mirantis.com/public.gpg"
+          key_id: A20F259AEB9C94BB
+          key_server: keyserver.ubuntu.com
           clean_file: true
-          pin:
-          - pin: 'release a=${_param:linux_system_repo_mcp_extra_version}'
-            priority: 1100
-            package: '*'
diff --git a/linux/system/repo/mcp/updates.yml b/linux/system/repo/mcp/updates.yml
new file mode 100644
index 0000000..6d08b19
--- /dev/null
+++ b/linux/system/repo/mcp/updates.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+    linux_system_repo_mcp_updates_version: ${_param:apt_mk_version}
+  linux:
+    system:
+      repo:
+        mcp_updates:
+          source: "deb [arch=amd64] http://apt.mirantis.com/${_param:linux_system_codename}/ ${_param:linux_system_repo_mcp_updates_version} updates"
+          architectures: amd64
+          key_url: "http://apt.mirantis.com/public.gpg"
+          clean_file: true
+          pin:
+          - pin: 'release a=${_param:linux_system_repo_mcp_updates_version}'
+            priority: 1200
+            package: '*'
diff --git a/linux/system/repo_local/mcp/apt_mirantis/fluentd.yml b/linux/system/repo_local/mcp/apt_mirantis/fluentd.yml
index 40682d7..d0a1671 100644
--- a/linux/system/repo_local/mcp/apt_mirantis/fluentd.yml
+++ b/linux/system/repo_local/mcp/apt_mirantis/fluentd.yml
@@ -6,7 +6,7 @@
     system:
       repo:
         mcp_fluentd:
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/fluentd/ ${_param:linux_system_repo_mcp_fluentd_version} main"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/fluentd ${_param:apt_mk_version} contrib"
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           clean_file: true
diff --git a/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml b/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml
index ca7e1bd..cb3444b 100644
--- a/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml
+++ b/linux/system/repo_local/mcp/apt_mirantis/glusterfs.yml
@@ -2,7 +2,7 @@
   _param:
     apt_mk_version: stable
     linux_system_repo_mcp_glusterfs_version: ${_param:apt_mk_version}
-    linux_system_repo_mcp_glusterfs_version_number: "3.12"
+    linux_system_repo_mcp_glusterfs_version_number: "3.8"
   linux:
     system:
       repo:
diff --git a/linux/system/repo_local/mcp/updates.yml b/linux/system/repo_local/mcp/updates.yml
new file mode 100644
index 0000000..f7f22d1
--- /dev/null
+++ b/linux/system/repo_local/mcp/updates.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+    linux_system_repo_mcp_updates_version: ${_param:apt_mk_version}
+  linux:
+    system:
+      repo:
+        mcp_updates:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:linux_system_repo_mcp_updates_version} updates"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
+          clean_file: true
+          pin:
+          - pin: 'release a=${_param:linux_system_repo_mcp_updates_version}'
+            priority: 1200
+            package: '*'
diff --git a/linux/system/single/debian.yml b/linux/system/single/debian.yml
index b6d0b2b..b4d08c9 100644
--- a/linux/system/single/debian.yml
+++ b/linux/system/single/debian.yml
@@ -6,5 +6,31 @@
   linux:
     system:
       package:
+        apt-transport-https:
+          version: latest
+        cloud-init:
+          version: purged
+        mcelog:
+          version: latest
         python-msgpack:
           version: latest
+        unattended-upgrades:
+          version: purged
+      apt:
+        config:
+          compression-workaround:
+            "Acquire::CompressionTypes::Order": "gz"
+          aws-s3-mirrors-workaround:
+            "Acquire::http::Pipeline-Depth": "0"
+          dont_install_recommends:
+            "APT::Install-Recommends": "false"
+          dont_install_suggests:
+            "APT::Install-Suggests": "false"
+          dont_acquire_all_languages:
+            "Acquire::Languages": "none"
+          dont_update_package_list:
+            "APT::Periodic::Update-Package-Lists": "0"
+          dont_update_download_upg_packages:
+            "APT::Periodic::Download-Upgradeable-Packages": "0"
+          disable_unattended_upgrade:
+            "APT::Periodic::Unattended-Upgrade": "0"
diff --git a/linux/system/single/init.yml b/linux/system/single/init.yml
index 70eae66..dae70ff 100644
--- a/linux/system/single/init.yml
+++ b/linux/system/single/init.yml
@@ -14,19 +14,6 @@
           enabled: true
           name: root
           home: /root
-      package:
-        cloud-init:
-          version: purged
-        unattended-upgrades:
-          version: purged
-        mcelog:
-          version: latest
-      apt:
-        config:
-          compression-workaround:
-            "Acquire::CompressionTypes::Order": "gz"
-          aws-s3-mirrors-workaround:
-            "Acquire::http::Pipeline-Depth": "0"
       kernel:
         modules:
           - nf_conntrack
diff --git a/manila/common/cluster.yml b/manila/common/cluster.yml
new file mode 100644
index 0000000..8763903
--- /dev/null
+++ b/manila/common/cluster.yml
@@ -0,0 +1,34 @@
+classes:
+ - service.manila.common.cluster
+ - service.haproxy.proxy.single
+ - system.haproxy.proxy.listen.openstack.manila
+parameters:
+  manila:
+    common:
+      version: ${_param:openstack_version}
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+        host: ${_param:openstack_message_queue_address}
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name: manila
+        user: manila
+        password: ${_param:mysql_manila_password}
+      identity:
+        engine: keystone
+        region: RegionOne
+        host: ${_param:cluster_vip_address}
+        port: 35357
+        user: manila
+        password: ${_param:keystone_manila_password}
+        tenant: service
+        auth_type: password
+        user_domain_id: default
+        project_domain_id: default
+        protocol: 'http'
diff --git a/manila/common/single.yml b/manila/common/single.yml
new file mode 100644
index 0000000..362338f
--- /dev/null
+++ b/manila/common/single.yml
@@ -0,0 +1,32 @@
+classes:
+ - service.manila.common.single
+parameters:
+  manila:
+    common:
+      version: ${_param:openstack_version}
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+        host: ${_param:single_address}
+      database:
+        engine: mysql
+        host: ${_param:single_address}
+        port: 3306
+        name: manila
+        user: manila
+        password: ${_param:mysql_manila_password}
+      identity:
+        engine: keystone
+        region: RegionOne
+        host: ${_param:single_address}
+        port: 35357
+        user: manila
+        password: ${_param:keystone_manila_password}
+        tenant: service
+        auth_type: password
+        user_domain_id: default
+        project_domain_id: default
+        protocol: 'http'
diff --git a/manila/control/cluster.yml b/manila/control/cluster.yml
new file mode 100644
index 0000000..ff6ca10
--- /dev/null
+++ b/manila/control/cluster.yml
@@ -0,0 +1,15 @@
+classes:
+ - system.manila.common.cluster
+ - system.apache.server.site.manila
+ - system.haproxy.proxy.listen.openstack.manila
+parameters:
+  manila:
+    common:
+      dhss: false
+      version: ${_param:openstack_version}
+    api:
+      enabled: true
+      version: ${_param:openstack_version}
+    scheduler:
+      enabled: true
+      version: ${_param:openstack_version}
diff --git a/manila/control/single.yml b/manila/control/single.yml
new file mode 100644
index 0000000..3e14e96
--- /dev/null
+++ b/manila/control/single.yml
@@ -0,0 +1,14 @@
+classes:
+ - system.manila.common.cluster
+ - system.apache.server.site.manila
+parameters:
+  manila:
+    common:
+      dhss: false
+      version: ${_param:openstack_version}
+    api:
+      enabled: true
+      version: ${_param:openstack_version}
+    scheduler:
+      enabled: true
+      version: ${_param:openstack_version}
diff --git a/manila/share/backend/lvm.yml b/manila/share/backend/lvm.yml
new file mode 100644
index 0000000..fe709da
--- /dev/null
+++ b/manila/share/backend/lvm.yml
@@ -0,0 +1,28 @@
+parameters:
+  _param:
+    manila_share_address: ${_param:single_address}
+  linux:
+    storage:
+      lvm:
+        manila-vg:
+          enabled: true
+          name: manila-volume
+          devices: ${_param:manila_lvm_devices}
+    system:
+      package:
+        samba:
+          - name: samba
+        nfs-kernel-server:
+          - name: nfs-kernel-server
+  manila:
+    share:
+      enabled_share_backends:
+        lvm:
+          name: lvm
+          type: lvm
+          enabled: true
+          lvm_share_export_ips:
+            - "${_param:manila_share_address}"
+          dhss: false
+          share_driver: manila.share.drivers.lvm.LVMShareDriver
+          lvm_share_volume_group: manila-volume
diff --git a/manila/share/init.yml b/manila/share/init.yml
new file mode 100644
index 0000000..2c6558e
--- /dev/null
+++ b/manila/share/init.yml
@@ -0,0 +1,10 @@
+classes:
+ - service.manila.common.cluster
+parameters:
+  manila:
+    common:
+      dhss: false
+      version: ${_param:openstack_version}
+    share:
+      enabled: true
+      version: ${_param:openstack_version}
diff --git a/mongodb/server/cluster.yml b/mongodb/server/cluster.yml
index f3c16d6..02294c4 100644
--- a/mongodb/server/cluster.yml
+++ b/mongodb/server/cluster.yml
@@ -2,10 +2,13 @@
 - service.mongodb.server.cluster
 parameters:
   _param:
+    openstack_telemetry_node01_hostname: mdb01
+    openstack_telemetry_node02_hostname: mdb02
+    openstack_telemetry_node03_hostname: mdb03
     mongodb_server_replica_set: mongodb
-    mongodb_master: mdb01
+    mongodb_master: ${_param:openstack_telemetry_node01_hostname}
     mongodb_server_members:
-    - host: mdb01
+    - host: ${_param:openstack_telemetry_node01_hostname}
       priority: 2
-    - host: mdb02
-    - host: mdb03
+    - host: ${_param:openstack_telemetry_node02_hostname}
+    - host: ${_param:openstack_telemetry_node03_hostname}
diff --git a/neutron/client/service/manila.yml b/neutron/client/service/manila.yml
new file mode 100644
index 0000000..cdbc7bb
--- /dev/null
+++ b/neutron/client/service/manila.yml
@@ -0,0 +1,21 @@
+classes:
+- service.neutron.client
+parameters:
+  neutron:
+    client:
+      server:
+        admin_identity:
+          endpoint_type: internalURL
+          network:
+            manila-share-network:
+              tenant: admin
+              shared: false
+              admin_state_up: True
+              port_security_enabled: false
+              subnet:
+                manila-share-subnet:
+                  cidr: ${_param:openstack_manila_share_neutron_subnet_cidr}
+                  allocation_pools:
+                    - start: ${_param:openstack_manila_share_neutron_subnet_allocation_start}
+                      end: ${_param:openstack_manila_share_neutron_subnet_allocation_end}
+                  enable_dhcp: true
diff --git a/neutron/compute/cluster.yml b/neutron/compute/cluster.yml
index 13ee31c..e348a93 100644
--- a/neutron/compute/cluster.yml
+++ b/neutron/compute/cluster.yml
@@ -4,6 +4,8 @@
   _param:
     neutron_enable_qos: False
     neutron_enable_vlan_aware_vms: False
+    neutron_enable_bgp_vpn: False
+    neutron_bgp_vpn_driver: bagpipe
   linux:
     system:
       package:
@@ -15,6 +17,9 @@
       dvr: ${_param:neutron_compute_dvr}
       qos: ${_param:neutron_enable_qos}
       vlan_aware_vms: ${_param:neutron_enable_vlan_aware_vms}
+      bgp_vpn:
+        enabled: ${_param:neutron_enable_bgp_vpn}
+        driver: ${_param:neutron_bgp_vpn_driver}
       agent_mode: ${_param:neutron_compute_agent_mode}
       external_access: ${_param:neutron_compute_external_access}
       backend:
diff --git a/neutron/control/cluster.yml b/neutron/control/cluster.yml
index ea9596d..166de3a 100644
--- a/neutron/control/cluster.yml
+++ b/neutron/control/cluster.yml
@@ -5,6 +5,8 @@
 - system.haproxy.proxy.listen.openstack.neutron
 - system.galera.server.database.neutron
 parameters:
+  _param:
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
@@ -36,3 +38,5 @@
   neutron:
     server:
       plugin: contrail
+    identity:
+      protocol: ${_param:cluster_internal_protocol}
diff --git a/neutron/control/opendaylight/cluster.yml b/neutron/control/opendaylight/cluster.yml
new file mode 100644
index 0000000..1f8142e
--- /dev/null
+++ b/neutron/control/opendaylight/cluster.yml
@@ -0,0 +1,22 @@
+classes:
+- service.keepalived.cluster.single
+- service.haproxy.proxy.single
+- service.neutron.control.cluster
+- system.neutron.control.openvswitch.cluster
+parameters:
+  _param:
+    opendaylight_router: odl-router_v2
+    opendaylight_driver: opendaylight_v2
+  neutron:
+    server:
+      backend:
+        opendaylight: true
+        host: ${_param:opendaylight_service_host}
+        rest_api_port: 8282
+        user: admin
+        password: admin
+        ovsdb_connection: tcp:127.0.0.1:6639
+        router: ${_param:opendaylight_router}
+        mechanism:
+          ovs:
+            driver: ${_param:opendaylight_driver}
diff --git a/neutron/control/opendaylight/single.yml b/neutron/control/opendaylight/single.yml
new file mode 100644
index 0000000..297cfa0
--- /dev/null
+++ b/neutron/control/opendaylight/single.yml
@@ -0,0 +1,20 @@
+classes:
+- service.neutron.control.single
+- system.neutron.control.openvswitch.single
+parameters:
+  _param:
+    opendaylight_router: odl-router_v2
+    opendaylight_driver: opendaylight_v2
+  neutron:
+    server:
+      backend:
+        opendaylight: true
+        host: ${_param:opendaylight_service_host}
+        rest_api_port: 8282
+        user: admin
+        password: admin
+        ovsdb_connection: tcp:127.0.0.1:6639
+        router: ${_param:opendaylight_router}
+        mechanism:
+          ovs:
+            driver: ${_param:opendaylight_driver}
diff --git a/neutron/control/openvswitch/cluster.yml b/neutron/control/openvswitch/cluster.yml
index 80489c8..3f80a55 100644
--- a/neutron/control/openvswitch/cluster.yml
+++ b/neutron/control/openvswitch/cluster.yml
@@ -12,6 +12,9 @@
     neutron_tenant_network_types: "flat,vxlan"
     neutron_enable_qos: False
     neutron_enable_vlan_aware_vms: False
+    neutron_enable_bgp_vpn: False
+    neutron_bgp_vpn_driver: bagpipe
+    cluster_internal_protocol: 'http'
   neutron:
     server:
       global_physnet_mtu: ${_param:neutron_global_physnet_mtu}
@@ -19,6 +22,9 @@
       dvr: ${_param:neutron_control_dvr}
       qos: ${_param:neutron_enable_qos}
       vlan_aware_vms: ${_param:neutron_enable_vlan_aware_vms}
+      bgp_vpn:
+        enabled: ${_param:neutron_enable_bgp_vpn}
+        driver: ${_param:neutron_bgp_vpn_driver}
       backend:
         engine: ml2
         tenant_network_types: "${_param:neutron_tenant_network_types}"
@@ -32,6 +38,7 @@
         host: ${_param:openstack_database_address}
       identity:
         region: ${_param:openstack_region}
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         members:
           - host: ${_param:openstack_message_queue_node01_address}
diff --git a/neutron/control/openvswitch/single.yml b/neutron/control/openvswitch/single.yml
index 009c116..baa710e 100644
--- a/neutron/control/openvswitch/single.yml
+++ b/neutron/control/openvswitch/single.yml
@@ -10,6 +10,9 @@
     neutron_tenant_network_types: "flat,vxlan"
     neutron_enable_qos: False
     neutron_enable_vlan_aware_vms: False
+    neutron_enable_bgp_vpn: False
+    neutron_bgp_vpn_driver: bagpipe
+    internal_protocol: 'http'
   neutron:
     server:
       global_physnet_mtu: ${_param:neutron_global_physnet_mtu}
@@ -17,6 +20,9 @@
       dvr: ${_param:neutron_control_dvr}
       qos: ${_param:neutron_enable_qos}
       vlan_aware_vms: ${_param:neutron_enable_vlan_aware_vms}
+      bgp_vpn:
+        enabled: ${_param:neutron_enable_bgp_vpn}
+        driver: ${_param:neutron_bgp_vpn_driver}
       backend:
         engine: ml2
         tenant_network_types: "${_param:neutron_tenant_network_types}"
@@ -30,6 +36,7 @@
         host: ${_param:openstack_database_address}
       identity:
         region: ${_param:openstack_region}
+        protocol: ${_param:internal_protocol}
       message_queue:
         members:
           - host: ${_param:openstack_message_queue_node01_address}
diff --git a/neutron/control/single.yml b/neutron/control/single.yml
index 7f02325..067b4df 100644
--- a/neutron/control/single.yml
+++ b/neutron/control/single.yml
@@ -2,6 +2,8 @@
 - service.neutron.control.single
 - system.galera.server.database.neutron
 parameters:
+  _param:
+    internal_protocol: 'http'
   linux:
     system:
       package:
@@ -12,3 +14,5 @@
     server:
       database:
         host: ${_param:single_address}
+      identity:
+        protocol: ${_param:internal_protocol}
diff --git a/nginx/server/proxy/openstack/aodh.yml b/nginx/server/proxy/openstack/aodh.yml
index bfdb4d6..d15bca5 100644
--- a/nginx/server/proxy/openstack/aodh.yml
+++ b/nginx/server/proxy/openstack/aodh.yml
@@ -1,6 +1,9 @@
 parameters:
   _param:
     nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_aodh_host: ${_param:aodh_service_host}
+    nginx_proxy_openstack_aodh_protocol: 'http'
   nginx:
     server:
       enabled: true
@@ -11,10 +14,11 @@
           name: openstack_api_aodh
           check: false
           proxy:
-            host: ${_param:aodh_service_host}
+            host: ${_param:nginx_proxy_openstack_aodh_host}
             port: 8042
-            protocol: http
+            protocol: ${_param:nginx_proxy_openstack_aodh_protocol}
           host:
             name: ${_param:nginx_proxy_openstack_api_host}
             port: 8042
+            address: ${_param:nginx_proxy_openstack_api_address}
           ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/barbican.yml b/nginx/server/proxy/openstack/barbican.yml
index 89e5a9c..6ac6a14 100644
--- a/nginx/server/proxy/openstack/barbican.yml
+++ b/nginx/server/proxy/openstack/barbican.yml
@@ -3,6 +3,7 @@
     nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
     nginx_proxy_openstack_api_address: 0.0.0.0
     nginx_proxy_openstack_barbican_host: ${_param:barbican_service_host}
+    nginx_proxy_openstack_barbican_protocol: 'http'
   nginx:
     server:
       enabled: true
@@ -15,7 +16,7 @@
           proxy:
             host: ${_param:nginx_proxy_openstack_barbican_host}
             port: 9311
-            protocol: http
+            protocol: ${_param:nginx_proxy_openstack_barbican_protocol}
           host:
             name: ${_param:nginx_proxy_openstack_api_host}
             port: 9311
diff --git a/nginx/server/proxy/openstack/ceilometer.yml b/nginx/server/proxy/openstack/ceilometer.yml
index 57315fe..78b1f00 100644
--- a/nginx/server/proxy/openstack/ceilometer.yml
+++ b/nginx/server/proxy/openstack/ceilometer.yml
@@ -1,6 +1,9 @@
 parameters:
   _param:
     nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_ceilometer_host: ${_param:ceilometer_service_host}
+    nginx_proxy_openstack_ceilometer_protocol: 'http'
   nginx:
     server:
       enabled: true
@@ -11,10 +14,11 @@
           name: openstack_api_ceilometer
           check: false
           proxy:
-            host: ${_param:ceilometer_service_host}
+            host: ${_param:nginx_proxy_openstack_ceilometer_host}
             port: 8777
-            protocol: http
+            protocol: ${_param:nginx_proxy_openstack_ceilometer_protocol}
           host:
             name: ${_param:nginx_proxy_openstack_api_host}
             port: 8777
+            address: ${_param:nginx_proxy_openstack_api_address}
           ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/cinder.yml b/nginx/server/proxy/openstack/cinder.yml
new file mode 100644
index 0000000..c89fa11
--- /dev/null
+++ b/nginx/server/proxy/openstack/cinder.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_cinder_host: ${_param:cinder_service_host}
+    nginx_proxy_openstack_cinder_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_cinder:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_cinder
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_cinder_host}
+            port: 8776
+            protocol: ${_param:nginx_proxy_openstack_cinder_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8776
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/designate.yml b/nginx/server/proxy/openstack/designate.yml
index c238775..ce92ff6 100644
--- a/nginx/server/proxy/openstack/designate.yml
+++ b/nginx/server/proxy/openstack/designate.yml
@@ -3,6 +3,7 @@
     nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
     nginx_proxy_openstack_api_address: 0.0.0.0
     nginx_proxy_openstack_designate_host: ${_param:designate_service_host}
+    nginx_proxy_openstack_designate_protocol: 'http'
   nginx:
     server:
       enabled: true
@@ -14,7 +15,7 @@
           proxy:
             host: ${_param:nginx_proxy_openstack_designate_host}
             port: 9001
-            protocol: http
+            protocol: ${_param:nginx_proxy_openstack_designate_protocol}
           host:
             name: ${_param:nginx_proxy_openstack_api_host}
             port: 9001
diff --git a/nginx/server/proxy/openstack/glance.yml b/nginx/server/proxy/openstack/glance.yml
new file mode 100644
index 0000000..3479296
--- /dev/null
+++ b/nginx/server/proxy/openstack/glance.yml
@@ -0,0 +1,26 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_glance_protocol: 'http'
+    nginx_proxy_openstack_glance_host: ${_param:glance_service_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_glance:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_glance
+          check: false
+          underscores_in_headers: true
+          proxy:
+            host: ${_param:nginx_proxy_openstack_glance_host}
+            port: 9292
+            protocol: ${_param:nginx_proxy_openstack_glance_protocol}
+            size: 30000m
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 9292
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/gnocchi.yml b/nginx/server/proxy/openstack/gnocchi.yml
new file mode 100644
index 0000000..6169648
--- /dev/null
+++ b/nginx/server/proxy/openstack/gnocchi.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_gnocchi_host: ${_param:gnocchi_service_host}
+    nginx_proxy_openstack_gnocchi_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_gnocchi:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_gnocchi
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_gnocchi_host}
+            port: 8041
+            protocol: ${_param:nginx_proxy_openstack_gnocchi_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8041
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/heat.yml b/nginx/server/proxy/openstack/heat.yml
new file mode 100644
index 0000000..bfb7745
--- /dev/null
+++ b/nginx/server/proxy/openstack/heat.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_heat_host: ${_param:heat_service_host}
+    nginx_proxy_openstack_heat_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_heat:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_heat
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_heat_host}
+            port: 8004
+            protocol: ${_param:nginx_proxy_openstack_heat_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8004
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/heat_cfn.yml b/nginx/server/proxy/openstack/heat_cfn.yml
new file mode 100644
index 0000000..99bb2d3
--- /dev/null
+++ b/nginx/server/proxy/openstack/heat_cfn.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_heat_host: ${_param:heat_service_host}
+    nginx_proxy_openstack_heat_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_heat_cfn:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_heat_cfn
+          proxy:
+            host: ${_param:nginx_proxy_openstack_heat_host}
+            port: 8000
+            protocol: ${_param:nginx_proxy_openstack_heat_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8000
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/heat_cloudwatch.yml b/nginx/server/proxy/openstack/heat_cloudwatch.yml
new file mode 100644
index 0000000..2c6a30a
--- /dev/null
+++ b/nginx/server/proxy/openstack/heat_cloudwatch.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_heat_host: ${_param:heat_service_host}
+    nginx_proxy_openstack_heat_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_heat_cloudwatch:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_heat_cloudwatch
+          proxy:
+            host: ${_param:nginx_proxy_openstack_heat_host}
+            port: 8003
+            protocol: ${_param:nginx_proxy_openstack_heat_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8003
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/ironic.yml b/nginx/server/proxy/openstack/ironic.yml
new file mode 100644
index 0000000..6ccedb3
--- /dev/null
+++ b/nginx/server/proxy/openstack/ironic.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_ironic_host: ${_param:ironic_service_host}
+    nginx_proxy_openstack_ironic_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_ironic:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_ironic
+          proxy:
+            host: ${_param:nginx_proxy_openstack_ironic_host}
+            port: 6385
+            protocol: ${_param:nginx_proxy_openstack_ironic_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 6385
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/keystone.yml b/nginx/server/proxy/openstack/keystone.yml
new file mode 100644
index 0000000..bf6646a
--- /dev/null
+++ b/nginx/server/proxy/openstack/keystone.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_keystone_host: ${_param:keystone_service_host}
+    nginx_proxy_openstack_keystone_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_keystone:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_keystone
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_keystone_host}
+            port: 5000
+            protocol: ${_param:nginx_proxy_openstack_keystone_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 5000
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/keystone_private.yml b/nginx/server/proxy/openstack/keystone_private.yml
new file mode 100644
index 0000000..bffae74
--- /dev/null
+++ b/nginx/server/proxy/openstack/keystone_private.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_keystone_host: ${_param:keystone_service_host}
+    nginx_proxy_openstack_keystone_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_keystone_private:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_keystone_private
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_keystone_host}
+            port: 35357
+            protocol: ${_param:nginx_proxy_openstack_keystone_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 35357
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/manila.yml b/nginx/server/proxy/openstack/manila.yml
new file mode 100644
index 0000000..8157dd8
--- /dev/null
+++ b/nginx/server/proxy/openstack/manila.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_manila_host: ${_param:manila_service_host}
+    nginx_proxy_openstack_manila_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_manila:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_manila
+          proxy:
+            host: ${_param:nginx_proxy_openstack_manila_host}
+            port: 8786
+            protocol: ${_param:nginx_proxy_openstack_manila_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8786
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/neutron.yml b/nginx/server/proxy/openstack/neutron.yml
new file mode 100644
index 0000000..9ee5796
--- /dev/null
+++ b/nginx/server/proxy/openstack/neutron.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_neutron_host: ${_param:neutron_service_host}
+    nginx_proxy_openstack_neutron_protocol: 'http'
+  nginx:
+    server:
+      site:
+        nginx_proxy_openstack_api_neutron:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_neutron
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_neutron_host}
+            port: 9696
+            protocol: ${_param:nginx_proxy_openstack_neutron_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 9696
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/nova.yml b/nginx/server/proxy/openstack/nova.yml
new file mode 100644
index 0000000..456e056
--- /dev/null
+++ b/nginx/server/proxy/openstack/nova.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_nova_host: ${_param:nova_service_host}
+    nginx_proxy_openstack_nova_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_nova:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_nova
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_nova_host}
+            port: 8774
+            protocol: ${_param:nginx_proxy_openstack_nova_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8774
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/nova_ec2.yml b/nginx/server/proxy/openstack/nova_ec2.yml
new file mode 100644
index 0000000..27b3f91
--- /dev/null
+++ b/nginx/server/proxy/openstack/nova_ec2.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_nova_host: ${_param:nova_service_host}
+    nginx_proxy_openstack_nova_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_nova_ec2:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_nova_ec2
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_nova_host}
+            port: 8773
+            protocol: ${_param:nginx_proxy_openstack_nova_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8773
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/panko.yml b/nginx/server/proxy/openstack/panko.yml
new file mode 100644
index 0000000..45d389b
--- /dev/null
+++ b/nginx/server/proxy/openstack/panko.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+    nginx_proxy_openstack_api_address: 0.0.0.0
+    nginx_proxy_openstack_panko_host: ${_param:panko_service_host}
+    nginx_proxy_openstack_panko_protocol: 'http'
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_panko:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_panko
+          check: false
+          proxy:
+            host: ${_param:nginx_proxy_openstack_panko_host}
+            port: 8977
+            protocol: ${_param:nginx_proxy_openstack_panko_protocol}
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8977
+            address: ${_param:nginx_proxy_openstack_api_address}
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/placement.yml b/nginx/server/proxy/openstack/placement.yml
index eda272c..9e8b08c 100644
--- a/nginx/server/proxy/openstack/placement.yml
+++ b/nginx/server/proxy/openstack/placement.yml
@@ -3,6 +3,7 @@
     nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
     nginx_proxy_openstack_api_address: 0.0.0.0
     nginx_proxy_openstack_placement_host: ${_param:placement_service_host}
+    nginx_proxy_openstack_placement_protocol: 'http'
   nginx:
     server:
       enabled: true
@@ -14,7 +15,7 @@
           proxy:
             host: ${_param:nginx_proxy_openstack_placement_host}
             port: 8778
-            protocol: http
+            protocol: ${_param:nginx_proxy_openstack_placement_protocol}
           host:
             name: ${_param:nginx_proxy_openstack_api_host}
             port: 8778
diff --git a/nginx/server/proxy/openstack_api.yml b/nginx/server/proxy/openstack_api.yml
index 4f6073d..f9f363d 100644
--- a/nginx/server/proxy/openstack_api.yml
+++ b/nginx/server/proxy/openstack_api.yml
@@ -1,154 +1,11 @@
-parameters:
-  _param:
-    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
-    nginx_proxy_openstack_api_address: 0.0.0.0
-    nginx_proxy_openstack_keystone_host: ${_param:keystone_service_host}
-    nginx_proxy_openstack_nova_host: ${_param:nova_service_host}
-    nginx_proxy_openstack_cinder_host: ${_param:cinder_service_host}
-    nginx_proxy_openstack_glance_host: ${_param:glance_service_host}
-    nginx_proxy_openstack_neutron_host: ${_param:neutron_service_host}
-    nginx_proxy_openstack_heat_host: ${_param:heat_service_host}
-  nginx:
-    server:
-      enabled: true
-      site:
-        nginx_proxy_openstack_api_keystone:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_keystone
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_keystone_host}
-            port: 5000
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 5000
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_keystone_private:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_keystone_private
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_keystone_host}
-            port: 35357
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 35357
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_nova:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_nova
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_nova_host}
-            port: 8774
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 8774
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_cinder:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_cinder
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_cinder_host}
-            port: 8776
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 8776
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_glance:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_glance
-          check: false
-          underscores_in_headers: true
-          proxy:
-            host: ${_param:nginx_proxy_openstack_glance_host}
-            port: 9292
-            protocol: http
-            size: 30000m
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 9292
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_neutron:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_neutron
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_neutron_host}
-            port: 9696
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 9696
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_heat_cloudwatch:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_heat_cloudwatch
-          proxy:
-            host: ${_param:nginx_proxy_openstack_heat_host}
-            port: 8003
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 8003
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_heat_cfn:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_heat_cfn
-          proxy:
-            host: ${_param:nginx_proxy_openstack_heat_host}
-            port: 8000
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 8000
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_heat:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_heat
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_heat_host}
-            port: 8004
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 8004
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
-        nginx_proxy_openstack_api_nova_ec2:
-          enabled: true
-          type: nginx_proxy
-          name: openstack_api_nova_ec2
-          check: false
-          proxy:
-            host: ${_param:nginx_proxy_openstack_nova_host}
-            port: 8773
-            protocol: http
-          host:
-            name: ${_param:nginx_proxy_openstack_api_host}
-            port: 8773
-            address: ${_param:nginx_proxy_openstack_api_address}
-          ssl: ${_param:nginx_proxy_ssl}
+classes:
+- system.nginx.server.proxy.openstack.cinder
+- system.nginx.server.proxy.openstack.glance
+- system.nginx.server.proxy.openstack.heat
+- system.nginx.server.proxy.openstack.heat_cfn
+- system.nginx.server.proxy.openstack.heat_cloudwatch
+- system.nginx.server.proxy.openstack.keystone
+- system.nginx.server.proxy.openstack.keystone_private
+- system.nginx.server.proxy.openstack.neutron
+- system.nginx.server.proxy.openstack.nova
+- system.nginx.server.proxy.openstack.nova_ec2
diff --git a/nova/compute/cluster.yml b/nova/compute/cluster.yml
index 5d0e6a1..f32fffd 100644
--- a/nova/compute/cluster.yml
+++ b/nova/compute/cluster.yml
@@ -35,6 +35,7 @@
       7xDyBz85icFU0rceYQetwFH2p5tRL0GcUQhJmJFgIL0OXdCQvRNJrT3iS00N1aUo
       SG9MrLHCd5l60aCUQg0UA5ed7Hd6SA314k+HwxJno9/wJ+voBeacMg==
       -----END RSA PRIVATE KEY-----
+    cluster_internal_protocol: 'http'
   openssh:
     client:
       enabled: True
@@ -68,6 +69,7 @@
         user: nova
         password: ${_param:keystone_nova_password}
         tenant: service
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         port: 5672
@@ -82,6 +84,7 @@
         engine: glance
         host: ${_param:cluster_vip_address}
         port: 9292
+        protocol: ${_param:cluster_internal_protocol}
       network:
         engine: neutron
         region: ${_param:openstack_region}
@@ -90,6 +93,7 @@
         user: neutron
         tenant: service
         password: ${_param:keystone_neutron_password}
+        protocol: ${_param:cluster_internal_protocol}
       user:
         public_key: ${_param:nova_compute_ssh_public}
         private_key: ${_param:nova_compute_ssh_private}
diff --git a/nova/compute/single.yml b/nova/compute/single.yml
index b915145..483a1d3 100644
--- a/nova/compute/single.yml
+++ b/nova/compute/single.yml
@@ -35,6 +35,7 @@
       7xDyBz85icFU0rceYQetwFH2p5tRL0GcUQhJmJFgIL0OXdCQvRNJrT3iS00N1aUo
       SG9MrLHCd5l60aCUQg0UA5ed7Hd6SA314k+HwxJno9/wJ+voBeacMg==
       -----END RSA PRIVATE KEY-----
+    cluster_internal_protocol: 'http'
   openssh:
     client:
       enabled: True
@@ -66,6 +67,7 @@
         user: nova
         password: ${_param:keystone_nova_password}
         tenant: service
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         host: ${_param:control_address}
@@ -77,10 +79,12 @@
         engine: glance
         host: ${_param:control_address}
         port: 9292
+        protocol: ${_param:cluster_internal_protocol}
       network:
         engine: neutron
         host: ${_param:control_address}
         port: 9696
+        protocol: ${_param:cluster_internal_protocol}
       cache:
         engine: memcached
         members:
diff --git a/nova/compute_ironic/cluster.yml b/nova/compute_ironic/cluster.yml
index 2526373..885a869 100644
--- a/nova/compute_ironic/cluster.yml
+++ b/nova/compute_ironic/cluster.yml
@@ -1,6 +1,8 @@
 classes:
 - service.nova.compute.ironic
 parameters:
+  _param:
+    cluster_internal_protocol: 'http'
   nova:
     compute:
       version: ${_param:nova_version}
@@ -23,6 +25,7 @@
         user: nova
         password: ${_param:keystone_nova_password}
         tenant: service
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         port: 5672
@@ -41,6 +44,9 @@
         user: neutron
         tenant: service
         password: ${_param:keystone_neutron_password}
+        protocol: ${_param:cluster_internal_protocol}
+      glance:
+        protocol: ${_param:cluster_internal_protocol}
       ironic:
         region: ${_param:openstack_region}
         host: ${_param:ironic_service_host}
@@ -51,3 +57,4 @@
         auth_type: password
         project_domain_name: Default
         user_domain_name: Default
+        protocol: ${_param:cluster_internal_protocol}
diff --git a/nova/compute_ironic/single.yml b/nova/compute_ironic/single.yml
index 5c19023..69025d3 100644
--- a/nova/compute_ironic/single.yml
+++ b/nova/compute_ironic/single.yml
@@ -1,6 +1,8 @@
 classes:
 - service.nova.compute.ironic
 parameters:
+  _param:
+    cluster_internal_protocol: 'http'
   nova:
     compute:
       version: ${_param:nova_version}
@@ -23,6 +25,7 @@
         user: nova
         password: ${_param:keystone_nova_password}
         tenant: service
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         port: 5672
@@ -38,6 +41,9 @@
         user: neutron
         tenant: service
         password: ${_param:keystone_neutron_password}
+        protocol: ${_param:cluster_internal_protocol}
+      glance:
+        protocol: ${_param:cluster_internal_protocol}
       ironic:
         region: ${_param:openstack_region}
         host: ${_param:control_address}
@@ -45,3 +51,4 @@
         user: ironic
         tenant: service
         password: ${_param:keystone_ironic_password}
+        protocol: ${_param:cluster_internal_protocol}
diff --git a/nova/control/cluster.yml b/nova/control/cluster.yml
index f583156..be5f775 100644
--- a/nova/control/cluster.yml
+++ b/nova/control/cluster.yml
@@ -11,6 +11,7 @@
     nova_ram_allocation_ratio: 1.5
     nova_disk_allocation_ratio: 1.0
     metadata_password: metadataPass
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
@@ -50,6 +51,7 @@
         user: nova
         password: ${_param:keystone_nova_password}
         tenant: service
+        protocol: ${_param:cluster_internal_protocol}
       message_queue:
         engine: rabbitmq
         port: 5672
@@ -63,6 +65,7 @@
       glance:
         host: ${_param:cluster_vip_address}
         port: 9292
+        protocol: ${_param:cluster_internal_protocol}
       network:
         engine: neutron
         region: ${_param:openstack_region}
@@ -72,5 +75,6 @@
         port: 9696
         mtu: 1500
         tenant: service
+        protocol: ${_param:cluster_internal_protocol}
       metadata:
         password: ${_param:metadata_password}
diff --git a/nova/control/single.yml b/nova/control/single.yml
index c2aef10..ca21d05 100644
--- a/nova/control/single.yml
+++ b/nova/control/single.yml
@@ -1,6 +1,8 @@
 classes:
 - service.nova.control.single
 parameters:
+  _param:
+    cluster_internal_protocol: 'http'
   linux:
     system:
       package:
@@ -11,3 +13,9 @@
     controller:
       database:
         host: ${_param:single_address}
+      identity:
+        protocol: ${_param:cluster_internal_protocol}
+      network:
+        protocol: ${_param:cluster_internal_protocol}
+      glance:
+        protocol: ${_param:cluster_internal_protocol}
diff --git a/openssh/server/team/members/iudovichenko.yml b/openssh/server/team/members/iudovichenko.yml
new file mode 100644
index 0000000..d7e611d
--- /dev/null
+++ b/openssh/server/team/members/iudovichenko.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        iudovichenko:
+          enabled: true
+          name: iudovichenko
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Ivan Udovichenko
+          home: /home/iudovichenko
+          email: iudovichenko@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        iudovichenko:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1Dxt3m6w1jZjDxLJEWi2X5uXYZwpJVmfcOoXayofmxvdRyXe5OAEFZpdiPeCgwwcKZGvLjJ0/KXsoBuQw++XhdzZnE1+zaAjpB7fzkTQq4QRvEOMr3z16/AdJdYlqcZH4n3USUhahGdfhpCVDAo1YyYGDTzUH3r1DtYPAGbNiNgb7xu8H3iwp9UiI2t6kH3tx7db2wbVJ6HpnIlA1/Yj4W5j4Cz8f8MnG5oTnmZwT0hXwX/TCPyW56bHOGCAVpHINM+ZU4jUoHMUxjwd4mjMw4TIjID5b+ks91MdBhe/9IDRDrIUK2sK4h+S4ciuD6IAT637DD8/n8P6Vj8qDR0rP
+          user: ${linux:system:user:iudovichenko}
diff --git a/openssh/server/team/members/lmercl.yml b/openssh/server/team/members/lmercl.yml
index c735ed5..04be2f5 100644
--- a/openssh/server/team/members/lmercl.yml
+++ b/openssh/server/team/members/lmercl.yml
@@ -17,4 +17,5 @@
           enabled: true
           public_keys:
             - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCy6mFrr4oNdLjT5wBZj1+KXNpdawnGGWEevDBQ2SWFjxBFujkWVLiW1kxLTpLVSnuoE5FB7doRIsT/CDe9IU5OhsJ+z6TT56R/pfVKrVnSB1rgrwqdezjgmYEM6kTWiH2GKJE0yiQEPgagK8Rz5Zl420JkhbFWnL7EGPhxNtmYMGDTZwUTzP0KYmytyeH15OqNIiBGTrp1t2bTrVB8HRnUp0uDpfoWAUnsijVGNe1j1bNKtDO0Z9LAWx3eUyxIk4cdpX/EeWJg8jNrSMxtAZZ7Hhm/WInNSNqcHcZ1rEYCAjENxo1WVOuA/aqUqc5xaAipWNon4Rk0e0IUAaFOfLvN2lIuilUZ5XKHDe7a2crkGPnotheT9FgaEHOeFtpuhSaygeZHTMR197jeocgjWIkPqHjVAGSQqQf0TAdNuN73QPTigbbfHWWc1d8KlCM5BqJUXMHPG6BasE1sI/4ykYbxN/DAEvVJ4+rdIlqSdedd73ZAseVQjDtpzD8diScGrpdOhZnTm43q89F8dIFv7tt1TjIwvfcDQNSBjyyKcYpj+NTyW2Zk7qWDVz+lzH0ToYk/rOKkGlrsRy7OwOnmyKR8IcIOL7Bowj895ThCX8tBrdLu/m55ojBOcZiCpawCm7K55ri1Ar6i8cO+bHDh11kKRa/utRRSQTpsW0sbCsamzQ== lubos@lubos-ThinkPad-X1
-          user: ${linux:system:user:lmercl}
\ No newline at end of file
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZFmRirw1DHtY8VQDfnZDEi1tWhW4lHWaCq3T14K2HtU17ulJB4KbonMWZLiqFsX44okKM7FOiR9L5ij417CRytlzuHSJebnDj6kppE+lslvfd8TdTTVmvQ7rLj+mdvsRmNVRnou1JPlhryJFshZSsfonn6s6AlAWW4RHx9a8kWuYplObGdUQN9pXReDso9UjeOOuPVmtpfvBXgljHEa/IyAAk47CTe7vVTggauWTVIB+F3zmL2KPFEKGBvd6Ac/wOdirHgV5YgR9LT81hZ9p6TZXkfbIGOl+K6dOIgGqGykn77qloTnKUTSPMWJz11xgwE3sv314ZZ6oZvhCVCcLX lmercl@Luboss-MacBook-Pro.local
+          user: ${linux:system:user:lmercl}
diff --git a/openssh/server/team/oscore_devops.yml b/openssh/server/team/oscore_devops.yml
index b5505a8..49207eb 100644
--- a/openssh/server/team/oscore_devops.yml
+++ b/openssh/server/team/oscore_devops.yml
@@ -3,6 +3,7 @@
 - system.openssh.server.team.members.vsaienko
 - system.openssh.server.team.members.vnogin
 - system.openssh.server.team.members.mkarpin
+- system.openssh.server.team.members.iudovichenko
 parameters:
   _param:
     linux_system_user_sudo: true
diff --git a/openssh/server/team/qa_scale.yml b/openssh/server/team/qa_scale.yml
index 98c5540..0414e35 100644
--- a/openssh/server/team/qa_scale.yml
+++ b/openssh/server/team/qa_scale.yml
@@ -2,6 +2,7 @@
 - system.openssh.server.team.members.listomin
 - system.openssh.server.team.members.sgalkin
 - system.openssh.server.team.members.obasov
+- system.openssh.server.team.members.mikhailkraynov
 
 parameters:
   _param:
diff --git a/openssh/server/team/stacklight.yml b/openssh/server/team/stacklight.yml
index b46ac24..032466b 100644
--- a/openssh/server/team/stacklight.yml
+++ b/openssh/server/team/stacklight.yml
@@ -109,6 +109,20 @@
           full_name: Christian Huebner
           home: /home/crh
           email: chuebner@mirantis.com
+        mmatuszkowiak:
+          enabled: true
+          name: mmatuszkowiak
+          sudo: true
+          full_name: Mateusz Matuszkowiak
+          home: /home/mmatuszkowiak
+          email: mmatuszkowiak@mirantis.com
+        mkobus:
+          enabled: true
+          name: mkobus
+          sudo: true
+          full_name: Michal Kobus
+          home: /home/mkobus
+          email: mkobus@mirantis.com
   openssh:
     client:
       enabled: true
@@ -190,6 +204,16 @@
           public_keys:
           - ${public_keys:crh}
           user: ${linux:system:user:crh}
+        mmatuszkowiak:
+          enabled: true
+          public_keys:
+          - ${public_keys:mmatuszkowiak}
+          user: ${linux:system:user:mmatuszkowiak}
+        mkobus:
+          enabled: true
+          public_keys:
+          - ${public_keys:mkobus}
+          user: ${linux:system:user:mkobus}
   public_keys:
     newt:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3odU+3V2uDA2ptAFL9hrJRPNEEdAyztWOZFQ5Oyd9oerTGOU3p4xmrgWWjfKFKbYGhiiIUcYAol5PkTfKukGEkkjCHYA1t023soCaaAj85wCZCnw2zQNAziwxTYmAzTqgxiSvtZNMMrtJvFHRIRDzJ3M1lV0prWNWkMM1/3FAd4W49y6VT3fkMCo8uqG7CfGdgR2DgBCxf9KaNPfW5eDEPOgmE5lK8tVSEI6T+Cg7hbcTf4lFYnlFBnlQgp/0JstsM4Vbwb4B34LOpOsf2S8rrWk2xQMjwaMHXkc2s/E8iW3F5nVFuyEXYISFQIiAHw8dzC6CHgLcyHUVWwznKawZ newt@newt-dev1
@@ -221,3 +245,7 @@
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMdgjQ/jeWwQTaPyy7G5JJAkM+QPNPFkzMldPHJzOxEBzt/M5zAooj0XgbRIDIztolhXhmj8N5QSG5n3Wn9T9e2KpoxrLaVhMV5WGTgMrXMmyT8oXLV3gLxGNHMWFvplSbHLK78EsZQQ1/kBQMyPXB1+FpIuSHVOxaospOQObJ08lvQfvlO7AUUV4ecpFj3PpV5vkKPRS+KfiRm84BeGIu51BL1BClZcOyHZPBQT+DUBjm8y4Nd7pVZRjsiBzZBvUotCbn5+RqWJnu4kyoGoRNmk8pvCx7jGL1G9rE8NNsKlCUWedvyNkDeoWKvleJuzkj3ggfuCj/iTtDoXFR95e3
     crh:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjW4PSMoILjoZWDM8RnbiW6HXHBFntnDd6jgAlokJhTpYIjzUHpoh/OqphraKbNFnPbzL2nkIbaKZqKj+uuvbsitHnApmdFgSpOmBRGeaSExA30GqweYrIMKN5JAQTbONZWLSm+LD689CXRv2s6Th/YMELYfoi2W0pkvwiBdr+/0NxpdRvJydCn36SE6wOigu4uJXIXeNqIjTD+x4sW6GB54Ugbg+SMmI9D5ONlmfEj8K/ZmG1THdPGOLlquy/VLiuOBuwNoJCBV9shsGEmdg8NiOu8NPupQlsbmClZDbBAklJ0AF6ElAwKSiqCOhbaa7hu4qJFrCKC+XAgYxS9t7r
+    mmatuszkowiak:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC6TGCQAH3FGNSOhSbovhwODabOAsgVqG71rEDdXvDSShwyNB3RIICefas3mdSLsG7+1K9mZ1jicWzNbotvePwzrM/MESzntzp4QZ5J/9L3BMiqWWKL2u6BQ65LGe0YMzMmdSkqMAj0uxt3+OiFDPDrwqH6qN0hwxAJM+byeUlQW8uWQYm/pmWMD60GUrnjYUfKfEa/S3symaZBHQvjtp26De8D6u/jr4TWi5VJpKqVREqU7Z4IKwn8JvHMmUbRO4endW3cRiv35Qb7s66rO6TD0KlDFnnTxOtFvLhL51j58X4MrV9FHUI6czoqjAgEDe9CW7DzZ1xMj03d6IAipgL
+    mkobus:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDCBqe3X+LrneiuieWGjlw5wRtgixBu2Q8LZjH6W+8nsOkB7iN6qRdKom3jac1Cdd5wSJ0NFAhDNcTLK4Etz/3YACglsTxk09TzXlqs1V0Y7U5a2eqn3KTOgMNsJ1aOhFq/LnmUwTdN8NXac6TIkwZZBj5KhHSvIoO+mfsascct5FIVU/+p32d3o/4NqMDDdTg/qxIMKQsh5sw5Y9Tz9h28LGbDh+QF2lW+b5YJhnCG21Uw17xcyxf3/53EpJwTXfElonSR7HMVLxrq7oDzmqKFZ2z8i9do6EgODKlZpSkxiAFOBw5oA2hPtEeqtXqvddu2FcNGuSNhx/6O8ZHIKq3Xh/tTOYnoc+qYDMRCzDwzeyivfr5Ci3n64giUaZl+KUr6D1CKeL2s8j9+kod/1JJDEeoYR+V93MTiTD/39N8eQAGv+6r9HBapXIkvr3iNuTH1+5eN36Vc90jXXRmGMZkF5P9ivNGDZGcy2pBwwPg/bRn2xb0zx1fsxd4qOi+Cd7mBCF4+SfnVCqUd2H9R0O3S7WgfLr+wOXpFq6/WwgjzI9RVhLJ5cZmePJKvYZYYhkAxsVwWSE639zFFuU1zhFXr49wa0njK9DdYWiQEhOki0ki3huABmVbWKg/zP1Rlllmtk0S4mwggJ57JYbuhEV3a1x1KOtWMzODW5cb3HlPTQw==
diff --git a/panko/server/cluster.yml b/panko/server/cluster.yml
new file mode 100644
index 0000000..c258c9a
--- /dev/null
+++ b/panko/server/cluster.yml
@@ -0,0 +1,26 @@
+classes:
+- service.panko.server.cluster
+- service.haproxy.proxy.single
+- system.apache.server.site.panko
+- system.haproxy.proxy.listen.openstack.panko
+- system.keepalived.cluster.instance.openstack_telemetry_vip
+parameters:
+  _param:
+    panko_memcached_node01_address: ${_param:cluster_node01_address}
+    panko_memcached_node02_address: ${_param:cluster_node02_address}
+    panko_memcached_node03_address: ${_param:cluster_node03_address}
+  panko:
+    server:
+      identity:
+        host: ${_param:openstack_control_address}
+      database:
+        host: ${_param:openstack_database_address}
+      cache:
+        engine: memcached
+        members:
+        - host: ${_param:panko_memcached_node01_address}
+          port: 11211
+        - host: ${_param:panko_memcached_node02_address}
+          port: 11211
+        - host: ${_param:panko_memcached_node03_address}
+          port: 11211
\ No newline at end of file
diff --git a/prometheus/alertmanager/notification/pushkin.yml b/prometheus/alertmanager/notification/pushkin.yml
index dd4f760..a78b6fd 100644
--- a/prometheus/alertmanager/notification/pushkin.yml
+++ b/prometheus/alertmanager/notification/pushkin.yml
@@ -10,9 +10,7 @@
           routes:
             pushkin:
               receiver: HTTP-pushkin
-              match_re:
-                - label: route
-                  value:  .+?
+              continue: true
         receiver:
           HTTP-pushkin:
             enabled: true
diff --git a/prometheus/alertmanager/notification/slack.yml b/prometheus/alertmanager/notification/slack.yml
index c33e013..2158adb 100644
--- a/prometheus/alertmanager/notification/slack.yml
+++ b/prometheus/alertmanager/notification/slack.yml
@@ -6,9 +6,6 @@
           routes:
             slack:
               receiver: HTTP-slack
-              match_re:
-                - label: route
-                  value: slack
         receiver:
           HTTP-slack:
             enabled: true
diff --git a/prometheus/relay/init.yml b/prometheus/relay/init.yml
new file mode 100644
index 0000000..a240458
--- /dev/null
+++ b/prometheus/relay/init.yml
@@ -0,0 +1,3 @@
+classes:
+ - service.prometheus.relay
+ - service.prometheus.relay.cluster
diff --git a/prometheus/server/alert/etcd.yml b/prometheus/server/alert/etcd.yml
new file mode 100644
index 0000000..9c456ab
--- /dev/null
+++ b/prometheus/server/alert/etcd.yml
@@ -0,0 +1,140 @@
+parameters:
+  prometheus:
+    server:
+        alert:
+          InsufficientMembers:
+            if: >-
+              count(up{job="etcd"} == 0) > (count(up{job="etcd"}) / 2 - 1)
+            for: 3m
+            labels:
+              severity: critical
+            annotations:
+              description: 'If one more etcd member goes down the cluster will be unavailable'
+              summary: 'etcd cluster insufficient members'
+          NoLeader:
+            if: >-
+              etcd_server_has_leader{job="etcd"} == 0
+            for: 1m
+            labels:
+              severity: critical
+            annotations:
+              description: 'etcd member {{ $labels.instance }} has no leader'
+              summary: 'etcd member has no leader'
+          HighNumberOfLeaderChanges:
+            if: >-
+              increase(etcd_server_leader_changes_seen_total{job="etcd"}[1h]) > 3
+            labels:
+              severity: warning
+            annotations:
+              description: 'etcd instance {{ $labels.instance }} has seen {{ $value }} leader changes within the last hour'
+              summary: 'a high number of leader changes within the etcd cluster are happening'
+          HighNumberOfFailedGRPCRequests:
+            if: >-
+              sum(rate(grpc_server_handled_total{grpc_code!="OK",job="etcd"}[5m])) BY (grpc_service, grpc_method) / sum(rate(grpc_server_handled_total{job="etcd"}[5m])) BY (grpc_service, grpc_method) > 0.01
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: '{{ $value }}% of requests for {{ $labels.grpc_method }} failed on etcd instance {{ $labels.instance }}'
+              summary: 'a high number of gRPC requests are failing'
+          HighNumberOfFailedGRPCRequests:
+            if: >-
+              sum(rate(grpc_server_handled_total{grpc_code!="OK",job="etcd"}[5m])) BY (grpc_service, grpc_method) / sum(rate(grpc_server_handled_total{job="etcd"}[5m])) BY (grpc_service, grpc_method) > 0.05
+            for: 5m
+            labels:
+              severity: critical
+            annotations:
+              description: '{{ $value }}% of requests for {{ $labels.grpc_method }} failed on etcd instance {{ $labels.instance }}'
+              summary: 'a high number of gRPC requests are failing'
+          GRPCRequestsSlow:
+            if: >-
+              histogram_quantile(0.99, sum(rate(grpc_server_handling_seconds_bucket{job="etcd",grpc_type="unary"}[5m])) by (grpc_service, grpc_method, le)) > 0.15
+            for: 10m
+            labels:
+              severity: critical
+            annotations:
+              description: 'on etcd instance {{ $labels.instance }} gRPC requests to {{ $labels.grpc_method }} are slow'
+              summary: 'slow gRPC requests'
+          HighNumberOfFailedHTTPRequests:
+            if: >-
+              sum(rate(etcd_http_failed_total{job="etcd"}[5m])) BY (method) / sum(rate(etcd_http_received_total{job="etcd"}[5m])) BY (method) > 0.01
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: '{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}'
+              summary: 'a high number of HTTP requests are failing'
+          HighNumberOfFailedHTTPRequests:
+            if: >-
+              sum(rate(etcd_http_failed_total{job="etcd"}[5m])) BY (method) / sum(rate(etcd_http_received_total{job="etcd"}[5m])) BY (method) > 0.05
+            for: 5m
+            labels:
+              severity: critical
+            annotations:
+              description: '{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}'
+              summary: 'a high number of HTTP requests are failing'
+          HTTPRequestsSlow:
+            if: >-
+              histogram_quantile(0.99, rate(etcd_http_successful_duration_seconds_bucket[5m])) > 0.15
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: 'on etcd instance {{ $labels.instance }} HTTP requests to {{ $labels.method }} are slow'
+              summary: 'slow HTTP requests'
+            record: instance:fd_utilization
+            if: >-
+              process_open_fds / process_max_fds
+          FdExhaustionClose:
+            if: >-
+              predict_linear(instance:fd_utilization[1h], 3600 * 4) > 1
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: '{{ $labels.job }} instance {{ $labels.instance }} will exhaust its file descriptors soon'
+              summary: 'file descriptors soon exhausted'
+          FdExhaustionClose:
+            if: >-
+              predict_linear(instance:fd_utilization[10m], 3600) > 1
+            for: 10m
+            labels:
+              severity: critical
+            annotations:
+              description: '{{ $labels.job }} instance {{ $labels.instance }} will exhaust its file descriptors soon'
+              summary: 'file descriptors soon exhausted'
+          EtcdMemberCommunicationSlow:
+            if: >-
+              histogram_quantile(0.99, rate(etcd_network_member_round_trip_time_seconds_bucket[5m])) > 0.15
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: 'etcd instance {{ $labels.instance }} member communication with {{ $labels.To }} is slow'
+              summary: 'etcd member communication is slow'
+          HighNumberOfFailedProposals:
+            if: >-
+              increase(etcd_server_proposals_failed_total{job="etcd"}[1h]) > 5
+            labels:
+              severity: warning
+            annotations:
+              description: 'etcd instance {{ $labels.instance }} has seen {{ $value }} proposal failures within the last hour'
+              summary: 'a high number of proposals within the etcd cluster are failing'
+          HighFsyncDurations:
+            if: >-
+              histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m])) > 0.5
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: 'etcd instance {{ $labels.instance }} fync durations are high'
+              summary: 'high fsync durations'
+          HighCommitDurations:
+            if: >-
+              histogram_quantile(0.99, rate(etcd_disk_backend_commit_duration_seconds_bucket[5m])) > 0.25
+            for: 10m
+            labels:
+              severity: warning
+            annotations:
+              description: 'etcd instance {{ $labels.instance }} commit durations are high'
+              summary: 'high commit durations'
diff --git a/prometheus/server/standalone.yml b/prometheus/server/standalone.yml
new file mode 100644
index 0000000..cdddb9a
--- /dev/null
+++ b/prometheus/server/standalone.yml
@@ -0,0 +1,7 @@
+classes:
+- service.prometheus.server.standalone
+parameters:
+  prometheus:
+    server:
+      version: 2.0
+
diff --git a/prometheus/server/target/dns.yml b/prometheus/server/target/dns.yml
deleted file mode 100644
index e2745f1..0000000
--- a/prometheus/server/target/dns.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-parameters:
-  prometheus:
-    server:
-      target:
-        dns:
-          enabled: true
-          endpoint:
-            - name: 'pushgateway'
-              domain:
-              - 'tasks.monitoring_pushgateway'
-              type: A
-              port: ${prometheus:pushgateway:bind:port}
-            - name: 'prometheus'
-              domain:
-              - 'tasks.monitoring_server'
-              type: A
-              port: ${prometheus:server:bind:port}
-            - name: 'alertmanager'
-              domain:
-              - 'tasks.monitoring_alertmanager'
-              type: A
-              port: ${prometheus:alertmanager:bind:port}
-            - name: 'remote_agent'
-              domain:
-              - 'tasks.monitoring_remote_agent'
-              type: A
-              port: ${telegraf:remote_agent:output:prometheus_client:bind:port}
-            - name: 'remote_storage_adapter'
-              domain:
-              - 'tasks.monitoring_remote_storage_adapter'
-              type: A
-              port: ${prometheus:remote_storage_adapter:bind:port}
diff --git a/prometheus/server/target/dns/alertmanager.yml b/prometheus/server/target/dns/alertmanager.yml
new file mode 100644
index 0000000..78172d1
--- /dev/null
+++ b/prometheus/server/target/dns/alertmanager.yml
@@ -0,0 +1,12 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        dns:
+          enabled: true
+          endpoint:
+            - name: 'alertmanager'
+              domain:
+              - 'tasks.monitoring_alertmanager'
+              type: A
+              port: ${prometheus:alertmanager:bind:port}
diff --git a/prometheus/server/target/dns/init.yml b/prometheus/server/target/dns/init.yml
new file mode 100644
index 0000000..361d296
--- /dev/null
+++ b/prometheus/server/target/dns/init.yml
@@ -0,0 +1,6 @@
+classes:
+- system.prometheus.server.target.dns.alertmanager
+- system.prometheus.server.target.dns.prometheus
+- system.prometheus.server.target.dns.pushgateway
+- system.prometheus.server.target.dns.remote_agent
+- system.prometheus.server.target.dns.remote_storage_adapter
diff --git a/prometheus/server/target/dns/prometheus.yml b/prometheus/server/target/dns/prometheus.yml
new file mode 100644
index 0000000..abffe03
--- /dev/null
+++ b/prometheus/server/target/dns/prometheus.yml
@@ -0,0 +1,12 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        dns:
+          enabled: true
+          endpoint:
+            - name: 'prometheus'
+              domain:
+              - 'tasks.monitoring_server'
+              type: A
+              port: ${prometheus:server:bind:port}
diff --git a/prometheus/server/target/dns/pushgateway.yml b/prometheus/server/target/dns/pushgateway.yml
new file mode 100644
index 0000000..9022fa7
--- /dev/null
+++ b/prometheus/server/target/dns/pushgateway.yml
@@ -0,0 +1,12 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        dns:
+          enabled: true
+          endpoint:
+            - name: 'pushgateway'
+              domain:
+              - 'tasks.monitoring_pushgateway'
+              type: A
+              port: ${prometheus:pushgateway:bind:port}
\ No newline at end of file
diff --git a/prometheus/server/target/dns/remote_agent.yml b/prometheus/server/target/dns/remote_agent.yml
new file mode 100644
index 0000000..6801ffc
--- /dev/null
+++ b/prometheus/server/target/dns/remote_agent.yml
@@ -0,0 +1,12 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        dns:
+          enabled: true
+          endpoint:
+            - name: 'remote_agent'
+              domain:
+              - 'tasks.monitoring_remote_agent'
+              type: A
+              port: ${telegraf:remote_agent:output:prometheus_client:bind:port}
diff --git a/prometheus/server/target/dns/remote_storage_adapter.yml b/prometheus/server/target/dns/remote_storage_adapter.yml
new file mode 100644
index 0000000..618f438
--- /dev/null
+++ b/prometheus/server/target/dns/remote_storage_adapter.yml
@@ -0,0 +1,12 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        dns:
+          enabled: true
+          endpoint:
+            - name: 'remote_storage_adapter'
+              domain:
+              - 'tasks.monitoring_remote_storage_adapter'
+              type: A
+              port: ${prometheus:remote_storage_adapter:bind:port}
diff --git a/prometheus/server/target/federation/all_metrics.yml b/prometheus/server/target/federation/all_metrics.yml
new file mode 100644
index 0000000..f6a4ae3
--- /dev/null
+++ b/prometheus/server/target/federation/all_metrics.yml
@@ -0,0 +1,9 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        static:
+          prometheus_federation:
+            params:
+              match[]:
+                - '{__name__=~".+"}'
diff --git a/prometheus/server/target/federation/init.yml b/prometheus/server/target/federation/init.yml
new file mode 100644
index 0000000..564af82
--- /dev/null
+++ b/prometheus/server/target/federation/init.yml
@@ -0,0 +1,17 @@
+parameters:
+  prometheus:
+    server:
+      target:
+        static:
+          prometheus:
+            endpoint:
+             - address: 127.0.0.1
+               port: ${prometheus:server:bind:port}
+          prometheus_federation:
+            honor_labels: true
+            metrics_path: '/federate'
+            scrape_interval: 15s
+            scrape_timeout: 15s
+            endpoint:
+             - address: ${_param:stacklight_monitor_address}
+               port: 15010
diff --git a/prometheus/server/target/static/etcd.yml b/prometheus/server/target/static/etcd.yml
new file mode 100644
index 0000000..61488b5
--- /dev/null
+++ b/prometheus/server/target/static/etcd.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    prometheus_etcd_host: ${_param:haproxy_bind_address}
+    prometheus_etcd_port: 4001
+  prometheus:
+    server:
+      target:
+        static:
+          etcd:
+            enabled: true
+            endpoint:
+            - address: ${_param:prometheus_etcd_host}
+              port: ${_param:prometheus_etcd_port}
diff --git a/prometheus/server/target/static/kqueen.yml b/prometheus/server/target/static/kqueen.yml
new file mode 100644
index 0000000..701f4cd
--- /dev/null
+++ b/prometheus/server/target/static/kqueen.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    prometheus_kqueen_api_host: ${_param:haproxy_bind_address}
+    prometheus_kqueen_api_port: 5000
+  prometheus:
+    server:
+      target:
+        static:
+          kqueen:
+            enabled: true
+            endpoint:
+            - address: ${_param:prometheus_kqueen_api_host}
+              port: ${_param:prometheus_kqueen_api_port}
diff --git a/reclass/storage/system/opendaylight_control_single.yml b/reclass/storage/system/opendaylight_control_single.yml
new file mode 100644
index 0000000..ad809f5
--- /dev/null
+++ b/reclass/storage/system/opendaylight_control_single.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    opendaylight_control_hostname: odl01
+  reclass:
+    storage:
+      node:
+        opendaylight_control_node01:
+          name: ${_param:opendaylight_control_hostname}
+          domain: ${_param:cluster_domain}
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:opendaylight_service_host}
diff --git a/reclass/storage/system/openstack_share_multi.yml b/reclass/storage/system/openstack_share_multi.yml
new file mode 100644
index 0000000..a70af28
--- /dev/null
+++ b/reclass/storage/system/openstack_share_multi.yml
@@ -0,0 +1,42 @@
+parameters:
+  _param:
+    openstack_share_node01_hostname: share01
+    openstack_share_node02_hostname: share02
+    openstack_share_node03_hostname: share03
+
+    openstack_share_node01_share_address: ${_param:single_address}
+    openstack_share_node02_share_address: ${_param:single_address}
+    openstack_share_node03_share_address: ${_param:single_address}
+  reclass:
+    storage:
+      node:
+        openstack_share_node01:
+          name: ${_param:openstack_share_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.share
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_share_node01_address}
+            manila_share_address: ${_param:openstack_share_node01_share_address}
+        openstack_share_node02:
+          name: ${_param:openstack_share_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.share
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_share_node02_address}
+            manila_share_address: ${_param:openstack_share_node02_share_address}
+        openstack_share_node03:
+          name: ${_param:openstack_share_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.share
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_share_node03_address}
+            manila_share_address: ${_param:openstack_share_node03_share_address}
diff --git a/reclass/storage/system/openstack_share_single.yml b/reclass/storage/system/openstack_share_single.yml
new file mode 100644
index 0000000..fca56f2
--- /dev/null
+++ b/reclass/storage/system/openstack_share_single.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    openstack_share_node01_hostname: share01
+  reclass:
+    storage:
+      node:
+        openstack_share_node01:
+          name: ${_param:openstack_share_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.share
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_share_node01_address}
+            manila_share_address: ${_param:openstack_share_node01_share_address}
diff --git a/salt/control/sizes/ceph.yml b/salt/control/sizes/ceph.yml
new file mode 100644
index 0000000..a4be9c9
--- /dev/null
+++ b/salt/control/sizes/ceph.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    salt_control_size_cpu_ceph_mon: 8
+    salt_control_size_ram_ceph_mon: 16384
+    salt_control_size_disk_profile_ceph_mon: large
+    salt_control_size_net_profile_ceph_mon: default
+    salt_control_size_cpu_ceph_rgw: 8
+    salt_control_size_ram_ceph_rgw: 16384
+    salt_control_size_disk_profile_ceph_rgw: small
+    salt_control_size_net_profile_ceph_rgw: default
+  salt:
+    control:
+      size:
+        ceph.mon:
+          cpu: ${_param:salt_control_size_cpu_ceph_mon}
+          ram: ${_param:salt_control_size_ram_ceph_mon}
+          disk_profile: ${_param:salt_control_size_disk_profile_ceph_mon}
+          net_profile: ${_param:salt_control_size_net_profile_ceph_mon}
+        ceph.rgw:
+          cpu: ${_param:salt_control_size_cpu_ceph_rgw}
+          ram: ${_param:salt_control_size_ram_ceph_rgw}
+          disk_profile: ${_param:salt_control_size_disk_profile_ceph_rgw}
+          net_profile: ${_param:salt_control_size_net_profile_ceph_rgw}
diff --git a/salt/control/sizes/cicd.yml b/salt/control/sizes/cicd.yml
new file mode 100644
index 0000000..a2ada77
--- /dev/null
+++ b/salt/control/sizes/cicd.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_control_size_cpu_cicd_control: 8
+    salt_control_size_ram_cicd_control: 32768
+    salt_control_size_disk_profile_cicd_control: huge
+    salt_control_size_net_profile_cicd_control: default
+  salt:
+    control:
+      size:
+        cicd.control:
+          cpu: ${_param:salt_control_size_cpu_cicd_control}
+          ram: ${_param:salt_control_size_ram_cicd_control}
+          disk_profile: ${_param:salt_control_size_disk_profile_cicd_control}
+          net_profile: ${_param:salt_control_size_net_profile_cicd_control}
diff --git a/salt/control/sizes/opencontrail.yml b/salt/control/sizes/opencontrail.yml
new file mode 100644
index 0000000..41b858d
--- /dev/null
+++ b/salt/control/sizes/opencontrail.yml
@@ -0,0 +1,23 @@
+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: huge
+    salt_control_size_net_profile_opencontrail_analytics: default
+  salt:
+    control:
+      size:
+        opencontrail.control:
+          cpu: ${_param:salt_control_size_cpu_opencontrail_control}
+          ram: ${_param:salt_control_size_ram_opencontrail_control}
+          disk_profile: ${_param:salt_control_size_disk_profile_opencontrail_control}
+          net_profile: ${_param:salt_control_size_net_profile_opencontrail_control}
+        opencontrail.analytics:
+          cpu: ${_param:salt_control_size_cpu_opencontrail_analytics}
+          ram: ${_param:salt_control_size_ram_opencontrail_analytics}
+          disk_profile: ${_param:salt_control_size_disk_profile_opencontrail_analytics}
+          net_profile: ${_param:salt_control_size_net_profile_opencontrail_analytics}
diff --git a/salt/control/sizes/openstack.yml b/salt/control/sizes/openstack.yml
new file mode 100644
index 0000000..b75161b
--- /dev/null
+++ b/salt/control/sizes/openstack.yml
@@ -0,0 +1,50 @@
+parameters:
+  _param:
+    salt_control_size_cpu_openstack_control: 8
+    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: 32768
+    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: 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: 16384
+    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
+  salt:
+    control:
+      size:
+        openstack.control:
+          cpu: ${_param:salt_control_size_cpu_openstack_control}
+          ram: ${_param:salt_control_size_ram_openstack_control}
+          disk_profile: ${_param:salt_control_size_disk_profile_openstack_control}
+          net_profile: ${_param:salt_control_size_net_profile_openstack_control}
+        openstack.database:
+          cpu: ${_param:salt_control_size_cpu_openstack_database}
+          ram: ${_param:salt_control_size_ram_openstack_database}
+          disk_profile: ${_param:salt_control_size_disk_profile_openstack_database}
+          net_profile: ${_param:salt_control_size_net_profile_openstack_database}
+        openstack.message_queue:
+          cpu: ${_param:salt_control_size_cpu_openstack_message_queue}
+          ram: ${_param:salt_control_size_ram_openstack_message_queue}
+          disk_profile: ${_param:salt_control_size_disk_profile_openstack_message_queue}
+          net_profile: ${_param:salt_control_size_net_profile_openstack_message_queue}
+        openstack.proxy:
+          cpu: ${_param:salt_control_size_cpu_openstack_proxy}
+          ram: ${_param:salt_control_size_ram_openstack_proxy}
+          disk_profile: ${_param:salt_control_size_disk_profile_openstack_proxy}
+          net_profile: ${_param:salt_control_size_net_profile_openstack_proxy}
+        openstack.upgrade:
+          cpu: ${_param:salt_control_size_cpu_openstack_upgrade}
+          ram: ${_param:salt_control_size_ram_openstack_upgrade}
+          disk_profile: ${_param:salt_control_size_disk_profile_openstack_upgrade}
+          net_profile: ${_param:salt_control_size_net_profile_openstack_upgrade}
diff --git a/salt/control/sizes/stacklight.yml b/salt/control/sizes/stacklight.yml
new file mode 100644
index 0000000..5b09c14
--- /dev/null
+++ b/salt/control/sizes/stacklight.yml
@@ -0,0 +1,32 @@
+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_telemetryr: huge
+    salt_control_size_net_profile_stacklight_telemetry: default
+  salt:
+    control:
+      size:
+        stacklight.log:
+          cpu: ${_param:salt_control_size_cpu_stacklight_log}
+          ram: ${_param:salt_control_size_ram_stacklight_log}
+          disk_profile: ${_param:salt_control_size_disk_profile_stacklight_log}
+          net_profile: ${_param:salt_control_size_net_profile_stacklight_log}
+        stacklight.server:
+          cpu: ${_param:salt_control_size_cpu_stacklight_server}
+          ram: ${_param:salt_control_size_ram_stacklight_server}
+          disk_profile: ${_param:salt_control_size_disk_profile_stacklight_server}
+          net_profile: ${_param:salt_control_size_net_profile_stacklight_server}
+        stacklight.telemetry:
+          cpu: ${_param:salt_control_size_cpu_stacklight_telemetry}
+          ram: ${_param:salt_control_size_ram_stacklight_telemetry}
+          disk_profile: ${_param:salt_control_size_disk_profile_stacklight_telemetry}
+          net_profile: ${_param:salt_control_size_net_profile_stacklight_telemetry}
\ No newline at end of file
diff --git a/salt/master/formula/git/dogtag.yml b/salt/master/formula/git/dogtag.yml
new file mode 100644
index 0000000..d4cac8c
--- /dev/null
+++ b/salt/master/formula/git/dogtag.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            dogtag:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-dogtag.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/git/gnocchi.yml b/salt/master/formula/git/gnocchi.yml
new file mode 100644
index 0000000..53d2f56
--- /dev/null
+++ b/salt/master/formula/git/gnocchi.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            gnocchi:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-gnocchi.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/git/manila.yml b/salt/master/formula/git/manila.yml
new file mode 100644
index 0000000..b9cf3e0
--- /dev/null
+++ b/salt/master/formula/git/manila.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            manila:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-manila.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/git/panko.yml b/salt/master/formula/git/panko.yml
new file mode 100644
index 0000000..045331b
--- /dev/null
+++ b/salt/master/formula/git/panko.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            panko:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-panko.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/pkg/dogtag.yml b/salt/master/formula/pkg/dogtag.yml
new file mode 100644
index 0000000..5ae4b28
--- /dev/null
+++ b/salt/master/formula/pkg/dogtag.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            dogtag:
+              source: pkg
+              name: salt-formula-dogtag
diff --git a/salt/master/formula/pkg/gnocchi.yml b/salt/master/formula/pkg/gnocchi.yml
new file mode 100644
index 0000000..2f49b99
--- /dev/null
+++ b/salt/master/formula/pkg/gnocchi.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            gnocchi:
+              source: pkg
+              name: salt-formula-gnocchi
diff --git a/salt/master/formula/pkg/manila.yml b/salt/master/formula/pkg/manila.yml
new file mode 100644
index 0000000..4777a36
--- /dev/null
+++ b/salt/master/formula/pkg/manila.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            manila:
+              source: pkg
+              name: salt-formula-manila
diff --git a/salt/master/formula/pkg/panko.yml b/salt/master/formula/pkg/panko.yml
new file mode 100644
index 0000000..d4d8b8f
--- /dev/null
+++ b/salt/master/formula/pkg/panko.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            panko:
+              source: pkg
+              name: salt-formula-panko
diff --git a/salt/master/single.yml b/salt/master/single.yml
index 9764a97..fbb32f2 100644
--- a/salt/master/single.yml
+++ b/salt/master/single.yml
@@ -13,7 +13,8 @@
     master:
       accept_policy: auto_accept
       worker_threads: 40
+      max_open_files: 15000
       command_timeout: 10
       peer:
         '.*':
-          - x509.sign_remote_certificate
+          - x509.sign_remote_certificate
\ No newline at end of file
diff --git a/salt/minion/single.yml b/salt/minion/single.yml
new file mode 100644
index 0000000..9d20aff
--- /dev/null
+++ b/salt/minion/single.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    minion:
+      acceptance_wait_time_max: 60
+      acceptance_wait_time: 10
+      random_reauth_delay: 270
+      recon_default: 1000
+      recon_max: 60000
+      recon_randomize: True
+      auth_timeout: 60
\ No newline at end of file
diff --git a/watchdog/server/init.yml b/watchdog/server/init.yml
new file mode 100644
index 0000000..28435d6
--- /dev/null
+++ b/watchdog/server/init.yml
@@ -0,0 +1,7 @@
+classes:
+- service.watchdog.server
+parameters:
+  watchdog:
+    server:
+      enabled: true
+
diff --git a/zookeeper/backup/client/single.yml b/zookeeper/backup/client/single.yml
index 0085b79..d8eaaac 100644
--- a/zookeeper/backup/client/single.yml
+++ b/zookeeper/backup/client/single.yml
@@ -1,4 +1,5 @@
 classes:
+- service.zookeeper.backup.client
 - system.openssh.client.root
 parameters:
   _param:
diff --git a/zookeeper/backup/server/single.yml b/zookeeper/backup/server/single.yml
index aaa877b..6796d8a 100644
--- a/zookeeper/backup/server/single.yml
+++ b/zookeeper/backup/server/single.yml
@@ -1,3 +1,5 @@
+classes:
+- service.zookeeper.backup.server
 parameters:
   _param:
     zookeeper_backup_public_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzLUiHKAjfFXiZ3fsgx35uXF6VivfC5WFafu4QMalxmj6W+s277oCfdWA8Du5f1wtQXM73VQ5nHkXhM2UIfUMarsyhXK+BxKVrcgEBNHdKlDytaecUPyuOxTDdGWhN/DPv5/vL8NYWweEYBbNbLgU0Td7Rvm52TUXKThIDjeF7XDxX4ShXWipBSwU4boOUBtR8KWfga8fsqeBN+eacuAQFR3MrrOfVvAuWW6Bsf047cmd+V6Qv0raoW73Nu4M/ZAdTsaR5k62a0cHsSRoi3hCmNRqw+CZaQi8prQU6t26eWPEtznjp5EkPF+LLh8LxUoCfWqWT+Lxe8QQwT1nx/LCN