Merge "Revert "Add http_listener input plugin to Telegraf""
diff --git a/aptly/server/mirror/debian/cassandra.yml b/aptly/server/mirror/debian/cassandra.yml
index 3d32e6a..846df4e 100644
--- a/aptly/server/mirror/debian/cassandra.yml
+++ b/aptly/server/mirror/debian/cassandra.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -14,5 +16,5 @@
           publisher:
             component: extra
             distributions:
-              - trusty/nightly
-              - xenial/nightly
+              - ubuntu-trusty/${_param:apt_mk_version}
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/debian/elasticsearch.yml b/aptly/server/mirror/debian/elasticsearch.yml
index 942b70a..ece60af 100644
--- a/aptly/server/mirror/debian/elasticsearch.yml
+++ b/aptly/server/mirror/debian/elasticsearch.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,8 +14,8 @@
           publisher:
             component: elastic
             distributions:
-              - trusty/nightly
-              - xenial/nightly
+              - trusty/${_param:apt_mk_version}
+              - xenial/${_param:apt_mk_version}
         kibana:
           source: http://packages.elasticsearch.org/kibana/4.4/debian
           distribution: stable
@@ -24,8 +26,8 @@
           publisher:
             component: elastic
             distributions:
-              - trusty/nightly
-              - xenial/nightly
+              - trusty/${_param:apt_mk_version}
+              - xenial/${_param:apt_mk_version}
         kibana-46:
           source: http://packages.elasticsearch.org/kibana/4.6/debian
           distribution: stable
@@ -36,8 +38,8 @@
           publisher:
             component: elastic
             distributions:
-              - trusty/nightly
-              - xenial/nightly
+              - trusty/${_param:apt_mk_version}
+              - xenial/${_param:apt_mk_version}
         elasticsearch-curator:
           source: http://packages.elastic.co/curator/4/debian
           distribution: stable
@@ -48,5 +50,5 @@
           publisher:
             component: elastic
             distributions:
-              - trusty/nightly
-              - xenial/nightly
+              - trusty/${_param:apt_mk_version}
+              - xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/debian/sensu.yml b/aptly/server/mirror/debian/sensu.yml
index 10f3926..0361538 100644
--- a/aptly/server/mirror/debian/sensu.yml
+++ b/aptly/server/mirror/debian/sensu.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -10,7 +12,7 @@
           gpgkeys:
             - EB9C94BB
           publisher:
-            component: extra
+            component: sensu
             distributions:
-              - trusty/nightly
-              - xenial/nightly
+              - ubuntu-trusty/${_param:apt_mk_version}
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/init.yml b/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/init.yml
index 553e6dd..35ae854 100644
--- a/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/init.yml
+++ b/aptly/server/mirror/ubuntu/trusty/mcp/apt_mk/init.yml
@@ -41,18 +41,6 @@
             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}
diff --git a/aptly/server/mirror/ubuntu/trusty/salt.yml b/aptly/server/mirror/ubuntu/trusty/salt.yml
index bfc4168..4c243b8 100644
--- a/aptly/server/mirror/ubuntu/trusty/salt.yml
+++ b/aptly/server/mirror/ubuntu/trusty/salt.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,5 +14,5 @@
           publisher:
             component: salt
             distributions:
-              - ubuntu-trusty/nightly
+              - ubuntu-trusty/${_param:apt_mk_version}
 
diff --git a/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml b/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml
index 3401a4e..eda0368 100644
--- a/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml
+++ b/aptly/server/mirror/ubuntu/xenial/ceph_mirantis.yml
@@ -1,9 +1,11 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
         ubuntu-xenial-ceph-mirantis:
-          source: http://eu.mirror.fuel-infra.org/decapod/ceph/apt
+          source: http://eu.mirror.fuel-infra.org/decapod/ceph/jewel-xenial
           distribution: jewel-xenial
           components: main
           architectures: amd64
@@ -12,15 +14,4 @@
           publisher:
             component: ceph-mirantis
             distributions:
-              - ubuntu-xenial/nightly
-        ubuntu-xenial-decapod-ceph-mirantis:
-          source: http://eu.mirror.fuel-infra.org/decapod/ceph/apt
-          distribution: jewel-xenial
-          components: main
-          architectures: amd64
-          gpgkeys:
-            - 460F3994
-          publisher:
-            component: main
-            distributions:
-              - ubuntu-xenial-decapod-ceph/nightly
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/docker.yml b/aptly/server/mirror/ubuntu/xenial/docker.yml
index 819de76..4334374 100644
--- a/aptly/server/mirror/ubuntu/xenial/docker.yml
+++ b/aptly/server/mirror/ubuntu/xenial/docker.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,4 +14,4 @@
           publisher:
             component: docker
             distributions:
-              - ubuntu-xenial/nightly
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/glusterfs.yml b/aptly/server/mirror/ubuntu/xenial/glusterfs.yml
index f8177a0..248de32 100644
--- a/aptly/server/mirror/ubuntu/xenial/glusterfs.yml
+++ b/aptly/server/mirror/ubuntu/xenial/glusterfs.yml
@@ -1,5 +1,6 @@
 parameters:
   _param:
+    apt_mk_version: stable
     glusterfs_version: 3.8
   aptly:
     server:
@@ -14,4 +15,4 @@
           publisher:
             component: glusterfs
             distributions:
-              - ubuntu-xenial/nightly
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/grafana.yml b/aptly/server/mirror/ubuntu/xenial/grafana.yml
index 2db0586..8dbb6ea 100644
--- a/aptly/server/mirror/ubuntu/xenial/grafana.yml
+++ b/aptly/server/mirror/ubuntu/xenial/grafana.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,4 +14,4 @@
           publisher:
             component: grafana
             distributions:
-              - ubuntu-xenial/nightly
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/influxdb.yml b/aptly/server/mirror/ubuntu/xenial/influxdb.yml
index 87930b9..a2ac597 100644
--- a/aptly/server/mirror/ubuntu/xenial/influxdb.yml
+++ b/aptly/server/mirror/ubuntu/xenial/influxdb.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,4 +14,4 @@
           publisher:
             component: influxdb
             distributions:
-              - ubuntu-xenial/nightly
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/maas.yml b/aptly/server/mirror/ubuntu/xenial/maas.yml
index 1382a09..0e4a559 100644
--- a/aptly/server/mirror/ubuntu/xenial/maas.yml
+++ b/aptly/server/mirror/ubuntu/xenial/maas.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,4 +14,4 @@
           publisher:
             component: maas
             distributions:
-              - xenial/nightly
+              - xenial/${_param:apt_mk_version}
diff --git a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/init.yml b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/init.yml
index 6272b69..a340a46 100644
--- a/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/init.yml
+++ b/aptly/server/mirror/ubuntu/xenial/mcp/apt_mk/init.yml
@@ -41,18 +41,6 @@
             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}
diff --git a/aptly/server/mirror/ubuntu/xenial/salt.yml b/aptly/server/mirror/ubuntu/xenial/salt.yml
index 9a9b34c..a100bde 100644
--- a/aptly/server/mirror/ubuntu/xenial/salt.yml
+++ b/aptly/server/mirror/ubuntu/xenial/salt.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    apt_mk_version: stable
   aptly:
     server:
       mirror:
@@ -12,4 +14,4 @@
           publisher:
             component: salt
             distributions:
-              - ubuntu-xenial/nightly
+              - ubuntu-xenial/${_param:apt_mk_version}
diff --git a/cinder/control/backend/solidfire.yml b/cinder/control/backend/solidfire.yml
new file mode 100644
index 0000000..20d708c
--- /dev/null
+++ b/cinder/control/backend/solidfire.yml
@@ -0,0 +1,14 @@
+parameters:
+  cinder:
+    controller:
+      defaul_volume_type: normal-storage
+      backend: 
+        solidfire:
+          engine: solidfire
+          type_name: normal-storage
+          engine: solidfire
+          san_ip: ${_param:san_ip_address}
+          san_login: ${_param:san_login}
+          san_password: ${_param:san_password}
+          clustername: ${_param:san_cluster_name}
+          sf_emulate_512: true
\ No newline at end of file
diff --git a/cinder/volume/backend/solidfire.yml b/cinder/volume/backend/solidfire.yml
new file mode 100644
index 0000000..3a38e03
--- /dev/null
+++ b/cinder/volume/backend/solidfire.yml
@@ -0,0 +1,15 @@
+parameters:
+  cinder:
+    volume:
+      enabled: true
+      default_volume_type: normal_storage
+      backend:
+        solidfire:
+          engine: solidfire
+          type_name: normal-storage
+          engine: solidfire
+          san_ip: ${_param:san_ip_address}
+          san_login: ${_param:san_login}
+          san_password: ${_param:san_password}
+          clustername: ${_param:san_cluster_name}
+          sf_emulate_512: true
diff --git a/designate/server/backend/pdns.yml b/designate/server/backend/pdns.yml
new file mode 100644
index 0000000..50ec3a2
--- /dev/null
+++ b/designate/server/backend/pdns.yml
@@ -0,0 +1,25 @@
+parameters:
+  designate:
+    server:
+      backend:
+        pdns4:
+          api_token: ${_param:designate_pdns_api_key}
+          api_endpoint: ${_param:designate_pdns_api_endpoint}
+  powerdns:
+    server:
+      enabled: true
+      bind:
+        address: ${_param:single_address}
+        port: 53
+      backend:
+        engine: sqlite
+        dbname: pdns.sqlite3
+        dbpath: /var/lib/powerdns
+      api:
+        enabled: true
+        key: ${_param:designate_pdns_api_key}
+      webserver:
+        enabled: true
+        address: ${_param:single_address}
+        port: ${_param:powerdns_webserver_port}
+        password: ${_param:powerdns_webserver_password}
diff --git a/devops_portal/service/elasticsearch.yml b/devops_portal/service/elasticsearch.yml
index b945af3..647c4ef 100644
--- a/devops_portal/service/elasticsearch.yml
+++ b/devops_portal/service/elasticsearch.yml
@@ -6,5 +6,5 @@
           configure_proxy: true
           endpoint:
             address: ${_param:haproxy_elasticsearch_bind_host}
-            port: ${_param:haproxy_elasticsearch_bind_port}
+            port: ${_param:haproxy_elasticsearch_http_bind_port}
             https: ${_param:haproxy_elasticsearch_ssl:enabled}
diff --git a/docker/swarm/service/dashboard/grafana_server.yml b/docker/swarm/service/dashboard/grafana_server.yml
deleted file mode 100644
index 9da7aa5..0000000
--- a/docker/swarm/service/dashboard/grafana_server.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-parameters:
-  _param:
-    docker_grafana_replicas: 1
-    grafana_database_type: sqlite3
-    grafana_database_host: localhost
-    grafana_database_port: 3306
-    grafana_database_password: password
-  docker:
-    client:
-      service:
-        grafana_server:
-          replicas: ${_param:docker_grafana_replicas}
-          environment:
-            GF_DATABASE_TYPE: ${_param:grafana_database_type}
-            GF_DATABASE_NAME: grafana
-            GF_DATABASE_USER: grafana
-            GF_DATABASE_PASSWORD: ${_param:grafana_database_password}
-            GF_DATABASE_HOST: "${_param:grafana_database_host}:${_param:grafana_database_port}"
-            GF_SECURITY_ADMIN_PASSWORD: ${_param:grafana_admin_password}
-          restart:
-            condition: any
-          image: ${_param:docker_image_grafana}
-          ports:
-            - 15013:3000
diff --git a/docker/swarm/stack/dashboard.yml b/docker/swarm/stack/dashboard.yml
index 934920f..2ee123b 100644
--- a/docker/swarm/stack/dashboard.yml
+++ b/docker/swarm/stack/dashboard.yml
@@ -1,12 +1,10 @@
 parameters:
   _param:
-    docker_grafana_replicas: 3
+    docker_grafana_replicas: 1
     grafana_database_type: sqlite3
     grafana_database_host: localhost
     grafana_database_port: 3306
     grafana_database_password: password
-    grafana_session_directory: /data/sessions
-    grafana_session_life_time: 86400
   docker:
     client:
       stack:
@@ -20,8 +18,6 @@
               image: ${_param:docker_image_grafana}
               ports:
                 - 15013:3000
-              volumes:
-                - /srv/glusterfs/grafana:${_param:grafana_session_directory}
               environment:
                 GF_DATABASE_TYPE: ${_param:grafana_database_type}
                 GF_DATABASE_NAME: grafana
@@ -29,6 +25,3 @@
                 GF_DATABASE_PASSWORD: ${_param:grafana_database_password}
                 GF_DATABASE_HOST: "${_param:grafana_database_host}:${_param:grafana_database_port}"
                 GF_SECURITY_ADMIN_PASSWORD: ${_param:grafana_admin_password}
-                GF_SESSION_PROVIDER: file
-                GF_SESSION_PROVIDER_CONFIG: ${_param:grafana_session_directory}
-                GF_SESSION_LIFE_TIME: ${_param:grafana_session_life_time}
diff --git a/docker/swarm/stack/elasticsearch.yml b/docker/swarm/stack/elasticsearch.yml
index 083388c..5ee295c 100644
--- a/docker/swarm/stack/elasticsearch.yml
+++ b/docker/swarm/stack/elasticsearch.yml
@@ -1,19 +1,29 @@
 parameters:
   _param:
     elasticsearch_replicas: 1
-    docker_image_oss_elasticsearch: docker-sandbox.sandbox.mirantis.net/vstoiko/oss/elasticsearch:latest
+    docker_image_elasticsearch: docker.elastic.co/elasticsearch/elasticsearch:5.4.1
+    elasticsearch_cluster_name: oss-cluster
+    elasticsearch_xpack_security_enabled: 'false'
+    elasticsearch_discovery_zen_minimum_master_nodes: 1
+    elasticsearch_discovery_type: single-node
   docker:
     client:
       stack:
         elasticsearch:
+          environment:
+            cluster.name: ${_param:elasticsearch_cluster_name}
+            xpack.security.enabled: ${_param:elasticsearch_xpack_security_enabled}
+            discovery.zen.minimum_master_nodes: ${_param:elasticsearch_discovery_zen_minimum_master_nodes}
+            discovery.type: ${_param:elasticsearch_discovery_type}
           service:
             cluster:
-              image: ${_param:docker_image_oss_elasticsearch}
+              image: ${_param:docker_image_elasticsearch}
               deploy:
                 replicas: ${_param:elasticsearch_replicas}
                 restart_policy:
                   condition: any
               ports:
-                - ${_param:haproxy_elasticsearch_exposed_port}:${_param:haproxy_elasticsearch_bind_port}
+                - ${_param:haproxy_elasticsearch_http_exposed_port}:${_param:haproxy_elasticsearch_http_bind_port}
+                - ${_param:haproxy_elasticsearch_binary_exposed_port}:${_param:haproxy_elasticsearch_binary_bind_port}
               volumes:
                 - /srv/volumes/elasticsearch:/usr/share/elasticsearch/data
diff --git a/docker/swarm/stack/janitor_monkey.yml b/docker/swarm/stack/janitor_monkey.yml
new file mode 100644
index 0000000..2d5f4a7
--- /dev/null
+++ b/docker/swarm/stack/janitor_monkey.yml
@@ -0,0 +1,24 @@
+parameters:
+  _param:
+    docker_janitor_monkey_replicas: 1
+    docker_image_mongodb: library/mongo:3.4
+    docker_mongodb_admin_username: admin
+    docker_mongodb_admin_password: password
+  docker:
+    client:
+      stack:
+        janitor_monkey:
+          environment:
+            MONGO_INITDB_ROOT_USERNAME: ${_param:docker_mongodb_admin_username}
+            MONGO_INITDB_ROOT_PASSWORD: ${_param:docker_mongodb_admin_password}
+          service:
+            mongodb:
+              image: ${_param:docker_image_mongodb}
+              deploy:
+                replicas: ${_param:docker_janitor_monkey_replicas}
+                restart_policy:
+                  condition: any
+              ports:
+                - ${_param:haproxy_mongodb_exposed_port}:${_param:haproxy_mongodb_bind_port}
+              volumes:
+                - /srv/volumes/mongodb:/data
diff --git a/docker/swarm/stack/privatebin.yml b/docker/swarm/stack/privatebin.yml
new file mode 100644
index 0000000..fb1e9fc
--- /dev/null
+++ b/docker/swarm/stack/privatebin.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    docker_image_privatebin: jgeusebroek/privatebin
+
+  docker:
+    client:
+      stack:
+        privatebin:
+          service:
+            server:
+              image: ${_param:docker_image_privatebin}
+              ports:
+                - 8099:80
+              volumes:
+                - /srv/volumes/privatebin/data:/privatebin/data
+                - /srv/volumes/privatebin/cfg:/privatebin/cfg
diff --git a/elasticsearch/client/pushkin/init.yml b/elasticsearch/client/pushkin/init.yml
new file mode 100644
index 0000000..9f37847
--- /dev/null
+++ b/elasticsearch/client/pushkin/init.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    pushkin_elasticsearch_host: ${_param:haproxy_elasticsearch_bind_host}
+    pushkin_elasticsearch_port: ${_param:haproxy_elasticsearch_http_bind_port}
+  elasticsearch:
+    client:
+      enabled: true
+      server:
+        host: ${_param:pushkin_elasticsearch_host}
+        port: ${_param:pushkin_elasticsearch_port}
\ No newline at end of file
diff --git a/elasticsearch/client/pushkin/notifications.yml b/elasticsearch/client/pushkin/notifications.yml
new file mode 100644
index 0000000..1d17c77
--- /dev/null
+++ b/elasticsearch/client/pushkin/notifications.yml
@@ -0,0 +1,42 @@
+parameters:
+  _param:
+    pushkin_notifications_shards: 5
+    pushkin_notifications_replicas: 1
+  elasticsearch:
+    client:
+      index:
+        notifications:
+          enabled: true
+          force_operation: true
+          definition:
+            template: notifications
+            settings:
+              number_of_shards: ${_param:pushkin_notifications_shards}
+              number_of_replicas: ${_param:pushkin_notifications_replicas}
+            mappings:
+              notification:
+                properties:
+                  applicationId:
+                    type: long
+                  content:
+                    type: text
+                    fields:
+                      keyword:
+                        type: keyword
+                        ignore_above: 256
+                  level:
+                    type: text
+                    fields:
+                      keyword:
+                        type: keyword
+                        ignore_above: 256
+                  read:
+                    type: boolean
+                  timestamp:
+                    type: date
+                  title:
+                    type: text
+                    fields:
+                      keyword:
+                        type: keyword
+                        ignore_above: 256
\ No newline at end of file
diff --git a/elasticsearch/server/curator.yml b/elasticsearch/server/curator.yml
index 82f34bb..e4e5ace 100644
--- a/elasticsearch/server/curator.yml
+++ b/elasticsearch/server/curator.yml
@@ -30,3 +30,23 @@
               unit: days
               unit_count: ${_param:elasticsearch_curator_retention_period}
               exclude:
+          - action: delete_indices
+            description: >-
+                Delete indices older than ${_param:elasticsearch_curator_retention_period} days (based on index name).
+            options:
+              ignore_empty_list: True
+              timeout_override:
+              continue_if_exception: False
+              disable_action: False
+            filters:
+            - filtertype: pattern
+              kind: regex
+              value: "^events_.*$"
+              exclude:
+            - filtertype: age
+              source: name
+              direction: older
+              timestring: '%Y-%m-%d'
+              unit: days
+              unit_count: ${_param:elasticsearch_curator_retention_period}
+              exclude:
\ No newline at end of file
diff --git a/galera/server/database/octavia.yml b/galera/server/database/octavia.yml
new file mode 100644
index 0000000..dfefb9c
--- /dev/null
+++ b/galera/server/database/octavia.yml
@@ -0,0 +1,15 @@
+parameters:
+  mysql:
+    server:
+      database:
+        octavia:
+          encoding: 'utf8'
+          users:
+          - name: 'octavia'
+            password: '${_param:mysql_octavia_password}'
+            host: '%'
+            rights: 'all'
+          - name: 'octavia'
+            password: '${_param:mysql_octavia_password}'
+            host: '${_param:cluster_local_address}'
+            rights: 'all'
diff --git a/glance/control/cluster.yml b/glance/control/cluster.yml
index b009e9e..6402721 100644
--- a/glance/control/cluster.yml
+++ b/glance/control/cluster.yml
@@ -42,4 +42,5 @@
           - host: ${_param:openstack_message_queue_node03_address}
       storage:
         engine: file
-      images: []
\ No newline at end of file
+      images: []
+      show_multiple_locations: True
diff --git a/glance/control/single.yml b/glance/control/single.yml
index 13f4434..458cd37 100644
--- a/glance/control/single.yml
+++ b/glance/control/single.yml
@@ -5,3 +5,4 @@
     server:
       database:
         host: ${_param:single_address}
+      show_multiple_locations: True
diff --git a/glusterfs/client/volume/keystone.yml b/glusterfs/client/volume/keystone.yml
index 7139029..822b61f 100644
--- a/glusterfs/client/volume/keystone.yml
+++ b/glusterfs/client/volume/keystone.yml
@@ -13,3 +13,9 @@
           user: keystone
           group: keystone
           opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
+        keystone-credential-keys:
+          path: /var/lib/keystone/credential-keys
+          server: ${_param:keystone_glusterfs_service_host}
+          user: keystone
+          group: keystone
+          opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
diff --git a/glusterfs/client/volume/mongodb.yml b/glusterfs/client/volume/mongodb.yml
new file mode 100644
index 0000000..1b2fd4f
--- /dev/null
+++ b/glusterfs/client/volume/mongodb.yml
@@ -0,0 +1,13 @@
+parameters:
+  _param:
+    mongodb_glusterfs_service_host: ${_param:glusterfs_service_host}
+    mongodb_glusterfs_node01_address: ${_param:cluster_node01_address}
+    mongodb_glusterfs_node02_address: ${_param:cluster_node02_address}
+    mongodb_glusterfs_node03_address: ${_param:cluster_node03_address}
+  glusterfs:
+    client:
+      volumes:
+        mongodb:
+          path: /srv/volumes/mongodb
+          server: ${_param:mongodb_glusterfs_service_host}
+          opts: "defaults,backup-volfile-servers=${_param:mongodb_glusterfs_node01_address}:${_param:mongodb_glusterfs_node02_address}:${_param:mongodb_glusterfs_node03_address}"
diff --git a/glusterfs/client/volume/grafana.yml b/glusterfs/client/volume/privatebin.yml
similarity index 67%
rename from glusterfs/client/volume/grafana.yml
rename to glusterfs/client/volume/privatebin.yml
index bd939c1..c096096 100644
--- a/glusterfs/client/volume/grafana.yml
+++ b/glusterfs/client/volume/privatebin.yml
@@ -1,13 +1,13 @@
 parameters:
   _param:
-    grafana_glusterfs_service_host: ${_param:glusterfs_service_host}
+    privatebin_glusterfs_service_host: ${_param:glusterfs_service_host}
     glusterfs_node01_address: ${_param:cluster_node01_address}
     glusterfs_node02_address: ${_param:cluster_node02_address}
     glusterfs_node03_address: ${_param:cluster_node03_address}
   glusterfs:
     client:
       volumes:
-        grafana:
-          path: /srv/volumes/grafana
-          server: ${_param:grafana_glusterfs_service_host}
+        privatebin:
+          path: /srv/volume/privatebin
+          server: ${_param:privatebin_glusterfs_service_host}
           opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
diff --git a/glusterfs/server/volume/grafana.yml b/glusterfs/server/volume/grafana.yml
deleted file mode 100644
index f099c99..0000000
--- a/glusterfs/server/volume/grafana.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-parameters:
-  glusterfs:
-    server:
-      volumes:
-        grafana:
-          storage: /srv/glusterfs/grafana
-          replica: 3
-          bricks:
-            - ${_param:cluster_node01_address}:/srv/glusterfs/grafana
-            - ${_param:cluster_node02_address}:/srv/glusterfs/grafana
-            - ${_param:cluster_node03_address}:/srv/glusterfs/grafana
-          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/keystone.yml b/glusterfs/server/volume/keystone.yml
index 229d787..2515fca 100644
--- a/glusterfs/server/volume/keystone.yml
+++ b/glusterfs/server/volume/keystone.yml
@@ -14,4 +14,17 @@
             nfs.disable: On
             network.remote-dio: On
             diagnostics.client-log-level: WARNING
-            diagnostics.brick-log-level: WARNING
\ No newline at end of file
+            diagnostics.brick-log-level: WARNING
+        keystone-credential-keys:
+          storage: /srv/glusterfs/keystone-credential-keys
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/keystone-credential-keys
+            - ${_param:cluster_node02_address}:/srv/glusterfs/keystone-credential-keys
+            - ${_param:cluster_node03_address}:/srv/glusterfs/keystone-credential-keys
+          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/mongodb.yml b/glusterfs/server/volume/mongodb.yml
new file mode 100644
index 0000000..a9c69f7
--- /dev/null
+++ b/glusterfs/server/volume/mongodb.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        mongodb:
+          storage: /srv/glusterfs/mongodb
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/mongodb
+            - ${_param:cluster_node02_address}:/srv/glusterfs/mongodb
+            - ${_param:cluster_node03_address}:/srv/glusterfs/mongodb
+          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/privatebin.yml b/glusterfs/server/volume/privatebin.yml
new file mode 100644
index 0000000..8be5a76
--- /dev/null
+++ b/glusterfs/server/volume/privatebin.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        privatebin:
+          storage: /srv/glusterfs/privatebin
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/privatebin
+            - ${_param:cluster_node02_address}:/srv/glusterfs/privatebin
+            - ${_param:cluster_node03_address}:/srv/glusterfs/privatebin
+          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/openstack/ironic_deploy.yml b/haproxy/proxy/listen/openstack/ironic_deploy.yml
new file mode 100644
index 0000000..f5e7a4f
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/ironic_deploy.yml
@@ -0,0 +1,24 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        ironic_deploy:
+          type: general-service
+          service_name: ironic_deploy
+          check: false
+          binds:
+          - address: ${_param:cluster_baremetal_vip_address}
+            port: 6385
+          servers:
+          - name: bmt01
+            host: ${_param:openstack_baremetal_node01_baremetal_address}
+            port: 6385
+            params: check
+          - name: bmt02
+            host: ${_param:openstack_baremetal_node02_baremetal_address}
+            port: 6385
+            params: check
+          - name: bmt03
+            host: ${_param:openstack_baremetal_node03_baremetal_address}
+            port: 6385
+            params: check
diff --git a/haproxy/proxy/listen/openstack/octavia.yml b/haproxy/proxy/listen/openstack/octavia.yml
new file mode 100644
index 0000000..7360557
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/octavia.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        octavia_api:
+          type: openstack-service
+          service_name: octavia
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 9876
+          servers:
+          - name: ctl01
+            host: ${_param:cluster_node01_address}
+            port: 9876
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl02
+            host: ${_param:cluster_node02_address}
+            port: 9876
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl03
+            host: ${_param:cluster_node03_address}
+            port: 9876
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
diff --git a/haproxy/proxy/listen/oss/elasticsearch.yml b/haproxy/proxy/listen/oss/elasticsearch.yml
index 2f5d1ee..3a4c98e 100644
--- a/haproxy/proxy/listen/oss/elasticsearch.yml
+++ b/haproxy/proxy/listen/oss/elasticsearch.yml
@@ -1,14 +1,16 @@
 parameters:
   _param:
     haproxy_elasticsearch_bind_host: ${_param:haproxy_bind_address}
-    haproxy_elasticsearch_bind_port: 9200
-    haproxy_elasticsearch_exposed_port: 19200
+    haproxy_elasticsearch_http_bind_port: 9200
+    haproxy_elasticsearch_http_exposed_port: 19200
+    haproxy_elasticsearch_binary_bind_port: 9300
+    haproxy_elasticsearch_binary_exposed_port: 19300
     haproxy_elasticsearch_ssl:
       enabled: false
   haproxy:
     proxy:
       listen:
-        elasticsearch:
+        elasticsearch_http:
           mode: http
           options:
             - forwardfor
@@ -21,18 +23,41 @@
               condition: "if { ssl_fc }"
           binds:
             - address: ${_param:haproxy_elasticsearch_bind_host}
-              port: ${_param:haproxy_elasticsearch_bind_port}
+              port: ${_param:haproxy_elasticsearch_http_bind_port}
               ssl: ${_param:haproxy_elasticsearch_ssl}
           servers:
             - name: ${_param:cluster_node01_name}
               host: ${_param:cluster_node01_address}
-              port: ${_param:haproxy_elasticsearch_exposed_port}
+              port: ${_param:haproxy_elasticsearch_http_exposed_port}
               params: check
             - name: ${_param:cluster_node02_name}
               host: ${_param:cluster_node02_address}
-              port: ${_param:haproxy_elasticsearch_exposed_port}
+              port: ${_param:haproxy_elasticsearch_http_exposed_port}
               params: backup check
             - name: ${_param:cluster_node03_name}
               host: ${_param:cluster_node03_address}
-              port: ${_param:haproxy_elasticsearch_exposed_port}
+              port: ${_param:haproxy_elasticsearch_http_exposed_port}
               params: backup check
+        elasticsearch_binary:
+          mode: tcp
+          options:
+            - tcpka
+            - tcplog
+          balance: source
+          binds:
+            - address: ${_param:haproxy_elasticsearch_bind_host}
+              port: ${_param:haproxy_elasticsearch_binary_bind_port}
+              ssl: ${_param:haproxy_elasticsearch_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_elasticsearch_binary_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_elasticsearch_binary_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_elasticsearch_binary_exposed_port}
+              params: backup check
\ No newline at end of file
diff --git a/haproxy/proxy/listen/oss/mongodb.yml b/haproxy/proxy/listen/oss/mongodb.yml
new file mode 100644
index 0000000..d4086cd
--- /dev/null
+++ b/haproxy/proxy/listen/oss/mongodb.yml
@@ -0,0 +1,51 @@
+parameters:
+  _param:
+    haproxy_mongodb_bind_host: ${_param:haproxy_bind_address}
+    haproxy_mongodb_bind_port: 27017
+    haproxy_mongodb_exposed_port: 37017
+    haproxy_mongodb_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      listen:
+        mongodb:
+          mode: tcp
+          balance: source
+          options:
+            - tcp-check
+          health-check:
+            tcp:
+              enabled: true
+              options:
+                - send-binary 39000000 # Message Length (57)
+                - send-binary EEEEEEEE # Request ID (random value)
+                - send-binary 00000000 # Response To (nothing)
+                - send-binary d4070000 # OpCode (Query)
+                - send-binary 00000000 # Query Flags
+                - send-binary 746573742e # fullCollectionName (test.$cmd)
+                - send-binary 24636d6400 # continued
+                - send-binary 00000000 # NumToSkip
+                - send-binary FFFFFFFF # NumToReturn
+                - send-binary 13000000 # Document Length (19)
+                - send-binary 01 # Type (Double)
+                - send-binary 70696e6700 # Ping:
+                - send-binary 000000000000f03f # Value : 1
+                - send-binary 00 # Term
+                - expect string ok
+          binds:
+            - address: ${_param:haproxy_mongodb_bind_host}
+              port: ${_param:haproxy_mongodb_bind_port}
+              ssl: ${_param:haproxy_mongodb_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_mongodb_exposed_port}
+              params: check port ${_param:haproxy_mongodb_exposed_port}
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_mongodb_exposed_port}
+              params: backup check port ${_param:haproxy_mongodb_exposed_port}
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_mongodb_exposed_port}
+              params: backup check port ${_param:haproxy_mongodb_exposed_port}
diff --git a/haproxy/proxy/listen/privatebin.yml b/haproxy/proxy/listen/privatebin.yml
new file mode 100644
index 0000000..5588211
--- /dev/null
+++ b/haproxy/proxy/listen/privatebin.yml
@@ -0,0 +1,29 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        privatebin:
+          mode: http
+          service_name: privatebin
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          binds:
+            - address: ${_param:cluster_vip_address}
+              port: 8099
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 8099
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 8099
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 8099
+              params: backup check
diff --git a/haproxy/proxy/listen/stacklight/redis.yml b/haproxy/proxy/listen/stacklight/redis.yml
index 881e8ed..7bc5ea6 100644
--- a/haproxy/proxy/listen/stacklight/redis.yml
+++ b/haproxy/proxy/listen/stacklight/redis.yml
@@ -5,6 +5,8 @@
         redis:
           mode: tcp
           check: False
+          options:
+          - tcp-check
           health-check:
             tcp:
               options:
diff --git a/ironic/api/cluster.yml b/ironic/api/cluster.yml
index c476c40..c3a7901 100644
--- a/ironic/api/cluster.yml
+++ b/ironic/api/cluster.yml
@@ -6,4 +6,4 @@
       enabled: true
       version: ${_param:ironic_version}
       bind:
-        address: ${_param:cluster_local_address}
+        address: ${_param:cluster_baremetal_local_address}
diff --git a/ironic/conductor/cluster.yml b/ironic/conductor/cluster.yml
index ad4666f..ba0c538 100644
--- a/ironic/conductor/cluster.yml
+++ b/ironic/conductor/cluster.yml
@@ -3,4 +3,4 @@
 parameters:
   ironic:
     conductor:
-      api_url: 'http://${_param:cluster_vip_address}'
+      api_url: 'http://${_param:cluster_baremetal_vip_address}:6385'
diff --git a/jenkins/client/init.yml b/jenkins/client/init.yml
index ef0241d..b37c48f 100644
--- a/jenkins/client/init.yml
+++ b/jenkins/client/init.yml
@@ -13,7 +13,7 @@
       master:
         host: ${_param:jenkins_master_host}
         port: ${_param:jenkins_master_port}
-        user: ${_param:jenkins_client_user}
+        username: ${_param:jenkins_client_user}
         password: ${_param:jenkins_client_password}
       plugin:
         ansicolor: {}
diff --git a/jenkins/client/job/debian/packages/extra.yml b/jenkins/client/job/debian/packages/extra.yml
index fe50cd6..c779cfe 100644
--- a/jenkins/client/job/debian/packages/extra.yml
+++ b/jenkins/client/job/debian/packages/extra.yml
@@ -153,6 +153,10 @@
               dist: xenial
               build: pipeline
               branch: debian/xenial
+            - package: jmx-exporter
+              dist: xenial
+              build: jmx-exporter
+              branch: master
           template:
             type: workflow-scm
             concurrent: false
diff --git a/jenkins/client/job/debian/packages/horizon/modules.yml b/jenkins/client/job/debian/packages/horizon/modules.yml
index d3deab7..4fe4966 100644
--- a/jenkins/client/job/debian/packages/horizon/modules.yml
+++ b/jenkins/client/job/debian/packages/horizon/modules.yml
@@ -6,6 +6,18 @@
           name: build-debian-horizon-module-{{name}}-{{os_version}}-{{os}}-{{dist}}
           jobs:
             # Trusty
+            - name: horizon-avi-panels
+              os: ubuntu
+              dist: trusty
+              os_version: mitaka
+              branch: stable/mitaka
+            # Xenial
+            - name: horizon-avi-panels
+              os: ubuntu
+              dist: xenial
+              os_version: mitaka
+              branch: stable/mitaka
+            # Trusty
             - name: horizon-neutron-lbaasv2-panel
               os: ubuntu
               dist: trusty
diff --git a/jenkins/client/job/deploy/update/saltenv.yml b/jenkins/client/job/deploy/update/saltenv.yml
index 397e3f3..1ce1494 100644
--- a/jenkins/client/job/deploy/update/saltenv.yml
+++ b/jenkins/client/job/deploy/update/saltenv.yml
@@ -5,6 +5,7 @@
   _param:
     jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
     jenkins_salt_model_name: "salt"
+    jenkins_salt_model_branch: "master"
   jenkins:
     client:
       job_template:
@@ -21,6 +22,7 @@
             scm:
               type: git
               url: "${_param:jenkins_gerrit_url}/salt-models/{{name}}"
+              branch: ${_param:jenkins_salt_model_branch}
               credentials: "gerrit"
               script: Jenkinsfile
             param:
diff --git a/jenkins/client/job/deploy/update/upgrade_compute.yml b/jenkins/client/job/deploy/update/upgrade_compute.yml
index 0d7ea78..6fc6ef1 100644
--- a/jenkins/client/job/deploy/update/upgrade_compute.yml
+++ b/jenkins/client/job/deploy/update/upgrade_compute.yml
@@ -7,7 +7,7 @@
   jenkins:
     client:
       job:
-        deploy-update-package:
+        deploy-upgrade-compute:
           type: workflow-scm
           concurrent: true
           display_name: "Deploy - upgrade computes"
@@ -27,9 +27,6 @@
               type: string
               default: "*"
               description: Salt compound target to match nodes to be updated [*, G@osfamily:debian].
-            TARGET_PACKAGES:
-              type: string
-              description: Space delimited list of packages to be updates [package1=version package2=version], empty string means all updating all packages to the latest version.
             TARGET_SUBSET_TEST:
               type: string
               description: Number of nodes to list package updates, empty string means all targetted nodes.
@@ -37,6 +34,3 @@
               type: string
               default: '1'
               description: Number of selected nodes to live apply selected package update.
-            TARGET_BATCH_LIVE:
-              type: string
-              description: Batch size for the complete live package update on all nodes, empty string means apply to all targetted nodes.
diff --git a/jenkins/client/job/docker/build-images.yml b/jenkins/client/job/docker/build-images.yml
index e9e7447..ca1d058 100644
--- a/jenkins/client/job/docker/build-images.yml
+++ b/jenkins/client/job/docker/build-images.yml
@@ -6,7 +6,11 @@
           name: "docker-build-images-{{name}}"
           jobs:
             - name: aptly
+              repo: mk
             - name: ci
+              repo: mk
+            - name: prometheus
+              repo: mcp
           template:
             discard:
               build:
@@ -17,7 +21,7 @@
             concurrent: true
             scm:
               type: git
-              url: "${_param:jenkins_gerrit_url}/mk/docker-{{name}}"
+              url: "${_param:jenkins_gerrit_url}/{{repo}}/docker-{{name}}"
               credentials: "gerrit"
             trigger:
               gerrit:
@@ -31,7 +35,7 @@
             param:
               IMAGE_GIT_URL:
                 type: string
-                default: "${_param:jenkins_gerrit_url}/mk/docker-{{name}}"
+                default: "${_param:jenkins_gerrit_url}/{{repo}}/docker-{{name}}"
               IMAGE_BRANCH:
                 type: string
                 default: "master"
diff --git a/jenkins/client/job/opencontrail/build/test.yml b/jenkins/client/job/opencontrail/build/test.yml
index 5a4666a..9b66e60 100644
--- a/jenkins/client/job/opencontrail/build/test.yml
+++ b/jenkins/client/job/opencontrail/build/test.yml
@@ -62,15 +62,13 @@
                     branches:
                       - "{{branch}}"
                 event:
-                  patchset:
-                    - created:
-                        excludeDrafts: false
-                        excludeTrivialRebase: false
-                        excludeNoCodeChange: false
-                  comment:
+                 comment:
+                    - added:
+                        verdictCategory: 'Code-Review'
+                        commentAddedTriggerApprovalValue: '+1'
                     - addedContains:
                         commentAddedCommentContains: '(recheck|reverify)'
             param:
               TEST_MODELS:
                 type: string
-                default: "{{clusters}}"
\ No newline at end of file
+                default: "{{clusters}}"
diff --git a/jenkins/client/job/salt-formulas/tests.yml b/jenkins/client/job/salt-formulas/tests.yml
index 99ac553..60f4f3f 100644
--- a/jenkins/client/job/salt-formulas/tests.yml
+++ b/jenkins/client/job/salt-formulas/tests.yml
@@ -134,12 +134,10 @@
                     branches:
                       - master
                 event:
-                  patchset:
-                    - created:
-                        excludeDrafts: false
-                        excludeTrivialRebase: false
-                        excludeNoCodeChange: false
                   comment:
+                    - added:
+                        verdictCategory: 'Code-Review'
+                        commentAddedTriggerApprovalValue: '+1'
                     - addedContains:
                         commentAddedCommentContains: '(recheck|reverify)'
             param:
diff --git a/jenkins/client/job/salt-models/tests.yml b/jenkins/client/job/salt-models/tests.yml
index 58de9b2..dadd255 100644
--- a/jenkins/client/job/salt-models/tests.yml
+++ b/jenkins/client/job/salt-models/tests.yml
@@ -19,14 +19,13 @@
                 project:
                   salt-models/{{name}}:
                     branches:
-                      - master
+                      - compare_type: "REG_EXP"
+                        name: "{{branch}}"
                 event:
-                  patchset:
-                    - created:
-                        excludeDrafts: false
-                        excludeTrivialRebase: false
-                        excludeNoCodeChange: false
                   comment:
+                    - added:
+                        verdictCategory: 'Code-Review'
+                        commentAddedTriggerApprovalValue: '+1'
                     - addedContains:
                         commentAddedCommentContains: '(recheck|reverify)'
             param:
@@ -102,12 +101,10 @@
                     branches:
                       - master
                 event:
-                  patchset:
-                    - created:
-                        excludeDrafts: false
-                        excludeTrivialRebase: false
-                        excludeNoCodeChange: false
                   comment:
+                    - added:
+                        verdictCategory: 'CodeReview'
+                        commentAddedTriggerApprovalValue: '+1'
                     - addedContains:
                         commentAddedCommentContains: '(recheck|reverify)'
             param:
@@ -129,3 +126,6 @@
               PARALLEL_NODE_GROUP_SIZE:
                 type: string
                 default: "1"
+              EXTRA_FORMULAS:
+                type: string
+                default: "xtrabackup"
diff --git a/jenkins/client/security/matrix.yml b/jenkins/client/security/matrix.yml
index b08aefd..a0ecc1e 100644
--- a/jenkins/client/security/matrix.yml
+++ b/jenkins/client/security/matrix.yml
@@ -5,9 +5,11 @@
       - ${_param:jenkins_client_user}
       - admins
     # Read only access
-    jenkins_security_matrix_read: []
+    jenkins_security_matrix_read:
+      - mirantis
     # Read + permissions to build jobs
-    jenkins_security_matrix_build: []
+    jenkins_security_matrix_build:
+      - mirantis
     # Build permissions + create/delete, whatever.
     jenkins_security_matrix_write:
       - ${_param:jenkins_client_user}
diff --git a/keepalived/cluster/instance/openstack_baremetal_vip.yml b/keepalived/cluster/instance/openstack_baremetal_vip.yml
new file mode 100644
index 0000000..c3141b6
--- /dev/null
+++ b/keepalived/cluster/instance/openstack_baremetal_vip.yml
@@ -0,0 +1,21 @@
+applications:
+- keepalived
+classes:
+- service.keepalived.support
+parameters:
+  _param:
+    keepalived_openstack_baremetal_vip_address: ${_param:cluster_baremetal_vip_address}
+    keepalived_openstack_baremetal_password: password
+    keepalived_openstack_baremetal_vip_interface: eth1
+    keepalived_openstack_baremetal_vip_virtual_router_id: 132
+    keepalived_openstack_baremetal_vip_priority: ${_param:keepalived_vip_priority}
+  keepalived:
+    cluster:
+      enabled: true
+      instance:
+        openstack_baremetal_vip:
+          address: ${_param:keepalived_openstack_baremetal_vip_address}
+          password: ${_param:keepalived_openstack_baremetal_password}
+          interface: ${_param:keepalived_openstack_baremetal_vip_interface}
+          virtual_router_id: ${_param:keepalived_openstack_baremetal_vip_virtual_router_id}
+          priority: ${_param:keepalived_openstack_baremetal_vip_priority}
diff --git a/keystone/client/service/ironic.yml b/keystone/client/service/ironic.yml
index 7635e2c..beb99a1 100644
--- a/keystone/client/service/ironic.yml
+++ b/keystone/client/service/ironic.yml
@@ -12,6 +12,14 @@
                   is_admin: true
                   password: ${_param:keystone_ironic_password}
                   email: ${_param:admin_email}
+        admin_identity:
+          admin:
+            user: admin
+            password: ${_param:keystone_admin_password}
+            project: admin
+            host: ${_param:keystone_service_host}
+            port: 5000
+            region_name: ${_param:openstack_region}
           service:
             ironic:
               type: baremetal
diff --git a/keystone/client/service/octavia.yml b/keystone/client/service/octavia.yml
new file mode 100644
index 0000000..819cd79
--- /dev/null
+++ b/keystone/client/service/octavia.yml
@@ -0,0 +1,30 @@
+parameters:
+  _param:
+    cluster_public_protocol: https
+  keystone:
+    client:
+      server:
+        identity:
+          project:
+            service:
+              user:
+                octavia:
+                  is_admin: true
+                  password: ${_param:keystone_octavia_password}
+                  email: ${_param:admin_email}
+          service:
+            octavia:
+              type: octavia
+              description: OpenStack Loadbalancing Service
+              endpoints:
+              - region: ${_param:openstack_region}
+                public_address: ${_param:cluster_public_host}
+                public_protocol: ${_param:cluster_public_protocol}
+                public_port: 9876
+                public_path: '/'
+                internal_address: ${_param:octavia_service_host}
+                internal_port: 9876
+                internal_path: '/'
+                admin_address: ${_param:octavia_service_host}
+                admin_port: 9876
+                admin_path: '/'
diff --git a/keystone/client/service/radosgw-swift.yml b/keystone/client/service/radosgw-swift.yml
index 9c7547e..3bf9b27 100644
--- a/keystone/client/service/radosgw-swift.yml
+++ b/keystone/client/service/radosgw-swift.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     cluster_public_protocol: https
+    radosgw_swift_cluster_port: 8081
   keystone:
     client:
       server:
@@ -20,11 +21,11 @@
                 - region: ${_param:openstack_region}
                   public_address: ${_param:cluster_public_host}
                   public_protocol: ${_param:cluster_public_protocol}
-                  public_port: 8081
+                  public_port: ${_param:radosgw_swift_cluster_port}
                   public_path: '/swift/v1' # /$(project_id)s
                   internal_address: ${_param:radosgw_service_host}
-                  internal_port: 8081
+                  internal_port: ${_param:radosgw_swift_cluster_port}
                   internal_path: '/swift/v1'
                   admin_address: ${_param:radosgw_service_host}
-                  admin_port: 8081
+                  admin_port: ${_param:radosgw_swift_cluster_port}
                   admin_path: '/swift/v1'
diff --git a/keystone/server/cluster.yml b/keystone/server/cluster.yml
index f077faf..a8f7069 100644
--- a/keystone/server/cluster.yml
+++ b/keystone/server/cluster.yml
@@ -31,6 +31,8 @@
         expiration: 3600
         max_active_keys: 3
         location: /var/lib/keystone/fernet-keys
+      credential:
+        location: /var/lib/keystone/credential-keys
       message_queue:
         engine: rabbitmq
         members:
diff --git a/keystone/server/single.yml b/keystone/server/single.yml
index aae179f..72dc045 100644
--- a/keystone/server/single.yml
+++ b/keystone/server/single.yml
@@ -35,6 +35,8 @@
         expiration: 3600
         max_active_keys: 3
         location: /var/lib/keystone/fernet-keys
+      credential:
+        location: /var/lib/keystone/credential-keys
       message_queue:
         engine: rabbitmq
         host: ${_param:single_address}
diff --git a/keystone/server/wsgi.yml b/keystone/server/wsgi.yml
index 2c8a19d..1a949e9 100644
--- a/keystone/server/wsgi.yml
+++ b/keystone/server/wsgi.yml
@@ -15,5 +15,10 @@
           name: wsgi
           host:
             name: ${linux:network:fqdn}
+          log:
+            custom:
+              format: >-
+                %v:%p %h %l %u %t \"%r\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\"
+
       modules:
         - wsgi
diff --git a/kubernetes/master/cluster.yml b/kubernetes/master/cluster.yml
index ab283d0..f21f003 100644
--- a/kubernetes/master/cluster.yml
+++ b/kubernetes/master/cluster.yml
@@ -4,6 +4,9 @@
 - service.haproxy.proxy.single
 - system.haproxy.proxy.listen.kubernetes.apiserver
 parameters:
+  _param:
+    kubernetes_netchecker_agent_image: quay.io/l23network/k8s-netchecker-agent:v1.0
+    kubernetes_netchecker_server_image: quay.io/l23network/k8s-netchecker-server:v1.0
   kubernetes:
     master:
       container: false
diff --git a/kubernetes/master/single.yml b/kubernetes/master/single.yml
index 5f0dfdc..cc8d8ab 100644
--- a/kubernetes/master/single.yml
+++ b/kubernetes/master/single.yml
@@ -1,8 +1,11 @@
 classes:
 - service.kubernetes.master.single
 parameters:
+  _param:
+    kubernetes_netchecker_agent_image: quay.io/l23network/k8s-netchecker-agent:v1.0
+    kubernetes_netchecker_server_image: quay.io/l23network/k8s-netchecker-server:v1.0
   kubernetes:
     master:
       container: false
       network:
-        engine: calico
\ No newline at end of file
+        engine: calico
diff --git a/kubernetes/pool/cluster.yml b/kubernetes/pool/cluster.yml
index 8295d97..7adb119 100644
--- a/kubernetes/pool/cluster.yml
+++ b/kubernetes/pool/cluster.yml
@@ -2,6 +2,13 @@
 - service.kubernetes.pool.cluster
 - service.docker.host
 parameters:
+  _param:
+    # component docker images
+    kubernetes_calicoctl_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/ctl:latest
+    kubernetes_calico_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/node:latest
+    kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
+    kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
+
   kubernetes:
     pool:
       container: false
diff --git a/kubernetes/pool/single.yml b/kubernetes/pool/single.yml
index 68e3844..4caaa50 100644
--- a/kubernetes/pool/single.yml
+++ b/kubernetes/pool/single.yml
@@ -2,8 +2,15 @@
 - service.kubernetes.pool.single
 - service.docker.host
 parameters:
+  _param:
+    # component docker images
+    kubernetes_calicoctl_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/ctl:latest
+    kubernetes_calico_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/node:latest
+    kubernetes_calico_cni_image: docker-prod-virtual.docker.mirantis.net/mirantis/projectcalico/calico/cni:latest
+    kubernetes_hyperkube_image: docker-prod-virtual.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64:v1.6.2-2
+
   kubernetes:
     pool:
       container: false
       network:
-        engine: calico
\ No newline at end of file
+        engine: calico
diff --git a/linux/system/repo/mcp/openstack.yml b/linux/system/repo/mcp/openstack.yml
index 249f5b2..2235b2c 100644
--- a/linux/system/repo/mcp/openstack.yml
+++ b/linux/system/repo/mcp/openstack.yml
@@ -34,7 +34,7 @@
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename}/archive-mcp${_param:openstack_version}.key"
           pin:
-          - pin: 'release a=${_param:openstack_version}-uptades'
+          - pin: 'release a=${_param:openstack_version}-updates'
             priority: 1100
             package: '*'
         mirantis_openstack_holdback:
diff --git a/linux/system/repo_local/ceph.yml b/linux/system/repo_local/ceph.yml
new file mode 100644
index 0000000..d28c0b6
--- /dev/null
+++ b/linux/system/repo_local/ceph.yml
@@ -0,0 +1,9 @@
+parameters:
+  linux:
+    system:
+      repo:
+        ceph:
+          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} ceph-mirantis"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/linux/system/repo_local/docker.yml b/linux/system/repo_local/docker.yml
new file mode 100644
index 0000000..cd3b514
--- /dev/null
+++ b/linux/system/repo_local/docker.yml
@@ -0,0 +1,9 @@
+parameters:
+  linux:
+    system:
+      repo:
+        docker:
+          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} docker"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/linux/system/repo_local/elasticsearch.yml b/linux/system/repo_local/elasticsearch.yml
new file mode 100644
index 0000000..8dc78aa
--- /dev/null
+++ b/linux/system/repo_local/elasticsearch.yml
@@ -0,0 +1,9 @@
+parameters:
+  linux:
+    system:
+      repo:
+        elasticsearch:
+          refresh_db: ${_param:linux_repo_refresh_db}
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/${_param:linux_system_codename}/ ${_param:apt_mk_version} elastic"
+          architectures: amd64
+          key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/linux/system/repo_local/grafana.yml b/linux/system/repo_local/grafana.yml
index a94d1be..f2d9ad5 100644
--- a/linux/system/repo_local/grafana.yml
+++ b/linux/system/repo_local/grafana.yml
@@ -4,6 +4,6 @@
       repo:
         grafana:
           refresh_db: ${_param:linux_repo_refresh_db}
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ nightly grafana"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} grafana"
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/linux/system/repo_local/influxdb.yml b/linux/system/repo_local/influxdb.yml
index 5e30d83..1c641bb 100644
--- a/linux/system/repo_local/influxdb.yml
+++ b/linux/system/repo_local/influxdb.yml
@@ -4,6 +4,6 @@
       repo:
         influxdb:
           refresh_db: ${_param:linux_repo_refresh_db}
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ nightly influxdb"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} influxdb"
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/linux/system/repo_local/sensu.yml b/linux/system/repo_local/sensu.yml
index df418fd..67750cf 100644
--- a/linux/system/repo_local/sensu.yml
+++ b/linux/system/repo_local/sensu.yml
@@ -4,6 +4,6 @@
       repo:
         sensu:
           refresh_db: ${_param:linux_repo_refresh_db}
-          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ nightly sensu"
+          source: "deb [arch=amd64] http://${_param:local_repo_url}/ubuntu-${_param:linux_system_codename}/ ${_param:apt_mk_version} sensu"
           architectures: amd64
           key_url: "http://${_param:local_repo_url}/public.gpg"
diff --git a/mysql/client/database/octavia.yml b/mysql/client/database/octavia.yml
new file mode 100644
index 0000000..6c31ece
--- /dev/null
+++ b/mysql/client/database/octavia.yml
@@ -0,0 +1,17 @@
+parameters:
+  mysql:
+    client:
+      server:
+        database:
+          database:
+            octavia:
+              encoding: utf8
+              users:
+              - name: octavia
+                password: ${_param:mysql_octavia_password}
+                host: '%'
+                rights: all
+              - name: octavia
+                password: ${_param:mysql_octavia_password}
+                host: ${_param:single_address}
+                rights: all
diff --git a/neutron/client/service/ironic.yml b/neutron/client/service/ironic.yml
index c400f96..3bc5be4 100644
--- a/neutron/client/service/ironic.yml
+++ b/neutron/client/service/ironic.yml
@@ -11,9 +11,12 @@
               shared: True
               admin_state_up: True
               provider_network_type: flat
-              provider_physical_network: physnet1
+              provider_physical_network: physnet3
               port_security_enabled: false
               subnet:
                 baremetal-subnet:
-                  cidr: 192.168.90.0/24
+                  cidr: ${_param:openstack_baremeta_neutron_subnet_cidr}
+                  allocation_pools:
+                    - start: ${_param:openstack_baremeta_neutron_subnet_allocation_start}
+                      end: ${_param:openstack_baremeta_neutron_subnet_allocation_end}
                   enable_dhcp: true
diff --git a/neutron/control/openvswitch/octavia.yml b/neutron/control/openvswitch/octavia.yml
new file mode 100644
index 0000000..783eaa6
--- /dev/null
+++ b/neutron/control/openvswitch/octavia.yml
@@ -0,0 +1,12 @@
+parameters:
+  _param:
+    octavia_api_bind_address: ${_param:cluster_local_address}
+  neutron:
+    server:
+      lbaas:
+        enabled: true
+        providers:
+          octavia:
+            engine: octavia
+            driver_path: 'neutron_lbaas.drivers.octavia.driver.OctaviaDriver'
+            base_url: ${_param:octavia_api_bind_address}
diff --git a/neutron/gateway/ironic.yml b/neutron/gateway/ironic.yml
new file mode 100644
index 0000000..c01dbce
--- /dev/null
+++ b/neutron/gateway/ironic.yml
@@ -0,0 +1,4 @@
+parameters:
+  neutron:
+    gateway:
+      ironic_enabled: true
diff --git a/nginx/server/site/ironic.yml b/nginx/server/site/ironic.yml
new file mode 100644
index 0000000..d03311c
--- /dev/null
+++ b/nginx/server/site/ironic.yml
@@ -0,0 +1,20 @@
+parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_ironic:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_ironic
+          check: false
+          proxy:
+            host: ${_param:ironic_service_host}
+            port: 6385
+            protocol: http
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 6385
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nova/compute_ironic/cluster.yml b/nova/compute_ironic/cluster.yml
new file mode 100644
index 0000000..2526373
--- /dev/null
+++ b/nova/compute_ironic/cluster.yml
@@ -0,0 +1,53 @@
+classes:
+- service.nova.compute.ironic
+parameters:
+  nova:
+    compute:
+      version: ${_param:nova_version}
+      enabled: true
+      virtualization: 'baremetal'
+      pkgs:
+        - nova-compute-ironic
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name: nova
+        user: nova
+        password: ${_param:mysql_nova_password}
+      identity:
+        engine: keystone
+        region: ${_param:openstack_region}
+        host: ${_param:cluster_vip_address}
+        port: 35357
+        user: nova
+        password: ${_param:keystone_nova_password}
+        tenant: service
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+        members:
+          - host: ${_param:openstack_message_queue_node01_address}
+          - host: ${_param:openstack_message_queue_node02_address}
+          - host: ${_param:openstack_message_queue_node03_address}
+      network:
+        engine: neutron
+        region: ${_param:openstack_region}
+        host: ${_param:neutron_service_host}
+        port: 9696
+        user: neutron
+        tenant: service
+        password: ${_param:keystone_neutron_password}
+      ironic:
+        region: ${_param:openstack_region}
+        host: ${_param:ironic_service_host}
+        port: 6385
+        user: ironic
+        tenant: service
+        password: ${_param:keystone_ironic_password}
+        auth_type: password
+        project_domain_name: Default
+        user_domain_name: Default
diff --git a/nova/compute_ironic/single.yml b/nova/compute_ironic/single.yml
new file mode 100644
index 0000000..5c19023
--- /dev/null
+++ b/nova/compute_ironic/single.yml
@@ -0,0 +1,47 @@
+classes:
+- service.nova.compute.ironic
+parameters:
+  nova:
+    compute:
+      version: ${_param:nova_version}
+      enabled: true
+      virtualization: 'baremetal'
+      pkgs:
+        - nova-compute-ironic
+      database:
+        engine: mysql
+        host: ${_param:control_address}
+        port: 3306
+        name: nova
+        user: nova
+        password: ${_param:mysql_nova_password}
+      identity:
+        engine: keystone
+        region: ${_param:openstack_region}
+        host: ${_param:control_address}
+        port: 35357
+        user: nova
+        password: ${_param:keystone_nova_password}
+        tenant: service
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+        host: ${_param:control_address}
+      network:
+        engine: neutron
+        region: ${_param:openstack_region}
+        host: ${_param:control_address}
+        port: 9696
+        user: neutron
+        tenant: service
+        password: ${_param:keystone_neutron_password}
+      ironic:
+        region: ${_param:openstack_region}
+        host: ${_param:control_address}
+        port: 6385
+        user: ironic
+        tenant: service
+        password: ${_param:keystone_ironic_password}
diff --git a/octavia/api/cluster.yml b/octavia/api/cluster.yml
new file mode 100644
index 0000000..75a4c19
--- /dev/null
+++ b/octavia/api/cluster.yml
@@ -0,0 +1,9 @@
+classes:
+- service.octavia.api.cluster
+- system.haproxy.proxy.listen.openstack.octavia
+parameters:
+  octavia:
+    api:
+      enabled: true
+      bind:
+        address: ${_param:cluster_local_address}
diff --git a/octavia/api/single.yml b/octavia/api/single.yml
new file mode 100644
index 0000000..685c4b4
--- /dev/null
+++ b/octavia/api/single.yml
@@ -0,0 +1,8 @@
+classes:
+- service.octavia.api.single
+parameters:
+  octavia:
+    api:
+      enabled: true
+      bind:
+        address: ${_param:single_address}
diff --git a/octavia/manager/single.yml b/octavia/manager/single.yml
new file mode 100644
index 0000000..a7bc7a9
--- /dev/null
+++ b/octavia/manager/single.yml
@@ -0,0 +1,7 @@
+classes:
+- service.octavia.manager.single
+parameters:
+  octavia:
+    manager:
+      enabled: true
+      version: ${_param:octavia_version}
diff --git a/opencontrail/client/resource/openstack_metadata.yml b/opencontrail/client/resource/openstack_metadata.yml
new file mode 100644
index 0000000..3ed8f3b
--- /dev/null
+++ b/opencontrail/client/resource/openstack_metadata.yml
@@ -0,0 +1,9 @@
+parameters:
+  opencontrail:
+    client:
+      linklocal_service:
+         metadata:
+           lls_ip: 169.254.169.254
+           lls_port: 80
+           ipf_addresses: ${_param:openstack_control_address}
+           ipf_port: 8775
diff --git a/opencontrail/compute/cluster.yml b/opencontrail/compute/cluster.yml
index d10b361..5e92709 100644
--- a/opencontrail/compute/cluster.yml
+++ b/opencontrail/compute/cluster.yml
@@ -1,3 +1,5 @@
+classes:
+  - service.opencontrail.compute.cluster
 applications:
 - opencontrail
 parameters:
diff --git a/opencontrail/compute/cluster4_0.yml b/opencontrail/compute/cluster4_0.yml
new file mode 100644
index 0000000..68f8007
--- /dev/null
+++ b/opencontrail/compute/cluster4_0.yml
@@ -0,0 +1,51 @@
+applications:
+- opencontrail
+parameters:
+  _param:
+    opencontrail_compute_iface_mask: 24
+    opencontrail_version: 4.0
+    linux_repo_contrail_component: oc40
+  opencontrail:
+    common:
+      version: ${_param:opencontrail_version}
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        token: ${_param:keystone_service_token}
+        password: ${_param:keystone_admin_password}
+      network:
+        engine: neutron
+        host: ${_param:openstack_control_address}
+        port: 9696
+    compute:
+      version: ${_param:opencontrail_version}
+      disable_flow_collection: true
+      enabled: True
+      bind:
+        address: ${_param:single_address}
+      config:
+        members:
+        - host: ${_param:opencontrail_control_node01_address}
+        - host: ${_param:opencontrail_control_node02_address}
+        - host: ${_param:opencontrail_control_node03_address}
+      collector:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+      control:
+        members:
+        - host: ${_param:opencontrail_control_node01_address}
+        - host: ${_param:opencontrail_control_node02_address}
+        - host: ${_param:opencontrail_control_node03_address}
+      interface:
+        address: ${_param:opencontrail_compute_address}
+        dev: ${_param:opencontrail_compute_iface}
+        gateway: ${_param:opencontrail_compute_gateway}
+        mask: ${_param:opencontrail_compute_iface_mask}
+        dns: ${_param:opencontrail_compute_dns}
+        mtu: 9000
+  nova:
+    compute:
+      networking: contrail
diff --git a/opencontrail/compute/single4_0.yml b/opencontrail/compute/single4_0.yml
new file mode 100644
index 0000000..bd77c05
--- /dev/null
+++ b/opencontrail/compute/single4_0.yml
@@ -0,0 +1,44 @@
+applications:
+- opencontrail
+parameters:
+  _param:
+    opencontrail_compute_iface_mask: 24
+    opencontrail_version: 4.0
+    linux_repo_contrail_component: oc40
+  opencontrail:
+    common:
+      version: ${_param:opencontrail_version}
+      identity:
+        engine: keystone
+        host: ${_param:control_address}
+        port: 35357
+        token: ${_param:keystone_service_token}
+        password: ${_param:keystone_admin_password}
+      network:
+        engine: neutron
+        host: ${_param:control_address}
+        port: 9696
+    compute:
+      version: ${_param:opencontrail_version}
+      enabled: True
+      config:
+        members:
+        - host: ${_param:opencontrail_control_node01_address}
+        - host: ${_param:opencontrail_control_node02_address}
+        - host: ${_param:opencontrail_control_node03_address}
+      collector:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+      interface:
+        address: ${_param:opencontrail_compute_address}
+        dev: ${_param:opencontrail_compute_iface}
+        gateway: ${_param:opencontrail_compute_gateway}
+        mask: ${_param:opencontrail_compute_iface_mask}
+        dns: ${_param:opencontrail_compute_dns}
+        mtu: 9000
+  nova:
+    compute:
+      networking: contrail
+
diff --git a/opencontrail/control/analytics4_0.yml b/opencontrail/control/analytics4_0.yml
new file mode 100644
index 0000000..a122830
--- /dev/null
+++ b/opencontrail/control/analytics4_0.yml
@@ -0,0 +1,64 @@
+classes:
+- service.haproxy.proxy.single
+- service.keepalived.cluster.single
+- service.opencontrail.control.analytics
+- system.haproxy.proxy.listen.opencontrail.analytics
+parameters:
+  _param:
+    opencontrail_version: 4.0
+    linux_repo_contrail_component: oc40
+    opencontrail_message_queue_node01_address: ${_param:openstack_message_queue_node01_address}
+    opencontrail_message_queue_node02_address: ${_param:openstack_message_queue_node02_address}
+    opencontrail_message_queue_node03_address: ${_param:openstack_message_queue_node03_address}
+    opencontrail_message_queue_address: ${_param:openstack_message_queue_address}
+# Temprorary fix for MOS9 packages to pin old version of kafka
+  linux:
+    system:
+      package:
+        librdkafka1:
+          version: 0.9.0-0contrail0
+          hold: true
+        python-kafka:
+          version: 1.0.1-0contrail1
+          hold: true
+      kernel:
+        modules:
+        - nf_conntrack_ipv4
+  opencontrail:
+    common:
+      identity:
+        host: ${_param:openstack_control_address}
+      network:
+        host: ${_param:openstack_control_address}
+    collector:
+      discovery:
+        host: None
+      database:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+      analytics:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+      message_queue:
+        host: ${_param:opencontrail_message_queue_address}
+        members:
+        - host: ${_param:opencontrail_message_queue_node01_address}
+        - host: ${_param:opencontrail_message_queue_node02_address}
+        - host: ${_param:opencontrail_message_queue_node03_address}
+      config:
+        members:
+        - host: ${_param:opencontrail_control_node01_address}
+        - host: ${_param:opencontrail_control_node02_address}
+        - host: ${_param:opencontrail_control_node03_address}
+    database:
+      discovery:
+        host: None
+      analytics:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
diff --git a/opencontrail/control/cluster4_0.yml b/opencontrail/control/cluster4_0.yml
new file mode 100644
index 0000000..cd12eef
--- /dev/null
+++ b/opencontrail/control/cluster4_0.yml
@@ -0,0 +1,114 @@
+classes:
+- service.haproxy.proxy.single
+- service.keepalived.cluster.single
+- service.opencontrail.control.cluster
+- system.haproxy.proxy.listen.opencontrail.control
+- system.haproxy.proxy.listen.opencontrail.analytics
+parameters:
+  _param:
+    opencontrail_version: 4.0
+    linux_repo_contrail_component: oc40
+    opencontrail_message_queue_node01_address: ${_param:openstack_control_node01_address}
+    opencontrail_message_queue_node02_address: ${_param:openstack_control_node02_address}
+    opencontrail_message_queue_node03_address: ${_param:openstack_control_node03_address}
+    opencontrail_message_queue_address: ${_param:openstack_control_address}
+# Temprorary fix for MOS9 packages to pin old version of kafka
+  linux:
+    system:
+      package:
+        librdkafka1:
+          version: 0.9.0-0contrail0
+        python-kafka:
+          version: 1.0.1-0contrail1
+      kernel:
+        modules:
+        - nf_conntrack_ipv4
+  opencontrail:
+    common:
+      identity:
+        host: ${_param:openstack_control_address}
+      network:
+        host: ${_param:openstack_control_address}
+    collector:
+      discovery:
+        host: None
+      database:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+      analytics:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+      message_queue:
+        host: ${_param:opencontrail_message_queue_address}
+        members:
+        - host: ${_param:opencontrail_message_queue_node01_address}
+        - host: ${_param:opencontrail_message_queue_node02_address}
+        - host: ${_param:opencontrail_message_queue_node03_address}
+      config:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+    database:
+      discovery:
+        host: None
+      analytics:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+    config:
+      network:
+        host: ${_param:openstack_control_address}
+      bind:
+        address: ${_param:cluster_local_address}
+      discovery:
+        host: None
+      api:
+        host: ${_param:opencontrail_control_address}
+      analytics:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+      message_queue:
+        members:
+        - host: ${_param:opencontrail_message_queue_node01_address}
+        - host: ${_param:opencontrail_message_queue_node02_address}
+        - host: ${_param:opencontrail_message_queue_node03_address}
+      identity:
+        region: ${_param:openstack_region}
+        host: ${_param:openstack_control_address}
+    control:
+      analytics:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+      message_queue:
+        members:
+        - host: ${_param:opencontrail_message_queue_node01_address}
+        - host: ${_param:opencontrail_message_queue_node02_address}
+        - host: ${_param:opencontrail_message_queue_node03_address}
+      database:
+        members:
+        - host: ${_param:cluster_node01_address}
+        - host: ${_param:cluster_node02_address}
+        - host: ${_param:cluster_node03_address}
+      discovery:
+        host: None
+    web:
+      analytics:
+        host: ${_param:opencontrail_control_address}
+      cache:
+        host: 127.0.0.1
+      identity:
+        host: ${_param:openstack_control_address}
+      database:
+        port: 9042
+      network:
+        host: ${_param:openstack_control_address}
diff --git a/opencontrail/control/control4_0.yml b/opencontrail/control/control4_0.yml
new file mode 100644
index 0000000..32b51e5
--- /dev/null
+++ b/opencontrail/control/control4_0.yml
@@ -0,0 +1,79 @@
+classes:
+- service.keepalived.cluster.single
+- service.opencontrail.control.control
+- system.haproxy.proxy.listen.opencontrail.control
+parameters:
+  _param:
+    opencontrail_version: 4.0
+    linux_repo_contrail_component: oc40
+    opencontrail_message_queue_node01_address: ${_param:openstack_message_queue_node01_address}
+    opencontrail_message_queue_node02_address: ${_param:openstack_message_queue_node02_address}
+    opencontrail_message_queue_node03_address: ${_param:openstack_message_queue_node03_address}
+  opencontrail:
+    common:
+      identity:
+        host: ${_param:openstack_control_address}
+      network:
+        host: ${_param:openstack_control_address}
+    config:
+      network:
+        host: ${_param:openstack_control_address}
+      bind:
+        address: ${_param:cluster_local_address}
+      discovery:
+        host: None
+      api:
+        host: ${_param:opencontrail_control_address}
+      analytics:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+      message_queue:
+        members:
+        - host: ${_param:opencontrail_message_queue_node01_address}
+        - host: ${_param:opencontrail_message_queue_node02_address}
+        - host: ${_param:opencontrail_message_queue_node03_address}
+      identity:
+        region: ${_param:openstack_region}
+        host: ${_param:openstack_control_address}
+    control:
+      analytics:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+      message_queue:
+        members:
+        - host: ${_param:opencontrail_message_queue_node01_address}
+        - host: ${_param:opencontrail_message_queue_node02_address}
+        - host: ${_param:opencontrail_message_queue_node03_address}
+      database:
+        members:
+        - host: ${_param:opencontrail_control_node01_address}
+        - host: ${_param:opencontrail_control_node02_address}
+        - host: ${_param:opencontrail_control_node03_address}
+      discovery:
+        host: None
+    web:
+      analytics:
+        host: ${_param:opencontrail_analytics_address}
+      cache:
+        host: 127.0.0.1
+      identity:
+        host: ${_param:openstack_control_address}
+      database:
+        port: 9042
+      network:
+        host: ${_param:openstack_control_address}
+    database:
+      analytics:
+        members:
+        - host: ${_param:opencontrail_analytics_node01_address}
+        - host: ${_param:opencontrail_analytics_node02_address}
+        - host: ${_param:opencontrail_analytics_node03_address}
+  linux:
+    system:
+      kernel:
+        modules:
+        - nf_conntrack_ipv4
diff --git a/opencontrail/control/single4_0.yml b/opencontrail/control/single4_0.yml
new file mode 100644
index 0000000..365ed20
--- /dev/null
+++ b/opencontrail/control/single4_0.yml
@@ -0,0 +1,140 @@
+classes:
+- service.opencontrail.control.single
+- service.haproxy.proxy.single
+parameters:
+  _param:
+    opencontrail_version: 4.0
+    linux_repo_contrail_component: oc40
+# Temprorary fix for MOS9 packages to pin old version of kafka
+  linux:
+    system:
+      package:
+        librdkafka1:
+          version: 0.9.0-0contrail0
+        python-kafka:
+          version: 1.0.1-0contrail1
+        contrail-api-cli:
+          version: latest
+      kernel:
+        modules:
+        - nf_conntrack_ipv4
+  haproxy:
+    proxy:
+      listen:
+        contrail_api:
+          type: contrail-api
+          service_name: contrail
+          check: false
+          binds:
+          - address: ${_param:single_address}
+            port: 8082
+          servers:
+          - name: ctl01
+            host: ${_param:single_address}
+            port: 9100
+            params: check inter 2000 rise 2 fall 3
+        contrail_discovery:
+          type: contrail-api
+          service_name: contrail
+          binds:
+          - address: ${_param:single_address}
+            port: 5998
+          servers:
+          - name: ctl01
+            host: ${_param:single_address}
+            port: 9110
+            params: check inter 2000 rise 2 fall 3
+        contrail_config_stats:
+          type: contrail-config
+          service_name: contrail
+          format: listen
+          binds:
+          - address: '*'
+            port: 5937
+          user: haproxy
+          password: ${_param:opencontrail_stats_password}
+        contrail_openstack_stats:
+          type: contrail-config
+          service_name: contrail
+          format: listen
+          binds:
+          - address: '*'
+            port: 5936
+          user: haproxy
+          password: ${_param:opencontrail_stats_password}
+        contrail_collector_stats:
+          type: contrail-config
+          service_name: contrail
+          format: listen
+          binds:
+          - address: '*'
+            port: 5938
+          user: haproxy
+          password: ${_param:opencontrail_stats_password}
+  opencontrail:
+    common:
+      identity:
+        host: ${_param:openstack_control_address}
+      network:
+        host: ${_param:openstack_control_address}
+    config:
+      network:
+        host: ${_param:openstack_control_address}
+      bind:
+        address: ${_param:single_address}
+      discovery:
+        host: None
+      api:
+        host: ${_param:single_address}
+      analytics:
+        members:
+        - host: ${_param:single_address}
+      message_queue:
+        members:
+        - host: ${_param:openstack_control_address}
+      identity:
+        region: ${_param:openstack_region}
+        host: ${_param:openstack_control_address}
+    control:
+      analytics:
+        members:
+        - host: ${_param:single_address}
+      message_queue:
+        members:
+        - host: ${_param:openstack_control_address}
+      database:
+        members:
+        - host: ${_param:single_address}
+      discovery:
+        host: None
+    web:
+      analytics:
+        host: ${_param:single_address}
+      cache:
+        host: 127.0.0.1
+      identity:
+        host: ${_param:openstack_control_address}
+      database:
+        port: 9042
+      network:
+        host: ${_param:openstack_control_address}
+    database:
+      analytics:
+        members:
+        - host: ${_param:single_address}
+    collector:
+      discovery:
+        host: None
+      database:
+        members:
+        - host: ${_param:single_address}
+      analytics:
+        members:
+        - host: ${_param:single_address}
+      message_queue:
+        host: ${_param:openstack_control_address}
+        members:
+        - host: ${_param:openstack_control_address}
+      config:
+        members:
+        - host: ${_param:single_address}
diff --git a/openldap/client/groups/mirantis.yml b/openldap/client/groups/mirantis.yml
new file mode 100644
index 0000000..003eba0
--- /dev/null
+++ b/openldap/client/groups/mirantis.yml
@@ -0,0 +1,19 @@
+classes:
+  - system.openldap.client.groups
+parameters:
+  openldap:
+    client:
+      entry:
+        groups:
+          entry:
+            mirantis:
+              attr:
+                description: Mirantis Administrators
+                gidNumber: 20002
+                memberUid:
+                  - akomarek
+                  - fpytloun
+                  - jpavlik
+              classes:
+                - posixGroup
+                - top
diff --git a/openldap/client/people/mirantis.yml b/openldap/client/people/mirantis.yml
new file mode 100644
index 0000000..3673783
--- /dev/null
+++ b/openldap/client/people/mirantis.yml
@@ -0,0 +1,64 @@
+#
+# This class defines Mirantis users. To crypt user password, use this command:
+#   echo "{CRYPT}$(mkpasswd --rounds 500000 -m sha-512 --salt `head -c 40 /dev/random | base64 | sed -e 's/+/./g' |  cut -b 10-25` 'password')"
+#
+classes:
+  - system.openldap.client.people
+  - system.openldap.client.groups.mirantis
+parameters:
+  openldap:
+    client:
+      entry:
+        people:
+          entry:
+            jpavlik:
+              attr:
+                uid: jpavlik
+                userPassword: '{CRYPT}$6$rounds=500000$sSdm1peCUw78UsaP$l55AuiLv3j.0avLg.k8B2jM.xBczuf9CMursuS4QUm0ZEUgIZkmToPU1PiaTJB37zGgv2ubAYbr2oME7.TX8G1'
+                uidNumber: 20051
+                gidNumber: ${openldap:client:entry:groups:entry:mirantis:attr:gidNumber}
+                gecos: "Jakub Pavlik"
+                givenName: Jakub
+                sn: Pavlik
+                homeDirectory: /home/jpavlik
+                loginShell: /bin/bash
+                mail: jpavlik@mirantis.com
+              classes:
+                - posixAccount
+                - inetOrgPerson
+                - top
+                - shadowAccount
+            akomarek:
+              attr:
+                uid: akomarek
+                userPassword: '{CRYPT}$6$rounds=500000$sSdm1peCUw78UsaP$l55AuiLv3j.0avLg.k8B2jM.xBczuf9CMursuS4QUm0ZEUgIZkmToPU1PiaTJB37zGgv2ubAYbr2oME7.TX8G1'
+                uidNumber: 20052
+                gidNumber: ${openldap:client:entry:groups:entry:mirantis:attr:gidNumber}
+                gecos: "Ales Komarek"
+                givenName: Ales
+                sn: Komarek
+                homeDirectory: /home/akomarek
+                loginShell: /bin/bash
+                mail: akomarek@mirantis.com
+              classes:
+                - posixAccount
+                - inetOrgPerson
+                - top
+                - shadowAccount
+            fpytloun:
+              attr:
+                uid: fpytloun
+                userPassword: '{CRYPT}$6$rounds=500000$T84bEG26yetA1384$.Zh2GZu6pjWdS3hA2WVFzMnWe/hD15IeNIiGM.clq4XpKkwzbNeLbIs7F21vMsxzdOs0R8P8fvjepVHyrPrjQ.'
+                uidNumber: 20053
+                gidNumber: ${openldap:client:entry:groups:entry:mirantis:attr:gidNumber}
+                gecos: "Filip Pytloun"
+                givenName: Filip
+                sn: Pytloun
+                homeDirectory: /home/fpytloun
+                loginShell: /bin/bash
+                mail: fpytloun@mirantis.com
+              classes:
+                - posixAccount
+                - inetOrgPerson
+                - top
+                - shadowAccount
diff --git a/openssh/server/team/stacklight.yml b/openssh/server/team/stacklight.yml
index 46ba395..3fb5913 100644
--- a/openssh/server/team/stacklight.yml
+++ b/openssh/server/team/stacklight.yml
@@ -16,13 +16,6 @@
           full_name: Simon Pasquier
           home: /home/spasquier
           email: spasquier@mirantis.com
-        scroiset:
-          enabled: true
-          name: scroiset
-          sudo: true
-          full_name: Swann Croiset
-          home: /home/scroiset
-          email: scroiset@mirantis.com
         ppetit:
           enabled: true
           name: ppetit
@@ -65,13 +58,6 @@
           full_name: Martin Polreich
           home: /home/mpolreich
           email: mpolreich@mirantis.com
-        ityaptin:
-          enabled: true
-          name: ityaptin
-          sudo: true
-          full_name: Ilya Tyaptin
-          home: /home/ityaptin
-          email: ityaptin@mirantis.com
         isvetlov:
           enabled: true
           name: isvetlov
@@ -116,11 +102,6 @@
           public_keys:
           - ${public_keys:spasquier}
           user: ${linux:system:user:spasquier}
-        scroiset:
-          enabled: true
-          public_keys:
-          - ${public_keys:scroiset}
-          user: ${linux:system:user:scroiset}
         ppetit:
           enabled: true
           public_keys:
@@ -151,11 +132,6 @@
           public_keys:
           - ${public_keys:mpolreich}
           user: ${linux:system:user:mpolreich}
-        ityaptin:
-          enable: true
-          public_keys:
-          - ${public_keys:ityaptin}
-          user: ${linux:system:user:ityaptin}
         isvetlov:
           enable: true
           public_keys:
@@ -181,8 +157,6 @@
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3odU+3V2uDA2ptAFL9hrJRPNEEdAyztWOZFQ5Oyd9oerTGOU3p4xmrgWWjfKFKbYGhiiIUcYAol5PkTfKukGEkkjCHYA1t023soCaaAj85wCZCnw2zQNAziwxTYmAzTqgxiSvtZNMMrtJvFHRIRDzJ3M1lV0prWNWkMM1/3FAd4W49y6VT3fkMCo8uqG7CfGdgR2DgBCxf9KaNPfW5eDEPOgmE5lK8tVSEI6T+Cg7hbcTf4lFYnlFBnlQgp/0JstsM4Vbwb4B34LOpOsf2S8rrWk2xQMjwaMHXkc2s/E8iW3F5nVFuyEXYISFQIiAHw8dzC6CHgLcyHUVWwznKawZ newt@newt-dev1
     spasquier:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCXBHKQaGUNB92DsnyvflmCbmuXnkiuNahZiue3hnyXqLA2q8jmQmzBbxReAJzexnVfJhrUCTw8IPJUpMUP27u3igvGdkhfctdUuxVf9yGJErtGNgHK/aGbeLCvUOmhw6X/xbf3IbyFL1gwxOJ2cmmjlSptYU9E1W2xFY+IMFWBhzO3vso5EABgPVli/UUMfeXUUd++lIZpoyYe2Hkri1QGNhzfbZcFjEO78+vNiLZrvjJEtkXWu7iZTYK6eE365CiFJzqFL7N6Ichb28qakcmVqR/foreuz3cOMqMGssKoOQk1213x8w4fE0yLwf9Ft8L7GMf+vXQvuNt0ZKBPWqn7 spasquier@mirantis.com
-    scroiset:
-      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUfVxx6qi4fay4znw8M6yLJJcRr3pdvPPihTAszioFJP9V/GBbqfkofTfeKdpdvJ4j25p40boiDt43Ek7LfcRmKMP9+2SEfk9W7ec/umM8Mer+h4ocnShVQm69weELVUfr9q4G+qWf14ANc9D097bclqQ6FP/cjy8HodVPgQ+i1lpMjwP6xvAAERJJH353lCFsxkh2N8aOi9YcP9M2lQeKWM+eYFsdcmTFAPHbgPq0K4ma6/YXw5UibEBClYu1u4OJTFZSI3z8kERb2cU0aFGYAduiynDMBKM7y7YAoksgBOVprq0huEMFUqJ3vsrZbPn55GIpzmBga+EGnNbSCadt swann@scroiset
     ppetit:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUGCb+mGidT4FRa4rJxoYx39NX2vCjRw+CmCQJW/Uf6xc0NNp5WRWJ0hnyIMRVVfehvfjdXPo4bO4cXIwmo06C1Wx+DMyvjI9NvuHtt52p3QTsh+PYZe5t4hFuGh7veWQw3LuLtDLVlVS633FQMgT/BXDaBc65yfN9CuV6lHqZ6KPKoGAi3ADlcQFqhFttO+GsVkxd6uGtelnbYXsDMwylCIKop0C/obu6wG85d/8Q2/Zts5CvUcCiCNfZtl8otgNMrpfnuhC0xAsmgwDxqK2kshxUujclyFfO7ixl+E9Plc7kUJvodNbzOcAmY3YpuHVoJQkHx/Ou81/q+JOVtFxz ppetit@baobab 
     obourdon:
@@ -195,8 +169,6 @@
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrCyaZjs8hiwx38LfpeQ2z9n9ptwQ7gFrhq2z5sK9q/LQMCubbnp5xhyF0SMY1jmQUewBOKXhnq3QSX+DmtNsnhitnZBw2BE5PBXllCBWMMiWULfAYvB0of728Q3EEjrtyfHkt7o2E+CvreVJcVI4kBwjKh5WpVBZ8mmkW/sexLGMuYu0bUWjCddu6ZlhUa+y14VZKOKp44auemza1VL/UzqOVZkBAfR2gPV2pBG3Im+SlnOlDRxKPEXQbsn3u/sNeZq0wSY++khY86AU7jAKfL2NiNsoA7CyB0jTEKwYO3vOWOhECifZuHwY/TNWyRFWM2ImW3mT9aO7nE4w4jXXJ vgusev@vgusev
     mpolreich:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0N+ds8BGTR+ZQo9NSRGRbjv3T8AbPmtSw2nClXxetRdmHpM/mU7/5iD7qfkCXtNptKeCG/Qk44wlijnAtjztJK1qfvyphHe3etZxLnqhYMm73Yy++yKPE/ywFPFb+7kd0BDy2iZqohZpX3gUi5iDnvXUInHNqqtTv3xFe2kmn3lq5bSRuUMtr61nZ7z/fkX8kNfoGxKrm7bhSo5zq4sjTrj3lk1LKZc1HYji3RwrzBM0z4eyed1BaJyDNtG+eFN4nOnvVn59452AR8SmKJXRErk37rEoQn80xszypzybooFPN5dpdB6u9b4xquFCOD83usb8kEjKY9VIYGuXxEEts1KIF20J+xd8UnZU8d4JL50G8JY8zdNgurR3ZyMD2okuord4cpHF8SVecsAyRV6nuhDxVtF2Xn/RriY02jrLoRPsS+3nIrKt9H8vpQZMYJ+jgEpekZhhVfz4AP3pATzOrWENzNXj5G1bLJs1C9aTtwE27EnKW73XekX/GLsehCwsQ21JvDX8PMxJwLVfqvkRlrc5GILEIVgjZ82Cj6Eens1QobymRAEWuEpZxkPx6u0kGO62ri8zFx8+NYwYDz3mwhHDRT34T/Rvzy/9V9xVjkUQOj9cZ3eYBnC1MffJjx8heHDmSQmUd+99zKa9Hzr74z3AvR3AIgFqmu7kx5fIMew== ubuntu@thinkpad-x1
-    ityaptin:
-      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDLTkl8X9HIJxruAHkmGNQTovy7DCr256pH68xh2DHWinPKUW4ccsCBbqJeF56aEA41OKJlEVOYzD3gQJkDAAbDdy9BlI14oEtzmk3yAtgBwwUzUNMq7oCPrbt4xNg5U26JSb26j69r5vQ4vXA2hf0bCQ68vb3VDqMMaMbneI3rP3qSaq7dauR8sEjx1XAtNen5SygLE46k0pCObJmahGkg39HisoJ/gkjoi/xvQn1JzrYSxWObrBfUbtQN3JbCRozSp/0Env0hMbXj7cS3J/uY68zAWc7GAEFKSmPAol4d/93sRknFUSQKqZjsDaLfiGLte/7oFwLquaz6AJw+mwP ityaptin@ityaptin.local
     isvetlov:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9lvegjKq6OP7cgF9YU9mPOk1/mfJbov3YnYnhiW1Ks0hrWZyAo+0TV3O7LgWZ8jqD9abbYaOiWCt4d9ABkLUJfCLNAqOJRapJ+tybPAxJKx4eV8pptJ7UF0EdItasTdd+gqJJ4Krk869rwmqVQ4hethdykjhKyWu3bG+uVtFUF5xUj9zaT9NThA6/Xhz0idAiTO8ArmLng4W8ne45gANaHIWXpIsklo6GLUSZwl4z6j2z4joxNJsB1hrw0msT56F26ctkDo6thNMAzPMyZsLjYJBJIRYhdC1d4Up9114nVcY4pzYw76+zXU9zED2XNRLdyAaxFlwXvumAs3iMLI8Z isvetlov@isvetlov-mac.local
     akholkin:
diff --git a/powerdns/server/single.yml b/powerdns/server/single.yml
new file mode 100644
index 0000000..13077de
--- /dev/null
+++ b/powerdns/server/single.yml
@@ -0,0 +1,6 @@
+classes:
+  - service.powerdns.server.single
+parameters:
+  powerdns:
+    server:
+      enabled: true
diff --git a/reclass/storage/system/openstack_baremetal_cluster.yml b/reclass/storage/system/openstack_baremetal_cluster.yml
new file mode 100644
index 0000000..8cab119
--- /dev/null
+++ b/reclass/storage/system/openstack_baremetal_cluster.yml
@@ -0,0 +1,44 @@
+parameters:
+  _param:
+    openstack_baremetal_node01_hostname: bmt01
+    openstack_baremetal_node02_hostname: bmt02
+    openstack_baremetal_node03_hostname: bmt03
+
+    openstack_baremetal_node01_baremetal_address: ${_param:single_address}
+    openstack_baremetal_node02_baremetal_address: ${_param:single_address}
+    openstack_baremetal_node03_baremetal_address: ${_param:single_address}
+  reclass:
+    storage:
+      node:
+        openstack_baremetal_node01:
+          name: ${_param:openstack_baremetal_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.baremetal
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_baremetal_node01_address}
+            baremetal_address: ${_param:openstack_baremetal_node01_baremetal_address}
+        openstack_baremetal_node02:
+          name: ${_param:openstack_baremetal_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.baremetal
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_baremetal_node02_address}
+            baremetal_address: ${_param:openstack_baremetal_node02_baremetal_address}
+        openstack_baremetal_node03:
+          name: ${_param:openstack_baremetal_node03_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.baremetal
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_baremetal_node03_address}
+            baremetal_address: ${_param:openstack_baremetal_node03_baremetal_address}
+
+
diff --git a/reclass/storage/system/openstack_baremetal_single.yml b/reclass/storage/system/openstack_baremetal_single.yml
new file mode 100644
index 0000000..d823157
--- /dev/null
+++ b/reclass/storage/system/openstack_baremetal_single.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    openstack_baremetal_node01_hostname: bmt01
+  reclass:
+    storage:
+      node:
+        openstack_baremetal_node01:
+          name: ${_param:openstack_baremetal_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.baremetal
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:openstack_baremetal_address}
+            baremetal_address: ${_param:openstack_baremetal_node01_baremetal_address}
diff --git a/reclass/storage/system/openstack_gateway_cluster_octavia.yml b/reclass/storage/system/openstack_gateway_cluster_octavia.yml
new file mode 100644
index 0000000..8126ed1
--- /dev/null
+++ b/reclass/storage/system/openstack_gateway_cluster_octavia.yml
@@ -0,0 +1,9 @@
+classes:
+- system.reclass.storage.system.openstack_gateway_cluster
+parameters:
+  reclass:
+    storage:
+      node:
+        openstack_gateway_node01:
+          classes:
+          - system.octavia.manager.single
diff --git a/reclass/storage/system/stacklight_log_cluster.yml b/reclass/storage/system/stacklight_log_cluster.yml
index 4a5da29..bbb6a6b 100644
--- a/reclass/storage/system/stacklight_log_cluster.yml
+++ b/reclass/storage/system/stacklight_log_cluster.yml
@@ -22,6 +22,7 @@
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.stacklight.log
+          - cluster.${_param:cluster_name}.stacklight.log_curator
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
@@ -32,6 +33,7 @@
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.stacklight.log
+          - cluster.${_param:cluster_name}.stacklight.log_curator
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
diff --git a/salt/control/cluster/openstack_baremetal_cluster.yml b/salt/control/cluster/openstack_baremetal_cluster.yml
new file mode 100644
index 0000000..69c3a2b
--- /dev/null
+++ b/salt/control/cluster/openstack_baremetal_cluster.yml
@@ -0,0 +1,26 @@
+parameters:
+  salt:
+    control:
+      size:
+        openstack.baremetal:
+          cpu: 32
+          ram: 65536
+          disk_profile: small
+          net_profile: default
+      cluster:
+        internal:
+          domain: ${_param:cluster_domain}
+          engine: virt
+          node:
+            bmt01:
+              provider: kvm01.${_param:cluster_domain}
+              image: ${_param:salt_control_xenial_image}
+              size: openstack.baremetal
+            bmt02:
+              provider: kvm02.${_param:cluster_domain}
+              image: ${_param:salt_control_xenial_image}
+              size: openstack.baremetal
+            bmt03:
+              provider: kvm03.${_param:cluster_domain}
+              image: ${_param:salt_control_xenial_image}
+              size: openstack.baremetal
diff --git a/salt/control/cluster/openstack_baremetal_single.yml b/salt/control/cluster/openstack_baremetal_single.yml
new file mode 100644
index 0000000..5ff00f5
--- /dev/null
+++ b/salt/control/cluster/openstack_baremetal_single.yml
@@ -0,0 +1,18 @@
+parameters:
+  salt:
+    control:
+      size:
+        openstack.baremetal:
+          cpu: 32
+          ram: 65536
+          disk_profile: small
+          net_profile: default
+      cluster:
+        internal:
+          domain: ${_param:cluster_domain}
+          engine: virt
+          node:
+            bmt01:
+              provider: ${_param:infra_kvm_node01_hostname}.${_param:cluster_domain}
+              image: ${_param:salt_control_xenial_image}
+              size: openstack.baremetal
diff --git a/salt/control/cluster/openstack_gateway_cluster.yml b/salt/control/cluster/openstack_gateway_cluster.yml
index 5d2a20a..84c44ac 100644
--- a/salt/control/cluster/openstack_gateway_cluster.yml
+++ b/salt/control/cluster/openstack_gateway_cluster.yml
@@ -17,10 +17,10 @@
               image: ${_param:salt_control_xenial_image}
               size: openstack.gateway
             gtw02:
-              provider: kvm01.${_param:cluster_domain}
+              provider: kvm02.${_param:cluster_domain}
               image: ${_param:salt_control_xenial_image}
               size: openstack.gateway
             gtw03:
-              provider: kvm01.${_param:cluster_domain}
+              provider: kvm03.${_param:cluster_domain}
               image: ${_param:salt_control_xenial_image}
               size: openstack.gateway
diff --git a/salt/master/formula/git/saltstack.yml b/salt/master/formula/git/saltstack.yml
index d0ca453..55251e1 100644
--- a/salt/master/formula/git/saltstack.yml
+++ b/salt/master/formula/git/saltstack.yml
@@ -47,3 +47,7 @@
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-sphinx.git'
               revision: ${_param:salt_master_environment_revision}
+            xtrabackup:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-xtrabackup.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/pkg/saltstack.yml b/salt/master/formula/pkg/saltstack.yml
index eeff26b..e4a4c1c 100644
--- a/salt/master/formula/pkg/saltstack.yml
+++ b/salt/master/formula/pkg/saltstack.yml
@@ -37,3 +37,6 @@
             sphinx:
               source: pkg
               name: salt-formula-sphinx
+            xtrabackup:
+              source: pkg
+              name: salt-formula-xtrabackup
diff --git a/telegraf/agent/remote.yml b/telegraf/agent/remote.yml
index ecbae25..c634d54 100644
--- a/telegraf/agent/remote.yml
+++ b/telegraf/agent/remote.yml
@@ -3,6 +3,7 @@
 parameters:
   telegraf:
     remote_agent:
+      omit_hostname: true
       dir:
         config: /srv/volumes/local/telegraf
         config_d: /srv/volumes/local/telegraf/telegraf.d