Add CI/CD infrastructure

Change-Id: Id15634c2096394f7de4533c8466e0e0c2e66f8ed
diff --git a/aptly/client/publisher.yml b/aptly/client/publisher.yml
new file mode 100644
index 0000000..9aae28b
--- /dev/null
+++ b/aptly/client/publisher.yml
@@ -0,0 +1,9 @@
+classes:
+  - service.aptly.client.publisher
+parameters:
+  aptly:
+    publisher:
+      enabled: true
+      source:
+        engine: docker
+        image: tcpcloud/aptly-publisher
diff --git a/aptly/server/docker.yml b/aptly/server/docker.yml
new file mode 100644
index 0000000..4810e7b
--- /dev/null
+++ b/aptly/server/docker.yml
@@ -0,0 +1,23 @@
+classes:
+  - service.aptly.server.single
+parameters:
+  aptly:
+    server:
+      enabled: true
+      source:
+        engine: docker
+        image: tcpcloud/aptly
+      user:
+        uid: 501
+        gid: 501
+      home_dir: /srv/volumes/aptly
+      root_dir: /srv/volumes/aptly
+      secure: true
+      no_config: true
+      gpg:
+        keyring: .gnupg/trustdb.gpg
+        keypair_id: ${_param:aptly_gpg_keypair_id}
+        public_key: ${_param:aptly_gpg_public_key}
+        private_key: ${_param:aptly_gpg_private_key}
+      api:
+        enabled: false
diff --git a/docker/client.yml b/docker/client.yml
new file mode 100644
index 0000000..4691ddb
--- /dev/null
+++ b/docker/client.yml
@@ -0,0 +1,10 @@
+classes:
+  - service.docker.client
+parameters:
+  docker:
+    client:
+      enabled: true
+      compose:
+        source:
+          engine: docker
+          image: "docker/compose:1.8.0"
diff --git a/docker/host.yml b/docker/host.yml
new file mode 100644
index 0000000..cf19bfd
--- /dev/null
+++ b/docker/host.yml
@@ -0,0 +1,9 @@
+classes:
+  - service.docker.host
+  - system.linux.system.repo.docker
+parameters:
+  docker:
+    host:
+      insecure_registries:
+        - ${_param:cluster_vip_address}:5000
+        - ${_param:cluster_public_host}:5000
diff --git a/docker/swarm/manager.yml b/docker/swarm/manager.yml
new file mode 100644
index 0000000..36f5bcb
--- /dev/null
+++ b/docker/swarm/manager.yml
@@ -0,0 +1,7 @@
+parameters:
+  docker:
+    swarm:
+      role: manager
+      advertise_addr: ${_param:single_address}
+      master:
+        host: ${_param:cluster_node01_address}
diff --git a/docker/swarm/master.yml b/docker/swarm/master.yml
new file mode 100644
index 0000000..bb2d83b
--- /dev/null
+++ b/docker/swarm/master.yml
@@ -0,0 +1,5 @@
+parameters:
+  docker:
+    swarm:
+      role: master
+      advertise_addr: ${_param:single_address}
diff --git a/docker/swarm/service/aptly.yml b/docker/swarm/service/aptly.yml
new file mode 100644
index 0000000..d85b1b4
--- /dev/null
+++ b/docker/swarm/service/aptly.yml
@@ -0,0 +1,29 @@
+parameters:
+  docker:
+    client:
+      service:
+        aptly-api:
+          environment:
+            EMAIL_ADDRESS: ${_param:admin_email}
+          restart:
+            condition: any
+          image: ${_param:docker_image_aptly:api}
+          ports:
+            - 18084:8080
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/aptly
+              destination: /var/lib/aptly
+        aptly-public:
+          replicas: 3
+          restart:
+            condition: any
+          image: ${_param:docker_image_aptly:public}
+          ports:
+            - 18085:80
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/aptly/public
+              destination: /var/www/html
diff --git a/docker/swarm/service/artifactory.yml b/docker/swarm/service/artifactory.yml
new file mode 100644
index 0000000..d7f8626
--- /dev/null
+++ b/docker/swarm/service/artifactory.yml
@@ -0,0 +1,32 @@
+parameters:
+  docker:
+    client:
+      service:
+        artifactory:
+          environment:
+            MYSQL_HOST: ${_param:cluster_vip_address}
+            MYSQL_USERNAME: artifactory
+            MYSQL_PASSWORD: ${_param:mysql_artifactory_password}
+            MYSQL_DATABASE: artifactory
+          restart:
+            condition: any
+          image: ${_param:docker_image_repository:cicd}/artifactory
+          ports:
+            - 18082:8081
+          volume:
+            data:
+              type: bind
+              source: /srv/volumes/artifactory/data
+              destination: /var/opt/jfrog/artifactory/data
+            backup:
+              type: bind
+              source: /srv/volumes/artifactory/backup
+              destination: /var/opt/jfrog/artifactory/backup
+            etc:
+              type: bind
+              source: /srv/volumes/artifactory/etc
+              destination: /var/opt/jfrog/artifactory/etc
+            logs:
+              type: bind
+              source: /srv/volumes/artifactory/logs
+              destination: /var/opt/jfrog/artifactory/logs
diff --git a/docker/swarm/service/docker.yml b/docker/swarm/service/docker.yml
new file mode 100644
index 0000000..a79fc08
--- /dev/null
+++ b/docker/swarm/service/docker.yml
@@ -0,0 +1,18 @@
+parameters:
+  docker:
+    client:
+      service:
+        registry:
+          replica: 3
+          environment:
+            REGISTRY_HTTP_SECRET: ${_param:docker_registry_http_secret}
+          restart:
+            condition: any
+          image: ${_param:docker_image_registry}
+          ports:
+            - 15000:5000
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/registry
+              destination: /var/lib/registry
diff --git a/docker/swarm/service/gerrit.yml b/docker/swarm/service/gerrit.yml
new file mode 100644
index 0000000..d1bdfae
--- /dev/null
+++ b/docker/swarm/service/gerrit.yml
@@ -0,0 +1,28 @@
+parameters:
+  docker:
+    client:
+      service:
+        gerrit:
+          environment:
+            #GERRIT_INIT_ARGS: ""
+            DATABASE_TYPE: "mysql"
+            DB_PORT_3306_TCP_ADDR: ${_param:cluster_vip_address}
+            DB_ENV_MYSQL_USER: gerrit
+            DB_ENV_MYSQL_PASSWORD: ${_param:mysql_gerrit_password}
+            DB_ENV_MYSQL_DB: gerrit
+            AUTH_TYPE: ${_param:gerrit_auth_type}
+            WEBURL: ${_param:gerrit_public_host}
+            GERRIT_ADMIN_SSH_PUBLIC: ${_param:gerrit_admin_public_key}
+            GERRIT_ADMIN_PWD: ${_param:gerrit_admin_password}
+            GERRIT_ADMIN_EMAIL: ${_param:gerrit_admin_email}
+          restart:
+            condition: any
+          image: ${_param:docker_image_gerrit}
+          ports:
+            - 18083:8080
+            - 29417:29418
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/gerrit
+              destination: /var/gerrit/review_site
diff --git a/docker/swarm/service/jenkins.yml b/docker/swarm/service/jenkins.yml
new file mode 100644
index 0000000..c0b0721
--- /dev/null
+++ b/docker/swarm/service/jenkins.yml
@@ -0,0 +1,23 @@
+parameters:
+  docker:
+    client:
+      service:
+        jenkins:
+          environment:
+            JAVA_OPTS: "-Djenkins.install.runSetupWizard=false -Dhudson.footerURL=https://www.mirantis.com"
+            JENKINS_NUM_EXECUTORS: 4
+          restart:
+            condition: any
+          image: ${_param:docker_image_jenkins}
+          ports:
+            - 18081:8080
+            - 50001:50000
+          volume:
+            home:
+              type: bind
+              source: /srv/volumes/jenkins
+              destination: /var/jenkins_home
+            cacerts:
+              type: bind
+              source: /etc/ssl/certs/java/cacerts
+              destination: /etc/ssl/certs/java/cacerts
diff --git a/docker/swarm/service/mysql.yml b/docker/swarm/service/mysql.yml
new file mode 100644
index 0000000..53faa8b
--- /dev/null
+++ b/docker/swarm/service/mysql.yml
@@ -0,0 +1,20 @@
+parameters:
+  docker:
+    client:
+      service:
+        mysql:
+          environment:
+            MYSQL_USER: gerrit
+            MYSQL_PASSWORD: ${_param:mysql_gerrit_password}
+            MYSQL_DATABASE: gerrit
+            MYSQL_ROOT_PASSWORD: ${_param:mysql_admin_password}
+          restart:
+            condition: any
+          image: "mysql:5.6"
+          ports:
+            - 13306:3306
+          volume:
+            data:
+              type: bind
+              source: /srv/volumes/mysql
+              destination: /var/lib/mysql
diff --git a/docker/swarm/service/openldap.yml b/docker/swarm/service/openldap.yml
new file mode 100644
index 0000000..d009ed5
--- /dev/null
+++ b/docker/swarm/service/openldap.yml
@@ -0,0 +1,32 @@
+parameters:
+  docker:
+    client:
+      service:
+        openldap:
+          # XXX: docker service is not able to set hostname
+          # https://github.com/docker/docker/issues/24877
+          restart:
+            condition: any
+          image: osixia/openldap:1.1.7
+          environment:
+            HOSTNAME: ldap01.${_param:cluster_public_host}
+            LDAP_ORGANISATION: "${_param:openldap_organisation}"
+            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:
+            - 389:389
+            - 636:636
+          volume:
+            database:
+              type: bind
+              source: /srv/volumes/openldap/database
+              destination: /var/lib/ldap
+            config:
+              type: bind
+              source: /srv/volumes/openldap/config
+              destination: /etc/ldap/slapd.d
diff --git a/docker/swarm/service/visualizer.yml b/docker/swarm/service/visualizer.yml
new file mode 100644
index 0000000..fe52c0b
--- /dev/null
+++ b/docker/swarm/service/visualizer.yml
@@ -0,0 +1,16 @@
+parameters:
+  docker:
+    client:
+      service:
+        visualizer:
+          restart:
+            condition: any
+          image: manomarks/visualizer
+          constraint: "node.role==manager"
+          ports:
+            - 18090:8080
+          volume:
+            docker:
+              type: bind
+              source: /var/run/docker.sock
+              destination: /var/run/docker.sock
diff --git a/docker/swarm/worker.yml b/docker/swarm/worker.yml
new file mode 100644
index 0000000..acdb0cf
--- /dev/null
+++ b/docker/swarm/worker.yml
@@ -0,0 +1,7 @@
+parameters:
+  docker:
+    swarm:
+      role: worker
+      advertise_addr: ${_param:single_address}
+      master:
+        host: ${_param:cluster_node01_address}
diff --git a/gerrit/client/init.yml b/gerrit/client/init.yml
index ab2860b..a9bb4de 100644
--- a/gerrit/client/init.yml
+++ b/gerrit/client/init.yml
@@ -1,14 +1,20 @@
+classes:
+  - service.gerrit.client
 parameters:
   gerrit:
     client:
       enabled: True
+      source:
+        engine: pip
       dir:
         git: /srv/volumes/gerrit/git
+        gerrit_config: /srv/volumes/gerrit/etc/gerrit.config
+        gerrit_secure_config: /srv/volumes/gerrit/etc/secure.config
       server:
-        host: ${_param:openstack_control_address}
+        host: ${_param:cluster_vip_address}
         user: admin
-        email: root@localhost
-        http_port: 8083
+        email: ${_param:gerrit_admin_email}
+        http_port: 8080
         ssh_port: 29418
         protocol: http
         password: ${_param:gerrit_admin_password}
@@ -16,21 +22,12 @@
       group:
         Event Streaming Users:
           description: Event Streaming Users
-        mcp_fuel_aio-core:
+        devops-core:
           description: Core maintainers
-        mcp_fuel_aio-release:
+        devops-release:
           description: Release engineers
-        mcp_fuel_aio-contrib:
+        devops-contrib:
           description: Service developers
-      user:
-        jenkins:
-          fullname: Non-Interactive Jenkins
-          email: "jenkins@mirantis.com"
-          ssh_key: ${_param:gerrit_admin_public_key}
-          http_password: password
-          groups:
-          - Event Streaming Users
-          - Non-Interactive Users
       default_access:
         "refs/*":
           actions:
@@ -39,12 +36,12 @@
         "refs/heads/*":
           actions:
           - name: abandon
-            group: ccp-poc-core
+            group: devops-core
           - name: create
-            group: ccp-poc-release
+            group: devops-core
           labels:
           - name: label-Code-Review
-            group: ccp-poc-core
+            group: devops-core
             score: -2..+2
           - name: label-Code-Review
             group: Non-Interactive Users
@@ -53,9 +50,17 @@
             group: Non-Interactive Users
             score: -1..+1
           - name: label-Workflow
-            group: ccp-poc-core
+            group: devops-core
             score: -1..+1
         "refs/tags/*":
           actions:
           - name: pushSignedTag
-            group: ${_param:cluster_name}-release
+            group: devops-core
+          - name: create
+            group: devops-core
+          - name: push
+            group: devops-core
+          - name: forgeCommitter
+            group: devops-core
+          - name: forgeAuthor
+            group: devops-core
diff --git a/gerrit/client/project/reclass/reclass_model_cluster.yml b/gerrit/client/project/reclass/reclass_model_cluster.yml
deleted file mode 100644
index 96ddd41..0000000
--- a/gerrit/client/project/reclass/reclass_model_cluster.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-parameters:
-  gerrit:
-    client:
-      project:
-        reclass-model-cluster:
-          enabled: true
-          description: Reclass cluster model
-          access:
-            "refs/heads/*":
-              actions:
-              - name: abandon
-                group: ${_param:cluster_name}-core
-              - name: create
-                group: ${_param:cluster_name}-release
-              labels:
-              - name: label-Code-Review
-                group: ${_param:cluster_name}-core
-                score: -2..+2
-              - name: label-Workflow
-                group: ${_param:cluster_name}-core
-                score: -1..+1
-            "refs/tags/*":
-              actions:
-              - name: pushSignedTag
-                group: ${_param:cluster_name}-release
-          require_change_id: true
-          require_agreement: true
-          merge_content: true
diff --git a/gerrit/client/project/salt/init.yml b/gerrit/client/project/salt/init.yml
deleted file mode 100644
index d9ce6eb..0000000
--- a/gerrit/client/project/salt/init.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-include:
-- gerrit.client.project.salt.salt_formula_linux
-- gerrit.client.project.salt.salt_formula_nova
-- gerrit.client.project.salt.salt_formula_salt
diff --git a/gerrit/client/project/salt/salt_formula_linux.yml b/gerrit/client/project/salt/salt_formula_linux.yml
deleted file mode 100644
index d8d026b..0000000
--- a/gerrit/client/project/salt/salt_formula_linux.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-parameters:
-  gerrit:
-    client:
-      project:
-        salt-formula-linux:
-          enabled: true
-          description: Linux formula
-          upstream: https://github.com/tcpcloud/salt-formula-linux.git
-          access:
-            "refs/heads/*":
-              actions:
-              - name: abandon
-                group: ${_param:cluster_name}-core
-              - name: create
-                group: ${_param:cluster_name}-release
-              labels:
-              - name: label-Code-Review
-                group: ${_param:cluster_name}-core
-                score: -2..+2
-              - name: label-Workflow
-                group: ${_param:cluster_name}-core
-                score: -1..+1
-            "refs/tags/*":
-              actions:
-              - name: pushSignedTag
-                group: ${_param:cluster_name}-release
-          require_change_id: true
-          require_agreement: true
-          merge_content: true
diff --git a/gerrit/client/project/salt/salt_formula_nova.yml b/gerrit/client/project/salt/salt_formula_nova.yml
deleted file mode 100644
index 3424ec0..0000000
--- a/gerrit/client/project/salt/salt_formula_nova.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-parameters:
-  gerrit:
-    client:
-      project:
-        salt-formula-nova:
-          enabled: true
-          description: OpenStack Nova formula
-          upstream: https://github.com/openstack/salt-formula-nova.git
-          access:
-            "refs/heads/*":
-              actions:
-              - name: abandon
-                group: ${_param:cluster_name}-core
-              - name: create
-                group: ${_param:cluster_name}-release
-              labels:
-              - name: label-Code-Review
-                group: ${_param:cluster_name}-core
-                score: -2..+2
-              - name: label-Workflow
-                group: ${_param:cluster_name}-core
-                score: -1..+1
-            "refs/tags/*":
-              actions:
-              - name: pushSignedTag
-                group: ${_param:cluster_name}-release
-          require_change_id: true
-          require_agreement: true
-          merge_content: true
diff --git a/gerrit/client/project/salt/salt_formula_salt.yml b/gerrit/client/project/salt/salt_formula_salt.yml
deleted file mode 100644
index 95668a0..0000000
--- a/gerrit/client/project/salt/salt_formula_salt.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-parameters:
-  gerrit:
-    client:
-      project:
-        salt-formula-salt:
-          enabled: true
-          description: Salt formula
-          upstream: https://github.com/tcpcloud/salt-formula-salt.git
-          access:
-            "refs/heads/*":
-              actions:
-              - name: abandon
-                group: ${_param:cluster_name}-core
-              - name: create
-                group: ${_param:cluster_name}-release
-              labels:
-              - name: label-Code-Review
-                group: ${_param:cluster_name}-core
-                score: -2..+2
-              - name: label-Workflow
-                group: ${_param:cluster_name}-core
-                score: -1..+1
-            "refs/tags/*":
-              actions:
-              - name: pushSignedTag
-                group: ${_param:cluster_name}-release
-          require_change_id: true
-          require_agreement: true
-          merge_content: true
diff --git a/gerrit/client/single.yml b/gerrit/client/single.yml
deleted file mode 100644
index cfabc1d..0000000
--- a/gerrit/client/single.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-parameters:
-  _param:
-    gerrit_server_port: 8082
-  gerrit:
-    client:
-      enabled: True
-      server: 
-        host: ${_param:gerrit_server_host}
-        user: admin
-        email: root@localhost
-        http_port: ${_param:gerrit_server_port}
-        ssh_port: 29418
-        protocol: http
-        password: ${_param:gerrit_admin_password}
-        key: ${_param:gerrit_admin_private_key}
diff --git a/gerrit/client/team/customer.yml b/gerrit/client/team/customer.yml
deleted file mode 100644
index 12ca541..0000000
--- a/gerrit/client/team/customer.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-parameters:
-  gerrit:
-    client:
-      user: {}
\ No newline at end of file
diff --git a/gerrit/client/team/mirantis.yml b/gerrit/client/team/mirantis.yml
index 0d8a4e1..33e0bed 100644
--- a/gerrit/client/team/mirantis.yml
+++ b/gerrit/client/team/mirantis.yml
@@ -5,24 +5,21 @@
         akomarek:
           fullname: Ales Komarek
           email: "akomarek@mirantis.com"
-          http_password: password
           ssh_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3odU+3V2uDA2ptAFL9hrJRPNEEdAyztWOZFQ5Oyd9oerTGOU3p4xmrgWWjfKFKbYGhiiIUcYAol5PkTfKukGEkkjCHYA1t023soCaaAj85wCZCnw2zQNAziwxTYmAzTqgxiSvtZNMMrtJvFHRIRDzJ3M1lV0prWNWkMM1/3FAd4W49y6VT3fkMCo8uqG7CfGdgR2DgBCxf9KaNPfW5eDEPOgmE5lK8tVSEI6T+Cg7hbcTf4lFYnlFBnlQgp/0JstsM4Vbwb4B34LOpOsf2S8rrWk2xQMjwaMHXkc2s/E8iW3F5nVFuyEXYISFQIiAHw8dzC6CHgLcyHUVWwznKawZ
           groups:
-          - ${_param:cluster_name}_core
-          - ${_param:cluster_name}_release
+          - devops-core
+          - devops-release
         jpavlik:
           fullname: Jakub Pavlik
           email: "jpavlik@mirantis.com"
-          http_password: password
           ssh_key: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAylDZDzgMuEsJQpwFHDW+QivCVhryxXd1/HWqq1TVhJmT9oNAYdhUBnf/9kVtgmP0EWpDJtGSEaSugCmx8KE76I64RhpOTlm7wO0FFUVnzhFtTPx38WHfMjMdk1HF8twZU4svi72Xbg1KyBimwvaxTTd4zxq8Mskp3uwtkqPcQJDSQaZYv+wtuB6m6vHBCOTZwAognDGEvvCg0dgTU4hch1zoHSaxedS1UFHjUAM598iuI3+hMos/5hjG/vuay4cPLBJX5x1YF6blbFALwrQw8ZmTPaimqDUA9WD6KSmS1qg4rOkk4cszIfJ5vyymMrG+G3qk5LeT4VrgIgWQTAHyXw==
           groups:
-          - ${_param:cluster_name}-core
-          - ${_param:cluster_name}-release
+          - devops-core
+          - devops-release
         fpytloun:
           fullname: Filip Pytloun
           email: "fpytloun@mirantis.com"
-          http_password: password
           ssh_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCcuHTjJ3CoWdkmvtag07bIWeyAMqFLAN+QApat7TXUcDYmm/neK4Asg3m/UicofZnB80cI4tjnB84Z8WazLHMxVTLwHbEqTVbXVeKebiZ5yn0yo4ndRzmppUfSvs0xcMysBwu+hYAnIDXTedctbciMSYKbuQ+b9XZ4mFZ/2RHG4QBA/dPUxJdCwvkBu7AOV+6zaRSR99UETr5nxICQUGVJBTy6VkCsch4mK3/K2SrujODUhytcROg+6ejV/aZHWH9xIFRBLfhmSFeOC6oneBWo4QBQ2tTZgb7Go744JpkhkoMfWQnR2s6cCgUN60BJ6j5snqmbv9/2CmgbI4UprC+E6lL04K/Jbgjv+fi3KqnCIpRiQzahmjSeeYdPducWme3BVDceUSb5EzF/RjSDi4yHcTWJS0TcPf195p42O1G6tLw5zfmIu2+PWUq1L4pLualboUbaDtwqg0WaLWKONi9tJkOS1OMz4hxqEbWBAtFNJLHC5K+OXcV8Yt6C7iB2dEZ4c26MAi1pdMqhFjxYiCGYKZ4lyV9xo8tWcs5fiUIi2PKyLQ9SMRQbhXIcb9ENby2D/ijh5AVpbBew8iaUQQKg83Yo0z2PwTWyNFuXECAl667XaTNZEMVUjo5yU/OtktVZiH6ZfvEFwj+7OpLBiZ3sFgp/7EHcGXa0FL6BcXuwfQ==
           groups:
-          - ${_param:cluster_name}-core
-          - ${_param:cluster_name}-release
+          - devops-core
+          - devops-release
diff --git a/glusterfs/client/volume/aptly.yml b/glusterfs/client/volume/aptly.yml
new file mode 100644
index 0000000..c894428
--- /dev/null
+++ b/glusterfs/client/volume/aptly.yml
@@ -0,0 +1,8 @@
+parameters:
+  glusterfs:
+    client:
+      volumes:
+        aptly:
+          path: /srv/volumes/aptly
+          server: ${_param:cluster_node01_address}
+          opts: 'defaults'
diff --git a/glusterfs/client/volume/openldap.yml b/glusterfs/client/volume/openldap.yml
new file mode 100644
index 0000000..ada164e
--- /dev/null
+++ b/glusterfs/client/volume/openldap.yml
@@ -0,0 +1,8 @@
+parameters:
+  glusterfs:
+    client:
+      volumes:
+        openldap:
+          path: /srv/volumes/openldap
+          server: ${_param:cluster_node01_address}
+          opts: 'defaults'
diff --git a/glusterfs/client/volume/registry.yml b/glusterfs/client/volume/registry.yml
new file mode 100644
index 0000000..4b5d664
--- /dev/null
+++ b/glusterfs/client/volume/registry.yml
@@ -0,0 +1,8 @@
+parameters:
+  glusterfs:
+    client:
+      volumes:
+        registry:
+          path: /srv/volumes/registry
+          server: ${_param:cluster_node01_address}
+          opts: 'defaults'
diff --git a/glusterfs/server/cluster.yml b/glusterfs/server/cluster.yml
index 60371e2..87aa0e9 100644
--- a/glusterfs/server/cluster.yml
+++ b/glusterfs/server/cluster.yml
@@ -1,6 +1,5 @@
 classes:
 - service.glusterfs.server
-- service.keepalived.cluster.single
 parameters:
   glusterfs:
     _support:
diff --git a/glusterfs/server/volume/aptly.yml b/glusterfs/server/volume/aptly.yml
new file mode 100644
index 0000000..db01638
--- /dev/null
+++ b/glusterfs/server/volume/aptly.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        aptly:
+          storage: /srv/glusterfs/aptly
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/aptly
+            - ${_param:cluster_node02_address}:/srv/glusterfs/aptly
+            - ${_param:cluster_node03_address}:/srv/glusterfs/aptly
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
diff --git a/glusterfs/server/volume/openldap.yml b/glusterfs/server/volume/openldap.yml
new file mode 100644
index 0000000..d507b44
--- /dev/null
+++ b/glusterfs/server/volume/openldap.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        openldap:
+          storage: /srv/glusterfs/openldap
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/openldap
+            - ${_param:cluster_node02_address}:/srv/glusterfs/openldap
+            - ${_param:cluster_node03_address}:/srv/glusterfs/openldap
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
diff --git a/glusterfs/server/volume/registry.yml b/glusterfs/server/volume/registry.yml
new file mode 100644
index 0000000..5df7d8a
--- /dev/null
+++ b/glusterfs/server/volume/registry.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        registry:
+          storage: /srv/glusterfs/registry
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/registry
+            - ${_param:cluster_node02_address}:/srv/glusterfs/registry
+            - ${_param:cluster_node03_address}:/srv/glusterfs/registry
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
diff --git a/haproxy/proxy/listen/cicd/aptly.yml b/haproxy/proxy/listen/cicd/aptly.yml
new file mode 100644
index 0000000..c1062ed
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/aptly.yml
@@ -0,0 +1,50 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        aptly-api:
+          mode: http
+          options:
+            - forwardfor
+            - httpclose
+            - httplog
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 8084
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18084
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18084
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18084
+              params: backup check
+        aptly-public:
+          mode: http
+          options:
+            - forwardfor
+            - httpclose
+            - httplog
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 8085
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18085
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18085
+              params: check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18085
+              params: check
diff --git a/haproxy/proxy/listen/cicd/gerrit.yml b/haproxy/proxy/listen/cicd/gerrit.yml
new file mode 100644
index 0000000..efa7ed9
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/gerrit.yml
@@ -0,0 +1,47 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        gerrit:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 8080
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18083
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18083
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18083
+              params: backup check
+        gerrit_ssh:
+          mode: tcp
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 29418
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 29417
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 29417
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 29417
+              params: backup check
diff --git a/haproxy/proxy/listen/cicd/jenkins.yml b/haproxy/proxy/listen/cicd/jenkins.yml
new file mode 100644
index 0000000..d907ee3
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/jenkins.yml
@@ -0,0 +1,49 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        jenkins:
+          mode: http
+          options:
+            - forwardfor
+#            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          http_response:
+            - action: "del-header X-Frame-Options"
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 8081
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18081
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18081
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18081
+              params: backup check
+        jenkins_jnlp:
+          mode: tcp
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 50000
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 50001
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 50001
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 50001
+              params: backup check
diff --git a/haproxy/proxy/listen/cicd/mysql.yml b/haproxy/proxy/listen/cicd/mysql.yml
new file mode 100644
index 0000000..c6fa56b
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/mysql.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        mysql:
+          mode: tcp
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 3306
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 13306
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 13306
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 13306
+              params: backup check
diff --git a/haproxy/proxy/listen/docker/registry.yml b/haproxy/proxy/listen/docker/registry.yml
new file mode 100644
index 0000000..c3d1893
--- /dev/null
+++ b/haproxy/proxy/listen/docker/registry.yml
@@ -0,0 +1,31 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        registry:
+          mode: http
+          options:
+            - forwardfor
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 5000
+              ssl: ${_param:cluster_ssl_certificate}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 15000
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 15000
+              params: check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 15000
+              params: check
diff --git a/haproxy/proxy/listen/docker/visualizer.yml b/haproxy/proxy/listen/docker/visualizer.yml
new file mode 100644
index 0000000..daacd84
--- /dev/null
+++ b/haproxy/proxy/listen/docker/visualizer.yml
@@ -0,0 +1,28 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        visualizer:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 8090
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 18090
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 18090
+              params: check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 18090
+              params: check
diff --git a/haproxy/proxy/listen/salt.yml b/haproxy/proxy/listen/salt.yml
new file mode 100644
index 0000000..ba54c07
--- /dev/null
+++ b/haproxy/proxy/listen/salt.yml
@@ -0,0 +1,31 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        salt:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk
+            - httpclose
+            - httplog
+          balance: source
+          timeout:
+            server: 20m
+            client: 20m
+          binds:
+            - address: ${_param:haproxy_bind_address}
+              port: 8000
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: 8000
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: 8000
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: 8000
+              params: backup check
diff --git a/haproxy/proxy/single.yml b/haproxy/proxy/single.yml
index e69de29..dc9c668 100644
--- a/haproxy/proxy/single.yml
+++ b/haproxy/proxy/single.yml
@@ -0,0 +1,4 @@
+parameters:
+  haproxy:
+    proxy:
+      enabled: true
diff --git a/jenkins/client/credential/gerrit.yml b/jenkins/client/credential/gerrit.yml
new file mode 100644
index 0000000..3b7eb0c
--- /dev/null
+++ b/jenkins/client/credential/gerrit.yml
@@ -0,0 +1,7 @@
+parameters:
+  jenkins:
+    client:
+      credential:
+        gerrit:
+          username: admin
+          key: ${_param:gerrit_admin_private_key}
diff --git a/jenkins/client/credential/salt.yml b/jenkins/client/credential/salt.yml
new file mode 100644
index 0000000..5285c77
--- /dev/null
+++ b/jenkins/client/credential/salt.yml
@@ -0,0 +1,7 @@
+parameters:
+  jenkins:
+    client:
+      credential:
+        salt:
+          username: salt
+          password: ${_param:salt_api_password}
diff --git a/jenkins/client/init.yml b/jenkins/client/init.yml
new file mode 100644
index 0000000..36da8b6
--- /dev/null
+++ b/jenkins/client/init.yml
@@ -0,0 +1,12 @@
+classes:
+  - service.jenkins.support
+  - service.jenkins.client
+parameters:
+  jenkins:
+    client:
+      master:
+        host: ${_param:cluster_vip_address}
+        port: 8081
+        # When Jenkins auth is enabled
+        #user: admin
+        #password: dummy
diff --git a/jenkins/client/single.yml b/jenkins/client/single.yml
deleted file mode 100644
index 21d0cb2..0000000
--- a/jenkins/client/single.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-parameters:
-  jenkins:
-    client:
-      enabled: True
\ No newline at end of file
diff --git a/jenkins/master/config.yml b/jenkins/master/config.yml
new file mode 100644
index 0000000..eb7e112
--- /dev/null
+++ b/jenkins/master/config.yml
@@ -0,0 +1,71 @@
+parameters:
+  linux:
+    system:
+      config:
+        jenkins_master:
+          grains:
+            fqdn: dummy
+          pillar:
+            jenkins:
+              master:
+                home: /srv/volumes/jenkins
+                approved_scripts:
+                  - field java.lang.String value
+                  - field java.util.ArrayList size
+                  - method com.cloudbees.jenkins.plugins.sshcredentials.SSHUserPrivateKey getPrivateKey
+                  - method com.cloudbees.plugins.credentials.common.IdCredentials getId
+                  - method com.cloudbees.plugins.credentials.common.PasswordCredentials getPassword
+                  - method com.cloudbees.plugins.credentials.common.UsernameCredentials getUsername
+                  - method groovy.json.JsonBuilder toPrettyString
+                  - method groovy.json.JsonSlurperClassic parseText java.lang.String
+                  - method groovy.lang.GString getBytes
+                  - method groovy.lang.GroovyObject getProperty java.lang.String
+                  - method hudson.model.Run getEnvironment
+                  - method java.io.File getAbsolutePath
+                  - method java.io.File getName
+                  - method java.io.File getParent
+                  - method java.io.Writer write java.lang.String
+                  - method java.lang.AutoCloseable close
+                  - method java.lang.Class isInstance java.lang.Object
+                  - method java.lang.Iterable iterator
+                  - method java.net.HttpURLConnection getResponseCode
+                  - method java.net.HttpURLConnection setRequestMethod java.lang.String
+                  - method java.net.URI getHost
+                  - method java.net.URI getPort
+                  - method java.net.URL openConnection
+                  - method java.net.URLConnection getHeaderField java.lang.String
+                  - method java.net.URLConnection getInputStream
+                  - method java.net.URLConnection getOutputStream
+                  - method java.net.URLConnection setDoOutput boolean
+                  - method java.net.URLConnection setRequestProperty java.lang.String java.lang.String
+                  - method java.util.LinkedHashMap$LinkedHashIterator hasNext
+                  - method java.util.Map size
+                  - method org.jenkinsci.plugins.workflow.job.WorkflowRun doStop
+                  - method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper build
+                  - new groovy.json.JsonBuilder java.lang.Object
+                  - new groovy.json.JsonSlurperClassic
+                  - new java.io.File java.lang.String
+                  - new java.io.OutputStreamWriter java.io.OutputStream
+                  - new java.lang.Exception java.lang.String
+                  - new java.lang.InterruptedException
+                  - new java.net.URI java.lang.String
+                  - new java.util.Date
+                  - staticField groovy.io.FileType FILES
+                  - staticMethod com.cloudbees.plugins.credentials.CredentialsProvider lookupCredentials java.lang.Class hudson.model.ItemGroup
+                  - staticMethod java.lang.System getenv java.lang.String
+                  - staticMethod jenkins.model.Jenkins getInstance
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods collect java.util.Map groovy.lang.Closure
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods eachFile java.io.File groovy.io.FileType groovy.lang.Closure
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods get java.util.Map java.lang.Object java.lang.Object
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Iterable int
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.String int
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getBytes java.io.File
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getText java.io.InputStream
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods hasProperty java.lang.Object java.lang.String
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object[]
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Iterable
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Object
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.util.Collection
+                  - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
+                  - staticMethod org.codehaus.groovy.runtime.EncodingGroovyMethods encodeBase64 byte[]
diff --git a/jenkins/master/single.yml b/jenkins/master/single.yml
deleted file mode 100644
index ceb6766..0000000
--- a/jenkins/master/single.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-classes:
-- service.git.client
-- service.java.environment
-- service.jenkins.master.single
-parameters:
-  _param:
-    java_environment_platform: openjdk
-    java_environment_version: '8'
-  jenkins:
-    master:
-      enabled: true
-      sudo: false
-      mode: "NORMAL"
-      update_site_url: 'http://updates.jenkins-ci.org/experimental/update-center.json'
-      views:
-      - name: "Build"
-        regex: "build-.*"
-      admin:
-        email: autobuild@domain.com
-      http:
-        network: any
-        port: 8080
-        protocol: http
-      plugins:
-      - name: extended-choice-parameter
-      - name: rebuild
-      - name: test-stability
-      - name: build-blocker-plugin
-      - name: heavy-job
-      - name: workflow-aggregator
-      - name: git
-      - name: metadata
-      - name: envinject
-      - name: ansicolor
-      - name: greenballs
-      - name: gitlab-hook
-      - name: copyartifact
-      - name: ws-cleanup
-      user:
-        admin:
-          api_token: ${_param:jenkins_admin_token}
-          password: ${_param:jenkins_admin_password}
-          password_hash: ${_param:jenkins_admin_password_hash}
-          email: root@domain.com
diff --git a/jenkins/slave.yml b/jenkins/slave.yml
new file mode 100644
index 0000000..42f3ca0
--- /dev/null
+++ b/jenkins/slave.yml
@@ -0,0 +1,35 @@
+applications:
+  - jenkins
+classes:
+  - service.java.environment
+  - system.docker.host
+parameters:
+  _param:
+    java_environment_version: "8"
+    java_environment_platform: openjdk
+  java:
+    environment:
+      headless: true
+  jenkins:
+    slave:
+      enabled: true
+      pkgs: false
+      sudo: false
+      scripts: []
+      master:
+        host: ${_param:control_vip_address}
+        port: 8081
+        protocol: http
+#      user:
+#        name: admin
+#        password: ${_param:jenkins_admin_password}
+  linux:
+    system:
+      user:
+        jenkins:
+          enabled: true
+          name: jenkins
+          home: /var/lib/jenkins
+          sudo: false
+          groups:
+            - docker
diff --git a/jenkins/slave/single.yml b/jenkins/slave/single.yml
deleted file mode 100644
index 14540a5..0000000
--- a/jenkins/slave/single.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-classes:
-- service.jenkins.slave.single
-- service.java.environment
-- service.git.client
-parameters:
-  _param:
-    java_environment_version: "8"
-    java_environment_platform: openjdk
-  linux:
-    system:
-      package:
-        python-dev:
-          version: latest
-        build-essential:
-          version: latest
-      user:
-        jenkins:
-          enabled: true
-          name: jenkins
-          home: /var/lib/jenkins
-          sudo: false
-  java:
-    environment:
-      headless: true
-  jenkins:
-    slave:
-      enabled: true
-      pkgs: false
-      sudo: false
-      scripts: []
-      master:
-        host: ${_param:jenkins_slave_master}
-        port: 8080
-        protocol: http
-      user:
-        name: admin
-        password: ${_param:jenkins_admin_password}
diff --git a/keepalived/cluster/instance/cicd_control_vip.yml b/keepalived/cluster/instance/cicd_control_vip.yml
new file mode 100644
index 0000000..ab7f413
--- /dev/null
+++ b/keepalived/cluster/instance/cicd_control_vip.yml
@@ -0,0 +1,15 @@
+applications:
+  - keepalived
+classes:
+  - service.keepalived.support
+parameters:
+  keepalived:
+    cluster:
+      enabled: true
+      instance:
+        cicd_control_vip:
+          address: ${_param:cluster_vip_address}
+          password: ${_param:keepalived_vip_password}
+          interface: ${_param:keepalived_vip_interface}
+          virtual_router_id: ${_param:keepalived_vip_virtual_router_id}
+          priority: ${_param:keepalived_vip_priority}
diff --git a/salt/master/git.yml b/salt/master/git.yml
index d9bbd80..bcde77c 100644
--- a/salt/master/git.yml
+++ b/salt/master/git.yml
@@ -1,10 +1,11 @@
 classes:
 - system.salt.master.single
+- system.salt.master.formula.git.ccp
+- system.salt.master.formula.git.foundation
+- system.salt.master.formula.git.kubernetes
 - system.salt.master.formula.git.openstack
 - system.salt.master.formula.git.saltstack
 - system.salt.master.formula.git.stacklight
-- system.salt.master.formula.git.kubernetes
-- system.salt.master.formula.git.ccp
 parameters:
   _param:
     salt_master_environment_repository: "https://github.com/salt-formulas"
diff --git a/salt/master/pkg.yml b/salt/master/pkg.yml
index 72325c9..7686f07 100644
--- a/salt/master/pkg.yml
+++ b/salt/master/pkg.yml
@@ -1,8 +1,9 @@
 classes:
 - system.salt.master.single
+- system.salt.master.formula.pkg.ccp
+- system.salt.master.formula.pkg.foundation
+- system.salt.master.formula.pkg.kubernetes
 - system.salt.master.formula.pkg.openstack
 - system.salt.master.formula.pkg.saltstack
 - system.salt.master.formula.pkg.stacklight
-- system.salt.master.formula.pkg.kubernetes
-- system.salt.master.formula.pkg.ccp
 - system.linux.system.repo.tcp_salt
diff --git a/salt/minion/ca/salt_master.yml b/salt/minion/ca/salt_master.yml
index 30c9d9b..3e42db5 100644
--- a/salt/minion/ca/salt_master.yml
+++ b/salt/minion/ca/salt_master.yml
@@ -1,7 +1,7 @@
 parameters:
   _param:
     salt_minion_ca_common_name: Salt Master CA
-    salt_minion_ca_country: cz 
+    salt_minion_ca_country: cz
     salt_minion_ca_locality: Prague
     salt_minion_ca_organization: Mirantis
     salt_minion_ca_days_valid_authority: 3650