Merge "Parametrized sources download options for ubuntu."
diff --git a/.releasenotes/config.yaml b/.releasenotes/config.yaml
index 28db76e..bf103f9 100644
--- a/.releasenotes/config.yaml
+++ b/.releasenotes/config.yaml
@@ -9,10 +9,11 @@
 prelude_section_name: summary
 show_source: False
 sections:
-  - [features, New Features]
-  - [upgrade, Upgrade Notes]
-  - [fixes, Bug Fixes]
-  - [other, Other Notes]
+  - [features, New features]
+  - [upgrades, Upgrade notes]
+  - [deprecations, Deprecation notes]
+  - [fixes, Bug fixes]
+  - [others, Other notes]
 template: |
   ---
   # Author the following sections or remove the section if it is not related.
@@ -21,38 +22,66 @@
   # If you miss a section from the list below, please first submit a review
   # adding it to .releasenotes/config.yaml.
   #
+  # Format content with reStructuredText (RST).
+  # **Formatting examples:**
+  # - |
+  #   This is a brief description of the feature. It may include a
+  #   number of components:
+  #
+  #   * List item 1
+  #   * List item 2.
+  #     This code block below will appear as part of the list item 2:
+  #
+  #     .. code-block:: yaml
+  #
+  #        classes:
+  #        - system.class.to.load
+  #
+  #   The code block below will appear on the same level as the feature
+  #   description:
+  #
+  #   .. code-block:: text
+  #
+  #      provide model/formula pillar snippets
+
+
   summary: >
     This section is not mandatory. Use it to highlight the change.
 
   features:
-    - Use list to record summary of features.
-    - |
-      Provide detailed description with examples.
-      Format with reStructuredText.
+    - Use the list to record summary of **NEW** features
+    - Provide detailed description of the feature indicating the use cases
+      when users benefit from using it
+    - Explain how the feature integrates into the overall reference
+      architecture of a deployment.
+    - Provide steps to deploy the feature (if the procedure is complicated
+      indicate during what stage of the deployment workflow it should be
+      deployed).
+    - Indicate limitations or incompatibility with other versions, if applicable.
+    - Provide a brief overview of how to use the feature after installation
+      (Day2 operations).
+    - Provide troubleshooting information, if any.
+    - Provide disaster recovery information (in case of hardware or software
+      failure.)
 
-      .. code-block:: text
+  upgrades:
+    - Use the list to record summary of an **improvement** to an existing
+      functionality/feature
+    - Document how to use a feature.
+    - Document the related upgrade instructions.
+    - Indicate limitations, if applicable.
 
-         provide model/formula pillar snippets
-
-  upgrade:
-    - |
-      Document how to use a feature and related upgrade instructions.
+  deprecations:
+    - Use the list to record deprecated features.
+    - Explain the reason of deprecation.
+    - Point to the functionality that can be used instead.
 
   fixes:
-    - Use list to record summary of fixes.
-      Quick and dirty `git log --oneline`.
+    - Use the list to record summary of a bug fix for blocker, critical,
+      and/or customer-found issues.
+    - Provide a brief summary of what has been fixed.
 
-  other:
-    - Author additional notes for the release.
-    - Format with reStructuredText.
-    - |
-        Use this section if note is not related to one of the common sections:
-        features, issues, upgrade, deprecations, security, fixes, api, cli
+  others:
+    - Author any additional notes. Use this section if note is not related to
+      any of the common sections above.
 
-        * list item 1
-        * list item 2
-
-        .. code-block:: yaml
-
-          classes:
-          - system.class.to.load
diff --git a/.releasenotes/notes/add-releasenotes-20cce0cea873f011.yaml b/.releasenotes/notes/add-releasenotes-20cce0cea873f011.yaml
index 733776f..45b6749 100644
--- a/.releasenotes/notes/add-releasenotes-20cce0cea873f011.yaml
+++ b/.releasenotes/notes/add-releasenotes-20cce0cea873f011.yaml
@@ -1,18 +1,20 @@
 ---
 summary: >
-  Use "reno", an releasenotes configuration tool to record release notes.
-  Documentation: https://docs.openstack.org/reno/latest
+  This is the test release of MCP Feature Update notes.
+  These notes are intended to detail the new functionality and
+  bug fixes released for Reclass model on a sprint basis.
 
-  Example usage:
-
-  .. code-block:: shell
-
-    # to list/create/show release notes, run following commands
-    reno -qd .releasenotes list
-    reno -qd .releasenotes new releasenote-slug-title --edit
-    reno -qd .releasenotes report --no-show-source
-
-other:
+others:
   - |
-    Added `reno <https://docs.openstack.org/reno/latest>_` configuration to track release notes
-    within the reclass-system git repository.
+    Added `Reno <https://docs.openstack.org/reno/latest>_`, a release notes
+    configuration tool, to track release notes within the ``reclass-system``
+    Git repository.
+
+    To list/create/show release notes:
+
+    .. code-block:: shell
+
+       reno -qd .releasenotes list
+       reno -qd .releasenotes new releasenote-slug-title --edit
+       reno -qd .releasenotes report --no-show-source
+
diff --git a/barbican/server/cluster.yml b/barbican/server/cluster.yml
new file mode 100644
index 0000000..5b5bc5e
--- /dev/null
+++ b/barbican/server/cluster.yml
@@ -0,0 +1,3 @@
+classes:
+- service.barbican.server.cluster
+- system.haproxy.proxy.listen.openstack.barbican
\ No newline at end of file
diff --git a/barbican/server/single.yml b/barbican/server/single.yml
new file mode 100644
index 0000000..eb2b30b
--- /dev/null
+++ b/barbican/server/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.barbican.server.single
diff --git a/docker/swarm/stack/monitoring/init.yml b/docker/swarm/stack/monitoring/init.yml
index 347319a..17a3a49 100644
--- a/docker/swarm/stack/monitoring/init.yml
+++ b/docker/swarm/stack/monitoring/init.yml
@@ -95,11 +95,11 @@
                 - ${prometheus:server:dir:config}:${_param:prometheus_server_config_directory}
                 - ${prometheus:server:dir:data}:${_param:prometheus_server_data_directory}
               environment:
-                config_dir: ${_param:prometheus_server_config_directory}
-                data_dir: ${_param:prometheus_server_data_directory}
-                bind_port: ${prometheus:server:bind:port}
-                bind_address: ${prometheus:server:bind:address}
-                storage_local_engine: ${prometheus:server:storage:local:engine}
-                storage_local_retention: ${prometheus:server:storage:local:retention}
-                storage_local_target_heap_size: ${prometheus:server:storage:local:target_heap_size}
-                storage_local_num_fingerprint_mutexes: ${prometheus:server:storage:local:num_fingerprint_mutexes}
+                PROMETHEUS_CONFIG_DIR: ${_param:prometheus_server_config_directory}
+                PROMETHEUS_DATA_DIR: ${_param:prometheus_server_data_directory}
+                PROMETHEUS_BIND_PORT: ${prometheus:server:bind:port}
+                PROMETHEUS_BIND_ADDRESS: ${prometheus:server:bind:address}
+                PROMETHEUS_STORAGE_LOCAL_ENGINE: ${prometheus:server:storage:local:engine}
+                PROMETHEUS_STORAGE_LOCAL_RETENTION: ${prometheus:server:storage:local:retention}
+                PROMETHEUS_STORAGE_LOCAL_TARGET_HEAP_SIZE: ${prometheus:server:storage:local:target_heap_size}
+                PROMETHEUS_STORAGE_LOCAL_NUM_FINGERPRINT_MUTEXES: ${prometheus:server:storage:local:num_fingerprint_mutexes}
diff --git a/galera/server/database/barbican.yml b/galera/server/database/barbican.yml
new file mode 100644
index 0000000..4759439
--- /dev/null
+++ b/galera/server/database/barbican.yml
@@ -0,0 +1,15 @@
+parameters:
+  mysql:
+    server:
+      database:
+        barbican:
+          encoding: utf8
+          users:
+          - name: barbican
+            password: ${_param:mysql_barbican_password}
+            host: '%'
+            rights: all
+          - name: barbican
+            password: ${_param:mysql_barbican_password}
+            host: ${_param:cluster_vip_address}
+            rights: all
diff --git a/haproxy/proxy/listen/opencontrail/tor.yml b/haproxy/proxy/listen/opencontrail/tor.yml
new file mode 100644
index 0000000..0595ccd
--- /dev/null
+++ b/haproxy/proxy/listen/opencontrail/tor.yml
@@ -0,0 +1,19 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        contrail_tor01:
+          type: contrail-tor
+          service_name: contrail
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 6631
+          servers:
+          - name: sw01
+            host: ${_param:cluster_node01_address}
+            port: 6632
+            params: check
+          - name: sw02
+            host: ${_param:cluster_node02_address}
+            port: 6632
+            params: check backup
diff --git a/haproxy/proxy/listen/openstack/barbican.yml b/haproxy/proxy/listen/openstack/barbican.yml
new file mode 100644
index 0000000..04251d9
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/barbican.yml
@@ -0,0 +1,42 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        barbican-api:
+          type: openstack-service
+          service_name: barbican
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 9311
+          servers:
+          - name: ctl01
+            host: ${_param:cluster_node01_address}
+            port: 9311
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl02
+            host: ${_param:cluster_node02_address}
+            port: 9311
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl03
+            host: ${_param:cluster_node03_address}
+            port: 9311
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+        barbican-admin-api:
+          type: openstack-service
+          service_name: barbican
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 9312
+          servers:
+          - name: ctl01
+            host: ${_param:cluster_node01_address}
+            port: 9312
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl02
+            host: ${_param:cluster_node02_address}
+            port: 9312
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl03
+            host: ${_param:cluster_node03_address}
+            port: 9312
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
\ No newline at end of file
diff --git a/helm/analytics_pipeline/hdfs.yml b/helm/analytics_pipeline/hdfs.yml
new file mode 100644
index 0000000..64e0cef
--- /dev/null
+++ b/helm/analytics_pipeline/hdfs.yml
@@ -0,0 +1,15 @@
+parameters:
+  _param:
+    analytics_hdfs_release: ${_param:analytics_release_prefix}hdfs
+    analytics_hdfs_address: hdfs-namenode-${_param:analytics_hdfs_release}-0.hdfs-namenode-${_param:analytics_hdfs_release}
+  helm:
+    client:
+      releases:
+        analytics-pipeline-hdfs:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_hdfs_release}
+          chart: ${_param:analytics_repo}/hdfs
+          values:
+            datanode:
+              replicas: 3
+              antiAffinity: soft
diff --git a/helm/analytics_pipeline/init.yml b/helm/analytics_pipeline/init.yml
new file mode 100644
index 0000000..f994efa
--- /dev/null
+++ b/helm/analytics_pipeline/init.yml
@@ -0,0 +1,19 @@
+classes:
+- system.helm.analytics_pipeline.zookeeper
+- system.helm.analytics_pipeline.kafka
+- system.helm.analytics_pipeline.spark
+- system.helm.analytics_pipeline.hdfs
+- system.helm.analytics_pipeline.tweepub
+- system.helm.analytics_pipeline.tweetics
+- system.helm.analytics_pipeline.tweeviz
+- service.helm.client
+parameters:
+  _param:
+    analytics_enabled: true
+    analytics_repo: mirantisworkloads
+    analytics_release_prefix: analytics-pipeline-
+    analytics_kafka_replicas: 3
+  helm:
+    client:
+      repos:
+        mirantisworkloads: https://mirantisworkloads.storage.googleapis.com/
diff --git a/helm/analytics_pipeline/kafka.yml b/helm/analytics_pipeline/kafka.yml
new file mode 100644
index 0000000..3c88299
--- /dev/null
+++ b/helm/analytics_pipeline/kafka.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    analytics_kafka_release: ${_param:analytics_release_prefix}kafka
+    analytics_kafka_address: kafka-${_param:analytics_kafka_release}-0.kafka-${_param:analytics_kafka_release}:9092,kafka-${_param:analytics_kafka_release}-1.kafka-${_param:analytics_kafka_release}:9092,kafka-${_param:analytics_kafka_release}-2.kafka-${_param:analytics_kafka_release}:9092
+  helm:
+    client:
+      releases:
+        analytics-pipeline-kafka:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_kafka_release}
+          chart: ${_param:analytics_repo}/kafka
+          values:
+            replicas: ${_param:analytics_kafka_replicas}
+            antiAffinity: soft
+            zookeeper:
+              deployChart: false
+              externalAddress: ${_param:analytics_zookeeper_address}
diff --git a/helm/analytics_pipeline/spark.yml b/helm/analytics_pipeline/spark.yml
new file mode 100644
index 0000000..aeb2856
--- /dev/null
+++ b/helm/analytics_pipeline/spark.yml
@@ -0,0 +1,20 @@
+parameters:
+  _param:
+    analytics_spark_release: ${_param:analytics_release_prefix}spark
+    analytics_spark_address: spark-master-${_param:analytics_spark_release}-0.spark-master-${_param:analytics_spark_release}:7077,spark-master-${_param:analytics_spark_release}-1.spark-master-${_param:analytics_spark_release}:7077
+  helm:
+    client:
+      releases:
+        analytics-pipeline-spark:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_spark_release}
+          chart: ${_param:analytics_repo}/spark
+          values:
+            spark:
+              master:
+                replicas: 1
+              worker:
+                replicas: 3
+            zookeeper:
+              deployChart: false
+              externalAddress: ${_param:analytics_zookeeper_address}
diff --git a/helm/analytics_pipeline/tweepub.yml b/helm/analytics_pipeline/tweepub.yml
new file mode 100644
index 0000000..42678a3
--- /dev/null
+++ b/helm/analytics_pipeline/tweepub.yml
@@ -0,0 +1,23 @@
+parameters:
+  _param:
+    analytics_tweepub_release: ${_param:analytics_release_prefix}tweepub
+  helm:
+    client:
+      releases:
+        analytics-pipeline-tweepub:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_tweepub_release}
+          chart: ${_param:analytics_repo}/tweepub
+          values:
+            twitter:
+              appKey: ${_param:analytics_twitter_app_key}
+              appSecret: ${_param:analytics_twitter_app_secret}
+              tokenKey: ${_param:analytics_twitter_token_key}
+              tokenSecret: ${_param:analytics_twitter_token_secret}
+
+              # San Francisco, Boston, New York
+              locations: -71.4415,41.9860,-70.4747,42.9041,-122.75,36.8,-121.75,37.8,-74,40,-73,41
+            kafka:
+              deployChart: false
+              externalAddress: ${_param:analytics_kafka_address}
+              topic: twitter-stream
diff --git a/helm/analytics_pipeline/tweetics.yml b/helm/analytics_pipeline/tweetics.yml
new file mode 100644
index 0000000..de438bf
--- /dev/null
+++ b/helm/analytics_pipeline/tweetics.yml
@@ -0,0 +1,27 @@
+parameters:
+  _param:
+    analytics_tweetics_release: ${_param:analytics_release_prefix}tweetics
+  helm:
+    client:
+      releases:
+        analytics-pipeline-tweetics:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_tweetics_release}
+          chart: ${_param:analytics_repo}/tweetics
+          values:
+            minHashtagCounts: 0
+            zookeeper:
+              deployChart: false
+              externalAddress: ${_param:analytics_zookeeper_address}
+            kafka:
+              deployChart: false
+              externalAddress: ${_param:analytics_kafka_address}
+              topic: twitter-stream
+            spark:
+              deployChart: false
+              externalAddress: ${_param:analytics_spark_address}
+            storage: hdfs
+            hdfs:
+              deployChart: false
+              externalAddress: ${_param:analytics_hdfs_address}
+              path: /twitter
diff --git a/helm/analytics_pipeline/tweeviz.yml b/helm/analytics_pipeline/tweeviz.yml
new file mode 100644
index 0000000..d8f7aef
--- /dev/null
+++ b/helm/analytics_pipeline/tweeviz.yml
@@ -0,0 +1,19 @@
+parameters:
+  _param:
+    analytics_tweeviz_release: ${_param:analytics_release_prefix}tweeviz
+  helm:
+    client:
+      releases:
+        analytics-pipeline-tweeviz:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_tweeviz_release}
+          chart: ${_param:analytics_repo}/tweeviz
+          values:
+            minPopularity: 1
+            topListSize: 25
+            storage: hdfs
+            hdfs:
+              deployChart: false
+              externalAddress: ${_param:analytics_hdfs_address}
+              path: /
+              externalPort: 8020
diff --git a/helm/analytics_pipeline/zookeeper.yml b/helm/analytics_pipeline/zookeeper.yml
new file mode 100644
index 0000000..698510d
--- /dev/null
+++ b/helm/analytics_pipeline/zookeeper.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    analytics_zookeeper_release: ${_param:analytics_release_prefix}zookeeper
+    analytics_zookeeper_address: zk-${_param:analytics_zookeeper_release}-0.zk-${_param:analytics_zookeeper_release}:2181,zk-${_param:analytics_zookeeper_release}-1.zk-${_param:analytics_zookeeper_release}:2181,zk-${_param:analytics_zookeeper_release}-2.zk-${_param:analytics_zookeeper_release}:2181
+  helm:
+    client:
+      releases:
+        analytics-pipeline-zookeeper:
+          enabled: ${_param:analytics_enabled}
+          name: ${_param:analytics_zookeeper_release}
+          chart: ${_param:analytics_repo}/zookeeper
+          values:
+            replicas: 3
+            antiAffinity: soft
diff --git a/jenkins/client/approved_scripts.yml b/jenkins/client/approved_scripts.yml
index 99f2492..b187e26 100644
--- a/jenkins/client/approved_scripts.yml
+++ b/jenkins/client/approved_scripts.yml
@@ -127,3 +127,5 @@
         - method java.io.File listFiles
         - method java.lang.String concat java.lang.String
         - method org.jenkinsci.plugins.workflow.steps.FlowInterruptedException getCauses
+        - method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild
+        - method hudson.model.Actionable getAction java.lang.Class
diff --git a/jenkins/client/init.yml b/jenkins/client/init.yml
index b37c48f..7d87ffe 100644
--- a/jenkins/client/init.yml
+++ b/jenkins/client/init.yml
@@ -16,7 +16,6 @@
         username: ${_param:jenkins_client_user}
         password: ${_param:jenkins_client_password}
       plugin:
-        ansicolor: {}
         artifactory: {}
         build-blocker-plugin: {}
         build-monitor-plugin: {}
@@ -39,7 +38,6 @@
         simple-theme-plugin: {}
         slack: {}
         test-stability: {}
-        timestamper: {}
         workflow-cps: {}
         workflow-remote-loader: {}
         workflow-scm-step:
diff --git a/jenkins/client/job/ceph/init.yml b/jenkins/client/job/ceph/init.yml
index e4f2ba4..06dc5eb 100644
--- a/jenkins/client/job/ceph/init.yml
+++ b/jenkins/client/job/ceph/init.yml
@@ -1,2 +1,3 @@
 classes:
 - system.jenkins.client.job.ceph.remove-osd
+- system.jenkins.client.job.ceph.weights
diff --git a/jenkins/client/job/ceph/remove-osd.yml b/jenkins/client/job/ceph/remove-osd.yml
index 10b9028..448318a 100644
--- a/jenkins/client/job/ceph/remove-osd.yml
+++ b/jenkins/client/job/ceph/remove-osd.yml
@@ -28,8 +28,9 @@
               type: string
               description: OSDs on this HOST will be removed from cluster
             OSD:
-              type: all
+              type: string
               description: These OSDs at HOST will be removed (comma-separated list)
+              default: '*'
             ADMIN_HOST:
               type: string
               description: Host with admin keyring and access to cluster management
diff --git a/jenkins/client/job/ceph/weights.yml b/jenkins/client/job/ceph/weights.yml
new file mode 100644
index 0000000..776e16f
--- /dev/null
+++ b/jenkins/client/job/ceph/weights.yml
@@ -0,0 +1,29 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        ceph-enforce-weights:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Ceph - enforce OSD weights"
+          discard:
+            build:
+              keep_num: 50
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: ceph-enforce-weights.groovy
+          param:
+            # general parameters
+            SALT_MASTER_URL:
+              type: string
+              description: URL of Salt master
+              default: "http://${_param:salt_master_host}:6969"
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              description: Credentials for login to Salt API
+              default: salt
+            ADMIN_HOST:
+              type: string
+              description: Host with admin keyring and access to cluster management
diff --git a/jenkins/client/job/deploy/lab/component/ceph.yml b/jenkins/client/job/deploy/lab/component/ceph.yml
index f8953b6..e9e3d64 100644
--- a/jenkins/client/job/deploy/lab/component/ceph.yml
+++ b/jenkins/client/job/deploy/lab/component/ceph.yml
@@ -14,4 +14,4 @@
         stack_type: aws
         stack_install: core,ceph
         stack_test: "ceph"
-        job_timer: ""
+        job_timer: "H H * * *"
diff --git a/jenkins/client/job/deploy/update/utils.yml b/jenkins/client/job/deploy/update/utils.yml
new file mode 100644
index 0000000..fa6ce14
--- /dev/null
+++ b/jenkins/client/job/deploy/update/utils.yml
@@ -0,0 +1,70 @@
+parameters:
+  jenkins:
+    client:
+      job:
+        reclass_metadata_update:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - Update reclass metadata"
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: update-reclass-metadata.groovy
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: "http://127.0.0.1:8000"
+              description: Full Salt API address [https://127.0.0.1:8000].
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+              description: Credentials to the Salt API.
+            TARGET_SERVERS:
+              type: string
+              default: "I@reclass:storage"
+              description: Salt compound target to match nodes to be updated.
+        salt_master_formula_update:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - Update salt master formulas"
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: update-salt-master-formulas.groovy
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: "http://127.0.0.1:8000"
+              description: Full Salt API address [https://127.0.0.1:8000].
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+              description: Credentials to the Salt API.
+            TARGET_SERVERS:
+              type: string
+              default: "I@reclass:storage"
+              description: Salt compound target to match nodes to be updated.
+        jenkins_master_job_update:
+          type: workflow-scm
+          concurrent: true
+          display_name: "Deploy - Update jenkins master jobs"
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: update-jenkins-master-jobs.groovy
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: "http://127.0.0.1:8000"
+              description: Full Salt API address [https://127.0.0.1:8000].
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+              description: Credentials to the Salt API.
+            TARGET_SERVERS:
+              type: string
+              default: "I@reclass:storage"
+              description: Salt compound target to match nodes to be updated.
diff --git a/jenkins/client/job/opencontrail/build/dpdk-extra.yml b/jenkins/client/job/opencontrail/build/dpdk-extra.yml
index 156cedb..0a152f1 100644
--- a/jenkins/client/job/opencontrail/build/dpdk-extra.yml
+++ b/jenkins/client/job/opencontrail/build/dpdk-extra.yml
@@ -1,4 +1,6 @@
 parameters:
+  _param:
+    jenkins_contrail_dpdk_kernel_modules_dkms: "${_param:jenkins_gerrit_url}/contrail/contrail-dpdk-kernel-modules-dkms"
   jenkins:
     client:
       job_template:
@@ -84,3 +86,65 @@
                 description: "binary packages to create"
                 type: string
                 default: "{{binary}}"
+        build-opencontrail-dpdk-kernel-modules-dkms:
+          name: build-opencontrail-dpdk-kernel-modules-dkms-{{os}}-{{dist}}-{{dpdk}}
+          jobs:
+            - os: ubuntu
+              dist: xenial
+              branch: contrail_dpdk_2_1
+              dpdk: "21"
+              aptly_repo: ubuntu-xenial-mitaka
+            - os: ubuntu
+              dist: xenial
+              dpdk: "1702"
+              branch: contrail_dpdk_17_02
+              aptly_repo: ubuntu-xenial-oc40-dpdk1702
+          template:
+            discard:
+             build:
+               keep_num: 5
+             artifact:
+               keep_num: 5
+            type: workflow-scm
+            concurrent: false
+            quiet_period: 120
+            scm:
+              type: git
+              url: "${_param:jenkins_contrail_dpdk_kernel_modules_dkms}"
+              credentials: "gerrit"
+              branch: "{{branch}}"
+            trigger:
+              gerrit:
+                project:
+                  contrail/contrail-dpdk:
+                    branches:
+                      - "{{branch}}"
+                message:
+                  build_successful: "Build successful"
+                  build_unstable: "Build unstable"
+                  build_failure: "Build failed"
+                event:
+                  ref:
+                    - updated
+            param:
+              SOURCE_BRANCH:
+                type: string
+                default: "{{branch}}"
+              SOURCE_CREDENTIALS:
+                type: string
+                default: "gerrit"
+              APTLY_URL:
+                type: string
+                default: "${_param:jenkins_aptly_api_url}"
+              APTLY_REPO:
+                type: string
+                default: "{{aptly_repo}}"
+              OS:
+                type: string
+                default: "{{os}}"
+              DIST:
+                type: string
+                default: "{{dist}}"
+              ARCH:
+                type: string
+                default: "amd64"
diff --git a/jenkins/client/job/opencontrail/build/generic.yml b/jenkins/client/job/opencontrail/build/generic.yml
index 9643254..496b0ee 100644
--- a/jenkins/client/job/opencontrail/build/generic.yml
+++ b/jenkins/client/job/opencontrail/build/generic.yml
@@ -14,6 +14,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.0.3
               upload_source_package: false
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc31
               os: ubuntu
               dist: trusty
@@ -21,6 +22,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.1
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc31
               os: ubuntu
               dist: xenial
@@ -28,6 +30,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.1
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc311
               os: ubuntu
               dist: trusty
@@ -35,6 +38,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.1.1
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: "H H(20-23) * * *"
             - buildname: oc311
               os: ubuntu
               dist: xenial
@@ -42,6 +46,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.1.1
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: "H H(20-23) * * *"
             - buildname: oc32
               os: ubuntu
               dist: trusty
@@ -49,6 +54,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.2
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc32
               os: ubuntu
               dist: xenial
@@ -56,6 +62,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.2
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc323
               os: ubuntu
               dist: trusty
@@ -63,6 +70,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.2.3
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: "H H(20-23) * * *"
             - buildname: oc323
               os: ubuntu
               dist: xenial
@@ -70,6 +78,7 @@
               ppa: mirantis-opencontrail/opencontrail-3.2.3
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: "H H(20-23) * * *"
             - buildname: oc40
               os: ubuntu
               dist: trusty
@@ -77,6 +86,7 @@
               ppa: mirantis-opencontrail/opencontrail-4.0
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc40
               os: ubuntu
               dist: xenial
@@ -84,6 +94,7 @@
               ppa: mirantis-opencontrail/opencontrail-4.0
               upload_source_package: true
               dpdk: contrail_dpdk_2_1
+              build_trigger: ""
             - buildname: oc40-dpdk1702
               os: ubuntu
               dist: trusty
@@ -91,6 +102,7 @@
               ppa: mirantis-opencontrail/opencontrail-4.0-dpdk-17-02
               upload_source_package: false
               dpdk: contrail_dpdk_17_02
+              build_trigger: "H H(20-23) * * *"
             - buildname: oc40-dpdk1702
               os: ubuntu
               dist: xenial
@@ -98,18 +110,21 @@
               ppa: mirantis-opencontrail/opencontrail-4.0-dpdk-17-02
               upload_source_package: false
               dpdk: contrail_dpdk_17_02
+              build_trigger: "H H(20-23) * * *"
             - buildname: oc666
               os: ubuntu
               dist: trusty
               branch: master
               ppa: mirantis-opencontrail/opencontrail-master
               upload_source_package: false
+              build_trigger: ""
             - buildname: oc666
               os: ubuntu
               dist: xenial
               branch: master
               ppa: mirantis-opencontrail/opencontrail-master
               upload_source_package: false
+              build_trigger: ""
           template:
             discard:
              build:
@@ -164,6 +179,8 @@
                 type: boolean
                 default: '{{upload_source_package}}'
             trigger:
+              pollscm:
+                spec: "{{build_trigger}}"
               gerrit:
                 project:
                    contrail/contrail-pipeline:
diff --git a/jenkins/client/job/salt-formulas/tests.yml b/jenkins/client/job/salt-formulas/tests.yml
index c25cc49..fe95493 100644
--- a/jenkins/client/job/salt-formulas/tests.yml
+++ b/jenkins/client/job/salt-formulas/tests.yml
@@ -10,8 +10,9 @@
             - name: aptcacher
             - name: aptly
             - name: artifactory
-            - name: backupninja
             - name: avinetworks
+            - name: backupninja
+            - name: barbican
             - name: billometer
             - name: bind
             - name: bird
diff --git a/jenkins/client/job/salt-models/tests.yml b/jenkins/client/job/salt-models/tests.yml
index 50d1cc8..e10339f 100644
--- a/jenkins/client/job/salt-models/tests.yml
+++ b/jenkins/client/job/salt-models/tests.yml
@@ -41,7 +41,7 @@
                 default: "gerrit"
               PARALLEL_NODE_GROUP_SIZE:
                 type: string
-                default: "2"
+                default: "9"
               # Salt master setup extra formulas
               EXTRA_FORMULAS:
                 type: string
@@ -103,6 +103,11 @@
           jobs:
             - cookiecutter_template: cookiecutter-templates
           template:
+            discard:
+             build:
+               keep_num: 20
+             artifact:
+               keep_num: 20
             type: workflow-scm
             concurrent: true
             scm:
diff --git a/jenkins/client/job/validate.yml b/jenkins/client/job/validate.yml
index f8ebcc7..6f22a0c 100644
--- a/jenkins/client/job/validate.yml
+++ b/jenkins/client/job/validate.yml
@@ -42,8 +42,17 @@
             RUN_TEMPEST_TESTS:
               type: boolean
               default: 'true'
+            RUN_K8S_TESTS:
+              type: boolean
+              default: 'true'
             TEMPEST_TEST_SET:
               type: choice
               choices:
                 - smoke
                 - full
+            TEST_K8S_API_SERVER:
+              type: string
+              default: "http://127.0.0.1:8080"
+            TEST_K8S_CONFORMANCE_IMAGE:
+              type: string
+              default: "docker-dev-virtual.docker.mirantis.net/mirantis/kubernetes/k8s-conformance:v1.5.1-3_1482332392819"
diff --git a/keystone/client/service/barbican.yml b/keystone/client/service/barbican.yml
index f83e6ab..70b6054 100644
--- a/keystone/client/service/barbican.yml
+++ b/keystone/client/service/barbican.yml
@@ -5,13 +5,17 @@
     client:
       server:
         identity:
+          roles:
+          - creator
           project:
             service:
               user:
                 barbican:
-                  is_admin: true
                   password: ${_param:keystone_barbican_password}
                   email: ${_param:admin_email}
+                  roles:
+                  - admin
+                  - creator
           service:
             barbican:
               type: key-manager
diff --git a/linux/system/repo/aptly.yml b/linux/system/repo/aptly.yml
new file mode 100644
index 0000000..330ba03
--- /dev/null
+++ b/linux/system/repo/aptly.yml
@@ -0,0 +1,9 @@
+parameters:
+  linux:
+    system:
+      repo:
+        aptly:
+          source: "deb http://repo.aptly.info/ squeeze main"
+          architectures: amd64
+          key_id: 9E3E53F19C7DE460
+          key_server: keys.gnupg.net
diff --git a/linux/system/single.yml b/linux/system/single.yml
index e2a8502..d7e03e8 100644
--- a/linux/system/single.yml
+++ b/linux/system/single.yml
@@ -35,6 +35,7 @@
           net.ipv4.neigh.default.gc_thresh2: 8192
           net.ipv4.neigh.default.gc_thresh3: 16384
           net.core.netdev_max_backlog: 261144
+          net.ipv4.tcp_tw_reuse: 1
           kernel.panic: 60
       cpu:
         governor: performance
diff --git a/mysql/client/database/barbican.yml b/mysql/client/database/barbican.yml
new file mode 100644
index 0000000..f9fe6dd
--- /dev/null
+++ b/mysql/client/database/barbican.yml
@@ -0,0 +1,17 @@
+parameters:
+  mysql:
+    client:
+      server:
+        database:
+          database:
+            barbican:
+              encoding: utf8
+              users:
+              - name: barbican
+                password: ${_param:mysql_barbican_password}
+                host: '%'
+                rights: all
+              - name: barbican
+                password: ${_param:mysql_barbican_password}
+                host: ${_param:single_address}
+                rights: all
diff --git a/nginx/server/proxy/openstack/barbican.yml b/nginx/server/proxy/openstack/barbican.yml
new file mode 100644
index 0000000..5f658d1
--- /dev/null
+++ b/nginx/server/proxy/openstack/barbican.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_barbican:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_barbican
+          check: false
+          proxy:
+            host: ${_param:barbican_service_host}
+            port: 9311
+            protocol: http
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 9311
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/opencontrail/compute/tor/cluster.yml b/opencontrail/compute/tor/cluster.yml
new file mode 100644
index 0000000..662de03
--- /dev/null
+++ b/opencontrail/compute/tor/cluster.yml
@@ -0,0 +1,4 @@
+classes:
+- service.haproxy.proxy.single
+- service.keepalived.cluster.single
+- service.opencontrail.compute.tor.cluster
diff --git a/openssh/server/team/all.yml b/openssh/server/team/all.yml
index 4dcb121..1fea51d 100644
--- a/openssh/server/team/all.yml
+++ b/openssh/server/team/all.yml
@@ -5,7 +5,9 @@
 - system.openssh.server.team.mcp_ci
 - system.openssh.server.team.mmo_devops
 - system.openssh.server.team.presales
-- system.openssh.server.team.support
+- system.openssh.server.team.services
+# avoid teams w/sudo group restrictions, or override restrictions
+#- system.openssh.server.team.support
 - system.openssh.server.team.stacklight
 - system.openssh.server.team.networking
 - system.openssh.server.team.oss_team
diff --git a/openssh/server/team/members/chnyda.yml b/openssh/server/team/members/chnyda.yml
new file mode 100644
index 0000000..2bcecaf
--- /dev/null
+++ b/openssh/server/team/members/chnyda.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        chnyda:
+          enabled: true
+          name: chnyda
+          sudo: true
+          full_name: Cedric Hnyda
+          home: /home/chnyda
+          email: chnyda@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        chnyda:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDHmLTwDSFslOUVo4ViT0bqVLhSaweuLt0QNWhnIaSPgqWhHOSkdqt3+Tg4l8Vd4O4Z44Yv/rXqhmO5X1AIytNccA6+nJe4Km3JC6QzG6npS3ghtHWDU3DOGgWd5RrULviEDSIj1w1oG8oHxdycGkbfjApAkiDR/xr7NHhTcPhEuvn/q7i1raj4vpNdIrR+cr6XA3l+I4cmaizpjuWaFrag1q24RS7PVEUmcPRSODrkdwFREsrLkIlIgtIoMIIjtEDdk1RU/loiXrNwuVRI3KTLqhheFlHedQd13uzpn66KF6UVlZAm+k2y2jLdEi5IFKD3g6mmWsNH6xSZYVn6d84/XvLjMsS/UL+WHr5xetHNSi3RtQOkCPYphq1KcRAXLwH0dgtDwfyg2F+5ezG3wMsZAqD3KiaGNmDcA6R19Fpjm0S4SXa+QnX5eZcO9DS5cYTjs8F2T9Vsaspvwc0U80M6+JvOlV1PBNJYQhSxdX1Plf2p1MrrRnYhlgMdzCiPSQHsKp3tei8I+bqCvV9iScLAbLxKaW/yWdeuh74oGitTfI4R0h0HMJ1lqK+rT5wtMXyJSvFMK6Zph0GqJf3QHBhzCfs5PIto1pyNdXbI8KzfgTgyo+3gpIPAQ2VD/pf8mOD218UPNQglYWP6wniTq/hVtC2tl3DW53qx5qv10osGmw== chnyda@mirantis.com
+          user: ${linux:system:user:chnyda}
diff --git a/openssh/server/team/support.yml b/openssh/server/team/support.yml
index d164d2d..4dd5bdc 100644
--- a/openssh/server/team/support.yml
+++ b/openssh/server/team/support.yml
@@ -34,7 +34,6 @@
 - system.openssh.server.team.members.obryndzii
 - system.openssh.server.team.members.oliemieshko
 - system.openssh.server.team.members.sovsianikov
-# L2OPS SRE Team
 - system.openssh.server.team.members.cade
 - system.openssh.server.team.members.jmosher
 - system.openssh.server.team.members.ecantwell
@@ -56,11 +55,17 @@
           enabled: false
           name: supportl2
         support0:
-          enabled: true
+          enabled: false
           name: support0
         support1:
-          enabled: true
+          enabled: false
           name: support1
+        support2:
+          enabled: false
+          name: support2
+        support3:
+          enabled: true
+          name: support3
           addusers:
             # L1
             - ${linux:system:user:adobdin:name}
@@ -82,10 +87,6 @@
             - ${linux:system:user:rsafonov:name}
             - ${linux:system:user:smachtmes:name}
             - ${linux:system:user:zkhurasani:name}
-        support2:
-          enabled: true
-          name: support2
-          addusers:
             # L2OPS
             - ${linux:system:user:aepifanov:name}
             - ${linux:system:user:apetrenko:name}
@@ -100,19 +101,6 @@
             - ${linux:system:user:obryndzii:name}
             - ${linux:system:user:oliemieshko:name}
             - ${linux:system:user:sovsianikov:name}
-            # L2OPS SRE
-            - ${linux:system:user:pmichalec:name}
-            - ${linux:system:user:pmathews:name}
-            - ${linux:system:user:pcizinsky:name}
-            - ${linux:system:user:osmola:name}
-            - ${linux:system:user:cade:name}
-            - ${linux:system:user:jmosher:name}
-            - ${linux:system:user:ecantwell:name}
-            - ${linux:system:user:lmercl:name}
-        support3:
-          enabled: false
-          name: support3
-          addusers:
             - ${linux:system:user:pmichalec:name}
             - ${linux:system:user:pmathews:name}
             - ${linux:system:user:pcizinsky:name}
@@ -174,5 +162,3 @@
           # Use with caution.
             commands:
                 - ALL
-                - '!SUPPORT_RESTRICTED_SHELLS'
-                - '!SUPPORT_RESTRICTED_SU'
diff --git a/openssh/server/team/tcpcloud.yml b/openssh/server/team/tcpcloud.yml
index c7b465a..bcd9327 100644
--- a/openssh/server/team/tcpcloud.yml
+++ b/openssh/server/team/tcpcloud.yml
@@ -20,6 +20,7 @@
 - system.openssh.server.team.members.tkukral
 - system.openssh.server.team.members.vmikes
 - system.openssh.server.team.members.psvimbersky
+- system.openssh.server.team.members.chnyda
 
 parameters:
   _param:
diff --git a/prometheus/server/target/kubernetes/endpoint.yml b/prometheus/server/target/kubernetes/endpoint.yml
deleted file mode 100644
index 671f037..0000000
--- a/prometheus/server/target/kubernetes/endpoint.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-parameters:
-  prometheus:
-    server:
-      target:
-        kubernetes:
-          endpoint:
-            enabled: true
diff --git a/prometheus/server/target/kubernetes/init.yml b/prometheus/server/target/kubernetes/init.yml
deleted file mode 100644
index 919c916..0000000
--- a/prometheus/server/target/kubernetes/init.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-parameters:
-  prometheus:
-    server:
-      target:
-        kubernetes:
-          enabled: true
-          api_ip: ${_param:kubernetes_control_address}
-          cert_name: prometheus-server.crt
-          key_name: prometheus-server.key
diff --git a/prometheus/server/target/kubernetes/pod.yml b/prometheus/server/target/kubernetes/pod.yml
deleted file mode 100644
index 964282f..0000000
--- a/prometheus/server/target/kubernetes/pod.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-parameters:
-  prometheus:
-    server:
-      target:
-        kubernetes:
-          pod:
-            enabled: true
diff --git a/reclass/storage/system/ceph_mon_cluster.yml b/reclass/storage/system/ceph_mon_cluster.yml
index 6b99d21..85beafb 100644
--- a/reclass/storage/system/ceph_mon_cluster.yml
+++ b/reclass/storage/system/ceph_mon_cluster.yml
@@ -3,6 +3,7 @@
     ceph_mon_node01_hostname: cmn01
     ceph_mon_node02_hostname: cmn02
     ceph_mon_node03_hostname: cmn03
+    ceph_mon_system_codename: xenial
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.ceph.mon
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:ceph_mon_system_codename}
             single_address: ${_param:ceph_mon_node01_address}
             keepalived_vip_priority: 103
         ceph_mon_node02:
@@ -23,7 +24,7 @@
           - cluster.${_param:cluster_name}.ceph.mon
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename:  ${_param:ceph_mon_system_codename}
             single_address: ${_param:ceph_mon_node02_address}
             keepalived_vip_priority: 102
         ceph_mon_node03:
@@ -33,6 +34,6 @@
           - cluster.${_param:cluster_name}.ceph.mon
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename:  ${_param:ceph_mon_system_codename}
             single_address: ${_param:ceph_mon_node03_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/cicd_control_cluster.yml b/reclass/storage/system/cicd_control_cluster.yml
index 547ba61..bc31944 100644
--- a/reclass/storage/system/cicd_control_cluster.yml
+++ b/reclass/storage/system/cicd_control_cluster.yml
@@ -3,6 +3,7 @@
     cicd_control_node01_hostname: cid01
     cicd_control_node02_hostname: cid02
     cicd_control_node03_hostname: cid03
+    cicd_control_system_codename: xenial
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.cicd.control.leader
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:cicd_control_system_codename}
             single_address: ${_param:cicd_control_node01_address}
             keepalived_vip_priority: 103
             cicd_database_id: 1
@@ -24,7 +25,7 @@
           - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:cicd_control_system_codename}
             single_address: ${_param:cicd_control_node02_address}
             keepalived_vip_priority: 102
             cicd_database_id: 2
@@ -35,7 +36,7 @@
           - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:cicd_control_system_codename}
             single_address: ${_param:cicd_control_node03_address}
             keepalived_vip_priority: 101
             cicd_database_id: 3
diff --git a/reclass/storage/system/cicd_manager_cluster.yml b/reclass/storage/system/cicd_manager_cluster.yml
index 898e657..032f257 100644
--- a/reclass/storage/system/cicd_manager_cluster.yml
+++ b/reclass/storage/system/cicd_manager_cluster.yml
@@ -2,6 +2,7 @@
   _param:
     cicd_control_node02_hostname: cid01
     cicd_control_node03_hostname: cid02
+    cicd_control_system_codename: xenial
   reclass:
     storage:
       node:
@@ -12,7 +13,7 @@
           - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:cicd_control_system_codename}
             single_address: ${_param:cicd_control_node02_address}
             keepalived_vip_priority: 102
             cicd_database_id: 2
@@ -23,7 +24,7 @@
           - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:cicd_control_system_codename}
             single_address: ${_param:cicd_control_node03_address}
             keepalived_vip_priority: 101
             cicd_database_id: 3
diff --git a/reclass/storage/system/infra_idm_cluster.yml b/reclass/storage/system/infra_idm_cluster.yml
index aae2370..1d2efcf 100644
--- a/reclass/storage/system/infra_idm_cluster.yml
+++ b/reclass/storage/system/infra_idm_cluster.yml
@@ -3,6 +3,7 @@
     infra_idm_node01_hostname: idm01
     infra_idm_node02_hostname: idm02
     infra_idm_node03_hostname: idm03
+    infra_idm_system_codename: centos
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.infra.idm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: centos
+            linux_system_codename: ${_param:infra_idm_system_codename}
             single_address: ${_param:infra_idm_node01_address}
         infra_idm_node02:
           name: ${_param:infra_idm_node02_hostname}
@@ -22,7 +23,7 @@
           - cluster.${_param:cluster_name}.infra.idm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: centos
+            linux_system_codename: ${_param:infra_idm_system_codename}
             single_address: ${_param:infra_idm_node02_address}
         infra_idm_node03:
           name: ${_param:infra_idm_node03_hostname}
@@ -31,5 +32,5 @@
           - cluster.${_param:cluster_name}.infra.idm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: centos
-            single_address: ${_param:infra_idm_node03_address}
\ No newline at end of file
+            linux_system_codename: ${_param:infra_idm_system_codename}
+            single_address: ${_param:infra_idm_node03_address}
diff --git a/reclass/storage/system/infra_maas_single.yml b/reclass/storage/system/infra_maas_single.yml
index eb5a96b..c919fc9 100644
--- a/reclass/storage/system/infra_maas_single.yml
+++ b/reclass/storage/system/infra_maas_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     infra_maas_node01_hostname: mas01
+    infra_maas_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,6 +12,5 @@
           - cluster.${_param:cluster_name}.infra.maas
           params:
             salt_master_host: ${_param:infra_config_deploy_address}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:infra_maas_system_codename}
             single_address: ${_param:infra_maas_node01_deploy_address}
-
diff --git a/reclass/storage/system/infra_proxy_cluster.yml b/reclass/storage/system/infra_proxy_cluster.yml
index f7c7932..2cac99a 100644
--- a/reclass/storage/system/infra_proxy_cluster.yml
+++ b/reclass/storage/system/infra_proxy_cluster.yml
@@ -2,6 +2,7 @@
   _param:
     infra_proxy_node01_hostname: prx01
     infra_proxy_node02_hostname: prx02
+    infra_proxy_system_codename: trusty
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.stacklight.proxy
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_proxy_system_codename}
             single_address: ${_param:infra_proxy_node01_address}
             keepalived_vip_priority: 102
         infra_proxy_node02:
@@ -24,6 +25,6 @@
           - cluster.${_param:cluster_name}.stacklight.proxy
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_proxy_system_codename}
             single_address: ${_param:infra_proxy_node02_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/infra_proxy_single.yml b/reclass/storage/system/infra_proxy_single.yml
index a245e8c..f75acc5 100644
--- a/reclass/storage/system/infra_proxy_single.yml
+++ b/reclass/storage/system/infra_proxy_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_proxy_node01_hostname: prx01
+    openstack_proxy_system_codename: trusty
   reclass:
     storage:
       node:
@@ -12,5 +13,5 @@
           - cluster.${_param:cluster_name}.stacklight.proxy
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_proxy_system_codename}
             single_address: ${_param:openstack_proxy_node01_address}
diff --git a/reclass/storage/system/kubernetes_control_cluster.yml b/reclass/storage/system/kubernetes_control_cluster.yml
index 5180ab6..15bec1e 100644
--- a/reclass/storage/system/kubernetes_control_cluster.yml
+++ b/reclass/storage/system/kubernetes_control_cluster.yml
@@ -3,6 +3,10 @@
     kubernetes_control_node01_hostname: ctl01
     kubernetes_control_node02_hostname: ctl02
     kubernetes_control_node03_hostname: ctl03
+    kubernetes_control_node01_deploy_address: ${_param:kubernetes_control_node01_address}
+    kubernetes_control_node02_deploy_address: ${_param:kubernetes_control_node02_address}
+    kubernetes_control_node03_deploy_address: ${_param:kubernetes_control_node03_address}
+    kubernetes_control_system_codename: xenial
   reclass:
     storage:
       node:
@@ -13,8 +17,9 @@
           - cluster.${_param:cluster_name}.kubernetes.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:kubernetes_control_system_codename}
             single_address: ${_param:kubernetes_control_node01_address}
+            deploy_address: ${_param:kubernetes_control_node01_deploy_address}
             keepalived_vip_priority: 103
         kubernetes_control_node02:
           name: ${_param:kubernetes_control_node02_hostname}
@@ -23,8 +28,9 @@
           - cluster.${_param:cluster_name}.kubernetes.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:kubernetes_control_system_codename}
             single_address: ${_param:kubernetes_control_node02_address}
+            deploy_address: ${_param:kubernetes_control_node02_deploy_address}
             keepalived_vip_priority: 102
         kubernetes_control_node03:
           name: ${_param:kubernetes_control_node03_hostname}
@@ -33,6 +39,7 @@
           - cluster.${_param:cluster_name}.kubernetes.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:kubernetes_control_system_codename}
             single_address: ${_param:kubernetes_control_node03_address}
-            keepalived_vip_priority: 101
\ No newline at end of file
+            deploy_address: ${_param:kubernetes_control_node03_deploy_address}
+            keepalived_vip_priority: 101
diff --git a/reclass/storage/system/kubernetes_control_single.yml b/reclass/storage/system/kubernetes_control_single.yml
index c88e3c3..1ce0cd5 100644
--- a/reclass/storage/system/kubernetes_control_single.yml
+++ b/reclass/storage/system/kubernetes_control_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     kubernetes_control_node01_hostname: ctl01
+    kubernetes_control_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.kubernetes.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
-            single_address: ${_param:kubernetes_control_node01_address}
\ No newline at end of file
+            linux_system_codename: ${_param:kubernetes_control_system_codename}
+            single_address: ${_param:kubernetes_control_node01_address}
diff --git a/reclass/storage/system/monitoring_service_cluster.yml b/reclass/storage/system/monitoring_service_cluster.yml
index 630ee32..0f6b3d8 100644
--- a/reclass/storage/system/monitoring_service_cluster.yml
+++ b/reclass/storage/system/monitoring_service_cluster.yml
@@ -3,6 +3,7 @@
     monitor_node01_hostname: mon01
     monitor_node02_hostname: mon02
     monitor_node03_hostname: mon03
+    monitor_system_codename: xenial
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.monitoring.server
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:monitor_system_codename}
             single_address: ${_param:monitoring_service_node01_address}
         monitoring_service_node02:
           name: ${_param:monitor_node02_hostname}
@@ -22,7 +23,7 @@
           - cluster.${_param:cluster_name}.monitoring.server
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:monitor_system_codename}
             single_address: ${_param:monitoring_service_node02_address}
         monitoring_service_node03:
           name: ${_param:monitor_node03_hostname}
@@ -31,5 +32,5 @@
           - cluster.${_param:cluster_name}.monitoring.server
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:monitor_system_codename}
             single_address: ${_param:monitoring_service_node03_address}
diff --git a/reclass/storage/system/monitoring_service_single.yml b/reclass/storage/system/monitoring_service_single.yml
index 9680529..d238b07 100644
--- a/reclass/storage/system/monitoring_service_single.yml
+++ b/reclass/storage/system/monitoring_service_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     monitor_node01_hostname: mon01
+    monitor_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.monitoring.server
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename:  ${_param:monitor_system_codename}
             single_address: ${_param:monitoring_service_node01_address}
diff --git a/reclass/storage/system/opencontrail_analytics_cluster.yml b/reclass/storage/system/opencontrail_analytics_cluster.yml
index 6a4b7ee..400853e 100644
--- a/reclass/storage/system/opencontrail_analytics_cluster.yml
+++ b/reclass/storage/system/opencontrail_analytics_cluster.yml
@@ -3,6 +3,7 @@
     opencontrail_analytics_node01_hostname: nal01
     opencontrail_analytics_node02_hostname: nal02
     opencontrail_analytics_node03_hostname: nal03
+    opencontrail_analytics_system_codename: trusty
   reclass:
     storage:
       node:
@@ -13,18 +14,18 @@
           - cluster.${_param:cluster_name}.opencontrail.analytics
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_analytics_system_codename}
             single_address: ${_param:opencontrail_analytics_node01_address}
             keepalived_vip_priority: 103
             opencontrail_database_id: 1
         opencontrail_analytics_node02:
           name: ${_param:opencontrail_analytics_node02_hostname}
           domain: ${_param:cluster_domain}
-          classes:  
+          classes:
           - cluster.${_param:cluster_name}.opencontrail.analytics
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_analytics_system_codename}
             single_address: ${_param:opencontrail_analytics_node02_address}
             keepalived_vip_priority: 102
             opencontrail_database_id: 2
@@ -35,7 +36,7 @@
           - cluster.${_param:cluster_name}.opencontrail.analytics
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_analytics_system_codename}
             single_address: ${_param:opencontrail_analytics_node03_address}
             keepalived_vip_priority: 101
             opencontrail_database_id: 3
diff --git a/reclass/storage/system/opencontrail_control_cluster.yml b/reclass/storage/system/opencontrail_control_cluster.yml
index d0213b3..f752c83 100644
--- a/reclass/storage/system/opencontrail_control_cluster.yml
+++ b/reclass/storage/system/opencontrail_control_cluster.yml
@@ -3,6 +3,7 @@
     opencontrail_control_node01_hostname: ntw01
     opencontrail_control_node02_hostname: ntw02
     opencontrail_control_node03_hostname: ntw03
+    opencontrail_control_system_codename: trusty
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.opencontrail.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_control_system_codename}
             single_address: ${_param:opencontrail_control_node01_address}
             keepalived_vip_priority: 103
             opencontrail_database_id: 1
@@ -24,7 +25,7 @@
           - cluster.${_param:cluster_name}.opencontrail.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_control_system_codename}
             single_address: ${_param:opencontrail_control_node02_address}
             keepalived_vip_priority: 102
             opencontrail_database_id: 2
@@ -35,7 +36,7 @@
           - cluster.${_param:cluster_name}.opencontrail.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_control_system_codename}
             single_address: ${_param:opencontrail_control_node03_address}
             keepalived_vip_priority: 101
             opencontrail_database_id: 3
diff --git a/reclass/storage/system/opencontrail_gateway_single.yml b/reclass/storage/system/opencontrail_gateway_single.yml
index 52b2786..30c7043 100644
--- a/reclass/storage/system/opencontrail_gateway_single.yml
+++ b/reclass/storage/system/opencontrail_gateway_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     opencontrail_gateway_hostname: gtw01
+    opencontrail_gateway_system_codename: trusty
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.opencontrail.gateway
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:opencontrail_gateway_system_codename}
             single_address: ${_param:opencontrail_gateway_address}
diff --git a/reclass/storage/system/opencontrail_tor_cluster.yml b/reclass/storage/system/opencontrail_tor_cluster.yml
new file mode 100644
index 0000000..1fa2ad0
--- /dev/null
+++ b/reclass/storage/system/opencontrail_tor_cluster.yml
@@ -0,0 +1,32 @@
+parameters:
+  _param:
+    opencontrail_tor01_node01_hostname: tor01
+    opencontrail_tor01_node02_hostname: tor02
+    opencontrail_tor01_node01_tenant_address: ${_param:opencontrail_tor01_node01_address}
+    opencontrail_tor01_node02_tenant_address: ${_param:opencontrail_tor01_node02_address}
+    opencontrail_tor_system_codename: xenial
+  reclass:
+    storage:
+      node:
+        opencontrail_tor01_node01:
+          name: ${_param:opencontrail_tor01_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.opencontrail.tor
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:opencontrail_tor_system_codename}
+            single_address: ${_param:opencontrail_tor01_node01_address}
+            tenant_address: ${_param:opencontrail_tor01_node01_tenant_address}
+            keepalived_vip_priority: 103
+        opencontrail_tor01_node02:
+          name: ${_param:opencontrail_tor01_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.opencontrail.tor
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:opencontrail_tor_system_codename}
+            single_address: ${_param:opencontrail_tor01_node02_address}
+            tenant_address: ${_param:opencontrail_tor01_node02_tenant_address}
+            keepalived_vip_priority: 102
diff --git a/reclass/storage/system/openstack_baremetal_cluster.yml b/reclass/storage/system/openstack_baremetal_cluster.yml
index 8cab119..71f6034 100644
--- a/reclass/storage/system/openstack_baremetal_cluster.yml
+++ b/reclass/storage/system/openstack_baremetal_cluster.yml
@@ -19,6 +19,7 @@
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: ${_param:linux_system_codename}
             single_address: ${_param:openstack_baremetal_node01_address}
+            keepalived_vip_priority: 101
             baremetal_address: ${_param:openstack_baremetal_node01_baremetal_address}
         openstack_baremetal_node02:
           name: ${_param:openstack_baremetal_node02_hostname}
@@ -29,6 +30,7 @@
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: ${_param:linux_system_codename}
             single_address: ${_param:openstack_baremetal_node02_address}
+            keepalived_vip_priority: 102
             baremetal_address: ${_param:openstack_baremetal_node02_baremetal_address}
         openstack_baremetal_node03:
           name: ${_param:openstack_baremetal_node03_hostname}
@@ -39,6 +41,7 @@
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: ${_param:linux_system_codename}
             single_address: ${_param:openstack_baremetal_node03_address}
+            keepalived_vip_priority: 103
             baremetal_address: ${_param:openstack_baremetal_node03_baremetal_address}
 
 
diff --git a/reclass/storage/system/openstack_benchmark_single.yml b/reclass/storage/system/openstack_benchmark_single.yml
index a676cc3..6958d41 100644
--- a/reclass/storage/system/openstack_benchmark_single.yml
+++ b/reclass/storage/system/openstack_benchmark_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_benchmark_node01_hostname: bmk01
+    openstack_benchmark_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.openstack.benchmark
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:openstack_benchmark_system_codename}
             single_address: ${_param:openstack_benchmark_node01_address}
diff --git a/reclass/storage/system/openstack_billing_single.yml b/reclass/storage/system/openstack_billing_single.yml
index 5b63ec0..49ed988 100644
--- a/reclass/storage/system/openstack_billing_single.yml
+++ b/reclass/storage/system/openstack_billing_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_billing_hostname: bil01
+    openstack_billing_system_codename: trusty
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.openstack.billing
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_billing_system_codename}
             single_address: ${_param:openstack_billing_address}
diff --git a/reclass/storage/system/openstack_control_cluster.yml b/reclass/storage/system/openstack_control_cluster.yml
index deb25b8..300a04c 100644
--- a/reclass/storage/system/openstack_control_cluster.yml
+++ b/reclass/storage/system/openstack_control_cluster.yml
@@ -3,6 +3,7 @@
     openstack_control_node01_hostname: ctl01
     openstack_control_node02_hostname: ctl02
     openstack_control_node03_hostname: ctl03
+    openstack_control_system_codename: trusty
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.openstack.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_control_system_codename}
             single_address: ${_param:openstack_control_node01_address}
             keepalived_vip_priority: 103
             opencontrail_database_id: 1
@@ -25,7 +26,7 @@
           - cluster.${_param:cluster_name}.openstack.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_control_system_codename}
             single_address: ${_param:openstack_control_node02_address}
             keepalived_vip_priority: 102
             opencontrail_database_id: 2
@@ -37,7 +38,7 @@
           - cluster.${_param:cluster_name}.openstack.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_control_system_codename}
             single_address: ${_param:openstack_control_node03_address}
             keepalived_vip_priority: 101
             opencontrail_database_id: 3
diff --git a/reclass/storage/system/openstack_control_single.yml b/reclass/storage/system/openstack_control_single.yml
index 016ab96..e7329da 100644
--- a/reclass/storage/system/openstack_control_single.yml
+++ b/reclass/storage/system/openstack_control_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_control_node01_hostname: ctl01
+    openstack_control_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.openstack.control
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:openstack_control_system_codename}
             single_address: ${_param:openstack_control_node01_address}
diff --git a/reclass/storage/system/openstack_control_upgrade_single.yml b/reclass/storage/system/openstack_control_upgrade_single.yml
index 964e064..e387062 100644
--- a/reclass/storage/system/openstack_control_upgrade_single.yml
+++ b/reclass/storage/system/openstack_control_upgrade_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_upgrade_node01_hostname: upg01
+    openstack_upgrade_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.openstack.upgrade
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:openstack_upgrade_system_codename}
             single_address: ${_param:openstack_upgrade_node01_address}
diff --git a/reclass/storage/system/openstack_dashboard_single.yml b/reclass/storage/system/openstack_dashboard_single.yml
index c2915d3..51e2d91 100644
--- a/reclass/storage/system/openstack_dashboard_single.yml
+++ b/reclass/storage/system/openstack_dashboard_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_proxy_hostname: prx01
+    openstack_proxy_system_codename: trusty
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.openstack.dashboard
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_proxy_system_codename}
             single_address: 172.16.10.121
diff --git a/reclass/storage/system/openstack_database_cluster.yml b/reclass/storage/system/openstack_database_cluster.yml
index 33c6d24..7a2f3e5 100644
--- a/reclass/storage/system/openstack_database_cluster.yml
+++ b/reclass/storage/system/openstack_database_cluster.yml
@@ -3,6 +3,7 @@
     openstack_database_node01_hostname: dbs01
     openstack_database_node02_hostname: dbs02
     openstack_database_node03_hostname: dbs03
+    openstack_database_system_codename: trusty
   reclass:
     storage:
       node:
@@ -14,19 +15,19 @@
           - cluster.${_param:cluster_name}.openstack.database
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_database_system_codename}
             single_address: ${_param:openstack_database_node01_address}
             keepalived_vip_priority: 103
             mysql_cluster_role: master
         openstack_database_node02:
           name: ${_param:openstack_database_node02_hostname}
           domain: ${_param:cluster_domain}
-          classes:  
+          classes:
           - service.galera.slave.cluster
           - cluster.${_param:cluster_name}.openstack.database
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_database_system_codename}
             single_address: ${_param:openstack_database_node02_address}
             keepalived_vip_priority: 102
             mysql_cluster_role: slave
@@ -38,7 +39,7 @@
           - cluster.${_param:cluster_name}.openstack.database
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_database_system_codename}
             single_address: ${_param:openstack_database_node03_address}
             keepalived_vip_priority: 101
             mysql_cluster_role: slave
diff --git a/reclass/storage/system/openstack_dns_cluster.yml b/reclass/storage/system/openstack_dns_cluster.yml
index d671e78..d6b93d0 100644
--- a/reclass/storage/system/openstack_dns_cluster.yml
+++ b/reclass/storage/system/openstack_dns_cluster.yml
@@ -2,6 +2,7 @@
   _param:
     openstack_dns_node01_hostname: dns01
     openstack_dns_node02_hostname: dns02
+    openstack_dns_system_codename: xenial
   reclass:
     storage:
       node:
@@ -12,7 +13,7 @@
           - cluster.${_param:cluster_name}.openstack.dns
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:openstack_dns_system_codename}
             single_address: ${_param:openstack_dns_node01_address}
             keepalived_vip_priority: 110
         openstack_dns_node02:
@@ -22,6 +23,6 @@
           - cluster.${_param:cluster_name}.openstack.dns
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:openstack_dns_system_codename}
             single_address: ${_param:openstack_dns_node02_address}
             keepalived_vip_priority: 111
diff --git a/reclass/storage/system/openstack_message_queue_cluster.yml b/reclass/storage/system/openstack_message_queue_cluster.yml
index c6a811f..3836af0 100644
--- a/reclass/storage/system/openstack_message_queue_cluster.yml
+++ b/reclass/storage/system/openstack_message_queue_cluster.yml
@@ -3,6 +3,7 @@
     openstack_message_queue_node01_hostname: msg01
     openstack_message_queue_node02_hostname: msg02
     openstack_message_queue_node03_hostname: msg03
+    openstack_message_system_codename: trusty
   reclass:
     storage:
       node:
@@ -13,18 +14,18 @@
           - cluster.${_param:cluster_name}.openstack.message_queue
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_message_system_codename}
             single_address: ${_param:openstack_message_queue_node01_address}
             keepalived_vip_priority: 103
             rabbitmq_cluster_role: master
         openstack_message_queue_node02:
           name: ${_param:openstack_message_queue_node02_hostname}
           domain: ${_param:cluster_domain}
-          classes:  
+          classes:
           - cluster.${_param:cluster_name}.openstack.message_queue
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_message_system_codename}
             single_address: ${_param:openstack_message_queue_node02_address}
             keepalived_vip_priority: 102
             rabbitmq_cluster_role: slave
@@ -35,7 +36,7 @@
           - cluster.${_param:cluster_name}.openstack.message_queue
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_message_system_codename}
             single_address: ${_param:openstack_message_queue_node03_address}
             keepalived_vip_priority: 101
             rabbitmq_cluster_role: slave
diff --git a/reclass/storage/system/openstack_proxy_cluster.yml b/reclass/storage/system/openstack_proxy_cluster.yml
index 95439fa..ca0b2a9 100644
--- a/reclass/storage/system/openstack_proxy_cluster.yml
+++ b/reclass/storage/system/openstack_proxy_cluster.yml
@@ -2,6 +2,7 @@
   _param:
     openstack_proxy_node01_hostname: prx01
     openstack_proxy_node02_hostname: prx02
+    openstack_proxy_system_codename: trusty
   reclass:
     storage:
       node:
@@ -12,7 +13,7 @@
           - cluster.${_param:cluster_name}.openstack.proxy
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_proxy_system_codename}
             single_address: ${_param:openstack_proxy_node01_address}
             keepalived_vip_priority: 102
         openstack_proxy_node02:
@@ -22,6 +23,6 @@
           - cluster.${_param:cluster_name}.openstack.proxy
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_proxy_system_codename}
             single_address: ${_param:openstack_proxy_node02_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/openstack_proxy_single.yml b/reclass/storage/system/openstack_proxy_single.yml
index 794ca64..a2dddd7 100644
--- a/reclass/storage/system/openstack_proxy_single.yml
+++ b/reclass/storage/system/openstack_proxy_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     openstack_proxy_node01_hostname: prx01
+    openstack_proxy_system_codename: trusty
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.openstack.proxy
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_proxy_system_codename}
             single_address: ${_param:openstack_proxy_node01_address}
diff --git a/reclass/storage/system/openstack_telemetry_cluster.yml b/reclass/storage/system/openstack_telemetry_cluster.yml
index d184fc9..9dc6457 100644
--- a/reclass/storage/system/openstack_telemetry_cluster.yml
+++ b/reclass/storage/system/openstack_telemetry_cluster.yml
@@ -3,6 +3,7 @@
     openstack_telemetry_node01_hostname: mdb01
     openstack_telemetry_node02_hostname: mdb02
     openstack_telemetry_node03_hostname: mdb03
+    openstack_telemetry_system_codename: trusty
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.openstack.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_telemetry_system_codename}
             single_address: ${_param:openstack_telemetry_node01_address}
             keepalived_vip_priority: 103
         openstack_telemetry_node02:
@@ -23,7 +24,7 @@
           - cluster.${_param:cluster_name}.openstack.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_telemetry_system_codename}
             single_address: ${_param:openstack_telemetry_node02_address}
             keepalived_vip_priority: 102
         openstack_telemetry_node03:
@@ -33,6 +34,6 @@
           - cluster.${_param:cluster_name}.openstack.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:openstack_telemetry_system_codename}
             single_address: ${_param:openstack_telemetry_node03_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/physical_control_cluster.yml b/reclass/storage/system/physical_control_cluster.yml
index 4622e09..ebd0eb0 100644
--- a/reclass/storage/system/physical_control_cluster.yml
+++ b/reclass/storage/system/physical_control_cluster.yml
@@ -15,6 +15,7 @@
     infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
     infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
     infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_system_codename: trusty
 
   reclass:
     storage:
@@ -26,7 +27,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node01_address}
             deploy_address: ${_param:infra_kvm_node01_deploy_address}
             public_address: ${_param:infra_kvm_node01_public_address}
@@ -38,7 +39,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node02_address}
             deploy_address: ${_param:infra_kvm_node02_deploy_address}
             public_address: ${_param:infra_kvm_node02_public_address}
@@ -50,7 +51,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node03_address}
             deploy_address: ${_param:infra_kvm_node03_deploy_address}
             public_address: ${_param:infra_kvm_node03_public_address}
diff --git a/reclass/storage/system/physical_control_full.yml b/reclass/storage/system/physical_control_full.yml
index 0f510a4..1bdd345 100644
--- a/reclass/storage/system/physical_control_full.yml
+++ b/reclass/storage/system/physical_control_full.yml
@@ -40,6 +40,8 @@
     infra_kvm_node08_public_address: ${_param:infra_kvm_node08_address}
     infra_kvm_node09_public_address: ${_param:infra_kvm_node09_address}
 
+    infra_kvm_system_codename: trusty
+
   reclass:
     storage:
       node:
@@ -50,7 +52,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node01_address}
             deploy_address: ${_param:infra_kvm_node01_deploy_address}
             public_address: ${_param:infra_kvm_node01_public_address}
@@ -62,7 +64,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node02_address}
             deploy_address: ${_param:infra_kvm_node02_deploy_address}
             public_address: ${_param:infra_kvm_node02_public_address}
@@ -74,7 +76,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node03_address}
             deploy_address: ${_param:infra_kvm_node03_deploy_address}
             public_address: ${_param:infra_kvm_node03_public_address}
@@ -86,7 +88,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node04_address}
             deploy_address: ${_param:infra_kvm_node04_deploy_address}
             public_address: ${_param:infra_kvm_node04_public_address}
@@ -98,7 +100,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node05_address}
             deploy_address: ${_param:infra_kvm_node05_deploy_address}
             public_address: ${_param:infra_kvm_node05_public_address}
@@ -110,7 +112,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node06_address}
             deploy_address: ${_param:infra_kvm_node06_deploy_address}
             public_address: ${_param:infra_kvm_node06_public_address}
@@ -122,7 +124,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node07_address}
             deploy_address: ${_param:infra_kvm_node07_deploy_address}
             public_address: ${_param:infra_kvm_node07_public_address}
@@ -134,7 +136,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node08_address}
             deploy_address: ${_param:infra_kvm_node08_deploy_address}
             public_address: ${_param:infra_kvm_node08_public_address}
@@ -146,7 +148,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node09_address}
             deploy_address: ${_param:infra_kvm_node09_deploy_address}
             public_address: ${_param:infra_kvm_node09_public_address}
diff --git a/reclass/storage/system/physical_control_single.yml b/reclass/storage/system/physical_control_single.yml
index 32f09c3..db92c5f 100644
--- a/reclass/storage/system/physical_control_single.yml
+++ b/reclass/storage/system/physical_control_single.yml
@@ -4,6 +4,7 @@
     infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
     infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
     infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_system_codename: trusty
   reclass:
     storage:
       node:
@@ -14,7 +15,7 @@
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: trusty
+            linux_system_codename: ${_param:infra_kvm_system_codename}
             single_address: ${_param:infra_kvm_node01_address}
             deploy_address: ${_param:infra_kvm_node01_deploy_address}
             public_address: ${_param:infra_kvm_node01_public_address}
diff --git a/reclass/storage/system/rsyslog_single.yml b/reclass/storage/system/rsyslog_single.yml
index a3eefac..b4c36bc 100644
--- a/reclass/storage/system/rsyslog_single.yml
+++ b/reclass/storage/system/rsyslog_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     rsyslog_node01_hostname: rsl01
+    rsyslog_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,5 +12,5 @@
           - cluster.${_param:cluster_name}.infra.rsyslog
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:rsyslog_system_codename}
             single_address: ${_param:rsyslog_node01_address}
diff --git a/reclass/storage/system/stacklight_log_cluster.yml b/reclass/storage/system/stacklight_log_cluster.yml
index bbb6a6b..14b8108 100644
--- a/reclass/storage/system/stacklight_log_cluster.yml
+++ b/reclass/storage/system/stacklight_log_cluster.yml
@@ -3,6 +3,7 @@
     stacklight_log_node01_hostname: log01
     stacklight_log_node02_hostname: log02
     stacklight_log_node03_hostname: log03
+    stacklight_log_system_codename: xenial
   reclass:
     storage:
       node:
@@ -14,7 +15,7 @@
           - cluster.${_param:cluster_name}.stacklight.log_curator
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_log_system_codename}
             single_address: ${_param:stacklight_log_node01_address}
             keepalived_vip_priority: 103
         stacklight_log_node02:
@@ -25,7 +26,7 @@
           - cluster.${_param:cluster_name}.stacklight.log_curator
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_log_system_codename}
             single_address: ${_param:stacklight_log_node02_address}
             keepalived_vip_priority: 102
         stacklight_log_node03:
@@ -36,6 +37,6 @@
           - cluster.${_param:cluster_name}.stacklight.log_curator
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_log_system_codename}
             single_address: ${_param:stacklight_log_node03_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/stacklight_monitor_cluster.yml b/reclass/storage/system/stacklight_monitor_cluster.yml
index f95cf81..5d56a6d 100644
--- a/reclass/storage/system/stacklight_monitor_cluster.yml
+++ b/reclass/storage/system/stacklight_monitor_cluster.yml
@@ -3,6 +3,7 @@
     stacklight_monitor_node01_hostname: mon01
     stacklight_monitor_node02_hostname: mon02
     stacklight_monitor_node03_hostname: mon03
+    stacklight_monitor_system_codename: xenial
   reclass:
     storage:
       node:
@@ -15,7 +16,7 @@
             redis_cluster_role: 'master'
             rabbitmq_cluster_role: 'master'
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node01_address}
             keepalived_vip_priority: 103
         stacklight_monitor_node02:
@@ -27,7 +28,7 @@
             redis_cluster_role: 'slave'
             rabbitmq_cluster_role: 'slave'
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node02_address}
             keepalived_vip_priority: 102
         stacklight_monitor_node03:
@@ -39,6 +40,6 @@
             redis_cluster_role: 'slave'
             rabbitmq_cluster_role: 'slave'
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node03_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/stacklight_server_cluster.yml b/reclass/storage/system/stacklight_server_cluster.yml
index 26b9ebe..4846c84 100644
--- a/reclass/storage/system/stacklight_server_cluster.yml
+++ b/reclass/storage/system/stacklight_server_cluster.yml
@@ -3,6 +3,7 @@
     stacklight_monitor_node01_hostname: mon01
     stacklight_monitor_node02_hostname: mon02
     stacklight_monitor_node03_hostname: mon03
+    stacklight_monitor_system_codename: xenial
   reclass:
     storage:
       node:
@@ -18,10 +19,9 @@
             redis_cluster_role: 'master'
             rabbitmq_cluster_role: 'master'
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node01_address}
             keepalived_vip_priority: 103
-            rabbitmq_cluster_role: master
         stacklight_server_node02:
           name: ${_param:stacklight_monitor_node02_hostname}
           domain: ${_param:cluster_domain}
@@ -31,10 +31,9 @@
             redis_cluster_role: 'slave'
             rabbitmq_cluster_role: 'slave'
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node02_address}
             keepalived_vip_priority: 102
-            rabbitmq_cluster_role: slave
         stacklight_server_node03:
           name: ${_param:stacklight_monitor_node03_hostname}
           domain: ${_param:cluster_domain}
@@ -44,7 +43,6 @@
             redis_cluster_role: 'slave'
             rabbitmq_cluster_role: 'slave'
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node03_address}
             keepalived_vip_priority: 101
-            rabbitmq_cluster_role: slave
diff --git a/reclass/storage/system/stacklight_server_single.yml b/reclass/storage/system/stacklight_server_single.yml
index 2b397f6..dd5f6ac 100644
--- a/reclass/storage/system/stacklight_server_single.yml
+++ b/reclass/storage/system/stacklight_server_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     stacklight_monitor_node01_hostname: mon01
+    stacklight_monitor_system_codename: xenial
   reclass:
     storage:
       node:
@@ -14,5 +15,5 @@
           - system.kibana.client.single
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node01_address}
diff --git a/reclass/storage/system/stacklight_telemetry_cluster.yml b/reclass/storage/system/stacklight_telemetry_cluster.yml
index 12b1dae..b9e2640 100644
--- a/reclass/storage/system/stacklight_telemetry_cluster.yml
+++ b/reclass/storage/system/stacklight_telemetry_cluster.yml
@@ -3,6 +3,7 @@
     stacklight_telemetry_node01_hostname: mtr01
     stacklight_telemetry_node02_hostname: mtr02
     stacklight_telemetry_node03_hostname: mtr03
+    stacklight_telemetry_system_codename: xenial
   reclass:
     storage:
       node:
@@ -13,7 +14,7 @@
           - cluster.${_param:cluster_name}.stacklight.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_telemetry_system_codename}
             single_address: ${_param:stacklight_telemetry_node01_address}
             keepalived_vip_priority: 103
         stacklight_telemetry_node02:
@@ -23,7 +24,7 @@
           - cluster.${_param:cluster_name}.stacklight.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_telemetry_system_codename}
             single_address: ${_param:stacklight_telemetry_node02_address}
             keepalived_vip_priority: 102
         stacklight_telemetry_node03:
@@ -33,6 +34,6 @@
           - cluster.${_param:cluster_name}.stacklight.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_telemetry_system_codename}
             single_address: ${_param:stacklight_telemetry_node03_address}
             keepalived_vip_priority: 101
diff --git a/reclass/storage/system/stacklight_telemetry_single.yml b/reclass/storage/system/stacklight_telemetry_single.yml
index bc51b30..239ae0f 100644
--- a/reclass/storage/system/stacklight_telemetry_single.yml
+++ b/reclass/storage/system/stacklight_telemetry_single.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     stacklight_telemetry_node01_hostname: mtr01
+    stacklight_telemetry_system_codename: xenial
   reclass:
     storage:
       node:
@@ -11,6 +12,6 @@
           - cluster.${_param:cluster_name}.stacklight.telemetry
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_telemetry_system_codename}
             single_address: ${_param:stacklight_telemetry_node01_address}
-            keepalived_vip_priority: 103
\ No newline at end of file
+            keepalived_vip_priority: 103
diff --git a/reclass/storage/system/stacklightv2_server_cluster.yml b/reclass/storage/system/stacklightv2_server_cluster.yml
index c72ac2c..81bf22a 100644
--- a/reclass/storage/system/stacklightv2_server_cluster.yml
+++ b/reclass/storage/system/stacklightv2_server_cluster.yml
@@ -3,6 +3,7 @@
     stacklight_monitor_node01_hostname: mon01
     stacklight_monitor_node02_hostname: mon02
     stacklight_monitor_node03_hostname: mon03
+    stacklight_monitor_system_codename: xenial
   reclass:
     storage:
       node:
@@ -15,7 +16,7 @@
           - cluster.${_param:cluster_name}.stacklight.client
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node01_address}
             keepalived_vip_priority: 103
         stacklight_server_node02:
@@ -26,7 +27,7 @@
           - cluster.${_param:cluster_name}.stacklight.server
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node02_address}
             keepalived_vip_priority: 102
         stacklight_server_node03:
@@ -37,6 +38,6 @@
           - cluster.${_param:cluster_name}.stacklight.server
           params:
             salt_master_host: ${_param:reclass_config_master}
-            linux_system_codename: xenial
+            linux_system_codename: ${_param:stacklight_monitor_system_codename}
             single_address: ${_param:stacklight_monitor_node03_address}
             keepalived_vip_priority: 101
diff --git a/salt/master/formula/git/helm.yml b/salt/master/formula/git/helm.yml
new file mode 100644
index 0000000..c25358f
--- /dev/null
+++ b/salt/master/formula/git/helm.yml
@@ -0,0 +1,16 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            helm:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-helm.git'
+              revision: ${_param:salt_master_environment_revision}
+              module:
+                helm.py:
+                  enabled: true
+              state:
+                helm_release.py:
+                  enabled: true
diff --git a/salt/master/formula/git/kubernetes.yml b/salt/master/formula/git/kubernetes.yml
index fe8ad5d..3d9d89e 100644
--- a/salt/master/formula/git/kubernetes.yml
+++ b/salt/master/formula/git/kubernetes.yml
@@ -12,11 +12,7 @@
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-etcd.git'
               revision: ${_param:salt_master_environment_revision}
-            bird:
-              source: git
-              address: '${_param:salt_master_environment_repository}/salt-formula-bird.git'
-              revision: ${_param:salt_master_environment_revision}
             docker:
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-docker.git'
-              revision: ${_param:salt_master_environment_revision}
\ No newline at end of file
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/pkg/helm.yml b/salt/master/formula/pkg/helm.yml
new file mode 100644
index 0000000..8b68bfe
--- /dev/null
+++ b/salt/master/formula/pkg/helm.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            helm:
+              source: pkg
+              name: salt-formula-helm
diff --git a/salt/master/formula/pkg/kubernetes.yml b/salt/master/formula/pkg/kubernetes.yml
index 7b3af30..d442ab0 100644
--- a/salt/master/formula/pkg/kubernetes.yml
+++ b/salt/master/formula/pkg/kubernetes.yml
@@ -10,9 +10,6 @@
             etcd:
               source: pkg
               name: salt-formula-etcd
-            bird:
-              source: pkg
-              name: salt-formula-bird
             docker:
               source: pkg
-              name: salt-formula-docker
\ No newline at end of file
+              name: salt-formula-docker
diff --git a/salt/master/git.yml b/salt/master/git.yml
index 267bdb1..4562a74 100644
--- a/salt/master/git.yml
+++ b/salt/master/git.yml
@@ -8,6 +8,7 @@
 - system.salt.master.formula.git.saltstack
 - system.salt.master.formula.git.stacklight
 - system.salt.master.formula.git.monitoring
+- system.salt.master.formula.git.helm
 parameters:
   _param:
     salt_master_environment_repository: "https://github.com/salt-formulas"
diff --git a/salt/master/pkg.yml b/salt/master/pkg.yml
index 1001d49..62854f1 100644
--- a/salt/master/pkg.yml
+++ b/salt/master/pkg.yml
@@ -8,4 +8,5 @@
 - system.salt.master.formula.pkg.saltstack
 - system.salt.master.formula.pkg.stacklight
 - system.salt.master.formula.pkg.monitoring
+- system.salt.master.formula.pkg.helm
 - system.linux.system.repo.mcp.salt
diff --git a/salt/minion/cert/etcd_client_single.yml b/salt/minion/cert/etcd_client_single.yml
new file mode 100644
index 0000000..a14e106
--- /dev/null
+++ b/salt/minion/cert/etcd_client_single.yml
@@ -0,0 +1,18 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        etcd_client:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: ${linux:system:name}
+          signing_policy: cert_open
+          alternative_names: DNS:${linux:system:name},DNS:${linux:network:fqdn}
+          extended_key_usage: clientAuth
+          key_usage: "digitalSignature,nonRepudiation,keyEncipherment"
+          key_file: /var/lib/etcd/etcd-client.key
+          cert_file: /var/lib/etcd/etcd-client.crt
+          all_file: /var/lib/etcd/etcd-client.pem
+          ca_file: /var/lib/etcd/ca.pem
+          user: etcd
+          group: etcd
diff --git a/salt/minion/cert/etcd_server_single.yml b/salt/minion/cert/etcd_server_single.yml
new file mode 100644
index 0000000..f9fc585
--- /dev/null
+++ b/salt/minion/cert/etcd_server_single.yml
@@ -0,0 +1,18 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        etcd_server:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: ${linux:system:name}
+          signing_policy: cert_open
+          alternative_names: IP:127.0.0.1,DNS:${linux:system:name},DNS:${linux:network:fqdn}
+          extended_key_usage: serverAuth,clientAuth
+          key_usage: "digitalSignature,nonRepudiation,keyEncipherment"
+          key_file: /var/lib/etcd/etcd-server.key
+          cert_file: /var/lib/etcd/etcd-server.crt
+          all_file: /var/lib/etcd/etcd-server.pem
+          ca_file: /var/lib/etcd/ca.pem
+          user: etcd
+          group: etcd
diff --git a/salt/minion/cert/opencontrail/tor.yml b/salt/minion/cert/opencontrail/tor.yml
new file mode 100644
index 0000000..eb9c704
--- /dev/null
+++ b/salt/minion/cert/opencontrail/tor.yml
@@ -0,0 +1,14 @@
+parameters:
+  _param:
+    salt_minion_ca_authority: salt_master_ca
+  salt:
+    minion:
+      cert:
+        opencontrail_tor:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          common_name: opencontrail_tor
+          key_file: /etc/contrail/ssl/certs/tor.key
+          cert_file: /etc/contrail/ssl/certs/tor.crt
+          ca_file: /etc/contrail/ssl/certs/ca.crt
+          signing_policy: cert_open