Merge "Add samba/nfs packages to lvm manila backend"
diff --git a/docker/swarm/network/kqueen_backend.yml b/docker/swarm/network/kqueen_backend.yml
new file mode 100644
index 0000000..b246f86
--- /dev/null
+++ b/docker/swarm/network/kqueen_backend.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    docker_kqueen_network_subnet: 10.60.0.0/24
+  docker:
+    client:
+      network:
+        kqueen_backend:
+          subnet: ${_param:docker_kqueen_network_subnet}
+          driver: overlay
+          attachable: true
diff --git a/docker/swarm/stack/kqueen.yml b/docker/swarm/stack/kqueen.yml
new file mode 100644
index 0000000..4708725
--- /dev/null
+++ b/docker/swarm/stack/kqueen.yml
@@ -0,0 +1,92 @@
+parameters:
+  _param:
+    docker_kqueen_api_replicas: 1
+    docker_image_kqueen_api: kqueen/api:v0.18
+    docker_image_kqueen_ui: kqueen/ui:v0.8
+    kqueen_api_bind_host: kqueen-api
+    kqueen_api_bind_port: ${_param:haproxy_kqueen_api_bind_port}
+    kqueen_api_db_host: etcd
+    kqueen_api_debug: True
+    kqueen_api_prometheus_whitelist: '172.16.10.0/24' ##REcheck with network
+    docker_kqueen_ui_replicas: 1
+    kqueen_ui_bind_port: ${_param:haproxy_kqueen_ui_bind_port}
+    kqueen_ui_bind_host: kqueen-ui
+    kqueen_ui_mail_host: mail
+    kqueen_ui_mail_port: 10025
+    kqueen_ui_debug: True
+    kqueen_ui_enable_public_registration: False
+    kqueen_credentials:
+      kqueen_api_secret_key: 'pasteyoursecret'
+      kqueen_ui_secret_key: 'pasteyoursecret'
+      kqueen_api_bootstrap_admin: True
+      kqueen_api_admin_username: admin
+      kqueen_api_admin_password: default
+      kqueen_api_admin_organization: MirantisCloudPlatform
+      kqueen_api_admin_namespace: mcp
+  docker:
+    client:
+      stack:
+        kqueen:
+          service:
+            kqueen-api:
+              image: ${_param:docker_image_kqueen_api}
+              environment:
+                KQUEEN_DEBUG: ${_param:kqueen_api_debug}
+                KQUEEN_CONFIG_FILE: config/prod.py
+                KQUEEN_ETCD_HOST: ${_param:kqueen_api_db_host}
+                KQUEEN_PROMETHEUS_WHITELIST: ${_param:kqueen_api_prometheus_whitelist}
+                KQUEEN_SECRET_KEY: ${_param:kqueen_credentials:kqueen_api_secret_key}
+                BOOTSTRAP_ADMIN: ${_param:kqueen_credentials:kqueen_api_bootstrap_admin}
+                BOOTSTRAP_ADMIN_USERNAME: ${_param:kqueen_credentials:kqueen_api_admin_username}
+                BOOTSTRAP_ADMIN_PASSWORD: ${_param:kqueen_credentials:kqueen_api_admin_password}
+                BOOTSTRAP_ADMIN_ORGANIZATION: ${_param:kqueen_credentials:kqueen_api_admin_organization}
+                BOOTSTRAP_ADMIN_NAMESPACE: ${_param:kqueen_credentials:kqueen_api_admin_namespace}
+              deploy:
+                replicas: ${_param:docker_kqueen_api_replicas}
+                restart_policy:
+                  condition: any
+              ports:
+                - ${_param:haproxy_kqueen_api_exposed_port}:${_param:haproxy_kqueen_api_bind_port}
+              volumes:
+                - /srv/volumes/kqueen/logs/:/var/log/kqueen-api
+            kqueen-ui:
+              image: ${_param:docker_image_kqueen_ui}
+              environment:
+                KQUEENUI_PREFERRED_URL_SCHEME: https
+                KQUEENUI_DEBUG: ${_param:kqueen_ui_debug}
+                KQUEEN_UI_CONFIG_FILE: config/prod.py
+                KQUEENUI_SECRET_KEY: ${_param:kqueen_credentials:kqueen_ui_secret_key}
+                KQUEENUI_KQUEEN_API_URL: http://${_param:kqueen_api_bind_host}:${_param:kqueen_api_bind_port}/api/v1/
+                KQUEENUI_KQUEEN_AUTH_URL: http://${_param:kqueen_api_bind_host}:${_param:kqueen_api_bind_port}/api/v1/auth
+                KQUEENUI_KQUEEN_SERVICE_USER_USERNAME: ${_param:kqueen_credentials:kqueen_api_admin_username}
+                KQUEENUI_KQUEEN_SERVICE_USER_PASSWORD: ${_param:kqueen_credentials:kqueen_api_admin_password}
+                KQUEENUI_MAIL_SERVER: ${_param:kqueen_ui_mail_host}
+                KQUEENUI_MAIL_PORT: ${_param:kqueen_ui_mail_port}
+                KQUEENUI_ENABLE_PUBLIC_REGISTRATION: ${_param:kqueen_ui_enable_public_registration}
+                STATIC_DIR: /mnt/static/
+              deploy:
+                replicas: ${_param:docker_kqueen_ui_replicas}
+                restart_policy:
+                  condition: any
+              ports:
+                - ${_param:haproxy_kqueen_ui_exposed_port}:${_param:haproxy_kqueen_ui_bind_port}
+              volumes:
+                - /srv/volumes/kqueen/logs/:/var/log/kqueen-ui
+            etcd:
+              image: quay.io/coreos/etcd:latest
+              environment:
+                ETCD_NAME: 0
+                ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd:2380
+                ETCD_INITIAL_CLUSTER_STATE: new
+                ETCD_INITIAL_CLUSTER_TOKEN: etcd-cluster-1
+                ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:${_param:haproxy_etcd_bind_port}
+                ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
+                ETCD_ADVERTISE_CLIENT_URLS: http://127.0.0.1:4001,http://etcd:${_param:haproxy_etcd_bind_port}
+              ports:
+                - ${_param:haproxy_etcd_exposed_port}:${_param:haproxy_etcd_bind_port}
+              volumes:
+                - /srv/volumes/etcd:/0.etcd/
+          network:
+            default:
+              external:
+                name: kqueen_backend
diff --git a/docker/swarm/stack/kqueen_mail.yml b/docker/swarm/stack/kqueen_mail.yml
new file mode 100644
index 0000000..dd03688
--- /dev/null
+++ b/docker/swarm/stack/kqueen_mail.yml
@@ -0,0 +1,16 @@
+parameters:
+  _param:
+    mail_server_hostname: mail
+  docker:
+    client:
+      stack:
+        kqueen:
+          service:
+            mail:
+              image: modularitycontainers/postfix
+              environment:
+                MYHOSTNAME: ${_param:mail_server_hostname}
+          network:
+            default:
+              external:
+                name: kqueen_backend
diff --git a/glusterfs/client/volume/etcd.yml b/glusterfs/client/volume/etcd.yml
new file mode 100644
index 0000000..49a173f
--- /dev/null
+++ b/glusterfs/client/volume/etcd.yml
@@ -0,0 +1,15 @@
+parameters:
+  _param:
+    etcd_glusterfs_service_host: ${_param:glusterfs_service_host}
+    glusterfs_node01_address: ${_param:cluster_node01_address}
+    glusterfs_node02_address: ${_param:cluster_node02_address}
+    glusterfs_node03_address: ${_param:cluster_node03_address}
+  glusterfs:
+    client:
+      volumes:
+        etcd:
+          path: /srv/volumes/etcd
+          server: ${_param:etcd_glusterfs_service_host}
+          opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
+          user: 1000
+          group: 1000
diff --git a/glusterfs/client/volume/kqueen.yml b/glusterfs/client/volume/kqueen.yml
new file mode 100644
index 0000000..4417e11
--- /dev/null
+++ b/glusterfs/client/volume/kqueen.yml
@@ -0,0 +1,15 @@
+parameters:
+  _param:
+    kqueen_glusterfs_service_host: ${_param:glusterfs_service_host}
+    glusterfs_node01_address: ${_param:cluster_node01_address}
+    glusterfs_node02_address: ${_param:cluster_node02_address}
+    glusterfs_node03_address: ${_param:cluster_node03_address}
+  glusterfs:
+    client:
+      volumes:
+        kqueen:
+          path: /srv/volumes/kqueen
+          server: ${_param:kqueen_glusterfs_service_host}
+          opts: "defaults,backup-volfile-servers=${_param:glusterfs_node01_address}:${_param:glusterfs_node02_address}:${_param:glusterfs_node03_address}"
+          user: 1000
+          group: 1000
diff --git a/glusterfs/server/volume/etcd.yml b/glusterfs/server/volume/etcd.yml
new file mode 100644
index 0000000..874119e
--- /dev/null
+++ b/glusterfs/server/volume/etcd.yml
@@ -0,0 +1,18 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        etcd:
+          storage: /srv/glusterfs/etcd
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/etcd
+            - ${_param:cluster_node02_address}:/srv/glusterfs/etcd
+            - ${_param:cluster_node03_address}:/srv/glusterfs/etcd
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
+            cluster.favorite-child-policy: mtime
diff --git a/glusterfs/server/volume/kqueen.yml b/glusterfs/server/volume/kqueen.yml
new file mode 100644
index 0000000..0d09c51
--- /dev/null
+++ b/glusterfs/server/volume/kqueen.yml
@@ -0,0 +1,18 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        kqueen:
+          storage: /srv/glusterfs/kqueen
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/kqueen
+            - ${_param:cluster_node02_address}:/srv/glusterfs/kqueen
+            - ${_param:cluster_node03_address}:/srv/glusterfs/kqueen
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
+            cluster.favorite-child-policy: mtime
diff --git a/haproxy/proxy/listen/cicd/etcd.yml b/haproxy/proxy/listen/cicd/etcd.yml
new file mode 100644
index 0000000..27d8540
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/etcd.yml
@@ -0,0 +1,37 @@
+parameters:
+  _param:
+    haproxy_etcd_bind_host: ${_param:haproxy_bind_address}
+    haproxy_etcd_bind_port: 4001
+    haproxy_etcd_exposed_port: 14001
+    haproxy_etcd_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      timeout:
+        queue: '8h'
+        client: '8h'
+        server: '8h'
+        check: '10s'
+      listen:
+        etcd:
+          mode: http
+          balance: source
+          options:
+          - tcp-check
+          binds:
+            - address: ${_param:haproxy_etcd_bind_host}
+              port: ${_param:haproxy_etcd_bind_port}
+              ssl: ${_param:haproxy_etcd_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_etcd_exposed_port}
+              params: check port ${_param:haproxy_etcd_exposed_port}
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_etcd_exposed_port}
+              params: backup check port ${_param:haproxy_etcd_exposed_port}
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_etcd_exposed_port}
+              params: backup check port ${_param:haproxy_etcd_exposed_port}
diff --git a/haproxy/proxy/listen/cicd/kqueen.yml b/haproxy/proxy/listen/cicd/kqueen.yml
new file mode 100644
index 0000000..52b02d0
--- /dev/null
+++ b/haproxy/proxy/listen/cicd/kqueen.yml
@@ -0,0 +1,76 @@
+parameters:
+  _param:
+    haproxy_kqueen_api_bind_host: ${_param:haproxy_bind_address}
+    haproxy_kqueen_api_bind_port: 5000
+    haproxy_kqueen_api_exposed_port: 15000
+    haproxy_kqueen_ui_bind_host: ${_param:haproxy_bind_address}
+    haproxy_kqueen_ui_bind_port: 5080
+    haproxy_kqueen_ui_exposed_port: 15080
+    haproxy_kqueen_api_ssl:
+      enabled: false
+    haproxy_kqueen_ui_ssl:
+      enabled: false
+  haproxy:
+    proxy:
+      listen:
+        kqueen_api:
+          mode: http
+          options:
+            - forwardfor
+            - httpchk GET /api/v1/health
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          sticks:
+          - http-check expect string 'Gutten tag!'
+          binds:
+            - address: ${_param:haproxy_kqueen_api_bind_host}
+              port: ${_param:haproxy_kqueen_api_bind_port}
+              ssl: ${_param:haproxy_kqueen_api_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_kqueen_api_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_kqueen_api_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_kqueen_api_exposed_port}
+              params: backup check
+        kqueen_ui:
+          mode: http
+          balance: source
+          options:
+            - forwardfor
+            - httpchk GET /ui/login
+            - httpclose
+            - httplog
+          balance: source
+          http_request:
+            - action: "add-header X-Forwarded-Proto https"
+              condition: "if { ssl_fc }"
+          sticks:
+          - http-check expect string 'KQueen'
+          binds:
+            - address: ${_param:haproxy_kqueen_ui_bind_host}
+              port: ${_param:haproxy_kqueen_ui_bind_port}
+              ssl: ${_param:haproxy_kqueen_ui_ssl}
+          servers:
+            - name: ${_param:cluster_node01_name}
+              host: ${_param:cluster_node01_address}
+              port: ${_param:haproxy_kqueen_ui_exposed_port}
+              params: check
+            - name: ${_param:cluster_node02_name}
+              host: ${_param:cluster_node02_address}
+              port: ${_param:haproxy_kqueen_ui_exposed_port}
+              params: backup check
+            - name: ${_param:cluster_node03_name}
+              host: ${_param:cluster_node03_address}
+              port: ${_param:haproxy_kqueen_ui_exposed_port}
+              params: backup check
diff --git a/jenkins/client/job/git-mirrors/2way.yml b/jenkins/client/job/git-mirrors/2way.yml
index 4b4d0a3..ba17f9f 100644
--- a/jenkins/client/job/git-mirrors/2way.yml
+++ b/jenkins/client/job/git-mirrors/2way.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     jenkins_pollscm_spec: "H/60 * * * *"
+    job_description: <br>Syncronizes code projects with GitHub.<br>
   jenkins:
     client:
       job_template:
@@ -20,6 +21,7 @@
               target: Mirantis/mcp-offline-model
               branches: "master"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 10
diff --git a/jenkins/client/job/oscore/init.yml b/jenkins/client/job/oscore/init.yml
index 4666ddd..4df13c4 100644
--- a/jenkins/client/job/oscore/init.yml
+++ b/jenkins/client/job/oscore/init.yml
@@ -4,6 +4,8 @@
   - system.jenkins.client.job.oscore.qa
   - system.jenkins.client.job.oscore.salt_virtual_models
 parameters:
+  _param:
+     job_description: <br>Deploy and test OpenStack.<br>
   jenkins:
     client:
       view:
diff --git a/jenkins/client/job/oscore/qa.yml b/jenkins/client/job/oscore/qa.yml
index b7319b4..c8908e7 100644
--- a/jenkins/client/job/oscore/qa.yml
+++ b/jenkins/client/job/oscore/qa.yml
@@ -5,6 +5,7 @@
         oscore-build-docker-image:
           name: "{{job_prefix}}-{{oscore-qa-project}}-build-docker-image"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 25
@@ -49,6 +50,7 @@
         oscore-docker-image-systest-template:
           name: "{{job_prefix}}-{{oscore-qa-project}}-image-systest-{{model}}"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
diff --git a/jenkins/client/job/oscore/salt_virtual_models.yml b/jenkins/client/job/oscore/salt_virtual_models.yml
index f8ee2f3..82b51ee 100644
--- a/jenkins/client/job/oscore/salt_virtual_models.yml
+++ b/jenkins/client/job/oscore/salt_virtual_models.yml
@@ -4,6 +4,7 @@
       job:
         oscore-test_virtual_model:
           concurrent: true
+          description: ${_param:job_description}
           discard:
             build:
               keep_num: 30
@@ -96,6 +97,7 @@
           type: workflow-scm
         oscore-test_virtual_models:
           concurrent: true
+          description: ${_param:job_description}
           discard:
             build:
               keep_num: 30
diff --git a/jenkins/client/job/oscore/security_tests.yml b/jenkins/client/job/oscore/security_tests.yml
index 36b5441..d564574 100644
--- a/jenkins/client/job/oscore/security_tests.yml
+++ b/jenkins/client/job/oscore/security_tests.yml
@@ -5,6 +5,7 @@
         bandit-scanner-template-downstream:
           name: "{{job_prefix}}-bandit-downstream-{{project}}"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -94,6 +95,7 @@
         bandit-scanner-template-upstream:
           name: "{{job_prefix}}-bandit-upstream-{{project}}"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
diff --git a/jenkins/client/job/oscore/tests.yml b/jenkins/client/job/oscore/tests.yml
index 377ae0d..122f793 100644
--- a/jenkins/client/job/oscore/tests.yml
+++ b/jenkins/client/job/oscore/tests.yml
@@ -5,6 +5,7 @@
         test-openstack-component-formula:
           name: "{{job_prefix}}-formula-systest-{{model}}-{{openstack_version}}"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -146,6 +147,7 @@
         test-openstack-component-periodic:
           name: "{{job_prefix}}-{{milestone}}-{{model}}-{{openstack_version}}-{{formula_pkg_revision}}"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -284,6 +286,7 @@
         test-runner-template:
           name: "{{job_prefix}}-{{test_type}}-runner"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -378,6 +381,7 @@
         results-checker-template:
           name: "{{job_prefix}}-{{test_type}}-results-checker"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -450,6 +454,7 @@
         deploy-kvm-virtual-template:
           name: "{{job_prefix}}-deploy-kvm-VMs"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -531,6 +536,7 @@
         oscore-oscc-ci-template:
           name: "{{job_prefix}}-oscc-ci"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -595,6 +601,7 @@
         build-salt-formula-refspec-template:
           name: "{{job_prefix}}-build-salt-formula-refspec"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -664,6 +671,7 @@
         test-salt-formula-refspec-template:
           name: "{{job_prefix}}-test-salt-formula-refspec"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
@@ -756,6 +764,7 @@
         test-deploy-virtual-model-change-template:
           name: "{{job_prefix}}-deploy-virtual-model-change-{{job_suffix}}"
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 30
diff --git a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
index a23f4d0..cccd01a 100644
--- a/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
+++ b/jenkins/client/job/salt-formulas/git-mirrors/2way.yml
@@ -1,6 +1,7 @@
 parameters:
   _param:
     jenkins_pollscm_spec: "H/60 * * * *"
+    job_description: <br>Syncronizes code projects with GitHub.<br>
   jenkins:
     client:
       job_template:
@@ -368,6 +369,7 @@
               branches: ${_param:salt_formulas_branches}
               notification_recipients: ${_param:salt_formulas_notification_recipients}
           template:
+            description: ${_param:job_description}
             discard:
               build:
                 keep_num: 10
@@ -413,6 +415,7 @@
                 default: "{{notification_recipients}}"
       job:
         git-mirror-2way-salt-formulas-scripts:
+          description: ${_param:job_description}
           discard:
             build:
               keep_num: 10
@@ -446,6 +449,7 @@
               type: string
               default: "master"
         git-mirror-2way-salt-formulas-cookiecutter:
+          description: ${_param:job_description}
           discard:
             build:
               keep_num: 10