Merge "Add pdns reclass"
diff --git a/docker/swarm/stack/dashboard.yml b/docker/swarm/stack/dashboard.yml
index 934920f..d3f0391 100644
--- a/docker/swarm/stack/dashboard.yml
+++ b/docker/swarm/stack/dashboard.yml
@@ -1,11 +1,11 @@
 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_data_directory: /var/lib/grafana
     grafana_session_life_time: 86400
   docker:
     client:
@@ -21,14 +21,15 @@
               ports:
                 - 15013:3000
               volumes:
-                - /srv/glusterfs/grafana:${_param:grafana_session_directory}
+                - /srv/volumes/grafana:${_param:grafana_data_directory}
               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_PATHS_DATA: ${_param:grafana_data_directory}
                 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}
+                GF_SESSION_PROVIDER_CONFIG: ${_param:grafana_data_directory}/data/sessions
+                GF_SESSION_LIFE_TIME: ${_param:grafana_session_life_time}
\ No newline at end of file
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/elasticsearch/client/pushkin/init.yml b/elasticsearch/client/pushkin/init.yml
new file mode 100644
index 0000000..217f1c8
--- /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_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/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/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/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/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/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..43e870c 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}'
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/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/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/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/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/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/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/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