Merge "Moved jenkins approved scripts to client"
diff --git a/aptly/server/docker.yml b/aptly/server/docker.yml
index 6038976..ee8f4a2 100644
--- a/aptly/server/docker.yml
+++ b/aptly/server/docker.yml
@@ -2,7 +2,10 @@
   - service.aptly.server.single
 parameters:
   _param:
-    aptly_server_secure: true
+    aptly_server_secure: false
+    aptly_gpg_keypair_id: none
+    aptly_gpg_public_key: none
+    aptly_gpg_private_key: none
   aptly:
     server:
       enabled: true
diff --git a/ceph/client/single.yml b/ceph/client/single.yml
index b01458f..6ff7cd8 100644
--- a/ceph/client/single.yml
+++ b/ceph/client/single.yml
@@ -20,10 +20,18 @@
           osd_journal_size: 7500
         mon:
           mon_debug_dump_transactions: False
+        client:
+          rbd_cache_size: 268435456
+          rbd_cache_max_dirty: 134217728
+          rbd_cache_max_dirty_age: 5
+          rbd_cache: True
+      # TODO: Configure these keys on cluster level
       # keyring:
+      #   images:
+      #     key:
       #   object:
-      #     key: 
+      #     key:
       #   cinder:
-      #     key: 
+      #     key:
       #   nova:
-      #     key: 
\ No newline at end of file
+      #     key:
diff --git a/docker/swarm/network/monitoring.yml b/docker/swarm/network/monitoring.yml
new file mode 100644
index 0000000..a049aac
--- /dev/null
+++ b/docker/swarm/network/monitoring.yml
@@ -0,0 +1,8 @@
+parameters:
+  docker:
+    client:
+      network:
+        monitoring:
+          driver: overlay
+          opt:
+            encrypted: true
diff --git a/docker/swarm/service/aptly.yml b/docker/swarm/service/aptly.yml
index d85b1b4..5f6de6e 100644
--- a/docker/swarm/service/aptly.yml
+++ b/docker/swarm/service/aptly.yml
@@ -1,4 +1,8 @@
 parameters:
+  _param:
+    docker_image_aptly:
+      api: tcpcloud/aptly-api
+      public: tcpcloud/aptly-public
   docker:
     client:
       service:
diff --git a/docker/swarm/service/dashboard/grafana_server.yml b/docker/swarm/service/dashboard/grafana_server.yml
new file mode 100644
index 0000000..4ed587e
--- /dev/null
+++ b/docker/swarm/service/dashboard/grafana_server.yml
@@ -0,0 +1,13 @@
+parameters:
+  docker:
+    client:
+      service:
+        grafana_server:
+          replica: 1
+          environment:
+            GF_SECURITY_ADMIN_PASSWORD: ${_param:grafana_admin_password}
+          restart:
+            condition: any
+          image: ${_param:docker_image_grafana}
+          ports:
+            - 15013:3000
diff --git a/docker/swarm/service/docker.yml b/docker/swarm/service/docker.yml
index a79fc08..d20b4db 100644
--- a/docker/swarm/service/docker.yml
+++ b/docker/swarm/service/docker.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    docker_image_registry: registry:2
   docker:
     client:
       service:
diff --git a/docker/swarm/service/gerrit.yml b/docker/swarm/service/gerrit.yml
index d1bdfae..d33bdbb 100644
--- a/docker/swarm/service/gerrit.yml
+++ b/docker/swarm/service/gerrit.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    docker_image_gerrit: tcpcloud/gerrit:2.12.7
   docker:
     client:
       service:
diff --git a/docker/swarm/service/jenkins.yml b/docker/swarm/service/jenkins.yml
index c0b0721..3069dc6 100644
--- a/docker/swarm/service/jenkins.yml
+++ b/docker/swarm/service/jenkins.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    docker_image_jenkins: tcpcloud/jenkins:2.50
   docker:
     client:
       service:
diff --git a/docker/swarm/service/monitoring/prometheus_alertmanager.yml b/docker/swarm/service/monitoring/prometheus_alertmanager.yml
new file mode 100644
index 0000000..74b20f5
--- /dev/null
+++ b/docker/swarm/service/monitoring/prometheus_alertmanager.yml
@@ -0,0 +1,23 @@
+include:
+- service.prometheus.alertmanager.container
+parameters:
+  docker:
+    client:
+      service:
+        prometheus_alertmanager:
+          network: monitoring
+          replica: 2
+          environment:
+            config_dir: /opt/alertmanager/config
+            bind_port: ${prometheus:alertmanager:bind:port}
+            bind_address: ${prometheus:alertmanager:bind:address}
+          restart:
+            condition: any
+          image: ${_param:docker_image_alertmanager}
+          ports:
+            - 15011:${prometheus:alertmanager:bind:port}
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/prometheus-config
+              destination: /opt/alertmanager/config
diff --git a/docker/swarm/service/monitoring/prometheus_pushgateway.yml b/docker/swarm/service/monitoring/prometheus_pushgateway.yml
new file mode 100644
index 0000000..7ba37af
--- /dev/null
+++ b/docker/swarm/service/monitoring/prometheus_pushgateway.yml
@@ -0,0 +1,12 @@
+parameters:
+  docker:
+    client:
+      service:
+        prometheus_pushgateway:
+          network: monitoring
+          replica: 2
+          restart:
+            condition: any
+          image: ${_param:docker_image_pushgateway}
+          ports:
+            - 15012:9091
diff --git a/docker/swarm/service/monitoring/prometheus_server.yml b/docker/swarm/service/monitoring/prometheus_server.yml
new file mode 100644
index 0000000..24a9193
--- /dev/null
+++ b/docker/swarm/service/monitoring/prometheus_server.yml
@@ -0,0 +1,29 @@
+include:
+- service.prometheus.server.container
+parameters:
+  docker:
+    client:
+      service:
+        prometheus_server:
+          network: monitoring
+          replica: 1
+          environment:
+            config_dir: /opt/prometheus/config
+            bind_port: ${prometheus:server:bind:port}
+            bind_address: ${prometheus:server:bind:address}
+            alertmanager_port: ${prometheus:alertmanager:bind:port}
+            storage_local_engine: ${prometheus:server:storage:local:engine}
+            storage_local_retention: ${prometheus:server:storage:local:retention}
+            storage_local_memory_chunks: ${prometheus:server:storage:local:memory_chunks}
+            storage_local_max_chunks_to_persist: ${prometheus:server:storage:local:max_chunks_to_persist}
+            storage_local_num_fingerprint_mutexes: ${prometheus:server:storage:local:num_fingerprint_mutexes}
+          restart:
+            condition: any
+          image: ${_param:docker_image_prometheus}
+          ports:
+            - 15010:${prometheus:server:bind:port}
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/prometheus-config
+              destination: /opt/prometheus/config
diff --git a/docker/swarm/service/mysql.yml b/docker/swarm/service/mysql.yml
index 53faa8b..f94cf4d 100644
--- a/docker/swarm/service/mysql.yml
+++ b/docker/swarm/service/mysql.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    docker_image_mysql: mysql:5.6
   docker:
     client:
       service:
@@ -10,7 +12,7 @@
             MYSQL_ROOT_PASSWORD: ${_param:mysql_admin_password}
           restart:
             condition: any
-          image: "mysql:5.6"
+          image: "${_param:docker_image_mysql}"
           ports:
             - 13306:3306
           volume:
diff --git a/docker/swarm/service/openldap.yml b/docker/swarm/service/openldap.yml
index d009ed5..e390772 100644
--- a/docker/swarm/service/openldap.yml
+++ b/docker/swarm/service/openldap.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    docker_image_openldap: osixia/openldap:1.1.7
   docker:
     client:
       service:
@@ -7,7 +9,7 @@
           # https://github.com/docker/docker/issues/24877
           restart:
             condition: any
-          image: osixia/openldap:1.1.7
+          image: ${_param:docker_image_openldap}
           environment:
             HOSTNAME: ldap01.${_param:cluster_public_host}
             LDAP_ORGANISATION: "${_param:openldap_organisation}"
diff --git a/docker/swarm/service/visualizer.yml b/docker/swarm/service/visualizer.yml
index fe52c0b..8519363 100644
--- a/docker/swarm/service/visualizer.yml
+++ b/docker/swarm/service/visualizer.yml
@@ -1,11 +1,13 @@
 parameters:
+  _param:
+    docker_image_visualizer: manomarks/visualizer
   docker:
     client:
       service:
         visualizer:
           restart:
             condition: any
-          image: manomarks/visualizer
+          image: ${_param:docker_image_visualizer}
           constraint: "node.role==manager"
           ports:
             - 18090:8080
diff --git a/glusterfs/client/volume/aptly.yml b/glusterfs/client/volume/aptly.yml
index 1c252e3..86a1b40 100644
--- a/glusterfs/client/volume/aptly.yml
+++ b/glusterfs/client/volume/aptly.yml
@@ -7,4 +7,4 @@
         aptly:
           path: /srv/volumes/aptly
           server: ${_param:aptly_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/artifactory.yml b/glusterfs/client/volume/artifactory.yml
index f9c951e..2d36961 100644
--- a/glusterfs/client/volume/artifactory.yml
+++ b/glusterfs/client/volume/artifactory.yml
@@ -7,4 +7,4 @@
         artifactory:
           path: /srv/volumes/artifactory
           server: ${_param:artifactory_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/gerrit.yml b/glusterfs/client/volume/gerrit.yml
index 6199aa6..39e9559 100644
--- a/glusterfs/client/volume/gerrit.yml
+++ b/glusterfs/client/volume/gerrit.yml
@@ -7,6 +7,6 @@
         gerrit:
           path: /srv/volumes/gerrit
           server: ${_param:gerrit_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
           user: 1000
           group: 1000
diff --git a/glusterfs/client/volume/glance.yml b/glusterfs/client/volume/glance.yml
index 66a4166..25cc988 100644
--- a/glusterfs/client/volume/glance.yml
+++ b/glusterfs/client/volume/glance.yml
@@ -9,3 +9,4 @@
           server: ${_param:glance_glusterfs_service_host}
           user: glance
           group: glance
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/jenkins.yml b/glusterfs/client/volume/jenkins.yml
index cb6cea7..8ca47e2 100644
--- a/glusterfs/client/volume/jenkins.yml
+++ b/glusterfs/client/volume/jenkins.yml
@@ -7,6 +7,6 @@
         jenkins:
           path: /srv/volumes/jenkins
           server: ${_param:jenkins_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
           user: 1000
           group: 1000
diff --git a/glusterfs/client/volume/keystone.yml b/glusterfs/client/volume/keystone.yml
index 188ea03..415e93f 100644
--- a/glusterfs/client/volume/keystone.yml
+++ b/glusterfs/client/volume/keystone.yml
@@ -8,4 +8,5 @@
           path: /var/lib/keystone/fernet-keys
           server: ${_param:keystone_glusterfs_service_host}
           user: keystone
-          group: keystone
\ No newline at end of file
+          group: keystone
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/mysql.yml b/glusterfs/client/volume/mysql.yml
index a6458c6..3208a71 100644
--- a/glusterfs/client/volume/mysql.yml
+++ b/glusterfs/client/volume/mysql.yml
@@ -7,4 +7,4 @@
         mysql:
           path: /srv/volumes/mysql
           server: ${_param:mysql_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/openldap.yml b/glusterfs/client/volume/openldap.yml
index 792f15f..0de1d10 100644
--- a/glusterfs/client/volume/openldap.yml
+++ b/glusterfs/client/volume/openldap.yml
@@ -7,4 +7,4 @@
         openldap:
           path: /srv/volumes/openldap
           server: ${_param:openldap_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/postgresql.yml b/glusterfs/client/volume/postgresql.yml
index d2337e7..087afa9 100644
--- a/glusterfs/client/volume/postgresql.yml
+++ b/glusterfs/client/volume/postgresql.yml
@@ -7,4 +7,4 @@
         postgresql:
           path: /srv/volumes/postgresql
           server: ${_param:postgresql_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/prometheus.yml b/glusterfs/client/volume/prometheus.yml
new file mode 100644
index 0000000..f8b2f3d
--- /dev/null
+++ b/glusterfs/client/volume/prometheus.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    prometheus_glusterfs_service_host: ${_param:glusterfs_service_host}
+  glusterfs:
+    client:
+      volumes:
+        prometheus-config:
+          path: /srv/volumes/prometheus-config
+          server: ${_param:prometheus_glusterfs_service_host}
+          opts: 'defaults'
diff --git a/glusterfs/client/volume/registry.yml b/glusterfs/client/volume/registry.yml
index 875895a..2bb5019 100644
--- a/glusterfs/client/volume/registry.yml
+++ b/glusterfs/client/volume/registry.yml
@@ -7,4 +7,4 @@
         registry:
           path: /srv/volumes/registry
           server: ${_param:registry_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/client/volume/salt.yml b/glusterfs/client/volume/salt.yml
index c3a9570..7ed434a 100644
--- a/glusterfs/client/volume/salt.yml
+++ b/glusterfs/client/volume/salt.yml
@@ -7,4 +7,4 @@
         saltmaster:
           path: /etc/salt/pki/master
           server: ${_param:salt_glusterfs_service_host}
-          opts: 'defaults'
+          opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
diff --git a/glusterfs/server/volume/prometheus.yml b/glusterfs/server/volume/prometheus.yml
new file mode 100644
index 0000000..2c4ca31
--- /dev/null
+++ b/glusterfs/server/volume/prometheus.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        prometheus-config:
+          storage: /srv/glusterfs/prometheus-config
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/prometheus-config
+            - ${_param:cluster_node02_address}:/srv/glusterfs/prometheus-config
+            - ${_param:cluster_node03_address}:/srv/glusterfs/prometheus-config
+          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/jenkins/client/job/deploy/init.yml b/jenkins/client/job/deploy/init.yml
index d725c20..102fe73 100644
--- a/jenkins/client/job/deploy/init.yml
+++ b/jenkins/client/job/deploy/init.yml
@@ -1,3 +1,4 @@
 classes:
   - system.jenkins.client.job.deploy.lab
   - system.jenkins.client.job.deploy.update
+  - system.jenkins.client.job.deploy.openstack
diff --git a/jenkins/client/job/deploy/openstack.yml b/jenkins/client/job/deploy/openstack.yml
new file mode 100644
index 0000000..48de021
--- /dev/null
+++ b/jenkins/client/job/deploy/openstack.yml
@@ -0,0 +1,33 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        deploy_openstack:
+          type: workflow-scm
+          name: deploy-openstack
+          display_name: "Deploy - OpenStack"
+          discard:
+            build:
+              keep_num: 20
+          concurrent: true
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: lab-pipeline.groovy
+          param:
+            # deployments and test settings
+            STACK_TYPE:
+              type: string
+              default: "physical"
+            INSTALL:
+              type: string
+              default: "core,kvm,openstack,stacklight"
+
+            # salt master
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+            SALT_MASTER_URL:
+              type: string
+              default: ""
diff --git a/jenkins/client/job/opencontrail/build/init.yml b/jenkins/client/job/opencontrail/build/init.yml
index 759d78a..b4853b6 100644
--- a/jenkins/client/job/opencontrail/build/init.yml
+++ b/jenkins/client/job/opencontrail/build/init.yml
@@ -1,3 +1,4 @@
 classes:
   - system.jenkins.client.job.opencontrail.build.generic
+  - system.jenkins.client.job.opencontrail.build.test
   - system.jenkins.client.job.opencontrail.build.dpdk-extra
diff --git a/jenkins/client/job/opencontrail/build/test.yml b/jenkins/client/job/opencontrail/build/test.yml
new file mode 100644
index 0000000..7b39b97
--- /dev/null
+++ b/jenkins/client/job/opencontrail/build/test.yml
@@ -0,0 +1,127 @@
+parameters:
+  jenkins:
+    client:
+      job_template:
+        test-opencontrail:
+          name: test-opencontrail-{{buildname}}-{{os}}-{{dist}}
+          jobs:
+            - buildname: oc31
+              os: ubuntu
+              dist: trusty
+              branch: R3.1
+            - buildname: oc31
+              os: ubuntu
+              dist: xenial
+              branch: R3.1
+            - buildname: oc311
+              os: ubuntu
+              dist: trusty
+              branch: R3.1.1.x
+            - buildname: oc311
+              os: ubuntu
+              dist: xenial
+              branch: R3.1.1.x
+            - buildname: oc32
+              os: ubuntu
+              dist: trusty
+              branch: R3.2
+            - buildname: oc32
+              os: ubuntu
+              dist: xenial
+              branch: R3.2
+          template:
+            discard:
+             build:
+               keep_num: 5
+             artifact:
+               keep_num: 5
+            type: workflow-scm
+            concurrent: false
+            quiet_period: 120
+            scm:
+              type: git
+              url: "https://github.com/chnyda/contrail-unittest"
+            trigger:
+              gerrit:
+                project:
+                  contrail/contrail-pipeline:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-build:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-controller:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-vrouter:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-third-party:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-generateDS:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-sandesh:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-packages:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-nova-vif-driver:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-neutron-plugin:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-nova-extensions:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-heat:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-web-storage:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-web-server-manager:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-web-controller:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-web-core:
+                    branches:
+                      - "{{branch}}"
+                  contrail/contrail-webui-third-party:
+                    branches:
+                      - "{{branch}}"
+                message:
+                  build_successful: "Build successful"
+                  build_unstable: "Build unstable"
+                  build_failure: "Build failed"
+                event:
+                  ref:
+                    - updated
+            param:
+              SOURCE_URL:
+                type: string
+                default: "${_param:jenkins_gerrit_url}/contrail"
+              SOURCE_BRANCH:
+                type: string
+                default: "{{branch}}"
+              SOURCE_CREDENTIALS:
+                type: string
+                default: "gerrit"
+              KEEP_REPOS:
+                type: boolean
+                default: 'false'
+                description: "Don't cleanup on failure"
+              OS:
+                type: string
+                default: "{{os}}"
+              DIST:
+                type: string
+                default: "{{dist}}"
+              ARCH:
+                type: string
+                default: "amd64"
diff --git a/jenkins/slave/debian.yml b/jenkins/slave/debian.yml
new file mode 100644
index 0000000..af3c719
--- /dev/null
+++ b/jenkins/slave/debian.yml
@@ -0,0 +1,8 @@
+classes:
+  - system.jenkins.slave
+parameters:
+  linux:
+    system:
+      package:
+        devscripts:
+          version: latest
diff --git a/linux/system/repo/glusterfs.yml b/linux/system/repo/glusterfs.yml
new file mode 100644
index 0000000..da4cddf
--- /dev/null
+++ b/linux/system/repo/glusterfs.yml
@@ -0,0 +1,9 @@
+parameters:
+  linux:
+    system:
+      repo:
+        glusterfs-ppa:
+          source: "deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu trusty main"
+          architectures: amd64
+          key_id: 3FE869A9
+          key_server: keyserver.ubuntu.com
\ No newline at end of file
diff --git a/linux/system/repo/mcp/contrail.yml b/linux/system/repo/mcp/contrail.yml
new file mode 100644
index 0000000..9f65ee3
--- /dev/null
+++ b/linux/system/repo/mcp/contrail.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    linux_repo_contrail_component: oc311
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        mcp_opencontrail:
+          source: "deb [arch=amd64] http://apt-mk.mirantis.com/${_param:linux_system_codename}/ ${_param:apt_mk_version} ${_param:openstack_version} ${_param:linux_repo_contrail_component} extra"
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
diff --git a/linux/system/repo/mcp/extra.yml b/linux/system/repo/mcp/extra.yml
new file mode 100644
index 0000000..0bd9f13
--- /dev/null
+++ b/linux/system/repo/mcp/extra.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        mcp_extra:
+          source: "deb [arch=amd64] http://apt-mk.mirantis.com/${_param:linux_system_codename}/ ${_param:apt_mk_version} extra"
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
diff --git a/linux/system/repo/mcp/openstack.yml b/linux/system/repo/mcp/openstack.yml
new file mode 100644
index 0000000..372caf0
--- /dev/null
+++ b/linux/system/repo/mcp/openstack.yml
@@ -0,0 +1,26 @@
+parameters:
+  _param:
+    mcp_repo_version: 1.0
+  linux:
+    system:
+      repo:
+        mirantis_openstack:
+          source: "deb http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename} ${_param:openstack_version} main"
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename}/archive-mcp${_param:mcp_repo_version}.key"
+        mirantis_openstack_hotfix:
+          source: "deb http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename} ${_param:openstack_version}-hotfix main"
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename}/archive-mcp${_param:mcp_repo_version}.key"
+        mirantis_openstack_security:
+          source: "deb http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename} ${_param:openstack_version}-security main"
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename}/archive-mcp${_param:mcp_repo_version}.key"
+        mirantis_openstack_updates:
+          source: "deb http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename} ${_param:openstack_version}-updates main"
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename}/archive-mcp${_param:mcp_repo_version}.key"
+        mirantis_openstack_holdback:
+          source: "deb http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename} ${_param:openstack_version}-holdback main"
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mcp-repos/${_param:mcp_repo_version}/${_param:linux_system_codename}/archive-mcp${_param:mcp_repo_version}.key"
diff --git a/linux/system/repo/mcp/salt.yml b/linux/system/repo/mcp/salt.yml
new file mode 100644
index 0000000..e7240a4
--- /dev/null
+++ b/linux/system/repo/mcp/salt.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    apt_mk_version: stable
+  linux:
+    system:
+      repo:
+        mcp_salt:
+          source: "deb [arch=amd64] http://apt-mk.mirantis.com/${_param:linux_system_codename}/ ${_param:apt_mk_version} salt"
+          architectures: amd64
+          key_url: "http://apt-mk.mirantis.com/public.gpg"
diff --git a/linux/system/repo/mcp10.yml b/linux/system/repo/mcp10.yml
deleted file mode 100644
index 2581543..0000000
--- a/linux/system/repo/mcp10.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-parameters:
-  linux:
-    system:
-      repo:
-        mirantis_openstack:
-          source: "deb http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename} mitaka main"
-          architectures: amd64
-          key_url: "http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename}/archive-mcp1.0.key"
-        mirantis_openstack_hotfix:
-          source: "deb http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename} mitaka-hotfix main"
-          architectures: amd64
-          key_url: "http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename}/archive-mcp1.0.key"
-        mirantis_openstack_security:
-          source: "deb http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename} mitaka-security main"
-          architectures: amd64
-          key_url: "http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename}/archive-mcp1.0.key"
-        mirantis_openstack_updates:
-          source: "deb http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename} mitaka-updates main"
-          architectures: amd64
-          key_url: "http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename}/archive-mcp1.0.key"
-        mirantis_openstack_holdback:
-          source: "deb http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename} mitaka-holdback main"
-          architectures: amd64
-          key_url: "http://mirror.fuel-infra.org/mcp-repos/1.0/${_param:linux_system_codename}/archive-mcp1.0.key"
diff --git a/linux/system/repo/mcp_contrail.yml b/linux/system/repo/mcp_contrail.yml
deleted file mode 100644
index 85f0aa4..0000000
--- a/linux/system/repo/mcp_contrail.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-parameters:
-  _param:
-    linux_repo_contrail_component: oc311
-  linux:
-    system:
-      repo:
-        tcpcloud_opencontrail:
-          source: "deb [arch=amd64] http://apt-mk.mirantis.com/${_param:linux_system_codename}/ nightly ${_param:openstack_version} ${_param:linux_repo_contrail_component} extra"
-          architectures: amd64
-          key_url: "http://apt-mk.mirantis.com/public.gpg"
-
-
-
diff --git a/linux/system/repo/saltstack/trusty.yml b/linux/system/repo/saltstack/trusty.yml
new file mode 100644
index 0000000..c20d4dc
--- /dev/null
+++ b/linux/system/repo/saltstack/trusty.yml
@@ -0,0 +1,9 @@
+parameters:
+  _param:
+    salt_version: 2016.3
+  linux:
+    system:
+      repo:
+        salt:
+          source: "deb http://repo.saltstack.com/apt/ubuntu/14.04/amd64/${_param:salt_version} trusty main"
+          key_url: "http://repo.saltstack.com/apt/ubuntu/14.04/amd64/${_param:salt_version}/SALTSTACK-GPG-KEY.pub"
\ No newline at end of file
diff --git a/linux/system/repo/saltstack/xenial.yml b/linux/system/repo/saltstack/xenial.yml
new file mode 100644
index 0000000..0c933b8
--- /dev/null
+++ b/linux/system/repo/saltstack/xenial.yml
@@ -0,0 +1,9 @@
+parameters:
+  _param:
+    salt_version: 2016.3
+  linux:
+    system:
+      repo:
+        salt:
+          source: "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/${_param:salt_version} xenial main"
+          key_url: "http://repo.saltstack.com/apt/ubuntu/16.04/amd64/${_param:salt_version}/SALTSTACK-GPG-KEY.pub"
\ No newline at end of file
diff --git a/linux/system/repo/saltstack_2016_3_trusty.yml b/linux/system/repo/saltstack_2016_3_trusty.yml
index 19e4814..c7e03d7 100644
--- a/linux/system/repo/saltstack_2016_3_trusty.yml
+++ b/linux/system/repo/saltstack_2016_3_trusty.yml
@@ -1,3 +1,4 @@
+##Obsolete, please use repo/saltstack/trusty
 parameters:
   linux:
     system:
diff --git a/linux/system/repo/saltstack_2016_3_xenial.yml b/linux/system/repo/saltstack_2016_3_xenial.yml
index 6fed4c5..413294f 100644
--- a/linux/system/repo/saltstack_2016_3_xenial.yml
+++ b/linux/system/repo/saltstack_2016_3_xenial.yml
@@ -1,3 +1,4 @@
+##Obsolete, please use repo/saltstack/xenial
 parameters:
   linux:
     system:
diff --git a/openssh/server/team/mcp_qa.yml b/openssh/server/team/mcp_qa.yml
index ff38474..e4677dc 100644
--- a/openssh/server/team/mcp_qa.yml
+++ b/openssh/server/team/mcp_qa.yml
@@ -38,6 +38,27 @@
           sudo: true
           full_name: Denis Deryabin
           home: /home/dderyabin
+        dkalashnik:
+          enabled: true
+          name: dkalashnik
+          sudo: true
+          full_name: Dmitry Kalashnik
+          home: /home/dkalashnik
+          email: dkalashnik@mirantis.com
+        rpromyshlennikov:
+          enabled: true
+          name: rpromyshlennikov
+          sudo: true
+          full_name: Rodion Promyshlennikov
+          home: /home/rpromyshlennikov
+          email: rpromyshlennikov@mirantis.com
+        vgusev:
+          enabled: true
+          name: vgusev
+          sudo: true
+          full_name: Vitaly Gusev
+          home: /home/vgusev
+          email: vgusev@mirantis.com
       group:
         libvirtd:
           enabled: true
@@ -76,6 +97,21 @@
           public_keys:
           - ${public_keys:dderyabin}
           user: ${linux:system:user:dderyabin}
+        dkalashnik:
+          enable: true
+          public_keys:
+          - ${public_keys:dkalashnik}
+          user: ${linux:system:user:dkalashnik}
+        rpromyshlennikov:
+          enable: true
+          public_keys:
+          - ${public_keys:rpromyshlennikov}
+          user: ${linux:system:user:rpromyshlennikov}
+        vgusev:
+          enable: true
+          public_keys:
+          - ${public_keys:vgusev}
+          user: ${linux:system:user:vgusev}
   public_keys:
     ddmitriev:
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuD4wJ8hzkchQ0pfgdwWukQyps1xYRfHOsjosmDu/mmgaXVud5mnpwb2q35E2YYTox2mx+ulJqyS+099gz6MPg4P8D5qdMuRbAsJqbceLaaIGQhdT8qgSo7ESrl5pwvYnfWzKLKF0z5s7nrW0nvArC40zhV9o9XpvzzzSFByepWfkwA8ReldGUYVvTKp8YXaCrqEdMZrU42adPM2nl+fYBbGF+h4/Ka247aVjPeER0blV3znFXbv2Kf38G+i/TEGaktgpBdtGGDi1tX2loMypmTJeqZRJnM0Eoly0BnynB7CSxn11eoIXBUe1mVYNqmQd1hw6uh59iymhK5j939v9J ddmitriev@dis_xcom
@@ -89,3 +125,9 @@
       key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCWvKNMfHlugrEUMtDDJzZb3T1UzThOp/UtvQvyFTf1rlKN/i14b1cCVmbPaSKR6W4bqZ4YLnRfb5Z66ktEACL02RdC4FkCiGa8yFDAGXLbM2WJhHyA3ksu91z3wK2QRuKJuZuvjmelds1shTK1a31LgTqa7CNPfkfE9h+CsAizZfAhHg1yVqg0/CGKP8+iV8owR5MP9t8+JXTC40G6Qkjzrf/vuA13bT1X+JSWzLoI2OefezZ+X128fLkssPkr4IS1Jg+cbRvSRmGTVjvtk4dnDo3QxF5lUl6JZAUjPslMCxaqDvRFXn86UZ74g6iJ5dZjrU0vn6X+Ov+KVYmZ5znd yshapovalov@ys-pc
     dderyabin:
       key: AAAAB3NzaC1yc2EAAAADAQABAAABAQCljOKDvsoOsQFOsabL68kVTlzZOObP9d13Oqc7Lafew1MJx0uaCjabpfcaSOrLrqYu42akkpnHQ0ypQbzRWDREYWKciKmE1TKzRUTXZIF1FNNoFrDT7FfjrKVP42alk4isB0Yj9mvA6AhJGFM7pAy55dVEII30Rc0wKW6XCBAX8fIq3rHDnDYq7KuaSAtxkqj6u/C9eUcGBB+JIQ0NRhTVyIZlqjNeojXoM7py8pGDnGj54bIbpFtYiLU1hbowKfVVcJgHIE+17KsNvR7HwwZZ5lbUxzrOiOnoBq1JKF15JHQ3el358aKw3Ee7rqmVrHszohEBLfxRbWbACoTUem75 denis@usvbox
+    dkalashnik:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAyz5ovMK/rRxlhiy7x4dVwFkUqN/hhdVIpsQRQoGgTOjVhH6Y+eTE3si0RRq/HKZMwkcClJIqzMgjoajT5eQQphQrAAn2pwuCyZj0mXJJ1RSXQm+nSnhoqyB1r7Nl3keopgxrDlBLWyvyS3dJM9RJy4TimIwhuSA3qdhmfeqRm5M=
+    rpromyshlennikov:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3dCFNCYVxHQQD+/X1JJ9auAzpj15AkEl6yO4lJ1XL43ljxJbzWXXl3RN9vAjiBE1tvxEfuPEIxF7kO2sc1xPKtkw40RIwXrDIGfjlVCaBLtnxCPnCQX349UMSJl/AXpkHqKGVeAW+AO4zbeI8XnS9aDNMuX6ncgrLRMxWCxETL3J/IIE1LZ5v0QvyQBHuJc5jbyODVb4onff296SbjzYm96elJZcRFo4FzFaIcKtis+Sm4+6OAGCNDIXxfB9e5TK579x+L+ci/W1k83Fcz6NpQU/OM1R1CZVMap/Xet424aRMFPmA8sTF4hdYvWd6adBihco2isaW51b1Gkc+K9N9wELiEBMpdKQtqkPOvm98UhoRk7Wp+8+zSamj1uEs/7m6VCGFebq8V3xqTexWH2dCUznxZ5+KS6WLBh+3f4P6wG8VuWfgFjIUf7jjYKjidBXfSXFDxRkhf/LV8V0jLv+Ma1mjKBUX+rk7IFxm0X/PkjqNhVFlg3rH4Wre0+9WdsTCyzWS0HEaTxIKdPtwwULLEiwClO1LLebdlVjx9yhen0czXxMAHONbZeTvxN8ULfei+b7c07oYm16T8T9JAdiWn5nGxiT8TAUrCPBJMpbE4xQJLztYhAbMpfhFSdkKfTotFxTK9AKpTg4TZFY0NYOktFtV2R9ZnzP7hHZDSIg2Bw== rpromyshlennikov@mirantis.com
+    vgusev:
+      key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrCyaZjs8hiwx38LfpeQ2z9n9ptwQ7gFrhq2z5sK9q/LQMCubbnp5xhyF0SMY1jmQUewBOKXhnq3QSX+DmtNsnhitnZBw2BE5PBXllCBWMMiWULfAYvB0of728Q3EEjrtyfHkt7o2E+CvreVJcVI4kBwjKh5WpVBZ8mmkW/sexLGMuYu0bUWjCddu6ZlhUa+y14VZKOKp44auemza1VL/UzqOVZkBAfR2gPV2pBG3Im+SlnOlDRxKPEXQbsn3u/sNeZq0wSY++khY86AU7jAKfL2NiNsoA7CyB0jTEKwYO3vOWOhECifZuHwY/TNWyRFWM2ImW3mT9aO7nE4w4jXXJ vgusev@vgusev
diff --git a/openssh/server/team/mmo_de.yml b/openssh/server/team/mmo_devops.yml
similarity index 100%
rename from openssh/server/team/mmo_de.yml
rename to openssh/server/team/mmo_devops.yml
diff --git a/prometheus/server/target/etcd.yml b/prometheus/server/target/etcd.yml
new file mode 100644
index 0000000..e343bda
--- /dev/null
+++ b/prometheus/server/target/etcd.yml
@@ -0,0 +1,6 @@
+classes:
+- service.etcd.server.cluster
+parameters:
+  server:
+    target:
+      etcd: ${etcd:server:members}
diff --git a/prometheus/server/target/kubernetes.yml b/prometheus/server/target/kubernetes.yml
new file mode 100644
index 0000000..293895b
--- /dev/null
+++ b/prometheus/server/target/kubernetes.yml
@@ -0,0 +1,10 @@
+classes:
+- service.kubernetes.master.cluster
+parameters:
+  server:
+    target:
+      kubernetes:
+        api_ip: ${kubernetes:master:apiserver:address}
+        ssl_dir: /opt/prometheus/config
+        cert_name: kubelet-client.crt
+        key_name: kubelet-client.key
diff --git a/salt/master/formula/git/monitoring.yml b/salt/master/formula/git/monitoring.yml
new file mode 100644
index 0000000..e0cf30d
--- /dev/null
+++ b/salt/master/formula/git/monitoring.yml
@@ -0,0 +1,14 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            prometheus:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-prometheus.git'
+              revision: ${_param:salt_master_environment_revision}
+            telegraf:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-telegraf.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/pkg/monitoring.yml b/salt/master/formula/pkg/monitoring.yml
new file mode 100644
index 0000000..375cbd8
--- /dev/null
+++ b/salt/master/formula/pkg/monitoring.yml
@@ -0,0 +1,12 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            prometheus:
+              source: pkg
+              name: salt-formula-prometheus
+            telegraf:
+              source: pkg
+              name: salt-formula-telegraf
diff --git a/salt/master/git.yml b/salt/master/git.yml
index bcde77c..02d0b67 100644
--- a/salt/master/git.yml
+++ b/salt/master/git.yml
@@ -6,6 +6,7 @@
 - system.salt.master.formula.git.openstack
 - system.salt.master.formula.git.saltstack
 - system.salt.master.formula.git.stacklight
+- system.salt.master.formula.git.monitoring
 parameters:
   _param:
     salt_master_environment_repository: "https://github.com/salt-formulas"
diff --git a/salt/master/pkg.yml b/salt/master/pkg.yml
index 7686f07..b075138 100644
--- a/salt/master/pkg.yml
+++ b/salt/master/pkg.yml
@@ -6,4 +6,5 @@
 - system.salt.master.formula.pkg.openstack
 - system.salt.master.formula.pkg.saltstack
 - system.salt.master.formula.pkg.stacklight
-- system.linux.system.repo.tcp_salt
+- system.salt.master.formula.pkg.monitoring
+- system.linux.system.repo.mcp.salt
diff --git a/salt/minion/cert/ceph/init.yml b/salt/minion/cert/ceph/init.yml
new file mode 100644
index 0000000..8b2e61c
--- /dev/null
+++ b/salt/minion/cert/ceph/init.yml
@@ -0,0 +1,12 @@
+parameters:
+  _param:
+    salt_minion_ca_authority: salt_master_ca
+  salt:
+    minion:
+      cert:
+        ceph:
+          host: ${_param:salt_minion_ca_host}
+          signing_policy: cert_server
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: ${_param:cluster_public_host}
+
diff --git a/salt/minion/cert/ceph/openstack.yml b/salt/minion/cert/ceph/openstack.yml
new file mode 100644
index 0000000..664352d
--- /dev/null
+++ b/salt/minion/cert/ceph/openstack.yml
@@ -0,0 +1,11 @@
+classes:
+- system.salt.minion.cert.ceph
+parameters:
+  _param:
+    salt_pki_ceph_alt_names: IP:${_param:cluster_public_host},DNS:${_param:cluster_public_host}
+  salt:
+    minion:
+      cert:
+        ceph:
+          common_name: ceph
+          alternative_names: IP:127.0.0.1,${_param:salt_pki_ceph_alt_names}
diff --git a/salt/minion/cert/ceph/pki.yml b/salt/minion/cert/ceph/pki.yml
new file mode 100644
index 0000000..259fc38
--- /dev/null
+++ b/salt/minion/cert/ceph/pki.yml
@@ -0,0 +1,8 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        ceph:
+          key_file:  /srv/salt/pki/${_param:cluster_name}/ceph.${_param:cluster_public_host}.key
+          cert_file: /srv/salt/pki/${_param:cluster_name}/ceph.${_param:cluster_public_host}.crt
+          all_file:  /srv/salt/pki/${_param:cluster_name}/ceph-with-key.${_param:cluster_public_host}.pem
diff --git a/salt/minion/cert/k8s_client_prometheus.yml b/salt/minion/cert/k8s_client_prometheus.yml
new file mode 100644
index 0000000..04cd374
--- /dev/null
+++ b/salt/minion/cert/k8s_client_prometheus.yml
@@ -0,0 +1,12 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        k8s_client_prometheus:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          key_file: /srv/volumes/prometheus-config/kubelet-client.key
+          cert_file: /srv/volumes/prometheus-config/kubelet-client.crt
+          common_name: kubelet-client
+          signing_policy: cert_client
+          alternative_names: IP:${_param:cluster_vip_address},IP:${_param:cluster_node01_address},IP:${_param:cluster_node02_address},IP:${_param:cluster_node03_address},IP:${_param:kubernetes_internal_api_address}
diff --git a/salt/minion/cert/pki.yml b/salt/minion/cert/pki.yml
deleted file mode 100644
index 6e4026b..0000000
--- a/salt/minion/cert/pki.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-classes:
-- system.salt.minion.cert.wildcard
-- system.salt.minion.cert.proxy
diff --git a/salt/minion/cert/proxy/cicd.yml b/salt/minion/cert/proxy/cicd.yml
new file mode 100644
index 0000000..5fb5b28
--- /dev/null
+++ b/salt/minion/cert/proxy/cicd.yml
@@ -0,0 +1,15 @@
+classes:
+- system.salt.minion.cert.proxy
+parameters:
+  salt:
+    minion:
+      cert:
+        proxy:
+          alternative_names: "DNS:${_param:cluster_public_host}, DNS:*.${_param:cluster_public_host}, IP:${_param:control_vip_address}, IP:${_param:single_address}"
+          key_file: /etc/haproxy/ssl/${_param:cluster_public_host}.key
+          cert_file: /etc/haproxy/ssl/${_param:cluster_public_host}.crt
+          all_file: /etc/haproxy/ssl/${_param:cluster_public_host}-all.pem
+          ca_file: /etc/haproxy/ssl/${_param:salt_minion_ca_authority}-ca.crt
+          user: root
+          group: haproxy
+          mode: 640
\ No newline at end of file
diff --git a/salt/minion/cert/proxy.yml b/salt/minion/cert/proxy/init.yml
similarity index 100%
rename from salt/minion/cert/proxy.yml
rename to salt/minion/cert/proxy/init.yml
diff --git a/salt/minion/cert/proxy/openstack.yml b/salt/minion/cert/proxy/openstack.yml
new file mode 100644
index 0000000..627d96b
--- /dev/null
+++ b/salt/minion/cert/proxy/openstack.yml
@@ -0,0 +1,11 @@
+classes:
+- system.salt.minion.cert.proxy
+parameters:
+  _param:
+    salt_pki_proxy_alt_names: IP:${_param:cluster_public_host},DNS:${_param:cluster_public_host},DNS:proxy.${_param:cluster_public_host},DNS:horizon.${_param:cluster_public_host}
+  salt:
+    minion:
+      cert:
+        proxy:
+          common_name: proxy
+          alternative_names: IP:127.0.0.1,${_param:salt_pki_proxy_alt_names}
diff --git a/salt/minion/cert/proxy/pki.yml b/salt/minion/cert/proxy/pki.yml
new file mode 100644
index 0000000..9a93bbf
--- /dev/null
+++ b/salt/minion/cert/proxy/pki.yml
@@ -0,0 +1,8 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        proxy:
+          key_file:  /srv/salt/pki/${_param:cluster_name}/proxy.${_param:cluster_public_host}.key
+          cert_file: /srv/salt/pki/${_param:cluster_name}/proxy.${_param:cluster_public_host}.crt
+          all_file:  /srv/salt/pki/${_param:cluster_name}/proxy-with-key.${_param:cluster_public_host}.pem
diff --git a/salt/minion/cert/swift/init.yml b/salt/minion/cert/swift/init.yml
new file mode 100644
index 0000000..28859cf
--- /dev/null
+++ b/salt/minion/cert/swift/init.yml
@@ -0,0 +1,11 @@
+parameters:
+  _param:
+    salt_minion_ca_authority: salt_master_ca
+  salt:
+    minion:
+      cert:
+        swift:
+          host: ${_param:salt_minion_ca_host}
+          signing_policy: cert_server
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: ${_param:cluster_public_host}
diff --git a/salt/minion/cert/swift/openstack.yml b/salt/minion/cert/swift/openstack.yml
new file mode 100644
index 0000000..5560e1b
--- /dev/null
+++ b/salt/minion/cert/swift/openstack.yml
@@ -0,0 +1,11 @@
+classes:
+- system.salt.minion.cert.swift
+parameters:
+  _param:
+    salt_pki_swift_alt_names: IP:${_param:cluster_public_host},DNS:${_param:cluster_public_host}
+  salt:
+    minion:
+      cert:
+        swift:
+          common_name: swift
+          alternative_names: IP:127.0.0.1,${_param:salt_pki_swift_alt_names}
diff --git a/salt/minion/cert/swift/pki.yml b/salt/minion/cert/swift/pki.yml
new file mode 100644
index 0000000..dd24060
--- /dev/null
+++ b/salt/minion/cert/swift/pki.yml
@@ -0,0 +1,8 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        swift:
+          key_file:  /srv/salt/pki/${_param:cluster_name}/swift.${_param:cluster_public_host}.key
+          cert_file: /srv/salt/pki/${_param:cluster_name}/swift.${_param:cluster_public_host}.crt
+          all_file:  /srv/salt/pki/${_param:cluster_name}/swift-with-key.${_param:cluster_public_host}.pem
diff --git a/salt/minion/cert/wildcard/init.yml b/salt/minion/cert/wildcard/init.yml
new file mode 100644
index 0000000..3bc2d52
--- /dev/null
+++ b/salt/minion/cert/wildcard/init.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    salt_minion_ca_authority: salt_master_ca
+    salt_pki_wildcard_alt_names: IP:${_param:cluster_public_host},DNS:${_param:cluster_public_host},DNS:*.${_param:cluster_public_host},DNS:${_param:cluster_domain},DNS:*.${_param:cluster_domain}
+  salt:
+    minion:
+      cert:
+        proxy:
+          host: ${_param:salt_minion_ca_host}
+          signing_policy: cert_server
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: wildcard
+          alternative_names: IP:127.0.0.1,${_param:salt_pki_wildcard_alt_names}
+          key_file:  /srv/salt/pki/${_param:cluster_name}/wildcard.${_param:cluster_public_host}.key
+          cert_file: /srv/salt/pki/${_param:cluster_name}/wildcard.${_param:cluster_public_host}.crt
+          all_file:  /srv/salt/pki/${_param:cluster_name}/wildcard-with-key.${_param:cluster_public_host}.pem
diff --git a/telegraf/agent/init.yml b/telegraf/agent/init.yml
new file mode 100644
index 0000000..57a1f61
--- /dev/null
+++ b/telegraf/agent/init.yml
@@ -0,0 +1,11 @@
+paramaters:
+  telegraf:
+    agent:
+      input:
+        diskio:
+      output:
+        prometheus_client:
+          bind:
+            address: 0.0.0.0
+            port: 9126
+          engine: prometheus