Ability to set lock_path

PROD-34037

Change-Id: Ia37d5b70ea1c8626f170b4b7f56a76da493c927d
diff --git a/README.rst b/README.rst
index 261f234..3261f4e 100644
--- a/README.rst
+++ b/README.rst
@@ -31,6 +31,8 @@
         enable_force_upload: true
         availability_zone_fallback: True
         image_conversion_dir: /var/tmp/cinder/conversion
+        concurrency:
+          lock_path: '/var/lock/cinder'
         database:
           engine: mysql
           host: 127.0.0.1
@@ -88,6 +90,8 @@
         enable_force_upload: true
         my_ip: 192.168.0.254
         image_conversion_dir: /var/tmp/cinder/conversion
+        concurrency:
+          lock_path: '/var/lock/cinder'
         database:
           engine: mysql
           host: 127.0.0.1
diff --git a/cinder/controller.sls b/cinder/controller.sls
index cc7091f..01b73df 100644
--- a/cinder/controller.sls
+++ b/cinder/controller.sls
@@ -137,6 +137,20 @@
       - service: cinder_controller_services
       - service: cinder_api_service
 
+{%- if controller.get('concurrency', {}).lock_path is defined %}
+cinder_controller_lock_path_{{ controller.concurrency.lock_path }}:
+  file.directory:
+  - name: {{ controller.concurrency.lock_path }}
+  - user: cinder
+  - group: cinder
+  - mode: 750
+  - makedirs: True
+  - require:
+    - pkg: cinder_controller_packages
+  - require_in:
+    - service: cinder_controller_services
+{%- endif %}
+
 {% for service_name in cinder_log_services %}
 {{ service_name }}_logging_conf:
   file.managed:
diff --git a/cinder/files/pike/cinder.conf.controller.Debian b/cinder/files/pike/cinder.conf.controller.Debian
index a897e4e..4cd39ae 100644
--- a/cinder/files/pike/cinder.conf.controller.Debian
+++ b/cinder/files/pike/cinder.conf.controller.Debian
@@ -113,7 +113,6 @@
 
 use_syslog=false
 verbose=True
-lock_path=/var/lock/cinder
 
 {%- if controller.query_volume_filters is defined %}
 query_volume_filters = {{ controller.query_volume_filters|join(",") }}
@@ -172,7 +171,7 @@
 
 [oslo_concurrency]
 
-lock_path=/var/lock/cinder
+lock_path = {{ controller.get('concurrency', {}).get('lock_path', '/var/lock/cinder') }}
 
 [oslo_middleware]
 
diff --git a/cinder/files/pike/cinder.conf.volume.Debian b/cinder/files/pike/cinder.conf.volume.Debian
index b91870d..a06fd2e 100644
--- a/cinder/files/pike/cinder.conf.volume.Debian
+++ b/cinder/files/pike/cinder.conf.volume.Debian
@@ -155,7 +155,7 @@
 
 [oslo_concurrency]
 
-lock_path=/var/lock/cinder
+lock_path = {{ volume.get('concurrency', {}).get('lock_path', '/var/lock/cinder') }}
 
 [oslo_middleware]
 
diff --git a/cinder/upgrade/render_config.sls b/cinder/upgrade/render_config.sls
index bf603f5..a177675 100644
--- a/cinder/upgrade/render_config.sls
+++ b/cinder/upgrade/render_config.sls
@@ -12,3 +12,13 @@
   file.managed:
   - source: salt://cinder/files/{{ _data.version }}/cinder.conf.{{ type }}.{{ grains.os_family }}
   - template: jinja
+
+{%- if _data.get('concurrency', {}).lock_path is defined %}
+cinder_upgrade_{{ type }}_lock_path_{{ _data.concurrency.lock_path }}:
+  file.directory:
+  - name: {{ _data.concurrency.lock_path }}
+  - user: cinder
+  - group: cinder
+  - mode: 750
+  - makedirs: True
+{%- endif %}
diff --git a/cinder/volume.sls b/cinder/volume.sls
index 1f72adf..e7210f6 100644
--- a/cinder/volume.sls
+++ b/cinder/volume.sls
@@ -18,15 +18,19 @@
     - sls: cinder._ssl.volume_mysql
     - sls: cinder._ssl.rabbitmq
 
-/var/lock/cinder:
+{%- if volume.get('concurrency', {}).lock_path is defined %}
+cinder_volumer_lock_path_{{ volume.concurrency.lock_path }}:
   file.directory:
-  - mode: 755
+  - name: {{ volume.concurrency.lock_path }}
   - user: cinder
   - group: cinder
+  - mode: 750
+  - makedirs: True
   - require:
     - pkg: cinder_volume_packages
   - require_in:
     - service: cinder_volume_services
+{%- endif %}
 
 {%- if volume.message_queue.get('ssl',{}).get('enabled', False) %}
 rabbitmq_ca_cinder_volume:
diff --git a/metadata/service/control/cluster.yml b/metadata/service/control/cluster.yml
index 5e3b0a1..1c3bcf5 100644
--- a/metadata/service/control/cluster.yml
+++ b/metadata/service/control/cluster.yml
@@ -12,6 +12,8 @@
     controller:
       enabled: true
       version: ${_param:cinder_version}
+      concurrency:
+        lock_path: '/var/lock/cinder'
       osapi:
         host: ${_param:cluster_local_address}
       database:
diff --git a/metadata/service/control/cluster_control.yml b/metadata/service/control/cluster_control.yml
index 5e3b0a1..1c3bcf5 100644
--- a/metadata/service/control/cluster_control.yml
+++ b/metadata/service/control/cluster_control.yml
@@ -12,6 +12,8 @@
     controller:
       enabled: true
       version: ${_param:cinder_version}
+      concurrency:
+        lock_path: '/var/lock/cinder'
       osapi:
         host: ${_param:cluster_local_address}
       database:
diff --git a/metadata/service/control/single.yml b/metadata/service/control/single.yml
index 3c73957..0e87b00 100644
--- a/metadata/service/control/single.yml
+++ b/metadata/service/control/single.yml
@@ -12,6 +12,8 @@
     controller:
       enabled: true
       version: ${_param:cinder_version}
+      concurrency:
+        lock_path: '/var/lock/cinder'
       osapi:
         host: ${_param:single_address}
       database:
diff --git a/metadata/service/volume/local.yml b/metadata/service/volume/local.yml
index bece0dc..416e366 100644
--- a/metadata/service/volume/local.yml
+++ b/metadata/service/volume/local.yml
@@ -12,6 +12,8 @@
     volume:
       enabled: true
       version: ${_param:cinder_version}
+      concurrency:
+        lock_path: '/var/lock/cinder'
       osapi:
         host: ${_param:cluster_local_address}
       database:
diff --git a/metadata/service/volume/single.yml b/metadata/service/volume/single.yml
index a709f0c..145ff93 100644
--- a/metadata/service/volume/single.yml
+++ b/metadata/service/volume/single.yml
@@ -12,6 +12,8 @@
     volume:
       enabled: true
       version: ${_param:cinder_version}
+      concurrency:
+        lock_path: '/var/lock/cinder'
       osapi:
         host: ${_param:cluster_local_address}
       database: