Merge "Add package for devops-portal"
diff --git a/README.rst b/README.rst
index 99e9d5b..539b6d2 100644
--- a/README.rst
+++ b/README.rst
@@ -14,11 +14,67 @@
 
 Include class at `cluster.<name>.openstack.compute`
 
-- system.nova.compute.sriov
+.. code-block:: yaml
 
-and parameters:
+  - system.nova.compute.nfv.sriov
 
-- sriov_nic01: Name of the interface
-- sriov_nic01_numvfs: Number of Virtual Functions
-- sriov_nic01_physical_network: Default "physnet1", label for physical network interface belongs to.
-- sriov_unsafe_interrupts: Default False, needs to be set True if your hw platform does not support interrupt remapping
+For single SR-IOV interface setup you can set parameters:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+`sriov_nic01_device_name`
+  Name of the Physical Function interface (pF)
+
+`sriov_nic01_numvfs`
+  Number of Virtual Functions (VF), for number of 
+  supported VF check documentation for your network interface card.
+
+`sriov_nic01_physical_network`
+  Default **physnet1**, label for physical network the interface belongs to.
+
+`sriov_unsafe_interrupts`
+  Default **False**, needs to be set **True** if your hw platform does not 
+  support interrupt remapping.
+
+
+Multiple SR-IOV interface setup:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By default, the metadata model contains configuration for 1 NIC
+dedicated for SR-IOV, so we need to setup network interfaces like in the
+following example.
+
+.. code-block:: yaml
+
+      ...
+        nova:
+          compute:
+            sriov:
+              sriov_nic01:
+                devname: eth1
+                physical_network: physnet3
+              sriov_nic02:
+                devname: eth2
+                physical_network: physnet4
+              sriov_nic03:
+                devname: eth3
+                physical_network: physnet3
+              sriov_nic04:
+                devname: eth4
+                physical_network: physnet6
+        linux:
+          system:
+            kernel:
+              sriov: True
+              unsafe_interrupts: False
+            rc:
+              local: |
+                #!/bin/sh -e
+                # Enabling 7 VFs on eth1 PF
+                echo 7 > /sys/class/net/eth1/device/sriov_numvfs; sleep 2; ip link set eth1 up
+                # Enabling 15 VFs on eth2 PF
+                echo 15 > /sys/class/net/eth2/device/sriov_numvfs; sleep 2; ip link set eth2 up
+                # Enabling 15 VFs on eth3 PF
+                echo 15 > /sys/class/net/eth3/device/sriov_numvfs; sleep 2; ip link set eth3 up
+                # Enabling 7 VFs on eth4 PF
+                echo 7 > /sys/class/net/eth4/device/sriov_numvfs; sleep 2; ip link set eth4 up
+                exit 0
diff --git a/docker/host.yml b/docker/host.yml
index cf19bfd..f7649b5 100644
--- a/docker/host.yml
+++ b/docker/host.yml
@@ -4,6 +4,7 @@
 parameters:
   docker:
     host:
+      experimental: true
       insecure_registries:
         - ${_param:cluster_vip_address}:5000
         - ${_param:cluster_public_host}:5000
diff --git a/docker/swarm/service/gerrit.yml b/docker/swarm/service/gerrit.yml
index d33bdbb..1fc2aab 100644
--- a/docker/swarm/service/gerrit.yml
+++ b/docker/swarm/service/gerrit.yml
@@ -1,6 +1,12 @@
 parameters:
   _param:
     docker_image_gerrit: tcpcloud/gerrit:2.12.7
+    gerrit_ldap_server: ""
+    gerrit_ldap_bind_user: ""
+    gerrit_ldap_bind_password: ""
+    gerrit_ldap_account_base: ""
+    gerrit_ldap_group_base: ""
+
   docker:
     client:
       service:
@@ -13,6 +19,13 @@
             DB_ENV_MYSQL_PASSWORD: ${_param:mysql_gerrit_password}
             DB_ENV_MYSQL_DB: gerrit
             AUTH_TYPE: ${_param:gerrit_auth_type}
+            LDAP_SERVER: ${_param:gerrit_ldap_server}
+            LDAP_ACCOUNTPATTERN: 'uid={username}'
+            LDAP_ACCOUNTBASE: ${_param:gerrit_ldap_account_base}
+            LDAP_GROUPBASE: ${_param:gerrit_ldap_group_base}
+            LDAP_USERNAME: ${_param:gerrit_ldap_bind_user}
+            LDAP_PASSWORD: ${_param:gerrit_ldap_bind_password}
+            CAPABILITY_ADMINISTRATESERVER: admin
             WEBURL: ${_param:gerrit_public_host}
             GERRIT_ADMIN_SSH_PUBLIC: ${_param:gerrit_admin_public_key}
             GERRIT_ADMIN_PWD: ${_param:gerrit_admin_password}
diff --git a/docker/swarm/service/jenkins.yml b/docker/swarm/service/jenkins.yml
index 3069dc6..16dee71 100644
--- a/docker/swarm/service/jenkins.yml
+++ b/docker/swarm/service/jenkins.yml
@@ -1,6 +1,6 @@
 parameters:
   _param:
-    docker_image_jenkins: tcpcloud/jenkins:2.50
+    docker_image_jenkins: tcpcloud/jenkins:2.52
   docker:
     client:
       service:
diff --git a/docker/swarm/service/openldap.yml b/docker/swarm/service/openldap.yml
index 863144c..f7f12e2 100644
--- a/docker/swarm/service/openldap.yml
+++ b/docker/swarm/service/openldap.yml
@@ -5,8 +5,6 @@
     client:
       service:
         openldap:
-          # XXX: docker service is not able to set hostname
-          # https://github.com/docker/docker/issues/24877
           restart:
             condition: any
           image: ${_param:docker_image_openldap}
@@ -21,9 +19,6 @@
             LDAP_DOMAIN: "${_param:openldap_domain}"
             LDAP_ADMIN_PASSWORD: ${_param:openldap_admin_password}
             LDAP_CONFIG_PASSWORD: ${_param:openldap_config_password}
-            LDAP_READONLY_USER: "true"
-            LDAP_READONLY_USER_USERNAME: readonly
-            LDAP_READONLY_USER_PASSWORD: ${_param:openldap_readonly_password}
             LDAP_TLS: "false"
           ports:
             - 1389:389
diff --git a/gerrit/client/init.yml b/gerrit/client/init.yml
index a9bb4de..7dd6c77 100644
--- a/gerrit/client/init.yml
+++ b/gerrit/client/init.yml
@@ -14,11 +14,16 @@
         host: ${_param:cluster_vip_address}
         user: admin
         email: ${_param:gerrit_admin_email}
+        auth_method: basic
         http_port: 8080
         ssh_port: 29418
         protocol: http
         password: ${_param:gerrit_admin_password}
         key: ${_param:gerrit_admin_private_key}
+      user:
+        admin:
+          fullname: Administrator
+          ssh_key: ${_param:gerrit_admin_public_key}
       group:
         Event Streaming Users:
           description: Event Streaming Users
diff --git a/heka/aggregator/cluster.yml b/heka/aggregator/cluster.yml
index 2913211..1d1e5c7 100644
--- a/heka/aggregator/cluster.yml
+++ b/heka/aggregator/cluster.yml
@@ -2,9 +2,6 @@
 - service.heka.aggregator.cluster
 - system.heka.server
 parameters:
-  _param:
-    nagios_default_host_alarm_clusters: 00-clusters
-    nagios_host_dimension_key: nagios_host
   heka:
     aggregator:
       influxdb_host: ${_param:heka_influxdb_host}
@@ -12,12 +9,6 @@
       influxdb_database: lma
       influxdb_username: lma
       influxdb_password: ${_param:influxdb_stacklight_password}
-      nagios_host: ${_param:nagios_host}
-      nagios_username: ${_param:nagios_username}
-      nagios_password: ${_param:nagios_password}
-      nagios_port: ${_param:nagios_status_port}
-      nagios_default_host_alarm_clusters: ${_param:nagios_default_host_alarm_clusters}
-      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}
       poolsize: 200
   keepalived:
     cluster:
diff --git a/heka/aggregator/single.yml b/heka/aggregator/single.yml
index c5ad6ab..5ee3605 100644
--- a/heka/aggregator/single.yml
+++ b/heka/aggregator/single.yml
@@ -2,9 +2,6 @@
 - service.heka.aggregator.single
 - system.heka.server
 parameters:
-  _param:
-    nagios_default_host_alarm_clusters: 00-clusters
-    nagios_host_dimension_key: nagios_host
   heka:
     aggregator:
       influxdb_host: ${_param:heka_influxdb_host}
@@ -12,10 +9,4 @@
       influxdb_database: lma
       influxdb_username: lma
       influxdb_password: ${_param:influxdb_stacklight_password}
-      nagios_host: ${_param:nagios_host}
-      nagios_username: ${_param:nagios_username}
-      nagios_password: ${_param:nagios_password}
-      nagios_port: ${_param:nagios_status_port}
-      nagios_default_host_alarm_clusters: ${_param:nagios_default_host_alarm_clusters}
-      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}
       poolsize: 200
diff --git a/heka/metric_collector/output/nagios.yml b/heka/metric_collector/output/nagios.yml
new file mode 100644
index 0000000..89d981f
--- /dev/null
+++ b/heka/metric_collector/output/nagios.yml
@@ -0,0 +1,2 @@
+classes:
+- service.heka.metric_collector.output.nagios
diff --git a/heka/metric_collector/output/sensu.yml b/heka/metric_collector/output/sensu.yml
index 3143fd9..a68a2ab 100644
--- a/heka/metric_collector/output/sensu.yml
+++ b/heka/metric_collector/output/sensu.yml
@@ -1,3 +1,2 @@
 classes:
 - service.heka.metric_collector.output.sensu
-
diff --git a/heka/metric_collector/single.yml b/heka/metric_collector/single.yml
index 443a4e9..b4167f0 100644
--- a/heka/metric_collector/single.yml
+++ b/heka/metric_collector/single.yml
@@ -12,7 +12,3 @@
       influxdb_port: 8086
       influxdb_time_precision: ms
       influxdb_username: lma
-      nagios_host: ${_param:nagios_host}
-      nagios_username: ${_param:nagios_username}
-      nagios_password: ${_param:nagios_password}
-      nagios_port: ${_param:nagios_status_port}
diff --git a/jenkins/client/approved_scripts.yml b/jenkins/client/approved_scripts.yml
index 3be23f3..df35e92 100644
--- a/jenkins/client/approved_scripts.yml
+++ b/jenkins/client/approved_scripts.yml
@@ -87,3 +87,6 @@
         - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
         - staticMethod org.codehaus.groovy.runtime.EncodingGroovyMethods encodeBase64 byte[]
         - staticMethod org.codehaus.groovy.runtime.ScriptBytecodeAdapter bitwiseNegate java.lang.Object
+        - method java.util.Collection stream
+        - staticMethod java.util.stream.Collectors joining java.lang.CharSequence
+        - method java.util.stream.Stream collect java.util.stream.Collector
diff --git a/jenkins/client/init.yml b/jenkins/client/init.yml
index 41e639d..e7c56ec 100644
--- a/jenkins/client/init.yml
+++ b/jenkins/client/init.yml
@@ -28,6 +28,7 @@
         gerrit-trigger: {}
         git: {}
         heavy-job: {}
+        ldap: {}
         matrix-auth: {}
         monitoring: {}
         pipeline-utility-steps: {}
diff --git a/jenkins/client/job/debian/packages/salt.yml b/jenkins/client/job/debian/packages/salt.yml
index 730eeba..68d361e 100644
--- a/jenkins/client/job/debian/packages/salt.yml
+++ b/jenkins/client/job/debian/packages/salt.yml
@@ -127,6 +127,8 @@
               dist: trusty
             - name: opencontrail
               dist: trusty
+            - name: openldap
+              dist: trusty
             - name: openssh
               dist: trusty
             - name: openvpn
@@ -301,6 +303,8 @@
               dist: xenial
             - name: opencontrail
               dist: xenial
+            - name: openldap
+              dist: xenial
             - name: openssh
               dist: xenial
             - name: openvpn
diff --git a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
index 88a8ef9..e5771a2 100644
--- a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
+++ b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
@@ -77,6 +77,7 @@
             - name: nova
             - name: ntp
             - name: opencontrail
+            - name: openldap
             - name: openssh
             - name: openvpn
             - name: openvstorage
diff --git a/jenkins/client/job/salt-formulas/tests.yml b/jenkins/client/job/salt-formulas/tests.yml
index 27932bc..9ac5492 100644
--- a/jenkins/client/job/salt-formulas/tests.yml
+++ b/jenkins/client/job/salt-formulas/tests.yml
@@ -75,6 +75,7 @@
             - name: nova
             - name: ntp
             - name: opencontrail
+            - name: openldap
             - name: openssh
             - name: openvpn
             - name: openvstorage
diff --git a/jenkins/client/job/salt-models/generate.yml b/jenkins/client/job/salt-models/generate.yml
index dc539e8..60cfb14 100644
--- a/jenkins/client/job/salt-models/generate.yml
+++ b/jenkins/client/job/salt-models/generate.yml
@@ -10,25 +10,25 @@
           template:
             type: workflow-scm
             concurrent: true
-            display_name: "[MCP] Generate reclass cluster {{cookiecutter_template}}"
+            display_name: "Generate reclass cluster {{cookiecutter_template}}"
             scm:
               type: git
-              url: ${_param:jenkins_job_repository}
-              credentials: "gitlab"
-              script: metadata/cookiecutter_generate.groovy
+              url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+              credentials: "jenkins-mk"
+              script: generate-cookiecutter-products.groovy
             param:
               COOKIECUTTER_TEMPLATE_URL:
                 type: string
                 default: "git@github.com:Mirantis/mk2x-cookiecutter-reclass-model.git"
               COOKIECUTTER_TEMPLATE_CREDENTIALS:
                 type: string
-                default: jenkins
+                default: github-credentials
               COOKIECUTTER_TEMPLATE_BRANCH:
                 type: string
                 default: master
-#              COOKIECUTTER_TEMPLATE_PATH:
-#                type: string
-#                default: 'cluster/{{cookiecutter_template}}'
+              COOKIECUTTER_TEMPLATE_PATH:
+                type: string
+                default: "./"
               COOKIECUTTER_INSTALL_CICD:
                 type: boolean
                 default: false
@@ -48,11 +48,10 @@
                 type: string
               RECLASS_MODEL_URL:
                 type: string
-                default: "
-                ssh://jenkins@gerrit.mcp.mirantis.net:29418/salt-models/training"
+                default: "jenkins-mk@${_param:jenkins_gerrit_url}/salt-models/training.git"
               RECLASS_MODEL_CREDENTIALS:
                 type: string
-                default: jenkins_slave
+                default: gerrit
               RECLASS_MODEL_BRANCH:
                 type: string
                 default: master
diff --git a/jenkins/client/job/salt-models/init.yml b/jenkins/client/job/salt-models/init.yml
index 9a98130..15690ea 100644
--- a/jenkins/client/job/salt-models/init.yml
+++ b/jenkins/client/job/salt-models/init.yml
@@ -1,6 +1,7 @@
 classes:
   - system.jenkins.client.job.salt-models.git-mirrors
   - system.jenkins.client.job.salt-models.tests
+  - system.jenkins.client.job.salt-models.generate
 parameters:
   _param:
     salt_formulas_branches: master
diff --git a/jenkins/client/security/ldap.yml b/jenkins/client/security/ldap.yml
index 8b7b97b..ba53570 100644
--- a/jenkins/client/security/ldap.yml
+++ b/jenkins/client/security/ldap.yml
@@ -1,7 +1,18 @@
 parameters:
+  _param:
+    jenkins_security_ldap_manager_dn: ''
+    jenkins_security_ldap_manager_password: ''
+    jenkins_security_ldap_user_search_filter: 'uid={0}'
+    jenkins_security_ldap_user_search_base: ''
+    jenkins_security_ldap_group_search_base: ''
   jenkins:
     client:
       security:
         ldap:
           server: ${_param:jenkins_security_ldap_server}
-          root_dn: ${_param:jenkins_security_root_dn}
+          root_dn: ${_param:jenkins_security_ldap_root_dn}
+          manager_dn: ${_param:jenkins_security_ldap_manager_dn}
+          manager_password: ${_param:jenkins_security_ldap_manager_password}
+          user_search: ${_param:jenkins_security_ldap_user_search_filter}
+          user_search_base: ${_param:jenkins_security_ldap_user_search_base}
+          group_search_base: ${_param:jenkins_security_ldap_group_search_base}
diff --git a/jenkins/client/security/matrix.yml b/jenkins/client/security/matrix.yml
new file mode 100644
index 0000000..4c3c8a9
--- /dev/null
+++ b/jenkins/client/security/matrix.yml
@@ -0,0 +1,48 @@
+parameters:
+  _param:
+    # Full admin access
+    jenkins_security_matrix_admins:
+      - ${_param:jenkins_client_user}
+    # Read only access
+    jenkins_security_matrix_read: []
+    # Read + permissions to build jobs
+    jenkins_security_matrix_build: []
+    # Build permissions + create/delete, whatever.
+    jenkins_security_matrix_write:
+      - ${_param:jenkins_client_user}
+
+  jenkins:
+    client:
+      security:
+        matrix:
+          permissions:
+            Jenkins:
+              ADMINISTER: ${_param:jenkins_security_matrix_admins}
+              READ: ${_param:jenkins_security_matrix_read}
+            hudson:
+              model:
+                Item:
+                  BUILD: ${_param:jenkins_security_matrix_build}
+                  CANCEL: ${_param:jenkins_security_matrix_build}
+                  CONFIGURE: ${_param:jenkins_security_matrix_write}
+                  CREATE: ${_param:jenkins_security_matrix_write}
+                  DELETE: ${_param:jenkins_security_matrix_write}
+                  DISCOVER: ${_param:jenkins_security_matrix_build}
+                  EXTENDED_READ: ${_param:jenkins_security_matrix_build}
+                  WIPEOUT: ${_param:jenkins_security_matrix_write}
+                  WORKSPACE: ${_param:jenkins_security_matrix_write}
+                  READ: ${_param:jenkins_security_matrix_read}
+                Run:
+                  DELETE: ${_param:jenkins_security_matrix_write}
+                  ARTIFACTS: ${_param:jenkins_security_matrix_write}
+                  UPDATE: ${_param:jenkins_security_matrix_write}
+                View:
+                  READ: ${_param:jenkins_security_matrix_read}
+            com:
+              sonyericsson:
+                hudson:
+                  plugins:
+                    gerrit:
+                      trigger:
+                        PluginImpl:
+                          RETRIGGER: ${_param:jenkins_security_matrix_build}
diff --git a/linux/system/repo/elasticsearch.yml b/linux/system/repo/elasticsearch.yml
index 6758f6d..60f6fd0 100644
--- a/linux/system/repo/elasticsearch.yml
+++ b/linux/system/repo/elasticsearch.yml
@@ -2,7 +2,7 @@
   linux:
     system:
       repo:
-        tcpcloud_elasticsearch:
-          source: "deb [arch=amd64] http://apt.tcpcloud.eu/nightly/ xenial elastic"
+        elasticsearch:
+          source: "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main"
           architectures: amd64
-          key_url: "http://apt.tcpcloud.eu/public.gpg"
\ No newline at end of file
+          key_url: "https://packages.elastic.co/GPG-KEY-elasticsearch"
\ No newline at end of file
diff --git a/linux/system/repo/glusterfs.yml b/linux/system/repo/glusterfs.yml
index da4cddf..3dfa9f9 100644
--- a/linux/system/repo/glusterfs.yml
+++ b/linux/system/repo/glusterfs.yml
@@ -3,7 +3,7 @@
     system:
       repo:
         glusterfs-ppa:
-          source: "deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu trusty main"
+          source: "deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu ${_param:linux_system_codename} main"
           architectures: amd64
           key_id: 3FE869A9
           key_server: keyserver.ubuntu.com
\ No newline at end of file
diff --git a/openldap/client/groups/admins.yml b/openldap/client/groups/admins.yml
new file mode 100644
index 0000000..36eac5f
--- /dev/null
+++ b/openldap/client/groups/admins.yml
@@ -0,0 +1,20 @@
+classes:
+  - system.openldap.client.groups
+parameters:
+  openldap:
+    client:
+      entry:
+        groups:
+          entry:
+            admins:
+              attr:
+                description: Administrators
+                gidNumber: 20001
+                memberUid:
+                  - admin
+              classes:
+                - posixGroup
+                - top
+              # TODO: Cannot set memberOf attributes in our LDAP yet
+              # member:
+              #   - cn=admin,ou=people
diff --git a/openldap/client/groups/init.yml b/openldap/client/groups/init.yml
new file mode 100644
index 0000000..a419001
--- /dev/null
+++ b/openldap/client/groups/init.yml
@@ -0,0 +1,9 @@
+parameters:
+  openldap:
+    client:
+      entry:
+        groups:
+          type: ou
+          classes:
+            - top
+            - organizationalUnit
diff --git a/openldap/client/init.yml b/openldap/client/init.yml
new file mode 100644
index 0000000..25812f6
--- /dev/null
+++ b/openldap/client/init.yml
@@ -0,0 +1,15 @@
+classes:
+  - service.openldap.client
+parameters:
+  _param:
+    openldap_server: ${_param:cluster_vip_address}
+    openldap_tls: false
+  openldap:
+    client:
+      server:
+        basedn: ${_param:openldap_dn}
+        host: ${_param:openldap_server}
+        tls: ${_param:openldap_tls}
+        auth:
+          user: cn=admin,${_param:openldap_dn}
+          password: ${_param:openldap_admin_password}
diff --git a/openldap/client/people/admin.yml b/openldap/client/people/admin.yml
new file mode 100644
index 0000000..fa1a2c8
--- /dev/null
+++ b/openldap/client/people/admin.yml
@@ -0,0 +1,26 @@
+classes:
+  - system.openldap.client.people
+  - system.openldap.client.groups.admins
+parameters:
+  openldap:
+    client:
+      entry:
+        people:
+          entry:
+            admin:
+              attr:
+                uid: admin
+                userPassword: ${_param:openldap_admin_password}
+                uidNumber: 20001
+                gidNumber: ${openldap:client:entry:groups:entry:admins:attr:gidNumber}
+                gecos: Administrator
+                givenName: Charlie
+                sn: Root
+                homeDirectory: /home/admin
+                loginShell: /bin/bash
+                mail: ${_param:admin_email}
+              classes:
+                - posixAccount
+                - inetOrgPerson
+                - top
+                - shadowAccount
diff --git a/openldap/client/people/init.yml b/openldap/client/people/init.yml
new file mode 100644
index 0000000..a4ae94d
--- /dev/null
+++ b/openldap/client/people/init.yml
@@ -0,0 +1,9 @@
+parameters:
+  openldap:
+    client:
+      entry:
+        people:
+          type: ou
+          classes:
+            - top
+            - organizationalUnit
diff --git a/reclass/storage/system/cicd_control_cluster.yml b/reclass/storage/system/cicd_control_cluster.yml
index 35a8d15..547ba61 100644
--- a/reclass/storage/system/cicd_control_cluster.yml
+++ b/reclass/storage/system/cicd_control_cluster.yml
@@ -10,7 +10,7 @@
           name: ${_param:cicd_control_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.cicd.master
+          - cluster.${_param:cluster_name}.cicd.control.leader
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
@@ -21,7 +21,7 @@
           name: ${_param:cicd_control_node02_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.cicd.slave
+          - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
@@ -32,7 +32,7 @@
           name: ${_param:cicd_control_node03_hostname}
           domain: ${_param:cluster_domain}
           classes:
-          - cluster.${_param:cluster_name}.cicd.slave
+          - cluster.${_param:cluster_name}.cicd.control.manager
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
diff --git a/reclass/storage/system/physical_control_cluster.yml b/reclass/storage/system/physical_control_cluster.yml
index 12b83c9..4622e09 100644
--- a/reclass/storage/system/physical_control_cluster.yml
+++ b/reclass/storage/system/physical_control_cluster.yml
@@ -1,57 +1,57 @@
 parameters:
   _param:
-    infra_compute_node01_hostname: kvm01
-    infra_compute_node02_hostname: kvm02
-    infra_compute_node03_hostname: kvm03
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
 
-    infra_compute_node01_deploy_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_deploy_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_deploy_address: ${_param:infra_compute_node03_address}
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
 
-    infra_compute_node01_storage_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_storage_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_storage_address: ${_param:infra_compute_node03_address}
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
 
-    infra_compute_node01_public_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_public_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_public_address: ${_param:infra_compute_node03_address}
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
 
   reclass:
     storage:
       node:
-        infra_compute_node01:
-          name: ${_param:infra_compute_node01_hostname}
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node01_address}
-            deploy_address: ${_param:infra_compute_node01_deploy_address}
-            public_address: ${_param:infra_compute_node01_public_address}
-            storage_address: ${_param:infra_compute_node01_storage_address}
-        infra_compute_node02:
-          name: ${_param:infra_compute_node02_hostname}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node02_address}
-            deploy_address: ${_param:infra_compute_node02_deploy_address}
-            public_address: ${_param:infra_compute_node02_public_address}
-            storage_address: ${_param:infra_compute_node02_storage_address}
-        infra_compute_node03:
-          name: ${_param:infra_compute_node03_hostname}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node03_address}
-            deploy_address: ${_param:infra_compute_node03_deploy_address}
-            public_address: ${_param:infra_compute_node03_public_address}
-            storage_address: ${_param:infra_compute_node03_storage_address}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
diff --git a/reclass/storage/system/physical_control_full.yml b/reclass/storage/system/physical_control_full.yml
index 7591113..0f510a4 100644
--- a/reclass/storage/system/physical_control_full.yml
+++ b/reclass/storage/system/physical_control_full.yml
@@ -1,153 +1,153 @@
 parameters:
   _param:
-    infra_compute_node01_hostname: kvm01
-    infra_compute_node02_hostname: kvm02
-    infra_compute_node03_hostname: kvm03
-    infra_compute_node04_hostname: kvm04
-    infra_compute_node05_hostname: kvm05
-    infra_compute_node06_hostname: kvm06
-    infra_compute_node07_hostname: kvm07
-    infra_compute_node08_hostname: kvm08
-    infra_compute_node09_hostname: kvm09
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
+    infra_kvm_node04_hostname: kvm04
+    infra_kvm_node05_hostname: kvm05
+    infra_kvm_node06_hostname: kvm06
+    infra_kvm_node07_hostname: kvm07
+    infra_kvm_node08_hostname: kvm08
+    infra_kvm_node09_hostname: kvm09
 
-    infra_compute_node01_deploy_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_deploy_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_deploy_address: ${_param:infra_compute_node03_address}
-    infra_compute_node04_deploy_address: ${_param:infra_compute_node04_address}
-    infra_compute_node05_deploy_address: ${_param:infra_compute_node05_address}
-    infra_compute_node06_deploy_address: ${_param:infra_compute_node06_address}
-    infra_compute_node07_deploy_address: ${_param:infra_compute_node07_address}
-    infra_compute_node08_deploy_address: ${_param:infra_compute_node08_address}
-    infra_compute_node09_deploy_address: ${_param:infra_compute_node09_address}
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_deploy_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_deploy_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_deploy_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_deploy_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_deploy_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_deploy_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_deploy_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_deploy_address: ${_param:infra_kvm_node09_address}
 
-    infra_compute_node01_storage_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_storage_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_storage_address: ${_param:infra_compute_node03_address}
-    infra_compute_node04_storage_address: ${_param:infra_compute_node04_address}
-    infra_compute_node05_storage_address: ${_param:infra_compute_node05_address}
-    infra_compute_node06_storage_address: ${_param:infra_compute_node06_address}
-    infra_compute_node07_storage_address: ${_param:infra_compute_node07_address}
-    infra_compute_node08_storage_address: ${_param:infra_compute_node08_address}
-    infra_compute_node09_storage_address: ${_param:infra_compute_node09_address}
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_storage_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_storage_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_storage_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_storage_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_storage_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_storage_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_storage_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_storage_address: ${_param:infra_kvm_node09_address}
 
-    infra_compute_node01_public_address: ${_param:infra_compute_node01_address}
-    infra_compute_node02_public_address: ${_param:infra_compute_node02_address}
-    infra_compute_node03_public_address: ${_param:infra_compute_node03_address}
-    infra_compute_node04_public_address: ${_param:infra_compute_node04_address}
-    infra_compute_node05_public_address: ${_param:infra_compute_node05_address}
-    infra_compute_node06_public_address: ${_param:infra_compute_node06_address}
-    infra_compute_node07_public_address: ${_param:infra_compute_node07_address}
-    infra_compute_node08_public_address: ${_param:infra_compute_node08_address}
-    infra_compute_node09_public_address: ${_param:infra_compute_node09_address}
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node02_public_address: ${_param:infra_kvm_node02_address}
+    infra_kvm_node03_public_address: ${_param:infra_kvm_node03_address}
+    infra_kvm_node04_public_address: ${_param:infra_kvm_node04_address}
+    infra_kvm_node05_public_address: ${_param:infra_kvm_node05_address}
+    infra_kvm_node06_public_address: ${_param:infra_kvm_node06_address}
+    infra_kvm_node07_public_address: ${_param:infra_kvm_node07_address}
+    infra_kvm_node08_public_address: ${_param:infra_kvm_node08_address}
+    infra_kvm_node09_public_address: ${_param:infra_kvm_node09_address}
 
   reclass:
     storage:
       node:
-        infra_compute_node01:
-          name: ${_param:infra_compute_node01_hostname}
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node01_address}
-            deploy_address: ${_param:infra_compute_node01_deploy_address}
-            public_address: ${_param:infra_compute_node01_public_address}
-            storage_address: ${_param:infra_compute_node01_storage_address}
-        infra_compute_node02:
-          name: ${_param:infra_compute_node02_hostname}
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
+        infra_kvm_node02:
+          name: ${_param:infra_kvm_node02_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node02_address}
-            deploy_address: ${_param:infra_compute_node02_deploy_address}
-            public_address: ${_param:infra_compute_node02_public_address}
-            storage_address: ${_param:infra_compute_node02_storage_address}
-        infra_compute_node03:
-          name: ${_param:infra_compute_node03_hostname}
+            single_address: ${_param:infra_kvm_node02_address}
+            deploy_address: ${_param:infra_kvm_node02_deploy_address}
+            public_address: ${_param:infra_kvm_node02_public_address}
+            storage_address: ${_param:infra_kvm_node02_storage_address}
+        infra_kvm_node03:
+          name: ${_param:infra_kvm_node03_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node03_address}
-            deploy_address: ${_param:infra_compute_node03_deploy_address}
-            public_address: ${_param:infra_compute_node03_public_address}
-            storage_address: ${_param:infra_compute_node03_storage_address}
-        infra_compute_node04:
-          name: ${_param:infra_compute_node04_hostname}
+            single_address: ${_param:infra_kvm_node03_address}
+            deploy_address: ${_param:infra_kvm_node03_deploy_address}
+            public_address: ${_param:infra_kvm_node03_public_address}
+            storage_address: ${_param:infra_kvm_node03_storage_address}
+        infra_kvm_node04:
+          name: ${_param:infra_kvm_node04_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node04_address}
-            deploy_address: ${_param:infra_compute_node04_deploy_address}
-            public_address: ${_param:infra_compute_node04_public_address}
-            storage_address: ${_param:infra_compute_node04_storage_address}
-        infra_compute_node05:
-          name: ${_param:infra_compute_node05_hostname}
+            single_address: ${_param:infra_kvm_node04_address}
+            deploy_address: ${_param:infra_kvm_node04_deploy_address}
+            public_address: ${_param:infra_kvm_node04_public_address}
+            storage_address: ${_param:infra_kvm_node04_storage_address}
+        infra_kvm_node05:
+          name: ${_param:infra_kvm_node05_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node05_address}
-            deploy_address: ${_param:infra_compute_node05_deploy_address}
-            public_address: ${_param:infra_compute_node05_public_address}
-            storage_address: ${_param:infra_compute_node05_storage_address}
-        infra_compute_node06:
-          name: ${_param:infra_compute_node06_hostname}
+            single_address: ${_param:infra_kvm_node05_address}
+            deploy_address: ${_param:infra_kvm_node05_deploy_address}
+            public_address: ${_param:infra_kvm_node05_public_address}
+            storage_address: ${_param:infra_kvm_node05_storage_address}
+        infra_kvm_node06:
+          name: ${_param:infra_kvm_node06_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node06_address}
-            deploy_address: ${_param:infra_compute_node06_deploy_address}
-            public_address: ${_param:infra_compute_node06_public_address}
-            storage_address: ${_param:infra_compute_node06_storage_address}
-        infra_compute_node07:
-          name: ${_param:infra_compute_node07_hostname}
+            single_address: ${_param:infra_kvm_node06_address}
+            deploy_address: ${_param:infra_kvm_node06_deploy_address}
+            public_address: ${_param:infra_kvm_node06_public_address}
+            storage_address: ${_param:infra_kvm_node06_storage_address}
+        infra_kvm_node07:
+          name: ${_param:infra_kvm_node07_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node07_address}
-            deploy_address: ${_param:infra_compute_node07_deploy_address}
-            public_address: ${_param:infra_compute_node07_public_address}
-            storage_address: ${_param:infra_compute_node07_storage_address}
-        infra_compute_node08:
-          name: ${_param:infra_compute_node08_hostname}
+            single_address: ${_param:infra_kvm_node07_address}
+            deploy_address: ${_param:infra_kvm_node07_deploy_address}
+            public_address: ${_param:infra_kvm_node07_public_address}
+            storage_address: ${_param:infra_kvm_node07_storage_address}
+        infra_kvm_node08:
+          name: ${_param:infra_kvm_node08_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node08_address}
-            deploy_address: ${_param:infra_compute_node08_deploy_address}
-            public_address: ${_param:infra_compute_node08_public_address}
-            storage_address: ${_param:infra_compute_node08_storage_address}
-        infra_compute_node09:
-          name: ${_param:infra_compute_node09_hostname}
+            single_address: ${_param:infra_kvm_node08_address}
+            deploy_address: ${_param:infra_kvm_node08_deploy_address}
+            public_address: ${_param:infra_kvm_node08_public_address}
+            storage_address: ${_param:infra_kvm_node08_storage_address}
+        infra_kvm_node09:
+          name: ${_param:infra_kvm_node09_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node09_address}
-            deploy_address: ${_param:infra_compute_node09_deploy_address}
-            public_address: ${_param:infra_compute_node09_public_address}
-            storage_address: ${_param:infra_compute_node09_storage_address}
\ No newline at end of file
+            single_address: ${_param:infra_kvm_node09_address}
+            deploy_address: ${_param:infra_kvm_node09_deploy_address}
+            public_address: ${_param:infra_kvm_node09_public_address}
+            storage_address: ${_param:infra_kvm_node09_storage_address}
diff --git a/reclass/storage/system/physical_control_single.yml b/reclass/storage/system/physical_control_single.yml
index 1a604f1..32f09c3 100644
--- a/reclass/storage/system/physical_control_single.yml
+++ b/reclass/storage/system/physical_control_single.yml
@@ -1,21 +1,21 @@
 parameters:
   _param:
-    infra_compute_node01_hostname: kvm01
-    infra_compute_node01_deploy_address: ${_param:infra_compute_node01_address}
-    infra_compute_node01_storage_address: ${_param:infra_compute_node01_address}
-    infra_compute_node01_public_address: ${_param:infra_compute_node01_address}
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node01_deploy_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node01_storage_address: ${_param:infra_kvm_node01_address}
+    infra_kvm_node01_public_address: ${_param:infra_kvm_node01_address}
   reclass:
     storage:
       node:
-        infra_compute_node01:
-          name: ${_param:infra_compute_node01_hostname}
+        infra_kvm_node01:
+          name: ${_param:infra_kvm_node01_hostname}
           domain: ${_param:cluster_domain}
           classes:
           - cluster.${_param:cluster_name}.infra.kvm
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
-            single_address: ${_param:infra_compute_node01_address}
-            deploy_address: ${_param:infra_compute_node01_deploy_address}
-            public_address: ${_param:infra_compute_node01_public_address}
-            storage_address: ${_param:infra_compute_node01_storage_address}
\ No newline at end of file
+            single_address: ${_param:infra_kvm_node01_address}
+            deploy_address: ${_param:infra_kvm_node01_deploy_address}
+            public_address: ${_param:infra_kvm_node01_public_address}
+            storage_address: ${_param:infra_kvm_node01_storage_address}
diff --git a/salt/master/formula/pkg/foundation.yml b/salt/master/formula/pkg/foundation.yml
index abcc1b0..3611321 100644
--- a/salt/master/formula/pkg/foundation.yml
+++ b/salt/master/formula/pkg/foundation.yml
@@ -19,4 +19,7 @@
             freeipa:
               source: pkg
               name: salt-formula-freeipa
+            openldap:
+              source: pkg
+              name: salt-formula-openldap