Merge pull request #199 from simonpasquier/fix-region-neutron-ovs

Add missing OpenStack region for OpenvSwitch
diff --git a/README.rst b/README.rst
index 99e9d5b..539b6d2 100644
--- a/README.rst
+++ b/README.rst
@@ -14,11 +14,67 @@
 
 Include class at `cluster.<name>.openstack.compute`
 
-- system.nova.compute.sriov
+.. code-block:: yaml
 
-and parameters:
+  - system.nova.compute.nfv.sriov
 
-- sriov_nic01: Name of the interface
-- sriov_nic01_numvfs: Number of Virtual Functions
-- sriov_nic01_physical_network: Default "physnet1", label for physical network interface belongs to.
-- sriov_unsafe_interrupts: Default False, needs to be set True if your hw platform does not support interrupt remapping
+For single SR-IOV interface setup you can set parameters:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+`sriov_nic01_device_name`
+  Name of the Physical Function interface (pF)
+
+`sriov_nic01_numvfs`
+  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 
+  support interrupt remapping.
+
+
+Multiple SR-IOV interface setup:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By default, the metadata model contains configuration for 1 NIC
+dedicated for SR-IOV, so we need to setup network interfaces like in the
+following example.
+
+.. code-block:: yaml
+
+      ...
+        nova:
+          compute:
+            sriov:
+              sriov_nic01:
+                devname: eth1
+                physical_network: physnet3
+              sriov_nic02:
+                devname: eth2
+                physical_network: physnet4
+              sriov_nic03:
+                devname: eth3
+                physical_network: physnet3
+              sriov_nic04:
+                devname: eth4
+                physical_network: physnet6
+        linux:
+          system:
+            kernel:
+              sriov: True
+              unsafe_interrupts: False
+            rc:
+              local: |
+                #!/bin/sh -e
+                # Enabling 7 VFs on eth1 PF
+                echo 7 > /sys/class/net/eth1/device/sriov_numvfs; sleep 2; ip link set eth1 up
+                # Enabling 15 VFs on eth2 PF
+                echo 15 > /sys/class/net/eth2/device/sriov_numvfs; sleep 2; ip link set eth2 up
+                # Enabling 15 VFs on eth3 PF
+                echo 15 > /sys/class/net/eth3/device/sriov_numvfs; sleep 2; ip link set eth3 up
+                # Enabling 7 VFs on eth4 PF
+                echo 7 > /sys/class/net/eth4/device/sriov_numvfs; sleep 2; ip link set eth4 up
+                exit 0
diff --git a/aptly/server/mirror/ubuntu/trusty/glusterfs.yml b/aptly/server/mirror/ubuntu/trusty/glusterfs.yml
new file mode 100644
index 0000000..2d3fbaf
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/trusty/glusterfs.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  aptly:
+    server:
+      mirror:
+        glusterfs_upstream_trusty:
+          source: http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu
+          distribution: trusty
+          components: main
+          architectures: amd64
+          gpgkeys:
+            - 3FE869A9
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk.yml b/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk.yml
new file mode 100644
index 0000000..553e6dd
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk.yml
@@ -0,0 +1,79 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  aptly:
+    server:
+      mirror:
+        # required for opencontrail formulas
+        mcp_opencontrail_trusty_oc311:
+          source: http://apt-mk.mirantis.com/trusty/
+          distribution: ${_param:apt_mk_version}
+          components: oc311
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc311
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
+        mcp_opencontrail_trusty_oc31:
+          source: http://apt-mk.mirantis.com/trusty/
+          distribution: ${_param:apt_mk_version}
+          components: oc31
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc31
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
+        mcp_opencontrail_trusty_oc32:
+          source: http://apt-mk.mirantis.com/trusty/
+          distribution: ${_param:apt_mk_version}
+          components: oc32
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc32
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
+        mcp_opencontrail_trusty_oc303:
+          source: http://apt-mk.mirantis.com/trusty/
+          distribution: ${_param:apt_mk_version}
+          components: oc303
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc303
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
+        mirantis_openstack_trusty_extra:
+          source: http://apt-mk.mirantis.com/trusty/
+          distribution: ${_param:apt_mk_version}
+          components: extra
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: extra
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
+        mirantis_openstack_trusty_salt:
+          source: http://apt-mk.mirantis.com/trusty/
+          distribution: ${_param:apt_mk_version}
+          components: salt
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: salt
+            distributions:
+              - ubuntu-trusty/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/trusty/mcp/openstack.yml b/aptly/server/mirror/ubuntu/trusty/mcp/openstack.yml
new file mode 100644
index 0000000..32e3b90
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/trusty/mcp/openstack.yml
@@ -0,0 +1,73 @@
+parameters:
+  _param:
+    mcp_repo_version: 1.0
+  aptly:
+    server:
+      mirror:
+        mirantis_openstack_trusty:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty
+          distribution: mitaka
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-trusty/mitaka
+
+        mirantis_openstack_hotfix_trusty:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty
+          distribution: mitaka-hotfix
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-trusty/mitaka-hotfix
+
+        mirantis_openstack_security_trusty:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty
+          distribution: mitaka-security
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-trusty/mitaka-security
+
+        # required for alternative horizon plugins/etc..
+        mirantis_openstack_updates_trusty:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty
+          distribution: mitaka-updates
+          components:  main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-trusty/mitaka-updates
+
+        # required for salt formulas
+        mirantis_openstack_holdback_trusty:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty
+          distribution: mitaka-holdback
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/trusty/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+          - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-trusty/mitaka-holdback
+
diff --git a/aptly/server/mirror/ubuntu/trusty/mos8.yml b/aptly/server/mirror/ubuntu/trusty/mos8.yml
index e6e6707..c85363f 100644
--- a/aptly/server/mirror/ubuntu/trusty/mos8.yml
+++ b/aptly/server/mirror/ubuntu/trusty/mos8.yml
@@ -13,6 +13,7 @@
             component: main
             distributions:
               - mos8/mos8.0
+        # FIXME, enable hotfix once contain packages, otherwise broke aptly publish
         #mirantis-openstack-8.0-hotfix-trusty:
         #  source: http://mirror.fuel-infra.org/mos-repos/ubuntu/8.0-mu-3/
         #  distribution: mos8.0-hotfix
@@ -37,6 +38,7 @@
             component: main
             distributions:
               - mos8/mos8.0-proposed
+        # FIXME, enable security once contain packages, otherwise broke aptly publish
         #mirantis-openstack-8.0-security-trusty:
         #  source: http://mirror.fuel-infra.org/mos-repos/ubuntu/8.0-mu-3/
         #  distribution: mos8.0-security
diff --git a/aptly/server/mirror/ubuntu/trusty/mos9.yml b/aptly/server/mirror/ubuntu/trusty/mos9.yml
index 20f87b2..29415ab 100644
--- a/aptly/server/mirror/ubuntu/trusty/mos9.yml
+++ b/aptly/server/mirror/ubuntu/trusty/mos9.yml
@@ -37,6 +37,7 @@
             component: main
             distributions:
               - mos9/mos9.0-proposed
+        # FIXME, enable security once contain packages, otherwise broke aptly publish
         #mirantis-openstack-9.0-security-trusty:
         #  source: http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/
         #  distribution: mos9.0-security
@@ -62,7 +63,7 @@
             distributions:
               - mos9/mos9.0-updates
         mirantis-openstack-9.0-extras-murano:
-          source: http://mirror.fuel-infra.org/extras/murano-plugin-repos/release/1.1.0/ubuntu/9.0/
+          source: http://mirror.fuel-infra.org/extras/murano-plugin-repos/release/1.2.0/ubuntu/9.0/
           distribution: mos9.0
           components: main restricted
           architectures: amd64
diff --git a/aptly/server/mirror/ubuntu/trusty/ubuntu.yml b/aptly/server/mirror/ubuntu/trusty/ubuntu.yml
index 22e83df..3cd7c7b 100644
--- a/aptly/server/mirror/ubuntu/trusty/ubuntu.yml
+++ b/aptly/server/mirror/ubuntu/trusty/ubuntu.yml
@@ -1,10 +1,12 @@
 parameters:
+  _param:
+    linux_system_country_code: cz
   aptly:
     server:
       mirror:
         # trusty
         trusty-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty
           components: main
           architectures: amd64
@@ -17,7 +19,7 @@
             distributions:
               - ubuntu/trusty
         trusty-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty
           components: multiverse
           architectures: amd64
@@ -30,7 +32,7 @@
             distributions:
               - ubuntu/trusty
         trusty-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty
           components: restricted
           architectures: amd64
@@ -43,7 +45,7 @@
             distributions:
               - ubuntu/trusty
         trusty-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty
           components: universe
           architectures: amd64
@@ -58,7 +60,7 @@
 
         # trusty-updates
         trusty-updates-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-updates
           components: main
           architectures: amd64
@@ -71,7 +73,7 @@
             distributions:
               - ubuntu/trusty-updates
         trusty-updates-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-updates
           components: multiverse
           architectures: amd64
@@ -84,7 +86,7 @@
             distributions:
               - ubuntu/trusty-updates
         trusty-updates-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-updates
           components: restricted
           architectures: amd64
@@ -97,7 +99,7 @@
             distributions:
               - ubuntu/trusty-updates
         trusty-updates-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-updates
           components: universe
           architectures: amd64
@@ -112,7 +114,7 @@
 
         #trusty-security:
         trusty-security-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-security
           components: main
           architectures: amd64
@@ -125,7 +127,7 @@
             distributions:
               - ubuntu/trusty-security
         trusty-security-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-security
           components: multiverse
           architectures: amd64
@@ -138,7 +140,7 @@
             distributions:
               - ubuntu/trusty-security
         trusty-security-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-security
           components: restricted
           architectures: amd64
@@ -151,7 +153,7 @@
             distributions:
               - ubuntu/trusty-security
         trusty-security-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-security
           components: universe
           architectures: amd64
@@ -166,7 +168,7 @@
 
         #trusty-proposed:
         trusty-proposed-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-proposed
           components: main
           architectures: amd64
@@ -179,7 +181,7 @@
             distributions:
               - ubuntu/trusty-proposed
         trusty-proposed-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-proposed
           components: multiverse
           architectures: amd64
@@ -192,7 +194,7 @@
             distributions:
               - ubuntu/trusty-proposed
         trusty-proposed-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-proposed
           components: restricted
           architectures: amd64
@@ -205,7 +207,7 @@
             distributions:
               - ubuntu/trusty-proposed
         trusty-proposed-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-proposed
           components: universe
           architectures: amd64
@@ -220,7 +222,7 @@
 
         #trusty-backports:
         trusty-backports-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-backports
           components: main
           architectures: amd64
@@ -233,7 +235,7 @@
             distributions:
               - ubuntu/trusty-backports
         trusty-backports-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-backports
           components: multiverse
           architectures: amd64
@@ -246,7 +248,7 @@
             distributions:
               - ubuntu/trusty-backports
         trusty-backports-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-backports
           components: restricted
           architectures: amd64
@@ -259,7 +261,7 @@
             distributions:
               - ubuntu/trusty-backports
         trusty-backports-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: trusty-backports
           components: universe
           architectures: amd64
diff --git a/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml b/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml
index 1bc4341..3401a4e 100644
--- a/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml
+++ b/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml
@@ -2,7 +2,7 @@
   aptly:
     server:
       mirror:
-        ceph-mirantis-xenial:
+        ubuntu-xenial-ceph-mirantis:
           source: http://eu.mirror.fuel-infra.org/decapod/ceph/apt
           distribution: jewel-xenial
           components: main
@@ -12,8 +12,8 @@
           publisher:
             component: ceph-mirantis
             distributions:
-              - xenial/nightly
-        decapod-ceph-mirantis-xenial:
+              - ubuntu-xenial/nightly
+        ubuntu-xenial-decapod-ceph-mirantis:
           source: http://eu.mirror.fuel-infra.org/decapod/ceph/apt
           distribution: jewel-xenial
           components: main
diff --git a/aptly/server/mirror/ubuntu/xenial/glusterfs.yml b/aptly/server/mirror/ubuntu/xenial/glusterfs.yml
new file mode 100644
index 0000000..79a618a
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/xenial/glusterfs.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  aptly:
+    server:
+      mirror:
+        glusterfs_upstream_xenial:
+          source: http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu
+          distribution: xenial
+          components: main
+          architectures: amd64
+          gpgkeys:
+            - 3FE869A9
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
\ No newline at end of file
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk.yml
new file mode 100644
index 0000000..6272b69
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk.yml
@@ -0,0 +1,79 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  aptly:
+    server:
+      mirror:
+        # required for opencontrail formulas
+        mcp_opencontrail_xenial_oc311:
+          source: http://apt-mk.mirantis.com/xenial/
+          distribution: ${_param:apt_mk_version}
+          components: oc311
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc311
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
+        mcp_opencontrail_xenial_oc31:
+          source: http://apt-mk.mirantis.com/xenial/
+          distribution: ${_param:apt_mk_version}
+          components: oc31
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc31
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
+        mcp_opencontrail_xenial_oc32:
+          source: http://apt-mk.mirantis.com/xenial/
+          distribution: ${_param:apt_mk_version}
+          components: oc32
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc32
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
+        mcp_opencontrail_xenial_oc303:
+          source: http://apt-mk.mirantis.com/xenial/
+          distribution: ${_param:apt_mk_version}
+          components: oc303
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: oc303
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
+        mirantis_openstack_xenial_extra:
+          source: http://apt-mk.mirantis.com/xenial/
+          distribution: ${_param:apt_mk_version}
+          components: extra
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: extra
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
+        mirantis_openstack_xenial_salt:
+          source: http://apt-mk.mirantis.com/xenial/
+          distribution: ${_param:apt_mk_version}
+          components: salt
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+          gpgkeys:
+            - A76882D3
+          publisher:
+            component: salt
+            distributions:
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/openstack.yml b/aptly/server/mirror/ubuntu/xenial/mcp/openstack.yml
new file mode 100644
index 0000000..a23ece8
--- /dev/null
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/openstack.yml
@@ -0,0 +1,73 @@
+parameters:
+  _param:
+    mcp_repo_version: 1.0
+  aptly:
+    server:
+      mirror:
+        mirantis_openstack_xenial:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial
+          distribution: mitaka
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-xenial/mitaka
+
+        mirantis_openstack_hotfix_xenial:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial
+          distribution: mitaka-hotfix
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-xenial/mitaka-hotfix
+
+        mirantis_openstack_security_xenial:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial
+          distribution: mitaka-security
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-xenial/mitaka-security
+
+        # required for alternative horizon plugins/etc..
+        mirantis_openstack_updates_xenial:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial
+          distribution: mitaka-updates
+          components:  main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+            - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-xenial/mitaka-updates
+
+        # required for salt formulas
+        mirantis_openstack_holdback_xenial:
+          source: http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial
+          distribution: mitaka-holdback
+          components: main restricted
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/xenial/archive-mcp${_param:mcp_repo_version}.key"
+          gpgkeys:
+          - 1FA22B08
+          publisher:
+            component: main
+            distributions:
+              - ubuntu-xenial/mitaka-holdback
+
diff --git a/aptly/server/mirror/ubuntu/xenial/ubuntu.yml b/aptly/server/mirror/ubuntu/xenial/ubuntu.yml
index 10c54a5..4675063 100644
--- a/aptly/server/mirror/ubuntu/xenial/ubuntu.yml
+++ b/aptly/server/mirror/ubuntu/xenial/ubuntu.yml
@@ -1,10 +1,14 @@
 parameters:
+  _param:
+    linux_system_country_code_default: cz
+    linux_system_country_code: ${_param:linux_system_country_code_default}
   aptly:
     server:
       mirror:
         # xenial
         xenial-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial
           components: main
           architectures: amd64
@@ -17,7 +21,8 @@
             distributions:
               - ubuntu/xenial
         xenial-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial
           components: multiverse
           architectures: amd64
@@ -30,7 +35,8 @@
             distributions:
               - ubuntu/xenial
         xenial-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial
           components: restricted
           architectures: amd64
@@ -43,7 +49,8 @@
             distributions:
               - ubuntu/xenial
         xenial-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial
           components: universe
           architectures: amd64
@@ -58,7 +65,8 @@
 
         # xenial-updates
         xenial-updates-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-updates
           components: main
           architectures: amd64
@@ -71,7 +79,8 @@
             distributions:
               - ubuntu/xenial-updates
         xenial-updates-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-updates
           components: multiverse
           architectures: amd64
@@ -84,7 +93,8 @@
             distributions:
               - ubuntu/xenial-updates
         xenial-updates-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-updates
           components: restricted
           architectures: amd64
@@ -97,7 +107,8 @@
             distributions:
               - ubuntu/xenial-updates
         xenial-updates-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-updates
           components: universe
           architectures: amd64
@@ -112,7 +123,8 @@
 
         #xenial-security:
         xenial-security-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-security
           components: main
           architectures: amd64
@@ -125,7 +137,8 @@
             distributions:
               - ubuntu/xenial-security
         xenial-security-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-security
           components: multiverse
           architectures: amd64
@@ -138,7 +151,8 @@
             distributions:
               - ubuntu/xenial-security
         xenial-security-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-security
           components: restricted
           architectures: amd64
@@ -151,7 +165,8 @@
             distributions:
               - ubuntu/xenial-security
         xenial-security-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-security
           components: universe
           architectures: amd64
@@ -166,7 +181,8 @@
 
         #xenial-proposed:
         xenial-proposed-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-proposed
           components: main
           architectures: amd64
@@ -179,7 +195,8 @@
             distributions:
               - ubuntu/xenial-proposed
         xenial-proposed-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-proposed
           components: multiverse
           architectures: amd64
@@ -192,7 +209,7 @@
             distributions:
               - ubuntu/xenial-proposed
         xenial-proposed-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-proposed
           components: restricted
           architectures: amd64
@@ -205,7 +222,7 @@
             distributions:
               - ubuntu/xenial-proposed
         xenial-proposed-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-proposed
           components: universe
           architectures: amd64
@@ -220,7 +237,7 @@
 
         #xenial-backports:
         xenial-backports-main:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-backports
           components: main
           architectures: amd64
@@ -233,7 +250,7 @@
             distributions:
               - ubuntu/xenial-backports
         xenial-backports-multiverse:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-backports
           components: multiverse
           architectures: amd64
@@ -246,7 +263,8 @@
             distributions:
               - ubuntu/xenial-backports
         xenial-backports-restricted:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-backports
           components: restricted
           architectures: amd64
@@ -259,7 +277,8 @@
             distributions:
               - ubuntu/xenial-backports
         xenial-backports-universe:
-          source: http://cz.archive.ubuntu.com/ubuntu/
+          sources: true
+          source: http://${_param:linux_system_country_code}.archive.ubuntu.com/ubuntu/
           distribution: xenial-backports
           components: universe
           architectures: amd64
diff --git a/aptly/server/single.yml b/aptly/server/single.yml
index 095c396..8b71974 100644
--- a/aptly/server/single.yml
+++ b/aptly/server/single.yml
@@ -73,6 +73,7 @@
     server:
       enabled: true
       secure: ${_param:aptly_server_secure}
-      gpg_keypair_id: ${_param:aptly_gpg_keypair_id}
-      gpg_public_key: ${_param:aptly_gpg_public_key}
-      gpg_private_key: ${_param:aptly_gpg_private_key}
+      gpg:
+        keypair_id: ${_param:aptly_gpg_keypair_id}
+        public_key: ${_param:aptly_gpg_public_key}
+        private_key: ${_param:aptly_gpg_private_key}
diff --git a/devops_portal/service/gerrit.yml b/devops_portal/service/gerrit.yml
new file mode 100644
index 0000000..6dcad9c
--- /dev/null
+++ b/devops_portal/service/gerrit.yml
@@ -0,0 +1,9 @@
+parameters:
+  devops_portal:
+    config:
+      service:
+        gerrit:
+          endpoint:
+            address: ${_param:haproxy_gerrit_bind_host}
+            port: ${_param:haproxy_gerrit_bind_port}
+            https: ${_param:haproxy_gerrit_ssl:enabled}
diff --git a/devops_portal/service/jenkins.yml b/devops_portal/service/jenkins.yml
new file mode 100644
index 0000000..349a707
--- /dev/null
+++ b/devops_portal/service/jenkins.yml
@@ -0,0 +1,9 @@
+parameters:
+  devops_portal:
+    config:
+      service:
+        jenkins:
+          endpoint:
+            address: ${_param:haproxy_jenkins_bind_host}
+            port: ${_param:haproxy_jenkins_bind_port}
+            https: ${_param:haproxy_jenkins_ssl:enabled}
diff --git a/devops_portal/service/rundeck.yml b/devops_portal/service/rundeck.yml
new file mode 100644
index 0000000..1a15473
--- /dev/null
+++ b/devops_portal/service/rundeck.yml
@@ -0,0 +1,13 @@
+parameters:
+  devops_portal:
+    config:
+      service:
+        rundeck:
+          configure_proxy: true
+          credentials:
+            username: admin
+            password: ${_param:rundeck_admin_password}
+          endpoint:
+            address: ${_param:haproxy_rundeck_bind_host}
+            port: ${_param:haproxy_rundeck_bind_port}
+            https: ${_param:haproxy_rundeck_ssl:enabled}
diff --git a/docker/host.yml b/docker/host.yml
index cf19bfd..f7649b5 100644
--- a/docker/host.yml
+++ b/docker/host.yml
@@ -4,6 +4,7 @@
 parameters:
   docker:
     host:
+      experimental: true
       insecure_registries:
         - ${_param:cluster_vip_address}:5000
         - ${_param:cluster_public_host}:5000
diff --git a/docker/swarm/manager.yml b/docker/swarm/manager.yml
index 36f5bcb..25a7fbe 100644
--- a/docker/swarm/manager.yml
+++ b/docker/swarm/manager.yml
@@ -1,4 +1,8 @@
+classes:
+  - system.docker.swarm.network.gwbridge
 parameters:
+  _param:
+    docker_gwbridge_subnet: 10.20.0.0/16
   docker:
     swarm:
       role: manager
diff --git a/docker/swarm/master.yml b/docker/swarm/master.yml
index bb2d83b..fba9af3 100644
--- a/docker/swarm/master.yml
+++ b/docker/swarm/master.yml
@@ -1,4 +1,8 @@
+classes:
+  - system.docker.swarm.network.gwbridge
 parameters:
+  _param:
+    docker_gwbridge_subnet: 10.20.0.0/16
   docker:
     swarm:
       role: master
diff --git a/docker/swarm/network/gwbridge.yml b/docker/swarm/network/gwbridge.yml
new file mode 100644
index 0000000..8208d3d
--- /dev/null
+++ b/docker/swarm/network/gwbridge.yml
@@ -0,0 +1,10 @@
+parameters:
+  docker:
+    swarm:
+      network:
+        docker_gwbridge:
+          subnet: ${_param:docker_gwbridge_subnet}
+          opt:
+            com.docker.network.bridge.name: docker_gwbridge
+            com.docker.network.bridge.enable_icc: false
+            com.docker.network.bridge.enable_ip_masquerade: true
diff --git a/docker/swarm/service/devops_portal.yml b/docker/swarm/service/devops_portal.yml
new file mode 100644
index 0000000..6a82aa5
--- /dev/null
+++ b/docker/swarm/service/devops_portal.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    docker_devops_portal_replicas: 1
+    docker_image_devops_portal: docker-sandbox.sandbox.mirantis.net/ikharin/oss/devops-portal:latest
+  docker:
+    client:
+      service:
+        devops-portal:
+          replicas: ${_param:docker_devops_portal_replicas}
+          image: ${_param:docker_image_devops_portal}
+          restart:
+            condition: any
+          ports:
+            - 18800:8000
+          volume:
+            nginx:
+              type: bind
+              source: /srv/volumes/devops_portal/nginx/
+              destination: /etc/nginx/config
+            config:
+              type: bind
+              source: /srv/volumes/devops_portal/config/
+              destination: /opt/devops-portal/config
diff --git a/docker/swarm/service/gerrit.yml b/docker/swarm/service/gerrit.yml
index d33bdbb..10e0629 100644
--- a/docker/swarm/service/gerrit.yml
+++ b/docker/swarm/service/gerrit.yml
@@ -1,6 +1,12 @@
 parameters:
   _param:
-    docker_image_gerrit: tcpcloud/gerrit:2.12.7
+    docker_image_gerrit: tcpcloud/gerrit:2.13.6
+    gerrit_ldap_server: ""
+    gerrit_ldap_bind_user: ""
+    gerrit_ldap_bind_password: ""
+    gerrit_ldap_account_base: ""
+    gerrit_ldap_group_base: ""
+
   docker:
     client:
       service:
@@ -13,10 +19,17 @@
             DB_ENV_MYSQL_PASSWORD: ${_param:mysql_gerrit_password}
             DB_ENV_MYSQL_DB: gerrit
             AUTH_TYPE: ${_param:gerrit_auth_type}
+            LDAP_SERVER: ${_param:gerrit_ldap_server}
+            LDAP_ACCOUNTPATTERN: 'uid={username}'
+            LDAP_ACCOUNTBASE: ${_param:gerrit_ldap_account_base}
+            LDAP_GROUPBASE: ${_param:gerrit_ldap_group_base}
+            LDAP_USERNAME: ${_param:gerrit_ldap_bind_user}
+            LDAP_PASSWORD: ${_param:gerrit_ldap_bind_password}
             WEBURL: ${_param:gerrit_public_host}
             GERRIT_ADMIN_SSH_PUBLIC: ${_param:gerrit_admin_public_key}
             GERRIT_ADMIN_PWD: ${_param:gerrit_admin_password}
             GERRIT_ADMIN_EMAIL: ${_param:gerrit_admin_email}
+            CANLOADINIFRAME: "true"
           restart:
             condition: any
           image: ${_param:docker_image_gerrit}
diff --git a/docker/swarm/service/jenkins.yml b/docker/swarm/service/jenkins.yml
index 3069dc6..b2fdeb6 100644
--- a/docker/swarm/service/jenkins.yml
+++ b/docker/swarm/service/jenkins.yml
@@ -1,12 +1,12 @@
 parameters:
   _param:
-    docker_image_jenkins: tcpcloud/jenkins:2.50
+    docker_image_jenkins: tcpcloud/jenkins:2.52
   docker:
     client:
       service:
         jenkins:
           environment:
-            JAVA_OPTS: "-Djenkins.install.runSetupWizard=false -Dhudson.footerURL=https://www.mirantis.com"
+            JAVA_OPTS: "-Djenkins.install.runSetupWizard=false -Dhudson.DNSMultiCast.disabled=true -Dhudson.udp=-1 -Dhudson.footerURL=https://www.mirantis.com"
             JENKINS_NUM_EXECUTORS: 4
           restart:
             condition: any
diff --git a/docker/swarm/service/monitoring/prometheus_alertmanager.yml b/docker/swarm/service/monitoring/prometheus_alertmanager.yml
index 74b20f5..5d5f237 100644
--- a/docker/swarm/service/monitoring/prometheus_alertmanager.yml
+++ b/docker/swarm/service/monitoring/prometheus_alertmanager.yml
@@ -6,11 +6,12 @@
       service:
         prometheus_alertmanager:
           network: monitoring
-          replica: 2
+          replicas: 2
           environment:
             config_dir: /opt/alertmanager/config
             bind_port: ${prometheus:alertmanager:bind:port}
             bind_address: ${prometheus:alertmanager:bind:address}
+            discovery_domain: 'prometheus_alertmanager'
           restart:
             condition: any
           image: ${_param:docker_image_alertmanager}
@@ -19,5 +20,5 @@
           volume:
             site:
               type: bind
-              source: /srv/volumes/prometheus-config
+              source: /srv/volumes/prometheus
               destination: /opt/alertmanager/config
diff --git a/docker/swarm/service/monitoring/prometheus_pushgateway.yml b/docker/swarm/service/monitoring/prometheus_pushgateway.yml
index 7ba37af..ad159b6 100644
--- a/docker/swarm/service/monitoring/prometheus_pushgateway.yml
+++ b/docker/swarm/service/monitoring/prometheus_pushgateway.yml
@@ -4,7 +4,7 @@
       service:
         prometheus_pushgateway:
           network: monitoring
-          replica: 2
+          replicas: 2
           restart:
             condition: any
           image: ${_param:docker_image_pushgateway}
diff --git a/docker/swarm/service/monitoring/prometheus_server.yml b/docker/swarm/service/monitoring/prometheus_server.yml
index 24a9193..37bb6d3 100644
--- a/docker/swarm/service/monitoring/prometheus_server.yml
+++ b/docker/swarm/service/monitoring/prometheus_server.yml
@@ -6,7 +6,7 @@
       service:
         prometheus_server:
           network: monitoring
-          replica: 1
+          replicas: 1
           environment:
             config_dir: /opt/prometheus/config
             bind_port: ${prometheus:server:bind:port}
@@ -17,6 +17,7 @@
             storage_local_memory_chunks: ${prometheus:server:storage:local:memory_chunks}
             storage_local_max_chunks_to_persist: ${prometheus:server:storage:local:max_chunks_to_persist}
             storage_local_num_fingerprint_mutexes: ${prometheus:server:storage:local:num_fingerprint_mutexes}
+            discovery_domain: 'prometheus_alertmanager'
           restart:
             condition: any
           image: ${_param:docker_image_prometheus}
@@ -25,5 +26,5 @@
           volume:
             site:
               type: bind
-              source: /srv/volumes/prometheus-config
+              source: /srv/volumes/prometheus
               destination: /opt/prometheus/config
diff --git a/docker/swarm/service/openldap.yml b/docker/swarm/service/openldap.yml
index e390772..f7f12e2 100644
--- a/docker/swarm/service/openldap.yml
+++ b/docker/swarm/service/openldap.yml
@@ -1,28 +1,28 @@
 parameters:
   _param:
-    docker_image_openldap: osixia/openldap:1.1.7
+    docker_image_openldap: osixia/openldap:1.1.8
   docker:
     client:
       service:
         openldap:
-          # XXX: docker service is not able to set hostname
-          # https://github.com/docker/docker/issues/24877
           restart:
             condition: any
           image: ${_param:docker_image_openldap}
+          hostname: ldap01.${_param:openldap_domain}
+          hosts:
+            ldap01:
+              name: ldap01.${_param:openldap_domain}
+              address: 127.0.0.1
           environment:
-            HOSTNAME: ldap01.${_param:cluster_public_host}
+            HOSTNAME: ldap01.${_param:openldap_domain}
             LDAP_ORGANISATION: "${_param:openldap_organisation}"
             LDAP_DOMAIN: "${_param:openldap_domain}"
             LDAP_ADMIN_PASSWORD: ${_param:openldap_admin_password}
             LDAP_CONFIG_PASSWORD: ${_param:openldap_config_password}
-            LDAP_READONLY_USER: true
-            LDAP_READONLY_USER_USERNAME: readonly
-            LDAP_READONLY_USER_PASSWORD: ${_param:openldap_readonly_password}
-            LDAP_TLS: false
+            LDAP_TLS: "false"
           ports:
-            - 389:389
-            - 636:636
+            - 1389:389
+            - 1636:636
           volume:
             database:
               type: bind
diff --git a/docker/swarm/service/phpldapadmin.yml b/docker/swarm/service/phpldapadmin.yml
new file mode 100644
index 0000000..25332c7
--- /dev/null
+++ b/docker/swarm/service/phpldapadmin.yml
@@ -0,0 +1,22 @@
+parameters:
+  _param:
+    docker_image_phpldapadmin: tcpcloud/phpldapadmin:0.6.12
+  docker:
+    client:
+      service:
+        phpldapadmin:
+          restart:
+            condition: any
+          image: ${_param:docker_image_phpldapadmin}
+          hosts:
+            ldap:
+              name: ldap.${_param:openldap_domain}
+              address: ${_param:cluster_vip_address}
+          environment:
+            PHPLDAPADMIN_LDAP_HOSTS: "#PYTHON2BASH:[{'ldap.${_param:openldap_domain}': [{'server': [{'tls': False}]},{'login': [{'bind_id': 'cn=admin,${_param:openldap_dn}'},{'bind_pass': '${_param:openldap_admin_password}'}]}]}]"
+            PHPLDAPADMIN_HTTPS: false
+            PHPLDAPADMIN_TRUST_PROXY_SSL: true
+            PHPLDAPADMIN_SERVER_ADMIN: ${_param:admin_email}
+            PHPLDAPADMIN_THEME: mirantis
+          ports:
+            - 18089:80
diff --git a/docker/swarm/service/rundeck.yml b/docker/swarm/service/rundeck.yml
new file mode 100644
index 0000000..baad94a
--- /dev/null
+++ b/docker/swarm/service/rundeck.yml
@@ -0,0 +1,47 @@
+parameters:
+  _param:
+    docker_rundeck_replicas: 1
+    docker_image_rundeck: docker-sandbox.sandbox.mirantis.net/ikharin/oss/rundeck:latest
+    rundeck_admin_password: password
+  docker:
+    client:
+      service:
+        rundeck:
+          environment:
+            SERVER_URL: "http://${_param:haproxy_rundeck_bind_host}:${_param:haproxy_rundeck_bind_port}"
+            RUNDECK_ADMIN_PASSWORD: ${_param:rundeck_admin_password}
+          replicas: ${_param:docker_rundeck_replicas}
+          image: ${_param:docker_image_rundeck}
+          restart:
+            condition: any
+          ports:
+            - 14440:4440
+          volume:
+            etc:
+              type: bind
+              source: /srv/volumes/rundeck/etc
+              destination: /etc/rundeck
+            rundeck:
+              type: bind
+              source: /srv/volumes/rundeck/rundeck
+              destination: /var/rundeck
+            mysql:
+              type: bind
+              source: /srv/volumes/rundeck/mysql
+              destination: /var/lib/mysql
+            log:
+              type: bind
+              source: /srv/volumes/rundeck/log
+              destination: /var/log/rundeck
+            logs:
+              type: bind
+              source: /srv/volumes/rundeck/logs
+              destination: /var/lib/rundeck/logs
+            plugins:
+              type: bind
+              source: /srv/volumes/rundeck/plugins
+              destination: /opt/rundeck-plugins
+            storage:
+              type: bind
+              source: /srv/volumes/rundeck/storage
+              destination: /var/lib/rundeck/var/storage
diff --git a/docker/swarm/worker.yml b/docker/swarm/worker.yml
index acdb0cf..643b207 100644
--- a/docker/swarm/worker.yml
+++ b/docker/swarm/worker.yml
@@ -1,4 +1,8 @@
+classes:
+  - system.docker.swarm.network.gwbridge
 parameters:
+  _param:
+    docker_gwbridge_subnet: 10.20.0.0/16
   docker:
     swarm:
       role: worker
diff --git a/gerrit/client/init.yml b/gerrit/client/init.yml
index a9bb4de..25c0b94 100644
--- a/gerrit/client/init.yml
+++ b/gerrit/client/init.yml
@@ -1,9 +1,12 @@
 classes:
   - service.gerrit.client
 parameters:
+  _param:
+    gerrit_try_login: true
   gerrit:
     client:
       enabled: True
+      try_login: ${_param:gerrit_try_login}
       source:
         engine: pip
       dir:
@@ -14,11 +17,15 @@
         host: ${_param:cluster_vip_address}
         user: admin
         email: ${_param:gerrit_admin_email}
+        auth_method: basic
         http_port: 8080
         ssh_port: 29418
         protocol: http
         password: ${_param:gerrit_admin_password}
         key: ${_param:gerrit_admin_private_key}
+      user:
+        admin:
+          ssh_key: ${_param:gerrit_admin_public_key}
       group:
         Event Streaming Users:
           description: Event Streaming Users
diff --git a/glance/control/storage/ceph.yml b/glance/control/storage/ceph.yml
index ef3c033..d48fb6d 100644
--- a/glance/control/storage/ceph.yml
+++ b/glance/control/storage/ceph.yml
@@ -2,7 +2,7 @@
   glance:
     server:
       storage:
-        engine: rbd
+        engine: rbd,http
         user: ${_param:glance_storage_user}
         pool: ${_param:glance_storage_pool}
         chunk_size: 8
\ No newline at end of file
diff --git a/glusterfs/client/volume/devops_portal.yml b/glusterfs/client/volume/devops_portal.yml
new file mode 100644
index 0000000..9a3c291
--- /dev/null
+++ b/glusterfs/client/volume/devops_portal.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    devops_portal_glusterfs_service_host: ${_param:glusterfs_service_host}
+  glusterfs:
+    client:
+      volumes:
+        devops_portal:
+          path: /srv/volumes/devops_portal
+          server: ${_param:devops_portal_glusterfs_service_host}
+          opts: 'defaults'
diff --git a/glusterfs/client/volume/prometheus.yml b/glusterfs/client/volume/prometheus.yml
index f8b2f3d..2b2b7db 100644
--- a/glusterfs/client/volume/prometheus.yml
+++ b/glusterfs/client/volume/prometheus.yml
@@ -4,7 +4,7 @@
   glusterfs:
     client:
       volumes:
-        prometheus-config:
-          path: /srv/volumes/prometheus-config
+        prometheus:
+          path: /srv/volumes/prometheus
           server: ${_param:prometheus_glusterfs_service_host}
           opts: 'defaults'
diff --git a/glusterfs/client/volume/rundeck.yml b/glusterfs/client/volume/rundeck.yml
new file mode 100644
index 0000000..b226aeb
--- /dev/null
+++ b/glusterfs/client/volume/rundeck.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    rundeck_glusterfs_service_host: ${_param:glusterfs_service_host}
+  glusterfs:
+    client:
+      volumes:
+        rundeck:
+          path: /srv/volumes/rundeck
+          server: ${_param:rundeck_glusterfs_service_host}
+          opts: 'defaults'
diff --git a/glusterfs/server/volume/devops_portal.yml b/glusterfs/server/volume/devops_portal.yml
new file mode 100644
index 0000000..0b71b62
--- /dev/null
+++ b/glusterfs/server/volume/devops_portal.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        devops_portal:
+          storage: /srv/glusterfs/devops_portal
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/devops_portal
+            - ${_param:cluster_node02_address}:/srv/glusterfs/devops_portal
+            - ${_param:cluster_node03_address}:/srv/glusterfs/devops_portal
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
diff --git a/glusterfs/server/volume/prometheus.yml b/glusterfs/server/volume/prometheus.yml
index 2c4ca31..144847a 100644
--- a/glusterfs/server/volume/prometheus.yml
+++ b/glusterfs/server/volume/prometheus.yml
@@ -2,13 +2,13 @@
   glusterfs:
     server:
       volumes:
-        prometheus-config:
-          storage: /srv/glusterfs/prometheus-config
+        prometheus:
+          storage: /srv/glusterfs/prometheus
           replica: 3
           bricks:
-            - ${_param:cluster_node01_address}:/srv/glusterfs/prometheus-config
-            - ${_param:cluster_node02_address}:/srv/glusterfs/prometheus-config
-            - ${_param:cluster_node03_address}:/srv/glusterfs/prometheus-config
+            - ${_param:cluster_node01_address}:/srv/glusterfs/prometheus
+            - ${_param:cluster_node02_address}:/srv/glusterfs/prometheus
+            - ${_param:cluster_node03_address}:/srv/glusterfs/prometheus
           options:
             cluster.readdir-optimize: On
             nfs.disable: On
diff --git a/glusterfs/server/volume/rundeck.yml b/glusterfs/server/volume/rundeck.yml
new file mode 100644
index 0000000..22e5563
--- /dev/null
+++ b/glusterfs/server/volume/rundeck.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        rundeck:
+          storage: /srv/glusterfs/rundeck
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/rundeck
+            - ${_param:cluster_node02_address}:/srv/glusterfs/rundeck
+            - ${_param:cluster_node03_address}:/srv/glusterfs/rundeck
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
diff --git a/haproxy/proxy/listen/openldap.yml b/haproxy/proxy/listen/openldap.yml
new file mode 100644
index 0000000..b6f79a0
--- /dev/null
+++ b/haproxy/proxy/listen/openldap.yml
@@ -0,0 +1,46 @@
+parameters:
+  _param:
+    haproxy_openldap_bind_host: ${_param:haproxy_bind_address}
+    haproxy_openldap_bind_port: 389
+    haproxy_openldap_ssl_bind_port: 636
+  haproxy:
+    proxy:
+      listen:
+        openldap:
+          mode: tcp
+          balance: source
+          binds:
+            - address: ${_param:haproxy_openldap_bind_host}
+              port: ${_param:haproxy_openldap_bind_port}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 1389
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 1389
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 1389
+              params: backup check
+        openldap_ssl:
+          mode: tcp
+          balance: source
+          binds:
+            - address: ${_param:haproxy_openldap_bind_host}
+              port: ${_param:haproxy_openldap_ssl_bind_port}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 1636
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 1636
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 1636
+              params: backup check
diff --git a/haproxy/proxy/listen/openstack/murano.yml b/haproxy/proxy/listen/openstack/murano.yml
new file mode 100644
index 0000000..0427820
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/murano.yml
@@ -0,0 +1,18 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        murano_api:
+          type: openstack-service
+          check: false
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8082
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: 8082
+            params: check
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: 8082
\ No newline at end of file
diff --git a/haproxy/proxy/listen/openstack/novnc.yml b/haproxy/proxy/listen/openstack/novnc.yml
index 9646651..78b7d98 100644
--- a/haproxy/proxy/listen/openstack/novnc.yml
+++ b/haproxy/proxy/listen/openstack/novnc.yml
@@ -5,7 +5,7 @@
         nova_novnc:
           type: general-service
           service_name: http
-          check: false
+          check: true
           binds:
           - address: ${_param:cluster_vip_address}
             port: 6080
diff --git a/haproxy/proxy/listen/openstack/sahara.yml b/haproxy/proxy/listen/openstack/sahara.yml
new file mode 100644
index 0000000..3bbf809
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/sahara.yml
@@ -0,0 +1,24 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        sahara_api:
+          type: openstack-service
+          options:
+            - httplog
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8386
+          servers:
+          - name: ctl01
+            host: ${_param:cluster_node01_address}
+            port: 8386
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl02
+            host: ${_param:cluster_node02_address}
+            port: 8386
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl03
+            host: ${_param:cluster_node03_address}
+            port: 8386
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
diff --git a/haproxy/proxy/listen/oss/devops_portal.yml b/haproxy/proxy/listen/oss/devops_portal.yml
new file mode 100644
index 0000000..e5c25cf
--- /dev/null
+++ b/haproxy/proxy/listen/oss/devops_portal.yml
@@ -0,0 +1,37 @@
+parameters:
+  _param:
+    haproxy_devops_portal_bind_host: ${_param:haproxy_bind_address}
+    haproxy_devops_portal_bind_port: 8800
+    haproxy_devops_portal_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      listen:
+        devops_portal:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          binds:
+            - address: ${_param:haproxy_devops_portal_bind_host}
+              port: ${_param:haproxy_devops_portal_bind_port}
+              ssl: ${_param:haproxy_devops_portal_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18800
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18800
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18800
+              params: backup check
diff --git a/haproxy/proxy/listen/oss/rundeck.yml b/haproxy/proxy/listen/oss/rundeck.yml
new file mode 100644
index 0000000..fbabb38
--- /dev/null
+++ b/haproxy/proxy/listen/oss/rundeck.yml
@@ -0,0 +1,37 @@
+parameters:
+  _param:
+    haproxy_rundeck_bind_host: ${_param:haproxy_bind_address}
+    haproxy_rundeck_bind_port: 4440
+    haproxy_rundeck_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      listen:
+        rundeck:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          binds:
+            - address: ${_param:haproxy_rundeck_bind_host}
+              port: ${_param:haproxy_rundeck_bind_port}
+              ssl: ${_param:haproxy_rundeck_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 14440
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 14440
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 14440
+              params: backup check
diff --git a/haproxy/proxy/listen/phpldapadmin.yml b/haproxy/proxy/listen/phpldapadmin.yml
new file mode 100644
index 0000000..b2b7f93
--- /dev/null
+++ b/haproxy/proxy/listen/phpldapadmin.yml
@@ -0,0 +1,30 @@
+parameters:
+  _param:
+    haproxy_phpldapadmin_bind_host: ${_param:haproxy_bind_address}
+    haproxy_phpldapadmin_bind_port: 8089
+  haproxy:
+    proxy:
+      listen:
+        phpldapadmin:
+          mode: http
+          options:
+            - forwardfor
+            - httpclose
+            - httplog
+          balance: source
+          binds:
+            - address: ${_param:haproxy_phpldapadmin_bind_host}
+              port: ${_param:haproxy_phpldapadmin_bind_port}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18089
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18089
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18089
+              params: backup check
diff --git a/heka/aggregator/cluster.yml b/heka/aggregator/cluster.yml
index 2913211..1d1e5c7 100644
--- a/heka/aggregator/cluster.yml
+++ b/heka/aggregator/cluster.yml
@@ -2,9 +2,6 @@
 - service.heka.aggregator.cluster
 - system.heka.server
 parameters:
-  _param:
-    nagios_default_host_alarm_clusters: 00-clusters
-    nagios_host_dimension_key: nagios_host
   heka:
     aggregator:
       influxdb_host: ${_param:heka_influxdb_host}
@@ -12,12 +9,6 @@
       influxdb_database: lma
       influxdb_username: lma
       influxdb_password: ${_param:influxdb_stacklight_password}
-      nagios_host: ${_param:nagios_host}
-      nagios_username: ${_param:nagios_username}
-      nagios_password: ${_param:nagios_password}
-      nagios_port: ${_param:nagios_status_port}
-      nagios_default_host_alarm_clusters: ${_param:nagios_default_host_alarm_clusters}
-      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}
       poolsize: 200
   keepalived:
     cluster:
diff --git a/heka/aggregator/single.yml b/heka/aggregator/single.yml
index c5ad6ab..5ee3605 100644
--- a/heka/aggregator/single.yml
+++ b/heka/aggregator/single.yml
@@ -2,9 +2,6 @@
 - service.heka.aggregator.single
 - system.heka.server
 parameters:
-  _param:
-    nagios_default_host_alarm_clusters: 00-clusters
-    nagios_host_dimension_key: nagios_host
   heka:
     aggregator:
       influxdb_host: ${_param:heka_influxdb_host}
@@ -12,10 +9,4 @@
       influxdb_database: lma
       influxdb_username: lma
       influxdb_password: ${_param:influxdb_stacklight_password}
-      nagios_host: ${_param:nagios_host}
-      nagios_username: ${_param:nagios_username}
-      nagios_password: ${_param:nagios_password}
-      nagios_port: ${_param:nagios_status_port}
-      nagios_default_host_alarm_clusters: ${_param:nagios_default_host_alarm_clusters}
-      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}
       poolsize: 200
diff --git a/heka/metric_collector/output/nagios.yml b/heka/metric_collector/output/nagios.yml
new file mode 100644
index 0000000..89d981f
--- /dev/null
+++ b/heka/metric_collector/output/nagios.yml
@@ -0,0 +1,2 @@
+classes:
+- service.heka.metric_collector.output.nagios
diff --git a/heka/metric_collector/output/sensu.yml b/heka/metric_collector/output/sensu.yml
index 3143fd9..a68a2ab 100644
--- a/heka/metric_collector/output/sensu.yml
+++ b/heka/metric_collector/output/sensu.yml
@@ -1,3 +1,2 @@
 classes:
 - service.heka.metric_collector.output.sensu
-
diff --git a/heka/metric_collector/single.yml b/heka/metric_collector/single.yml
index 443a4e9..b4167f0 100644
--- a/heka/metric_collector/single.yml
+++ b/heka/metric_collector/single.yml
@@ -12,7 +12,3 @@
       influxdb_port: 8086
       influxdb_time_precision: ms
       influxdb_username: lma
-      nagios_host: ${_param:nagios_host}
-      nagios_username: ${_param:nagios_username}
-      nagios_password: ${_param:nagios_password}
-      nagios_port: ${_param:nagios_status_port}
diff --git a/horizon/server/single.yml b/horizon/server/single.yml
index 5a83b2a..c20de5a 100644
--- a/horizon/server/single.yml
+++ b/horizon/server/single.yml
@@ -1,6 +1,5 @@
 classes:
 - service.horizon.server.single
-- system.horizon.server.plugin.theme
 parameters:
   _param:
     horizon_site_branding: OpenStack Dashboard
diff --git a/jenkins/client/approved_scripts.yml b/jenkins/client/approved_scripts.yml
new file mode 100644
index 0000000..bf46803
--- /dev/null
+++ b/jenkins/client/approved_scripts.yml
@@ -0,0 +1,94 @@
+parameters:
+  jenkins:
+    client:
+      approved_scripts:
+        - field java.lang.String value
+        - field java.util.ArrayList size
+        - method com.cloudbees.jenkins.plugins.sshcredentials.SSHUserPrivateKey getPrivateKey
+        - method com.cloudbees.plugins.credentials.common.IdCredentials getId
+        - method com.cloudbees.plugins.credentials.common.PasswordCredentials getPassword
+        - method com.cloudbees.plugins.credentials.common.UsernameCredentials getUsername
+        - method groovy.json.JsonBuilder toPrettyString
+        - method groovy.json.JsonSlurperClassic parseText java.lang.String
+        - method groovy.lang.GString getBytes
+        - method groovy.lang.GroovyObject getProperty java.lang.String
+        - method hudson.PluginManager getPlugins
+        - method hudson.PluginWrapper getShortName
+        - method hudson.model.Item getName
+        - method hudson.model.ItemGroup getItem java.lang.String
+        - method hudson.model.ItemGroup getItems
+        - method hudson.model.Job getBuilds
+        - method hudson.model.Job getLastBuild
+        - method hudson.model.Run getEnvironment
+        - method hudson.model.Run getResult
+        - method hudson.model.Run getTimeInMillis
+        - method hudson.model.Run isBuilding
+        - method java.io.File getAbsolutePath
+        - method java.io.File getName
+        - method java.io.File getParent
+        - method java.io.Writer write java.lang.String
+        - method java.lang.AutoCloseable close
+        - method java.lang.Class isInstance java.lang.Object
+        - method java.lang.Iterable iterator
+        - method java.net.HttpURLConnection getResponseCode
+        - method java.net.HttpURLConnection setRequestMethod java.lang.String
+        - method java.net.URI getHost
+        - method java.net.URI getPort
+        - method java.net.URL openConnection
+        - method java.net.URLConnection getHeaderField java.lang.String
+        - method java.net.URLConnection getInputStream
+        - method java.net.URLConnection getOutputStream
+        - method java.net.URLConnection setDoOutput boolean
+        - method java.net.URLConnection setRequestProperty java.lang.String java.lang.String
+        - method java.util.Collection remove java.lang.Object
+        - method java.util.LinkedHashMap$LinkedHashIterator hasNext
+        - method java.util.List subList int int
+        - method java.util.Map remove java.lang.Object
+        - method java.util.Map size
+        - method java.util.regex.MatchResult group int
+        - method java.util.regex.Matcher matches
+        - method java.util.regex.Pattern matcher java.lang.CharSequence
+        - method jenkins.model.Jenkins getPluginManager
+        - method org.jenkinsci.plugins.workflow.job.WorkflowRun doStop
+        - method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper build
+        - new groovy.json.JsonBuilder java.lang.Object
+        - new groovy.json.JsonSlurperClassic
+        - new java.io.File java.lang.String
+        - new java.io.OutputStreamWriter java.io.OutputStream
+        - new java.lang.Exception java.lang.String
+        - new java.lang.InterruptedException
+        - new java.net.URI java.lang.String
+        - new java.util.Date
+        - staticField groovy.io.FileType FILES
+        - staticMethod com.cloudbees.plugins.credentials.CredentialsProvider lookupCredentials java.lang.Class hudson.model.ItemGroup
+        - staticMethod java.lang.Integer valueOf java.lang.String
+        - staticMethod java.lang.String format java.lang.String java.lang.Object[]
+        - staticMethod java.lang.System exit int
+        - staticMethod java.lang.System getProperty java.lang.String
+        - staticMethod java.lang.System getenv java.lang.String
+        - staticMethod java.util.regex.Pattern quote java.lang.String
+        - staticMethod jenkins.model.Jenkins getInstance
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods collect java.util.Map groovy.lang.Closure
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods eachFile java.io.File groovy.io.FileType groovy.lang.Closure
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods find java.util.Collection groovy.lang.Closure
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods findAll java.util.List groovy.lang.Closure
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods get java.util.Map java.lang.Object java.lang.Object
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Iterable int
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.String int
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getBytes java.io.File
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getText java.io.InputStream
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods hasProperty java.lang.Object java.lang.String
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object[]
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Iterable
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Object
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.util.Collection
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println java.lang.Object java.lang.Object
+        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
+        - staticMethod org.codehaus.groovy.runtime.EncodingGroovyMethods encodeBase64 byte[]
+        - staticMethod org.codehaus.groovy.runtime.ScriptBytecodeAdapter bitwiseNegate java.lang.Object
+        - method java.util.Collection stream
+        - staticMethod java.util.stream.Collectors joining java.lang.CharSequence
+        - method java.util.stream.Stream collect java.util.stream.Collector
+        - staticMethod java.util.regex.Pattern compile java.lang.String
+        - method java.util.regex.Matcher find
diff --git a/jenkins/client/init.yml b/jenkins/client/init.yml
index aac50e9..e7c56ec 100644
--- a/jenkins/client/init.yml
+++ b/jenkins/client/init.yml
@@ -1,6 +1,7 @@
 classes:
   - service.jenkins.support
   - service.jenkins.client
+  - system.jenkins.client.approved_scripts
 parameters:
   _param:
     jenkins_client_user: none
@@ -27,6 +28,7 @@
         gerrit-trigger: {}
         git: {}
         heavy-job: {}
+        ldap: {}
         matrix-auth: {}
         monitoring: {}
         pipeline-utility-steps: {}
@@ -44,88 +46,3 @@
           enabled: true
           url: ${_param:jenkins_gerrit_url}/mcp-ci/pipeline-library
           credential_id: gerrit
-      approved_scripts:
-        - field java.lang.String value
-        - field java.util.ArrayList size
-        - method com.cloudbees.jenkins.plugins.sshcredentials.SSHUserPrivateKey getPrivateKey
-        - method com.cloudbees.plugins.credentials.common.IdCredentials getId
-        - method com.cloudbees.plugins.credentials.common.PasswordCredentials getPassword
-        - method com.cloudbees.plugins.credentials.common.UsernameCredentials getUsername
-        - method groovy.json.JsonBuilder toPrettyString
-        - method groovy.json.JsonSlurperClassic parseText java.lang.String
-        - method groovy.lang.GString getBytes
-        - method groovy.lang.GroovyObject getProperty java.lang.String
-        - method hudson.model.Run getEnvironment
-        - method java.io.File getAbsolutePath
-        - method java.io.File getName
-        - method java.io.File getParent
-        - method java.io.Writer write java.lang.String
-        - method java.lang.AutoCloseable close
-        - method java.lang.Class isInstance java.lang.Object
-        - method java.lang.Iterable iterator
-        - method java.net.HttpURLConnection getResponseCode
-        - method java.net.HttpURLConnection setRequestMethod java.lang.String
-        - method java.net.URI getHost
-        - method java.net.URI getPort
-        - method java.net.URL openConnection
-        - method java.net.URLConnection getHeaderField java.lang.String
-        - method java.net.URLConnection getInputStream
-        - method java.net.URLConnection getOutputStream
-        - method java.net.URLConnection setDoOutput boolean
-        - method java.net.URLConnection setRequestProperty java.lang.String java.lang.String
-        - method java.util.LinkedHashMap$LinkedHashIterator hasNext
-        - method java.util.Map size
-        - method java.util.regex.MatchResult group int
-        - method java.util.regex.Matcher matches
-        - method java.util.regex.Pattern matcher java.lang.CharSequence
-        - method org.jenkinsci.plugins.workflow.job.WorkflowRun doStop
-        - method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper build
-        - new groovy.json.JsonBuilder java.lang.Object
-        - new groovy.json.JsonSlurperClassic
-        - new java.io.File java.lang.String
-        - new java.io.OutputStreamWriter java.io.OutputStream
-        - new java.lang.Exception java.lang.String
-        - new java.lang.InterruptedException
-        - new java.net.URI java.lang.String
-        - new java.util.Date
-        - staticField groovy.io.FileType FILES
-        - staticMethod com.cloudbees.plugins.credentials.CredentialsProvider lookupCredentials java.lang.Class hudson.model.ItemGroup
-        - staticMethod java.lang.System getenv java.lang.String
-        - staticMethod jenkins.model.Jenkins getInstance
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods collect java.util.Map groovy.lang.Closure
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods eachFile java.io.File groovy.io.FileType groovy.lang.Closure
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods get java.util.Map java.lang.Object java.lang.Object
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Iterable int
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.String int
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getBytes java.io.File
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getText java.io.InputStream
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods hasProperty java.lang.Object java.lang.String
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object[]
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Iterable
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Object
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.util.Collection
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
-        - staticMethod org.codehaus.groovy.runtime.EncodingGroovyMethods encodeBase64 byte[]
-        - staticMethod org.codehaus.groovy.runtime.ScriptBytecodeAdapter bitwiseNegate java.lang.Object
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println java.lang.Object java.lang.Object
-        - method hudson.PluginWrapper getShortName
-        - method hudson.PluginManager getPlugins
-        - method jenkins.model.Jenkins getPluginManager
-        - method hudson.model.ItemGroup getItem java.lang.String
-        - method hudson.model.Job getLastBuild
-        - method hudson.model.Run getResult
-        - method hudson.model.Job getBuilds
-        - staticMethod java.lang.String format java.lang.String java.lang.Object[]
-        - staticMethod java.util.regex.Pattern quote java.lang.String
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods findAll java.util.List groovy.lang.Closure
-        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods find java.util.Collection groovy.lang.Closure
-        - method java.util.Collection remove java.lang.Object
-        - staticMethod java.lang.System exit int
-        - method hudson.model.ItemGroup getItems
-        - method hudson.model.Item getName
-        - method java.util.Map remove java.lang.Object
-        - staticMethod java.lang.System getProperty java.lang.String
-        - staticMethod java.lang.Integer valueOf java.lang.String
-        - method java.util.List subList int int
-
diff --git a/jenkins/client/job/aptly.yml b/jenkins/client/job/aptly.yml
index d5d8fcd..c6a5755 100644
--- a/jenkins/client/job/aptly.yml
+++ b/jenkins/client/job/aptly.yml
@@ -1,6 +1,16 @@
 parameters:
   jenkins:
     client:
+      view:
+        Aptly:
+          enabled: true
+          type: CategorizedJobsView
+          include_regex: "aptly-.*"
+          categories:
+            - group_regex: "aptly-.*-nightly-testing"
+              naming_rule: "Nightly -> Testing"
+            - group_regex: "aptly-.*-testing-stable"
+              naming_rule: "Testing -> Stable"
       job_template:
         aptly:
           name: aptly-{{operation}}-{{dist}}-{{source}}-{{target}}
diff --git a/jenkins/client/job/debian/init.yml b/jenkins/client/job/debian/init.yml
index d0b40a0..f24cccc 100644
--- a/jenkins/client/job/debian/init.yml
+++ b/jenkins/client/job/debian/init.yml
@@ -1,2 +1,15 @@
 classes:
   - system.jenkins.client.job.debian.packages
+parameters:
+  jenkins:
+    client:
+      view:
+        Debian:
+          enabled: true
+          type: CategorizedJobsView
+          include_regex: "build-debian-(?!salt-formula-).*"
+          categories:
+            - group_regex: ".*-ubuntu-trusty"
+              naming_rule: "Ubuntu Trusty"
+            - group_regex: ".*-ubuntu-xenial"
+              naming_rule: "Ubuntu Xenial"
diff --git a/jenkins/client/job/debian/packages/horizon/modules.yml b/jenkins/client/job/debian/packages/horizon/modules.yml
index 30d7c64..2b6477b 100644
--- a/jenkins/client/job/debian/packages/horizon/modules.yml
+++ b/jenkins/client/job/debian/packages/horizon/modules.yml
@@ -17,6 +17,18 @@
               dist: xenial
               os_version: mitaka
               branch: master
+            # Trusty
+            - name: horizon-contrail-panels
+              os: ubuntu
+              dist: trusty
+              os_version: mitaka
+              branch: stable/mitaka
+            # Xenial
+            - name: horizon-contrail-panels
+              os: ubuntu
+              dist: xenial
+              os_version: mitaka
+              branch: stable/mitaka
           template:
             discard:
               build:
diff --git a/jenkins/client/job/debian/packages/salt.yml b/jenkins/client/job/debian/packages/salt.yml
index 5375d60..68d361e 100644
--- a/jenkins/client/job/debian/packages/salt.yml
+++ b/jenkins/client/job/debian/packages/salt.yml
@@ -9,6 +9,8 @@
               dist: trusty
             - name: apache
               dist: trusty
+            - name: aptcacher
+              dist: trusty
             - name: aptly
               dist: trusty
             - name: artifactory
@@ -39,6 +41,8 @@
               dist: trusty
             - name: dekapod
               dist: trusty
+            - name: devops-portal
+              dist: trusty
             - name: docker
               dist: trusty
             - name: dovecot
@@ -123,6 +127,8 @@
               dist: trusty
             - name: opencontrail
               dist: trusty
+            - name: openldap
+              dist: trusty
             - name: openssh
               dist: trusty
             - name: openvpn
@@ -179,6 +185,8 @@
               dist: xenial
             - name: apache
               dist: xenial
+            - name: aptcacher
+              dist: xenial
             - name: aptly
               dist: xenial
             - name: artifactory
@@ -209,6 +217,8 @@
               dist: xenial
             - name: dekapod
               dist: xenial
+            - name: devops-portal
+              dist: xenial
             - name: docker
               dist: xenial
             - name: dovecot
@@ -293,6 +303,8 @@
               dist: xenial
             - name: opencontrail
               dist: xenial
+            - name: openldap
+              dist: xenial
             - name: openssh
               dist: xenial
             - name: openvpn
diff --git a/jenkins/client/job/deploy/init.yml b/jenkins/client/job/deploy/init.yml
index 102fe73..f25086d 100644
--- a/jenkins/client/job/deploy/init.yml
+++ b/jenkins/client/job/deploy/init.yml
@@ -2,3 +2,20 @@
   - system.jenkins.client.job.deploy.lab
   - system.jenkins.client.job.deploy.update
   - system.jenkins.client.job.deploy.openstack
+parameters:
+  jenkins:
+    client:
+      view:
+        Deploy:
+          enabled: true
+          type: CategorizedJobsView
+          include_regex: "deploy-.*"
+          categories:
+            - group_regex: "deploy-(heat|physical)-"
+              naming_rule: ""
+            - group_regex: "deploy-update-*"
+              naming_rule: "support"
+            - group_regex: "(mcp)[0-9]+"
+              naming_rule: ""
+            - group_regex: "(mk)[0-9]+"
+              naming_rule: ""
diff --git a/jenkins/client/job/deploy/lab/mk/init.yml b/jenkins/client/job/deploy/lab/mk/init.yml
index 7da9149..0bcfbc0 100644
--- a/jenkins/client/job/deploy/lab/mk/init.yml
+++ b/jenkins/client/job/deploy/lab/mk/init.yml
@@ -1,7 +1,6 @@
 parameters:
   _param:
     jenkins_deploy_lab_mk_jobs: []
-    jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
   jenkins:
     client:
       job_template:
@@ -30,7 +29,7 @@
                 default: "{{install}}"
               TEST:
                 type: string
-                default: ""
+                default: "{{test}}"
 
               # heat
               HEAT_TEMPLATE_URL:
@@ -41,7 +40,7 @@
                 default: "gerrit"
               HEAT_TEMPLATE_BRANCH:
                 type: string
-                default: "composite"
+                default: "master"
               HEAT_STACK_NAME:
                 type: string
                 description: Heat stack name. Will be generated if missing.
@@ -70,7 +69,7 @@
                 default: "salt-qa-credentials"
               SALT_MASTER_URL:
                 type: string
-                default: "${_param:jenkins_salt_api_url}"
+                default: ""
 
               # openstack api
               OPENSTACK_API_URL:
@@ -102,3 +101,7 @@
                 type: string
                 default: "sandbox-docker-prod-local.docker.mirantis.net/mirantis/rally_tempest:0.1"
 
+              ASK_ON_ERROR:
+                type: boolean
+                default: 'false'
+
diff --git a/jenkins/client/job/deploy/lab/mk/physical.yml b/jenkins/client/job/deploy/lab/mk/physical.yml
index a66909d..0767359 100644
--- a/jenkins/client/job/deploy/lab/mk/physical.yml
+++ b/jenkins/client/job/deploy/lab/mk/physical.yml
@@ -6,12 +6,16 @@
       - lab: mcp10_contrail
         install: core,kvm,openstack,contrail
         stack_type: physical
+        test: openstack
       - lab: mcp10_opencontrail_nfv
         install: core,kvm,openstack,nfv
         stack_type: physical
+        test: openstack
       - lab: mcp10_dvr
         install: core,kvm,openstack,dvr
         stack_type: physical
+        test: openstack
       - lab: mcp10_non_dvr
         install: core,kvm,openstack
         stack_type: physical
+        test: openstack
diff --git a/jenkins/client/job/deploy/lab/mk/virtual.yml b/jenkins/client/job/deploy/lab/mk/virtual.yml
index af65a4d..a97a22a 100644
--- a/jenkins/client/job/deploy/lab/mk/virtual.yml
+++ b/jenkins/client/job/deploy/lab/mk/virtual.yml
@@ -6,27 +6,40 @@
       - lab: virtual_mcp05_dvr
         install: core,openstack,dvr
         stack_type: heat
+        test: openstack
       - lab: virtual_mcp05_ovs
         install: core,openstack,ovs
         stack_type: heat
+        test: openstack
       - lab: virtual_mcp10_contrail
         install: core,openstack,contrail
         stack_type: heat
+        test: openstack
       - lab: virtual_mcp10_dvr
         install: core,openstack,dvr
         stack_type: heat
+        test: openstack
       - lab: virtual_mcp10_ovs
         install: core,openstack,ovs
         stack_type: heat
+        test: openstack
+      - lab: virtual_mcp10_k8s
+        install: core,k8s
+        stack_type: heat
+        test: k8s
       - lab: virtual_mk20_advanced
         install: core,openstack
         stack_type: heat
+        test: openstack
       - lab: virtual_mk20_basic
         install: core,openstack
         stack_type: heat
+        test: openstack
       - lab: virtual_mk22_advanced
         install: core,openstack
         stack_type: heat
+        test: openstack
       - lab: virtual_mk22_basic
         install: core,openstack
         stack_type: heat
+        test: openstack
diff --git a/jenkins/client/job/deploy/openstack.yml b/jenkins/client/job/deploy/openstack.yml
index 48de021..644b16b 100644
--- a/jenkins/client/job/deploy/openstack.yml
+++ b/jenkins/client/job/deploy/openstack.yml
@@ -31,3 +31,6 @@
             SALT_MASTER_URL:
               type: string
               default: ""
+            ASK_ON_ERROR:
+                type: boolean
+                default: 'false'
diff --git a/jenkins/client/job/opencontrail/build/generic.yml b/jenkins/client/job/opencontrail/build/generic.yml
index e994323..7516354 100644
--- a/jenkins/client/job/opencontrail/build/generic.yml
+++ b/jenkins/client/job/opencontrail/build/generic.yml
@@ -64,67 +64,6 @@
               credentials: "gerrit"
               github:
                 url: https://github.com/Mirantis/ccp-contrail-pipeline
-            trigger:
-              gerrit:
-                project:
-                  contrail/contrail-pipeline:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-build:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-controller:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-vrouter:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-third-party:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-generateDS:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-sandesh:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-packages:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-nova-vif-driver:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-neutron-plugin:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-nova-extensions:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-heat:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-storage:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-server-manager:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-controller:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-core:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-webui-third-party:
-                    branches:
-                      - "{{branch}}"
-                message:
-                  build_successful: "Build successful"
-                  build_unstable: "Build unstable"
-                  build_failure: "Build failed"
-                event:
-                  ref:
-                    - updated
             param:
               APTLY_URL:
                 type: string
diff --git a/jenkins/client/job/opencontrail/build/test.yml b/jenkins/client/job/opencontrail/build/test.yml
index 7b39b97..5a4666a 100644
--- a/jenkins/client/job/opencontrail/build/test.yml
+++ b/jenkins/client/job/opencontrail/build/test.yml
@@ -9,26 +9,14 @@
               os: ubuntu
               dist: trusty
               branch: R3.1
-            - buildname: oc31
-              os: ubuntu
-              dist: xenial
-              branch: R3.1
             - buildname: oc311
               os: ubuntu
               dist: trusty
               branch: R3.1.1.x
-            - buildname: oc311
-              os: ubuntu
-              dist: xenial
-              branch: R3.1.1.x
             - buildname: oc32
               os: ubuntu
               dist: trusty
               branch: R3.2
-            - buildname: oc32
-              os: ubuntu
-              dist: xenial
-              branch: R3.2
           template:
             discard:
              build:
@@ -36,72 +24,11 @@
              artifact:
                keep_num: 5
             type: workflow-scm
-            concurrent: false
+            concurrent: true
             quiet_period: 120
             scm:
               type: git
               url: "https://github.com/chnyda/contrail-unittest"
-            trigger:
-              gerrit:
-                project:
-                  contrail/contrail-pipeline:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-build:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-controller:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-vrouter:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-third-party:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-generateDS:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-sandesh:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-packages:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-nova-vif-driver:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-neutron-plugin:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-nova-extensions:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-heat:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-storage:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-server-manager:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-controller:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-web-core:
-                    branches:
-                      - "{{branch}}"
-                  contrail/contrail-webui-third-party:
-                    branches:
-                      - "{{branch}}"
-                message:
-                  build_successful: "Build successful"
-                  build_unstable: "Build unstable"
-                  build_failure: "Build failed"
-                event:
-                  ref:
-                    - updated
             param:
               SOURCE_URL:
                 type: string
@@ -125,3 +52,25 @@
               ARCH:
                 type: string
                 default: "amd64"
+            trigger:
+              gerrit:
+                project:
+                  contrail/contrail-controller:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-vrouter:
+                    branches:
+                      - "{{branch}}"
+                event:
+                  patchset:
+                    - created:
+                        excludeDrafts: false
+                        excludeTrivialRebase: false
+                        excludeNoCodeChange: false
+                  comment:
+                    - addedContains:
+                        commentAddedCommentContains: '(recheck|reverify)'
+            param:
+              TEST_MODELS:
+                type: string
+                default: "{{clusters}}"
\ No newline at end of file
diff --git a/jenkins/client/job/opencontrail/init.yml b/jenkins/client/job/opencontrail/init.yml
index 72ee4fe..b41a357 100644
--- a/jenkins/client/job/opencontrail/init.yml
+++ b/jenkins/client/job/opencontrail/init.yml
@@ -7,3 +7,21 @@
     contrail_kubernetes_branches: "master,release-1.2"
     contrail_dpdk_extra_branches: "mitaka,kilo,liberty-multiqueue"
     contrail_ceilometer_plugin_branches: "master"
+  jenkins:
+    client:
+      view:
+        Opencontrail:
+          enabled: true
+          type: CategorizedJobsView
+          include_regex: "build-opencontrail-.*"
+          categories:
+            - group_regex: "build-opencontrail-dpdk-extra-.*"
+              naming_rule: "DPDK Extras"
+            - group_regex: "build-opencontrail-oc303-.*"
+              naming_rule: "R3.0.3.x"
+            - group_regex: "build-opencontrail-oc31-.*"
+              naming_rule: "R3.1"
+            - group_regex: "build-opencontrail-oc311-.*"
+              naming_rule: "R3.1.1.x"
+            - group_regex: "build-opencontrail-oc32-.*"
+              naming_rule: "R3.2"
diff --git a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
index 207ae6b..e5771a2 100644
--- a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
+++ b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
@@ -9,6 +9,7 @@
           jobs:
             - name: aodh
             - name: apache
+            - name: aptcacher
             - name: aptly
             - name: artifactory
             - name: backupninja
@@ -26,6 +27,7 @@
             - name: cinder
             - name: collectd
             - name: dekapod
+            - name: devops-portal
             - name: docker
             - name: dovecot
             - name: elasticsearch
@@ -75,6 +77,7 @@
             - name: nova
             - name: ntp
             - name: opencontrail
+            - name: openldap
             - name: openssh
             - name: openvpn
             - name: openvstorage
diff --git a/jenkins/client/job/salt-formulas/init.yml b/jenkins/client/job/salt-formulas/init.yml
index c498032..8c8c2e2 100644
--- a/jenkins/client/job/salt-formulas/init.yml
+++ b/jenkins/client/job/salt-formulas/init.yml
@@ -2,3 +2,16 @@
   - system.jenkins.client.job.salt-formulas.git-mirrors
   - system.jenkins.client.job.salt-formulas.tests
   - system.jenkins.client.job.salt-formulas.release
+parameters:
+  jenkins:
+    client:
+      view:
+        "Salt formulas":
+          enabled: true
+          type: CategorizedJobsView
+          include_regex: "build-debian-salt-formula-.*"
+          categories:
+            - group_regex: ".*-ubuntu-trusty"
+              naming_rule: "Ubuntu Trusty"
+            - group_regex: ".*-ubuntu-xenial"
+              naming_rule: "Ubuntu Xenial"
diff --git a/jenkins/client/job/salt-formulas/tests.yml b/jenkins/client/job/salt-formulas/tests.yml
index 6988392..0dd7102 100644
--- a/jenkins/client/job/salt-formulas/tests.yml
+++ b/jenkins/client/job/salt-formulas/tests.yml
@@ -7,6 +7,7 @@
           jobs:
             - name: aodh
             - name: apache
+            - name: aptcacher
             - name: aptly
             - name: artifactory
             - name: backupninja
@@ -24,6 +25,7 @@
             - name: cinder
             - name: collectd
             - name: dekapod
+            - name: devops-portal
             - name: docker
             - name: dovecot
             - name: elasticsearch
@@ -73,6 +75,7 @@
             - name: nova
             - name: ntp
             - name: opencontrail
+            - name: openldap
             - name: openssh
             - name: openvpn
             - name: openvstorage
@@ -138,3 +141,10 @@
               CREDENTIALS_ID:
                 type: string
                 default: "gerrit"
+              DEFAULT_GIT_URL:
+                type: string
+                description: "Run against alternate system reclass"
+                default: "${_param:jenkins_gerrit_url}/salt-formulas/{{name}}"
+              DEFAULT_GIT_REF:
+                type: string
+                default: master
diff --git a/jenkins/client/job/salt-models/generate.yml b/jenkins/client/job/salt-models/generate.yml
new file mode 100644
index 0000000..a943b3b
--- /dev/null
+++ b/jenkins/client/job/salt-models/generate.yml
@@ -0,0 +1,57 @@
+parameters:
+  jenkins:
+    client:
+      job_template:
+        generate-salt-model:
+          name: generate-salt-model-{{cookiecutter_template}}
+          param:
+            cookiecutter_template:
+            - separated-products
+          template:
+            type: workflow-scm
+            concurrent: true
+            display_name: "Generate reclass cluster {{cookiecutter_template}}"
+            scm:
+              type: git
+              url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+              credentials: "jenkins-mk"
+              script: generate-cookiecutter-products.groovy
+            param:
+              COOKIECUTTER_TEMPLATE_URL:
+                type: string
+                default: "git@github.com:Mirantis/mk2x-cookiecutter-reclass-model.git"
+              COOKIECUTTER_TEMPLATE_CREDENTIALS:
+                type: string
+                default: github-credentials
+              COOKIECUTTER_TEMPLATE_BRANCH:
+                type: string
+                default: master
+              COOKIECUTTER_TEMPLATE_PATH:
+                type: string
+                default: "./"
+              COOKIECUTTER_INSTALL_CICD:
+                type: boolean
+                default: false
+              COOKIECUTTER_INSTALL_CONTRAIL:
+                type: boolean
+                default: false
+              COOKIECUTTER_INSTALL_KUBERNETES:
+                type: boolean
+                default: false
+              COOKIECUTTER_INSTALL_OPENSTACK:
+                type: boolean
+                default: false
+              COOKIECUTTER_INSTALL_STACKLIGHT:
+                type: boolean
+                default: false
+              COOKIECUTTER_TEMPLATE_CONTEXT:
+                type: string
+              RECLASS_MODEL_URL:
+                type: string
+                default: "${_param:jenkins_gerrit_url}/salt-models/training.git"
+              RECLASS_MODEL_CREDENTIALS:
+                type: string
+                default: gerrit
+              RECLASS_MODEL_BRANCH:
+                type: string
+                default: master
diff --git a/jenkins/client/job/salt-models/init.yml b/jenkins/client/job/salt-models/init.yml
index 9a98130..15690ea 100644
--- a/jenkins/client/job/salt-models/init.yml
+++ b/jenkins/client/job/salt-models/init.yml
@@ -1,6 +1,7 @@
 classes:
   - system.jenkins.client.job.salt-models.git-mirrors
   - system.jenkins.client.job.salt-models.tests
+  - system.jenkins.client.job.salt-models.generate
 parameters:
   _param:
     salt_formulas_branches: master
diff --git a/jenkins/client/job/salt-models/tests.yml b/jenkins/client/job/salt-models/tests.yml
index e451daf..72feaa1 100644
--- a/jenkins/client/job/salt-models/tests.yml
+++ b/jenkins/client/job/salt-models/tests.yml
@@ -40,14 +40,13 @@
               SALT_OPTS:
                 type: string
                 default: "--force-color"
-              GIT_URL:
-                type: string
-                default: "${_param:jenkins_gerrit_url}/salt-models/{{name}}"
-              RECLASS_SYSTEM_GIT_URL:
+              DEFAULT_GIT_URL:
                 type: string
                 description: "Run against alternate system reclass"
-              RECLASS_SYSTEM_GIT_REF:
+                default: "${_param:jenkins_gerrit_url}/salt-models/{{name}}"
+              DEFAULT_GIT_REF:
                 type: string
+                default: master
               CREDENTIALS_ID:
                 type: string
                 default: "gerrit"
diff --git a/jenkins/client/job/test_devops_portal.yml b/jenkins/client/job/test_devops_portal.yml
new file mode 100644
index 0000000..20f936b
--- /dev/null
+++ b/jenkins/client/job/test_devops_portal.yml
@@ -0,0 +1,43 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        test-devops-portal-unittests:
+          name: test-devops-portal-unittests
+          discard:
+            build:
+              keep_num: 10
+            artifact:
+              keep_num: 10
+          type: workflow-scm
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: test-nodejs-pipeline.groovy
+          trigger:
+            gerrit:
+              project:
+                "oss/devops-portal":
+                  branches:
+                    - master
+              event:
+                patchset:
+                  - created:
+                      excludeDrafts: false
+                      excludeTrivialRebase: false
+                      excludeNoCodeChange: false
+                comment:
+                  - addedContains:
+                      commentAddedCommentContains: '(recheck|reverify)'
+          param:
+            CREDENTIALS_ID:
+              type: string
+              default: "gerrit"
+            NODE_IMAGE:
+              type: string
+              default: "docker-sandbox.sandbox.mirantis.net/ikharin/ci/node-firefox:6.10"
+            COMMANDS:
+              type: string
+              default: "npm install\nnpm run test"
diff --git a/jenkins/client/security/ldap.yml b/jenkins/client/security/ldap.yml
index 8b7b97b..ba53570 100644
--- a/jenkins/client/security/ldap.yml
+++ b/jenkins/client/security/ldap.yml
@@ -1,7 +1,18 @@
 parameters:
+  _param:
+    jenkins_security_ldap_manager_dn: ''
+    jenkins_security_ldap_manager_password: ''
+    jenkins_security_ldap_user_search_filter: 'uid={0}'
+    jenkins_security_ldap_user_search_base: ''
+    jenkins_security_ldap_group_search_base: ''
   jenkins:
     client:
       security:
         ldap:
           server: ${_param:jenkins_security_ldap_server}
-          root_dn: ${_param:jenkins_security_root_dn}
+          root_dn: ${_param:jenkins_security_ldap_root_dn}
+          manager_dn: ${_param:jenkins_security_ldap_manager_dn}
+          manager_password: ${_param:jenkins_security_ldap_manager_password}
+          user_search: ${_param:jenkins_security_ldap_user_search_filter}
+          user_search_base: ${_param:jenkins_security_ldap_user_search_base}
+          group_search_base: ${_param:jenkins_security_ldap_group_search_base}
diff --git a/jenkins/client/security/matrix.yml b/jenkins/client/security/matrix.yml
new file mode 100644
index 0000000..b08aefd
--- /dev/null
+++ b/jenkins/client/security/matrix.yml
@@ -0,0 +1,49 @@
+parameters:
+  _param:
+    # Full admin access
+    jenkins_security_matrix_admins:
+      - ${_param:jenkins_client_user}
+      - admins
+    # Read only access
+    jenkins_security_matrix_read: []
+    # Read + permissions to build jobs
+    jenkins_security_matrix_build: []
+    # Build permissions + create/delete, whatever.
+    jenkins_security_matrix_write:
+      - ${_param:jenkins_client_user}
+
+  jenkins:
+    client:
+      security:
+        matrix:
+          permissions:
+            Jenkins:
+              ADMINISTER: ${_param:jenkins_security_matrix_admins}
+              READ: ${_param:jenkins_security_matrix_read}
+            hudson:
+              model:
+                Item:
+                  BUILD: ${_param:jenkins_security_matrix_build}
+                  CANCEL: ${_param:jenkins_security_matrix_build}
+                  CONFIGURE: ${_param:jenkins_security_matrix_write}
+                  CREATE: ${_param:jenkins_security_matrix_write}
+                  DELETE: ${_param:jenkins_security_matrix_write}
+                  DISCOVER: ${_param:jenkins_security_matrix_build}
+                  EXTENDED_READ: ${_param:jenkins_security_matrix_build}
+                  WIPEOUT: ${_param:jenkins_security_matrix_write}
+                  WORKSPACE: ${_param:jenkins_security_matrix_write}
+                  READ: ${_param:jenkins_security_matrix_read}
+                Run:
+                  DELETE: ${_param:jenkins_security_matrix_write}
+                  ARTIFACTS: ${_param:jenkins_security_matrix_write}
+                  UPDATE: ${_param:jenkins_security_matrix_write}
+                View:
+                  READ: ${_param:jenkins_security_matrix_read}
+            com:
+              sonyericsson:
+                hudson:
+                  plugins:
+                    gerrit:
+                      trigger:
+                        PluginImpl:
+                          RETRIGGER: ${_param:jenkins_security_matrix_build}
diff --git a/linux/system/repo/elasticsearch.yml b/linux/system/repo/elasticsearch.yml
index 6758f6d..60f6fd0 100644
--- a/linux/system/repo/elasticsearch.yml
+++ b/linux/system/repo/elasticsearch.yml
@@ -2,7 +2,7 @@
   linux:
     system:
       repo:
-        tcpcloud_elasticsearch:
-          source: "deb [arch=amd64] http://apt.tcpcloud.eu/nightly/ xenial elastic"
+        elasticsearch:
+          source: "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main"
           architectures: amd64
-          key_url: "http://apt.tcpcloud.eu/public.gpg"
\ No newline at end of file
+          key_url: "https://packages.elastic.co/GPG-KEY-elasticsearch"
\ No newline at end of file
diff --git a/linux/system/repo/glusterfs.yml b/linux/system/repo/glusterfs.yml
index da4cddf..3dfa9f9 100644
--- a/linux/system/repo/glusterfs.yml
+++ b/linux/system/repo/glusterfs.yml
@@ -3,7 +3,7 @@
     system:
       repo:
         glusterfs-ppa:
-          source: "deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu trusty main"
+          source: "deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu ${_param:linux_system_codename} main"
           architectures: amd64
           key_id: 3FE869A9
           key_server: keyserver.ubuntu.com
\ No newline at end of file
diff --git a/linux/system/repo/mcp/openstack.yml b/linux/system/repo/mcp/openstack.yml
index 372caf0..67c9cad 100644
--- a/linux/system/repo/mcp/openstack.yml
+++ b/linux/system/repo/mcp/openstack.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     mcp_repo_version: 1.0
+    apt_mk_version: stable 
   linux:
     system:
       repo:
@@ -24,3 +25,8 @@
           source: "deb http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename} ${_param:openstack_version}-holdback main"
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename}/archive-mcp${_param:mcp_repo_version}.key"
+        mk_openstack:
+          source: "deb [arch=amd64] http://apt-mk.mirantis.com/${_param:linux_system_codename}/ ${_param:apt_mk_version} ${_param:openstack_version}"
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
+
diff --git a/linux/system/repo/mos9.yml b/linux/system/repo/mos9.yml
index 9bc7c8c..3a3abe1 100644
--- a/linux/system/repo/mos9.yml
+++ b/linux/system/repo/mos9.yml
@@ -6,15 +6,27 @@
           source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0 main restricted"
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/archive-mos9.0.key"
+#          - pin: 'release a=mos9.0'
+#            priority: 1100
+#            package: '*'
         mirantis_openstack_hotfix:
           source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0-hotfix main restricted"
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/archive-mos9.0.key"
+#          - pin: 'release a=mos9.0-hotfix'
+#            priority: 1100
+#            package: '*'
         mirantis_openstack_security:
           source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0-security main restricted"
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/archive-mos9.0.key"
+#          - pin: 'release a=mos9.0-security'
+#            priority: 1100
+#            package: '*'
         mirantis_openstack_updates:
           source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0-updates main restricted"
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/archive-mos9.0.key"
+#          - pin: 'release a=mos9.0-updates'
+#            priority: 1100
+#            package: '*'
diff --git a/linux/system/repo_local/contrail.yml b/linux/system/repo_local/contrail.yml
index c78e68c..902c4d5 100644
--- a/linux/system/repo_local/contrail.yml
+++ b/linux/system/repo_local/contrail.yml
@@ -8,6 +8,6 @@
           refresh_db: ${_param:linux_repo_refresh_db}
           source: "deb [arch=amd64] http://${_param:local_repo_url}/contrail trusty main"
           pin:
-          - pin: 'release l=Local Contrail APT repository'
+          - pin: 'release l=contrail ubuntu-trusty'
             priority: ${_param:contrail_repo_pin_priority}
             package: '*'
diff --git a/linux/system/repo_local/glusterfs.yml b/linux/system/repo_local/glusterfs.yml
new file mode 100644
index 0000000..c34a6f2
--- /dev/null
+++ b/linux/system/repo_local/glusterfs.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        glusterfs:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} main"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
\ No newline at end of file
diff --git a/linux/system/repo_local/maas.yml b/linux/system/repo_local/maas.yml
new file mode 100644
index 0000000..ca65a79
--- /dev/null
+++ b/linux/system/repo_local/maas.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        maas:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/${_param:linux_system_codename}/ ${_param:apt_mk_version} maas"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
\ No newline at end of file
diff --git a/linux/system/repo_local/mcp/contrail.yml b/linux/system/repo_local/mcp/contrail.yml
new file mode 100644
index 0000000..158fda5
--- /dev/null
+++ b/linux/system/repo_local/mcp/contrail.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    linux_repo_contrail_component: oc311
+    contrail_repo_pin_priority: 200
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        mcp_opencontrail_${_param:linux_repo_contrail_component}:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} ${_param:linux_repo_contrail_component}"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/linux/system/repo_local/mcp/extra.yml b/linux/system/repo_local/mcp/extra.yml
new file mode 100644
index 0000000..67d85a5
--- /dev/null
+++ b/linux/system/repo_local/mcp/extra.yml
@@ -0,0 +1,12 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        mcp_extra:
+          default: true
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} extra"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
\ No newline at end of file
diff --git a/linux/system/repo_local/mcp/openstack.yml b/linux/system/repo_local/mcp/openstack.yml
new file mode 100644
index 0000000..29329d1
--- /dev/null
+++ b/linux/system/repo_local/mcp/openstack.yml
@@ -0,0 +1,45 @@
+parameters:
+  linux:
+    system:
+      repo:
+        mirantis_openstack:
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:openstack_version} main"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
+          pin:
+          - pin: 'release a=${_param:openstack_version}'
+            priority: 1100
+            package: '*'
+        mirantis_openstack_hotfix:
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:openstack_version}-hotfix main"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
+          pin:
+          - pin: 'release a=m${_param:openstack_version}-hotfix'
+            priority: 1100
+            package: '*'
+        mirantis_openstack_security:
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:openstack_version}-security main"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
+          pin:
+          - pin: 'release a=${_param:openstack_version}-security'
+            priority: 1100
+            package: '*'
+        mirantis_openstack_updates:
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:openstack_version}-updates main"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
+          pin:
+          - pin: 'release a=${_param:openstack_version}-updates'
+            priority: 1100
+            package: '*'
+        mirantis_openstack_holdback:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:openstack_version}-holdback main"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
+          pin:
+          - pin: 'release a=${_param:openstack_version}-holdback'
+            priority: 1100
+            package: '*'
diff --git a/linux/system/repo_local/mcp/salt.yml b/linux/system/repo_local/mcp/salt.yml
new file mode 100644
index 0000000..3abbf92
--- /dev/null
+++ b/linux/system/repo_local/mcp/salt.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        mcp_salt:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} salt"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
\ No newline at end of file
diff --git a/linux/system/repo_local/mos8.yml b/linux/system/repo_local/mos8.yml
index 29c6636..ddefdb7 100644
--- a/linux/system/repo_local/mos8.yml
+++ b/linux/system/repo_local/mos8.yml
@@ -7,7 +7,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0'
+          - pin: 'release a=mos8.0'
             priority: 1100
             package: '*'
         #mos8_openstack_hotfix:
@@ -15,7 +15,7 @@
         #  architectures: amd64
         #  key_url: "http://${_param:local_repo_url}/public.gpg"
         #  pin:
-        #  - pin: 'release s=mos8.0-hotfix'
+        #  - pin: 'release a=mos8.0-hotfix'
         #    priority: 1100
         #    package: '*'
         mos8_openstack_proposed:
@@ -23,7 +23,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-proposed'
+          - pin: 'release a=mos8.0-proposed'
             priority: 1100
             package: '*'
         #mos8_openstack_security:
@@ -31,7 +31,7 @@
         #  architectures: amd64
         #  key_url: "http://${_param:local_repo_url}/public.gpg"
         #  pin:
-        #  - pin: 'release s=mos8.0-security'
+        #  - pin: 'release a=mos8.0-security'
         #    priority: 1100
         #    package: '*'
         mos8_openstack_updates:
@@ -39,7 +39,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-updates'
+          - pin: 'release a=mos8.0-updates'
             priority: 1100
             package: '*'
         #mos8_murano:
@@ -48,6 +48,6 @@
         #  architectures: amd64
         #  key_url: "http://${_param:local_repo_url}/public.gpg"
         #  pin:
-        #  - pin: 'release s=mos8.0-proposed'
+        #  - pin: 'release a=mos8.0-proposed'
         #    priority: 1100
-        #    package: '*'
\ No newline at end of file
+        #    package: '*'
diff --git a/linux/system/repo_local/mos9.yml b/linux/system/repo_local/mos9.yml
index 6886185..5b6cdac 100644
--- a/linux/system/repo_local/mos9.yml
+++ b/linux/system/repo_local/mos9.yml
@@ -7,7 +7,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos9.0'
+          - pin: 'release a=mos9.0'
             priority: 1100
             package: '*'
         mos9_openstack_hotfix:
@@ -15,7 +15,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos9.0-hotfix'
+          - pin: 'release a=mos9.0-hotfix'
             priority: 1100
             package: '*'
         mos9_openstack_proposed:
@@ -23,7 +23,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos9.0-proposed'
+          - pin: 'release a=mos9.0-proposed'
             priority: 1100
             package: '*'
         mos9_openstack_security:
@@ -31,7 +31,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos9.0-security'
+          - pin: 'release a=mos9.0-security'
             priority: 1100
             package: '*'
         mos9_openstack_updates:
@@ -39,7 +39,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos9.0-updates'
+          - pin: 'release a=mos9.0-updates'
             priority: 1100
             package: '*'
         mos9_murano:
@@ -48,6 +48,6 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-proposed'
+          - pin: 'release a=mos8.0-proposed'
             priority: 1100
             package: '*'
diff --git a/linux/system/repo_local/openstack.yml b/linux/system/repo_local/openstack.yml
index 4754d12..a873afb 100644
--- a/linux/system/repo_local/openstack.yml
+++ b/linux/system/repo_local/openstack.yml
@@ -10,7 +10,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0'
+          - pin: 'release a=mos8.0'
             priority: 1000
             package: '*'
         mirantis_openstack_hotfix:
@@ -19,7 +19,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-hotfix'
+          - pin: 'release a=mos8.0-hotfix'
             priority: 1000
             package: '*'
         mirantis_openstack_proposed:
@@ -28,7 +28,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-proposed'
+          - pin: 'release a=mos8.0-proposed'
             priority: 1000
             package: '*'
         mirantis_openstack_security:
@@ -37,7 +37,7 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-security'
+          - pin: 'release a=mos8.0-security'
             priority: 1000
             package: '*'
         mirantis_openstack_updates:
@@ -46,6 +46,6 @@
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
           pin:
-          - pin: 'release s=mos8.0-updates'
+          - pin: 'release a=mos8.0-updates'
             priority: 1000
             package: '*'
diff --git a/murano/server/cluster.yml b/murano/server/cluster.yml
new file mode 100644
index 0000000..d698e7c
--- /dev/null
+++ b/murano/server/cluster.yml
@@ -0,0 +1,46 @@
+classes:
+- service.murano.server.cluster
+- service.keepalived.cluster.single
+- system.haproxy.proxy.listen.openstack.murano
+- service.rabbitmq.server.single
+parameters:
+  murano:
+    server:
+      enabled: true
+      version: ${_param:murano_version}
+      bind:
+        address: ${_param:single_address}
+        port: 8082
+      network:
+        external: ${_param:murano_external_network}
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name: murano
+        user: murano
+        password: ${_param:mysql_murano_password}
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        tenant: service
+        user: murano
+        password: ${_param:keystone_murano_password}
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        members:
+        - host: ${_param:openstack_messaging_queue_node01_address}
+        - host: ${_param:openstack_messaging_queue_node02_address}
+        - host: ${_param:openstack_messaging_queue_node03_address}
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+      murano_agent_queue:
+        engine: rabbitmq
+        host: ${_param:openstack_proxy_address}
+        port: 5673
+        user: openstack
+        password: ${_param:rabbitmq_murano_agent_password}
+        virtual_host: '/catalog'
diff --git a/murano/server/single.yml b/murano/server/single.yml
new file mode 100644
index 0000000..c3da9f8
--- /dev/null
+++ b/murano/server/single.yml
@@ -0,0 +1,41 @@
+classes:
+- service.murano.server.single
+- service.rabbitmq.server.single
+parameters:
+  murano:
+    server:
+      enabled: true
+      version: ${_param:murano_version}
+      bind:
+        address: ${_param:single_address}
+        port: 8082
+      network:
+        external: ${_param:murano_external_network}
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name: murano
+        user: murano
+        password: ${_param:mysql_murano_password}
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        tenant: service
+        user: murano
+        password: ${_param:keystone_murano_password}
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        host: ${_param:cluster_vip_address}
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+      murano_agent_queue:
+        engine: rabbitmq
+        host: ${_param:openstack_proxy_address}
+        port: 5673
+        user: openstack
+        password: ${_param:rabbitmq_murano_agent_password}
+        virtual_host: '/catalog'
diff --git a/mysql/client/database/murano.yml b/mysql/client/database/murano.yml
new file mode 100644
index 0000000..561ea3d
--- /dev/null
+++ b/mysql/client/database/murano.yml
@@ -0,0 +1,17 @@
+parameters:
+  mysql:
+    client:
+      server:
+        database:
+          database:
+            murano:
+              encoding: utf8
+              users:
+              - name: murano
+                password: ${_param:mysql_murano_password}
+                host: '%'
+                rights: all
+              - name: murano
+                password: ${_param:mysql_murano_password}
+                host: ${_param:single_address}
+                rights: all
\ No newline at end of file
diff --git a/mysql/client/database/sahara.yml b/mysql/client/database/sahara.yml
new file mode 100644
index 0000000..86497d8
--- /dev/null
+++ b/mysql/client/database/sahara.yml
@@ -0,0 +1,17 @@
+parameters:
+  mysql:
+    client:
+      server:
+        database:
+          database:
+            sahara:
+              encoding: utf8
+              users:
+              - name: sahara
+                password: ${_param:mysql_sahara_password}
+                host: '%'
+                rights: all
+              - name: sahara
+                password: ${_param:mysql_sahara_password}
+                host: ${_param:single_address}
+                rights: all
diff --git a/nginx/server/proxy/grafana_web.yml b/nginx/server/proxy/grafana_web.yml
index a1c7c49..66fa46b 100644
--- a/nginx/server/proxy/grafana_web.yml
+++ b/nginx/server/proxy/grafana_web.yml
@@ -1,18 +1,2 @@
-parameters:
-  nginx:
-    server:
-      enabled: true
-      site:
-        nginx_proxy_grafana:
-          enabled: true
-          type: nginx_proxy
-          name: grafana
-          proxy:
-            host: ${_param:stacklight_monitor_address}
-            port: 3000
-            protocol: http
-          host:
-            name: ${_param:cluster_public_host}
-            port: 8084
-            protocol: https
-          ssl: ${_param:nginx_proxy_ssl}
+classes:
+- system.nginx.server.proxy.stacklight.grafana
diff --git a/nginx/server/proxy/kibana_web.yml b/nginx/server/proxy/kibana_web.yml
index 1120c9c..0f3f41e 100644
--- a/nginx/server/proxy/kibana_web.yml
+++ b/nginx/server/proxy/kibana_web.yml
@@ -1,18 +1,2 @@
-parameters:
-  nginx:
-    server:
-      enabled: true
-      site:
-        nginx_proxy_kibana:
-          enabled: true
-          type: nginx_proxy
-          name: kibana
-          proxy:
-            host: ${_param:stacklight_monitor_address}
-            port: 5601
-            protocol: http
-          host:
-            name: ${_param:cluster_public_host}
-            port: 5601
-            protocol: https
-          ssl: ${_param:nginx_proxy_ssl}
+classes:
+- system.nginx.server.proxy.stacklight.kibana
diff --git a/nginx/server/proxy/nagios_web.yml b/nginx/server/proxy/nagios_web.yml
index 8b57929..919c74a 100644
--- a/nginx/server/proxy/nagios_web.yml
+++ b/nginx/server/proxy/nagios_web.yml
@@ -1,18 +1,2 @@
-parameters:
-  nginx:
-    server:
-      enabled: true
-      site:
-        nginx_proxy_nagios:
-          enabled: true
-          type: nginx_proxy
-          name: nagios
-          proxy:
-            host: ${_param:stacklight_monitor_address}
-            port: 80
-            protocol: http
-          host:
-            name: ${_param:cluster_public_host}
-            port: 8001
-            protocol: https
-          ssl: ${_param:nginx_proxy_ssl}
+classes:
+- system.nginx.server.proxy.stacklight.nagios
diff --git a/nginx/server/proxy/openstack/murano.yml b/nginx/server/proxy/openstack/murano.yml
new file mode 100644
index 0000000..a93b07e
--- /dev/null
+++ b/nginx/server/proxy/openstack/murano.yml
@@ -0,0 +1,19 @@
+  parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_murano:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_murano
+          proxy:
+            host: ${_param:nginx_proxy_openstack_api_proxy_host}
+            port: 8082
+            protocol: http
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8082
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nginx/server/proxy/openstack/sahara.yml b/nginx/server/proxy/openstack/sahara.yml
new file mode 100644
index 0000000..17ae236
--- /dev/null
+++ b/nginx/server/proxy/openstack/sahara.yml
@@ -0,0 +1,17 @@
+parameters:
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_sahara:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_sahara
+          proxy:
+            host: ${_param:nginx_proxy_openstack_api_proxy_host}
+            port: 8386
+            protocol: http
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 8386
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nova/compute/cluster.yml b/nova/compute/cluster.yml
index 7cb866b..f7b2ee5 100644
--- a/nova/compute/cluster.yml
+++ b/nova/compute/cluster.yml
@@ -2,7 +2,7 @@
 - service.nova.compute.kvm
 parameters:
   _param:
-    nova_vncproxy_url: http://${_param:cluster_vip_address}:6080
+    nova_vncproxy_url: https://${_param:cluster_public_host}:6080
     nova_compute_virtualization: kvm
     nova_compute_avail_zone:
     nova_compute_ssh_public: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCltIn93BcTMzNK/n2eBze6PyTkmIgdDkeXNR9X4DqE48Va80ojv2pq8xuaBxiNITJzyl+4p4UvTTXo+HmuX8qbHvqgMGXvuPUCpndEfb2r67f6vpMqPwMgBrUg2ZKgN4OsSDHU+H0dia0cEaTjz5pvbUy9lIsSyhrqOUVF9reJq+boAvVEedm8fUqiZuiejAw2D27+rRtdEPgsKMnh3626YEsr963q4rjU/JssV/iKMNu7mk2a+koOrJ+aHvcVU8zJjfA0YghoeVT/I3GLU/MB/4tD/RyR8GM+UYbI4sgAC7ZOCdQyHdJgnEzx3SJIwcS65U0T2XYvn2qXHXqJ9iGZ root@mirantis.com
diff --git a/nova/compute/single.yml b/nova/compute/single.yml
index 130f2e4..f50b937 100644
--- a/nova/compute/single.yml
+++ b/nova/compute/single.yml
@@ -4,6 +4,7 @@
 - service.nova.compute.kvm
 parameters:
   _param:
+    nova_vncproxy_url: https://${_param:cluster_public_host}:6080
     nova_compute_ssh_public: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCltIn93BcTMzNK/n2eBze6PyTkmIgdDkeXNR9X4DqE48Va80ojv2pq8xuaBxiNITJzyl+4p4UvTTXo+HmuX8qbHvqgMGXvuPUCpndEfb2r67f6vpMqPwMgBrUg2ZKgN4OsSDHU+H0dia0cEaTjz5pvbUy9lIsSyhrqOUVF9reJq+boAvVEedm8fUqiZuiejAw2D27+rRtdEPgsKMnh3626YEsr963q4rjU/JssV/iKMNu7mk2a+koOrJ+aHvcVU8zJjfA0YghoeVT/I3GLU/MB/4tD/RyR8GM+UYbI4sgAC7ZOCdQyHdJgnEzx3SJIwcS65U0T2XYvn2qXHXqJ9iGZ root@mirantis.com
     nova_compute_avail_zone:
     nova_compute_ssh_private: |
@@ -46,7 +47,7 @@
       enabled: true
       virtualization: kvm
       availability_zone: ${_param:nova_compute_avail_zone}
-      vncproxy_url: http://${_param:control_address}:6080
+      vncproxy_url: ${_param:nova_vncproxy_url}
       bind:
         vnc_address: ${_param:control_address}
         vnc_port: 6080
diff --git a/nova/compute/storage/ceph.yml b/nova/compute/storage/ceph.yml
index c271952..7cb24cb 100644
--- a/nova/compute/storage/ceph.yml
+++ b/nova/compute/storage/ceph.yml
@@ -6,5 +6,5 @@
         ephemeral: yes
         rbd_pool: ${_param:nova_storage_pool}
         secret_uuid: ${_param:nova_storage_secret_uuid}
-        client_cinder_key: ${_param:nova_storage_secret_uuid}
+        client_cinder_key: ${_param:nova_storage_client_key}
         rbd_user: ${_param:nova_storage_user}
\ No newline at end of file
diff --git a/opencontrail/control/cluster.yml b/opencontrail/control/cluster.yml
index a7015d5..4ffe081 100644
--- a/opencontrail/control/cluster.yml
+++ b/opencontrail/control/cluster.yml
@@ -3,6 +3,7 @@
 - service.keepalived.cluster.single
 - service.opencontrail.control.cluster
 - system.haproxy.proxy.listen.opencontrail.control
+- system.haproxy.proxy.listen.opencontrail.analytics
 parameters:
 # Temprorary fix for MOS9 packages to pin old version of kafka
   linux:
diff --git a/openldap/client/groups/admins.yml b/openldap/client/groups/admins.yml
new file mode 100644
index 0000000..36eac5f
--- /dev/null
+++ b/openldap/client/groups/admins.yml
@@ -0,0 +1,20 @@
+classes:
+  - system.openldap.client.groups
+parameters:
+  openldap:
+    client:
+      entry:
+        groups:
+          entry:
+            admins:
+              attr:
+                description: Administrators
+                gidNumber: 20001
+                memberUid:
+                  - admin
+              classes:
+                - posixGroup
+                - top
+              # TODO: Cannot set memberOf attributes in our LDAP yet
+              # member:
+              #   - cn=admin,ou=people
diff --git a/openldap/client/groups/init.yml b/openldap/client/groups/init.yml
new file mode 100644
index 0000000..a419001
--- /dev/null
+++ b/openldap/client/groups/init.yml
@@ -0,0 +1,9 @@
+parameters:
+  openldap:
+    client:
+      entry:
+        groups:
+          type: ou
+          classes:
+            - top
+            - organizationalUnit
diff --git a/openldap/client/init.yml b/openldap/client/init.yml
new file mode 100644
index 0000000..25812f6
--- /dev/null
+++ b/openldap/client/init.yml
@@ -0,0 +1,15 @@
+classes:
+  - service.openldap.client
+parameters:
+  _param:
+    openldap_server: ${_param:cluster_vip_address}
+    openldap_tls: false
+  openldap:
+    client:
+      server:
+        basedn: ${_param:openldap_dn}
+        host: ${_param:openldap_server}
+        tls: ${_param:openldap_tls}
+        auth:
+          user: cn=admin,${_param:openldap_dn}
+          password: ${_param:openldap_admin_password}
diff --git a/openldap/client/people/admin.yml b/openldap/client/people/admin.yml
new file mode 100644
index 0000000..fa1a2c8
--- /dev/null
+++ b/openldap/client/people/admin.yml
@@ -0,0 +1,26 @@
+classes:
+  - system.openldap.client.people
+  - system.openldap.client.groups.admins
+parameters:
+  openldap:
+    client:
+      entry:
+        people:
+          entry:
+            admin:
+              attr:
+                uid: admin
+                userPassword: ${_param:openldap_admin_password}
+                uidNumber: 20001
+                gidNumber: ${openldap:client:entry:groups:entry:admins:attr:gidNumber}
+                gecos: Administrator
+                givenName: Charlie
+                sn: Root
+                homeDirectory: /home/admin
+                loginShell: /bin/bash
+                mail: ${_param:admin_email}
+              classes:
+                - posixAccount
+                - inetOrgPerson
+                - top
+                - shadowAccount
diff --git a/openldap/client/people/init.yml b/openldap/client/people/init.yml
new file mode 100644
index 0000000..a4ae94d
--- /dev/null
+++ b/openldap/client/people/init.yml
@@ -0,0 +1,9 @@
+parameters:
+  openldap:
+    client:
+      entry:
+        people:
+          type: ou
+          classes:
+            - top
+            - organizationalUnit
diff --git a/openssh/server/team/tcpcloud.yml b/openssh/server/team/tcpcloud.yml
index 8b7073d..bdf29be 100644
--- a/openssh/server/team/tcpcloud.yml
+++ b/openssh/server/team/tcpcloud.yml
@@ -141,6 +141,12 @@
           sudo: true
           full_name: Sergey Matov
           home: /home/smatov
+        dcech:
+          enabled: true
+          name: dcech
+          sudo: true
+          full_name: Daniel Cech
+          home: /home/dcech
       group:
         libvirtd:
           enabled: true
@@ -259,6 +265,11 @@
           public_keys:
           - ${public_keys:smatov}
           user: ${linux:system:user:smatov}
+        dcech:
+          enabled: true
+          public_keys:
+          - ${public_keys:dcech}
+          user: ${linux:system:user:dcech}
   public_keys:
     askotnicky:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDO6EnDYaGdF/Nn6lntxDNnKanCsheZRdh8kA/6ImyeRSjT2cgepm1Fsgv7wXBYoy0OxhB5wgCp5Az/Pj4oLkG3g+G05sUPUxxGCGRiwjcnyQ/FTz4TzHglAVqgbdgWoQYf9Hg6EKZovvPcH3STbEwcl+MhLqvxz0wm5+StE+wvp6I9dEfRV+2/e1uepauOTZ1+Ui1DMNXiMefTlbiIBHzUk7RiwJWgqzQXBndgunmbJWSed8zC0Ug97waDOFIX/oKZmAmsv0NLJ2e/kC3oUTuziGT74F9sh7Pqiw/9HZxvP45hJwEvytfUjfuiikIBbmYdF7Je93czaG/qjXGN8YvP== a.skotnicky@tcpisek.cz
@@ -304,3 +315,5 @@
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCy6mFrr4oNdLjT5wBZj1+KXNpdawnGGWEevDBQ2SWFjxBFujkWVLiW1kxLTpLVSnuoE5FB7doRIsT/CDe9IU5OhsJ+z6TT56R/pfVKrVnSB1rgrwqdezjgmYEM6kTWiH2GKJE0yiQEPgagK8Rz5Zl420JkhbFWnL7EGPhxNtmYMGDTZwUTzP0KYmytyeH15OqNIiBGTrp1t2bTrVB8HRnUp0uDpfoWAUnsijVGNe1j1bNKtDO0Z9LAWx3eUyxIk4cdpX/EeWJg8jNrSMxtAZZ7Hhm/WInNSNqcHcZ1rEYCAjENxo1WVOuA/aqUqc5xaAipWNon4Rk0e0IUAaFOfLvN2lIuilUZ5XKHDe7a2crkGPnotheT9FgaEHOeFtpuhSaygeZHTMR197jeocgjWIkPqHjVAGSQqQf0TAdNuN73QPTigbbfHWWc1d8KlCM5BqJUXMHPG6BasE1sI/4ykYbxN/DAEvVJ4+rdIlqSdedd73ZAseVQjDtpzD8diScGrpdOhZnTm43q89F8dIFv7tt1TjIwvfcDQNSBjyyKcYpj+NTyW2Zk7qWDVz+lzH0ToYk/rOKkGlrsRy7OwOnmyKR8IcIOL7Bowj895ThCX8tBrdLu/m55ojBOcZiCpawCm7K55ri1Ar6i8cO+bHDh11kKRa/utRRSQTpsW0sbCsamzQ== lubos@lubos-ThinkPad-X1
     smatov:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgBHACRnY/VEEDFE63xDp4bx0zgWY4h1aB9/c2f962HtTNaQ6R/Cz6DLISaB5th8qzrzbvjn9WcpHdxyTm9BqkLLzB4qe7fnebPtn6zGczZ9Btrjk9R8Fuw6DZhSucSk572r/gVIY0O3Z1LajHkNr0ZTQS8AY3fgn8rXMD2vMOruOzyTOmfWKmEw7e+JYUqoFXHhE3Dd7hGQ99d6kH2N3zXfM2rzfjshGAq0kOi5dN4Hx6QIXZapt0t9TzpYTkK5SaVzuEVyVaKRLYSa/rdPjHkKqDFa99RcQ+OI93uvT9CFNWDFIC/TDJ2M+7PQbm836EICXXVWKjQ2NUnQJeOU5v smatov@ubuntu
+    dcech:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC8A26XMLUnXkxv4e/vByD4W4PQ0ZdgGZz5Tg6G/fQKuSa+9zRucG6IlOchJPikwrDyTrojHTGAClHPuyr2bPIRrjFy4oUTZNdjiDptV99Zv/kHRStYzPyZ4KabnFLJVKNtyKKagk6Z3wpzEjFjRHWJK7A5bIzHfd7Amx/frdLKRo9YZjGbLnZRw6mWGqZYyp2/5a/5rKqH1BhMQggDGkAwFGWYQByZzk2F81nDnkt3CY3bi24gX90w4mgFjP8B0m0QCEhcGqpfOKsQTnIyBCtztEHBiUplzBN+RHS4dDOIEs9SWrXLiMFakWu1Vr6bUa7v5xGaNN8XAWjd3xdsy4hvJjJHU5HPaMY9MGH+N6W0UUZxIF0MuxDNP03MDM1uA5mRWTdwffARaDySYaEUrUEYJmzFAtk700Jv/Aav7QixLoIeKU9SAKYvVb7XNlMWgiswQdRPoiMpXPXPw+bMhjpimHJa4n0KFGAUO/cRD1dpJKybqxDe2ip57JzpFkm5PxuNht5qmEreKcS5dWQqm0fDE9wv8cCUMnWQv36f0IDeVpftmeDREatqXSeUjES7NFQOgIQW5C5Pl+8ZHTXw46c/uh89gUILJT2tS/mOXaU4mELox1Qv8vc/laoGAec+TGD0flf75LfiuLOK6JOYX0QVW13ko1wc3CyJzHOi1sFEAw== daniel.cech@tcpcloud.eu
\ No newline at end of file
diff --git a/prometheus/server/target/dns.yml b/prometheus/server/target/dns.yml
new file mode 100644
index 0000000..1dd3afb
--- /dev/null
+++ b/prometheus/server/target/dns.yml
@@ -0,0 +1,14 @@
+parameters:
+  server:
+    target:
+      dns:
+        - name: 'pushgateway'
+          domain:
+          - 'tasks.prometheus_pushgateway'
+          type: A
+          port: 9091
+        - name: 'prometheus'
+          domain:
+          - 'tasks.prometheus_server'
+          type: A
+          port: 9090
diff --git a/prometheus/server/target/etcd.yml b/prometheus/server/target/etcd.yml
index e343bda..41204b5 100644
--- a/prometheus/server/target/etcd.yml
+++ b/prometheus/server/target/etcd.yml
@@ -1,6 +1,10 @@
-classes:
-- service.etcd.server.cluster
 parameters:
   server:
     target:
-      etcd: ${etcd:server:members}
+      etcd:
+        - host: ${_param:cluster_node01_address}
+          port: ${_param:cluster_node01_port}
+        - host: ${_param:cluster_node02_address}
+          port: ${_param:cluster_node02_port}
+        - host: ${_param:cluster_node03_address}
+          port: ${_param:cluster_node03_port}
diff --git a/prometheus/server/target/kubernetes.yml b/prometheus/server/target/kubernetes.yml
index 293895b..d77ab3f 100644
--- a/prometheus/server/target/kubernetes.yml
+++ b/prometheus/server/target/kubernetes.yml
@@ -1,10 +1,8 @@
-classes:
-- service.kubernetes.master.cluster
 parameters:
   server:
     target:
       kubernetes:
-        api_ip: ${kubernetes:master:apiserver:address}
+        api_ip: ${_param:kubernetes_control_address}
         ssl_dir: /opt/prometheus/config
         cert_name: kubelet-client.crt
         key_name: kubelet-client.key
diff --git a/rabbitmq/server/vhost/catalog.yml b/rabbitmq/server/vhost/catalog.yml
new file mode 100644
index 0000000..23cb0f2
--- /dev/null
+++ b/rabbitmq/server/vhost/catalog.yml
@@ -0,0 +1,20 @@
+parameters:
+  rabbitmq:
+    server:
+      host:
+        '/murano':
+          enabled: true
+          user: openstack
+          password: ${_param:rabbitmq_murano_agent_password}
+          policies:
+          - name: HA
+            pattern: '^(?!amq\.).*'
+            definition: '{"ha-mode": "all", "message-ttl": 120000}'
+      admin:
+        name: admin
+        password: zeQuooQu47eed8esahpie2Lai8En9ohp
+      bind:
+        address: ${_param:single_address}
+      management:
+        bind:
+          address: ${_param:single_address}
diff --git a/reclass/storage/system/cicd_control_cluster.yml b/reclass/storage/system/cicd_control_cluster.yml
index 35a8d15..547ba61 100644
--- a/reclass/storage/system/cicd_control_cluster.yml
+++ b/reclass/storage/system/cicd_control_cluster.yml
@@ -10,7 +10,7 @@
           name: ${_param:cicd_control_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.cicd.master
+          - cluster.${_param:cluster_name}.cicd.control.leader
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
@@ -21,7 +21,7 @@
           name: ${_param:cicd_control_node02_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.cicd.slave
+          - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
@@ -32,7 +32,7 @@
           name: ${_param:cicd_control_node03_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.cicd.slave
+          - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
diff --git a/reclass/storage/system/openstack_catalog_cluster.yml b/reclass/storage/system/openstack_catalog_cluster.yml
new file mode 100644
index 0000000..332e5d6
--- /dev/null
+++ b/reclass/storage/system/openstack_catalog_cluster.yml
@@ -0,0 +1,27 @@
+parameters:
+  _param:
+    openstack_catalog_node01_hostname: asc01
+    openstack_catalog_node02_hostname: asc02
+  reclass:
+    storage:
+      node:
+        openstack_catalog_node01:
+          name: ${_param:openstack_catalog_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.catalog
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_catalog_node01_address}
+            keepalived_vip_priority: 102
+        openstack_catalog_node02:
+          name: ${_param:openstack_catalog_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.catalog
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_catalog_node02_address}
+            keepalived_vip_priority: 101
diff --git a/reclass/storage/system/openstack_catalog_single.yml b/reclass/storage/system/openstack_catalog_single.yml
new file mode 100644
index 0000000..b48ab27
--- /dev/null
+++ b/reclass/storage/system/openstack_catalog_single.yml
@@ -0,0 +1,15 @@
+parameters:
+  _param:
+    openstack_catalog_node01_hostname: asc01
+  reclass:
+    storage:
+      node:
+        openstack_catalog_node01:
+          name: ${_param:openstack_catalog_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.catalog
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_catalog_node01_address}
diff --git a/reclass/storage/system/physical_control_cluster.yml b/reclass/storage/system/physical_control_cluster.yml
index 12b83c9..4622e09 100644
--- a/reclass/storage/system/physical_control_cluster.yml
+++ b/reclass/storage/system/physical_control_cluster.yml
@@ -1,57 +1,57 @@
 parameters:
   _param:
-    infra_compute_node01_hostname: kvm01
-    infra_compute_node02_hostname: kvm02
-    infra_compute_node03_hostname: kvm03
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
 
-    infra_compute_node01_deploy_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_deploy_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_deploy_address: ${_param:infra_compute_node03_address}
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
 
-    infra_compute_node01_storage_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_storage_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_storage_address: ${_param:infra_compute_node03_address}
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
 
-    infra_compute_node01_public_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_public_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_public_address: ${_param:infra_compute_node03_address}
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
 
   reclass:
     storage:
       node:
-        infra_compute_node01:
-          name: ${_param:infra_compute_node01_hostname}
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node01_address}
-            deploy_address: ${_param:infra_compute_node01_deploy_address}
-            public_address: ${_param:infra_compute_node01_public_address}
-            storage_address: ${_param:infra_compute_node01_storage_address}
-        infra_compute_node02:
-          name: ${_param:infra_compute_node02_hostname}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node02_address}
-            deploy_address: ${_param:infra_compute_node02_deploy_address}
-            public_address: ${_param:infra_compute_node02_public_address}
-            storage_address: ${_param:infra_compute_node02_storage_address}
-        infra_compute_node03:
-          name: ${_param:infra_compute_node03_hostname}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node03_address}
-            deploy_address: ${_param:infra_compute_node03_deploy_address}
-            public_address: ${_param:infra_compute_node03_public_address}
-            storage_address: ${_param:infra_compute_node03_storage_address}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
diff --git a/reclass/storage/system/physical_control_full.yml b/reclass/storage/system/physical_control_full.yml
index 7591113..0f510a4 100644
--- a/reclass/storage/system/physical_control_full.yml
+++ b/reclass/storage/system/physical_control_full.yml
@@ -1,153 +1,153 @@
 parameters:
   _param:
-    infra_compute_node01_hostname: kvm01
-    infra_compute_node02_hostname: kvm02
-    infra_compute_node03_hostname: kvm03
-    infra_compute_node04_hostname: kvm04
-    infra_compute_node05_hostname: kvm05
-    infra_compute_node06_hostname: kvm06
-    infra_compute_node07_hostname: kvm07
-    infra_compute_node08_hostname: kvm08
-    infra_compute_node09_hostname: kvm09
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
+    infra_kvm_node04_hostname: kvm04
+    infra_kvm_node05_hostname: kvm05
+    infra_kvm_node06_hostname: kvm06
+    infra_kvm_node07_hostname: kvm07
+    infra_kvm_node08_hostname: kvm08
+    infra_kvm_node09_hostname: kvm09
 
-    infra_compute_node01_deploy_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_deploy_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_deploy_address: ${_param:infra_compute_node03_address}
-    infra_compute_node04_deploy_address: ${_param:infra_compute_node04_address}
-    infra_compute_node05_deploy_address: ${_param:infra_compute_node05_address}
-    infra_compute_node06_deploy_address: ${_param:infra_compute_node06_address}
-    infra_compute_node07_deploy_address: ${_param:infra_compute_node07_address}
-    infra_compute_node08_deploy_address: ${_param:infra_compute_node08_address}
-    infra_compute_node09_deploy_address: ${_param:infra_compute_node09_address}
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_deploy_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_deploy_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_deploy_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_deploy_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_deploy_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_deploy_address: ${_param:infra_kvm_node09_address}
 
-    infra_compute_node01_storage_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_storage_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_storage_address: ${_param:infra_compute_node03_address}
-    infra_compute_node04_storage_address: ${_param:infra_compute_node04_address}
-    infra_compute_node05_storage_address: ${_param:infra_compute_node05_address}
-    infra_compute_node06_storage_address: ${_param:infra_compute_node06_address}
-    infra_compute_node07_storage_address: ${_param:infra_compute_node07_address}
-    infra_compute_node08_storage_address: ${_param:infra_compute_node08_address}
-    infra_compute_node09_storage_address: ${_param:infra_compute_node09_address}
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_storage_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_storage_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_storage_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_storage_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_storage_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_storage_address: ${_param:infra_kvm_node09_address}
 
-    infra_compute_node01_public_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_public_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_public_address: ${_param:infra_compute_node03_address}
-    infra_compute_node04_public_address: ${_param:infra_compute_node04_address}
-    infra_compute_node05_public_address: ${_param:infra_compute_node05_address}
-    infra_compute_node06_public_address: ${_param:infra_compute_node06_address}
-    infra_compute_node07_public_address: ${_param:infra_compute_node07_address}
-    infra_compute_node08_public_address: ${_param:infra_compute_node08_address}
-    infra_compute_node09_public_address: ${_param:infra_compute_node09_address}
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_public_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_public_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_public_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_public_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_public_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_public_address: ${_param:infra_kvm_node09_address}
 
   reclass:
     storage:
       node:
-        infra_compute_node01:
-          name: ${_param:infra_compute_node01_hostname}
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node01_address}
-            deploy_address: ${_param:infra_compute_node01_deploy_address}
-            public_address: ${_param:infra_compute_node01_public_address}
-            storage_address: ${_param:infra_compute_node01_storage_address}
-        infra_compute_node02:
-          name: ${_param:infra_compute_node02_hostname}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node02_address}
-            deploy_address: ${_param:infra_compute_node02_deploy_address}
-            public_address: ${_param:infra_compute_node02_public_address}
-            storage_address: ${_param:infra_compute_node02_storage_address}
-        infra_compute_node03:
-          name: ${_param:infra_compute_node03_hostname}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node03_address}
-            deploy_address: ${_param:infra_compute_node03_deploy_address}
-            public_address: ${_param:infra_compute_node03_public_address}
-            storage_address: ${_param:infra_compute_node03_storage_address}
-        infra_compute_node04:
-          name: ${_param:infra_compute_node04_hostname}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
+        infra_kvm_node04:
+          name: ${_param:infra_kvm_node04_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node04_address}
-            deploy_address: ${_param:infra_compute_node04_deploy_address}
-            public_address: ${_param:infra_compute_node04_public_address}
-            storage_address: ${_param:infra_compute_node04_storage_address}
-        infra_compute_node05:
-          name: ${_param:infra_compute_node05_hostname}
+            single_address: ${_param:infra_kvm_node04_address}
+            deploy_address: ${_param:infra_kvm_node04_deploy_address}
+            public_address: ${_param:infra_kvm_node04_public_address}
+            storage_address: ${_param:infra_kvm_node04_storage_address}
+        infra_kvm_node05:
+          name: ${_param:infra_kvm_node05_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node05_address}
-            deploy_address: ${_param:infra_compute_node05_deploy_address}
-            public_address: ${_param:infra_compute_node05_public_address}
-            storage_address: ${_param:infra_compute_node05_storage_address}
-        infra_compute_node06:
-          name: ${_param:infra_compute_node06_hostname}
+            single_address: ${_param:infra_kvm_node05_address}
+            deploy_address: ${_param:infra_kvm_node05_deploy_address}
+            public_address: ${_param:infra_kvm_node05_public_address}
+            storage_address: ${_param:infra_kvm_node05_storage_address}
+        infra_kvm_node06:
+          name: ${_param:infra_kvm_node06_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node06_address}
-            deploy_address: ${_param:infra_compute_node06_deploy_address}
-            public_address: ${_param:infra_compute_node06_public_address}
-            storage_address: ${_param:infra_compute_node06_storage_address}
-        infra_compute_node07:
-          name: ${_param:infra_compute_node07_hostname}
+            single_address: ${_param:infra_kvm_node06_address}
+            deploy_address: ${_param:infra_kvm_node06_deploy_address}
+            public_address: ${_param:infra_kvm_node06_public_address}
+            storage_address: ${_param:infra_kvm_node06_storage_address}
+        infra_kvm_node07:
+          name: ${_param:infra_kvm_node07_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node07_address}
-            deploy_address: ${_param:infra_compute_node07_deploy_address}
-            public_address: ${_param:infra_compute_node07_public_address}
-            storage_address: ${_param:infra_compute_node07_storage_address}
-        infra_compute_node08:
-          name: ${_param:infra_compute_node08_hostname}
+            single_address: ${_param:infra_kvm_node07_address}
+            deploy_address: ${_param:infra_kvm_node07_deploy_address}
+            public_address: ${_param:infra_kvm_node07_public_address}
+            storage_address: ${_param:infra_kvm_node07_storage_address}
+        infra_kvm_node08:
+          name: ${_param:infra_kvm_node08_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node08_address}
-            deploy_address: ${_param:infra_compute_node08_deploy_address}
-            public_address: ${_param:infra_compute_node08_public_address}
-            storage_address: ${_param:infra_compute_node08_storage_address}
-        infra_compute_node09:
-          name: ${_param:infra_compute_node09_hostname}
+            single_address: ${_param:infra_kvm_node08_address}
+            deploy_address: ${_param:infra_kvm_node08_deploy_address}
+            public_address: ${_param:infra_kvm_node08_public_address}
+            storage_address: ${_param:infra_kvm_node08_storage_address}
+        infra_kvm_node09:
+          name: ${_param:infra_kvm_node09_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node09_address}
-            deploy_address: ${_param:infra_compute_node09_deploy_address}
-            public_address: ${_param:infra_compute_node09_public_address}
-            storage_address: ${_param:infra_compute_node09_storage_address}
\ No newline at end of file
+            single_address: ${_param:infra_kvm_node09_address}
+            deploy_address: ${_param:infra_kvm_node09_deploy_address}
+            public_address: ${_param:infra_kvm_node09_public_address}
+            storage_address: ${_param:infra_kvm_node09_storage_address}
diff --git a/reclass/storage/system/physical_control_single.yml b/reclass/storage/system/physical_control_single.yml
index 1a604f1..32f09c3 100644
--- a/reclass/storage/system/physical_control_single.yml
+++ b/reclass/storage/system/physical_control_single.yml
@@ -1,21 +1,21 @@
 parameters:
   _param:
-    infra_compute_node01_hostname: kvm01
-    infra_compute_node01_deploy_address: ${_param:infra_compute_node01_address}
-    infra_compute_node01_storage_address: ${_param:infra_compute_node01_address}
-    infra_compute_node01_public_address: ${_param:infra_compute_node01_address}
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
   reclass:
     storage:
       node:
-        infra_compute_node01:
-          name: ${_param:infra_compute_node01_hostname}
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node01_address}
-            deploy_address: ${_param:infra_compute_node01_deploy_address}
-            public_address: ${_param:infra_compute_node01_public_address}
-            storage_address: ${_param:infra_compute_node01_storage_address}
\ No newline at end of file
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
diff --git a/sahara/server/cluster.yml b/sahara/server/cluster.yml
new file mode 100644
index 0000000..cdb7b04
--- /dev/null
+++ b/sahara/server/cluster.yml
@@ -0,0 +1,39 @@
+classes:
+- service.sahara.server.cluster
+- service.keepalived.cluster.single
+- system.haproxy.proxy.listen.openstack.sahara
+- service.haproxy.proxy.single
+parameters:
+  sahara:
+    server:
+      enabled: true
+      version: ${_param:sahara_version}
+      notification: false
+      bind:
+        address: ${_param:single_address}
+        port: 8386
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name: sahara
+        user: sahara
+        password: ${_param:mysql_sahara_password}
+      identity:
+        engine: keystone
+        protocol: http
+        host:  ${_param:openstack_control_address}
+        port: 35357
+        tenant: service
+        user: sahara
+        password: ${_param:keystone_sahara_password}
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        members:
+        - host: ${_param:openstack_message_queue_node01_address}
+        - host: ${_param:openstack_message_queue_node02_address}
+        - host: ${_param:openstack_message_queue_node03_address}
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
diff --git a/sahara/server/single.yml b/sahara/server/single.yml
new file mode 100644
index 0000000..01e7b38
--- /dev/null
+++ b/sahara/server/single.yml
@@ -0,0 +1,31 @@
+classes:
+- service.sahara.server.single
+parameters:
+  sahara:
+    server:
+      enabled: true
+      version: ${_param:sahara_version}
+      bind:
+        host: ${_param:single_address}
+        port: 8386
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name: sahara
+        user: sahara
+        password: ${_param:mysql_sahara_password}
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        user: sahara
+        password: ${_param:keystone_sahara_password}
+        tenant: service
+      message_queue:
+        engine: rabbitmq
+        host: ${_param:cluster_vip_address}
+        port: 5672
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
diff --git a/salt/master/formula/git/openstack.yml b/salt/master/formula/git/openstack.yml
index 86e23b2..36ddfc2 100644
--- a/salt/master/formula/git/openstack.yml
+++ b/salt/master/formula/git/openstack.yml
@@ -104,6 +104,10 @@
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-rabbitmq.git'
               revision: ${_param:salt_master_environment_revision}
+            sahara:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-sahara.git'
+              revision: ${_param:salt_master_environment_revision}
             statsd:
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-statsd.git'
diff --git a/salt/master/formula/git/oss.yml b/salt/master/formula/git/oss.yml
new file mode 100644
index 0000000..3c555ee
--- /dev/null
+++ b/salt/master/formula/git/oss.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    salt_master_oss_repository: https://gerrit.mcp.mirantis.net/oss
+    salt_master_oss_revision: master
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            devops_portal:
+              module:
+                devops_utils.py:
+                  enabled: true
+              source: git
+              address: '${_param:salt_master_oss_repository}/salt-formula-devops-portal.git'
+              revision: ${_param:salt_master_oss_revision}
diff --git a/salt/master/formula/pkg/foundation.yml b/salt/master/formula/pkg/foundation.yml
index abcc1b0..ebb2b00 100644
--- a/salt/master/formula/pkg/foundation.yml
+++ b/salt/master/formula/pkg/foundation.yml
@@ -4,6 +4,9 @@
       environment:
         prd:
           formula:
+            aptcacher:
+              source: pkg
+              name: salt-formula-aptcacher
             aptly:
               source: pkg
               name: salt-formula-aptly
@@ -19,4 +22,9 @@
             freeipa:
               source: pkg
               name: salt-formula-freeipa
-
+            maas:
+              source: pkg
+              name: salt-formula-maas
+            openldap:
+              source: pkg
+              name: salt-formula-openldap
diff --git a/salt/master/formula/pkg/openstack.yml b/salt/master/formula/pkg/openstack.yml
index 1269bd1..b1222d1 100644
--- a/salt/master/formula/pkg/openstack.yml
+++ b/salt/master/formula/pkg/openstack.yml
@@ -58,6 +58,9 @@
             mysql:
               source: pkg
               name: salt-formula-mysql
+            murano:
+              source: pkg
+              name: salt-formula-murano
             neutron:
               source: pkg
               name: salt-formula-neutron
@@ -76,6 +79,9 @@
             rabbitmq:
               source: pkg
               name: salt-formula-rabbitmq
+            sahara:
+              source: pkg
+              name: salt-formula-sahara
             statsd:
               source: pkg
               name: salt-formula-statsd
diff --git a/salt/master/formula/pkg/oss.yml b/salt/master/formula/pkg/oss.yml
new file mode 100644
index 0000000..1c0e90a
--- /dev/null
+++ b/salt/master/formula/pkg/oss.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            devops_portal:
+              source: pkg
+              name: salt-formula-devops-portal
diff --git a/salt/master/git.yml b/salt/master/git.yml
index 02d0b67..267bdb1 100644
--- a/salt/master/git.yml
+++ b/salt/master/git.yml
@@ -4,6 +4,7 @@
 - system.salt.master.formula.git.foundation
 - system.salt.master.formula.git.kubernetes
 - system.salt.master.formula.git.openstack
+- system.salt.master.formula.git.oss
 - system.salt.master.formula.git.saltstack
 - system.salt.master.formula.git.stacklight
 - system.salt.master.formula.git.monitoring
diff --git a/salt/master/pkg.yml b/salt/master/pkg.yml
index b075138..1001d49 100644
--- a/salt/master/pkg.yml
+++ b/salt/master/pkg.yml
@@ -4,6 +4,7 @@
 - system.salt.master.formula.pkg.foundation
 - system.salt.master.formula.pkg.kubernetes
 - system.salt.master.formula.pkg.openstack
+- system.salt.master.formula.pkg.oss
 - system.salt.master.formula.pkg.saltstack
 - system.salt.master.formula.pkg.stacklight
 - system.salt.master.formula.pkg.monitoring
diff --git a/salt/minion/cert/k8s_client_prometheus.yml b/salt/minion/cert/k8s_client_prometheus.yml
index 04cd374..138fce8 100644
--- a/salt/minion/cert/k8s_client_prometheus.yml
+++ b/salt/minion/cert/k8s_client_prometheus.yml
@@ -5,8 +5,9 @@
         k8s_client_prometheus:
           host: ${_param:salt_minion_ca_host}
           authority: ${_param:salt_minion_ca_authority}
-          key_file: /srv/volumes/prometheus-config/kubelet-client.key
-          cert_file: /srv/volumes/prometheus-config/kubelet-client.crt
+          key_file: /srv/volumes/prometheus/kubelet-client.key
+          cert_file: /srv/volumes/prometheus/kubelet-client.crt
           common_name: kubelet-client
           signing_policy: cert_client
           alternative_names: IP:${_param:cluster_vip_address},IP:${_param:cluster_node01_address},IP:${_param:cluster_node02_address},IP:${_param:cluster_node03_address},IP:${_param:kubernetes_internal_api_address}
+          mode: '0444'