aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-08-12 18:06:28 +0000
committerGerrit Code Review <review@openstack.org>2015-08-12 18:06:28 +0000
commit59ab99ea1f0f0e6c715d76a91350f811edf128fd (patch)
tree7faafa809d0fca06ac967daf84ef1c0c8739bbcd
parent7c37d309f94c54cdc1d7904ab28b1f18a32678c0 (diff)
parent18f0e536f696882b4285fc3b9e9a42a8eccd5b8e (diff)
downloadkolla-59ab99ea1f0f0e6c715d76a91350f811edf128fd.tar.gz
kolla-59ab99ea1f0f0e6c715d76a91350f811edf128fd.zip
Merge "Add ansible support for Cinder"
-rw-r--r--ansible/inventory/all-in-one18
-rw-r--r--ansible/inventory/multinode18
-rw-r--r--ansible/roles/cinder/defaults/main.yml44
-rw-r--r--ansible/roles/cinder/tasks/bootstrap.yml80
-rw-r--r--ansible/roles/cinder/tasks/config.yml80
-rw-r--r--ansible/roles/cinder/tasks/main.yml8
-rw-r--r--ansible/roles/cinder/tasks/register.yml37
-rw-r--r--ansible/roles/cinder/tasks/start.yml75
-rw-r--r--ansible/roles/cinder/templates/cinder.conf.j255
-rw-r--r--ansible/roles/haproxy/templates/haproxy.cfg.j26
-rwxr-xr-xansible/site.yml4
-rw-r--r--etc/kolla/config/cinder.conf0
-rw-r--r--etc/kolla/config/cinder/cinder-api.conf0
-rw-r--r--etc/kolla/config/cinder/cinder-backup.conf0
-rw-r--r--etc/kolla/config/cinder/cinder-scheduler.conf0
-rw-r--r--etc/kolla/config/cinder/cinder-volume.conf0
-rw-r--r--etc/kolla/defaults.yml1
-rw-r--r--etc/kolla/globals.yml7
-rw-r--r--etc/kolla/passwords.yml3
19 files changed, 436 insertions, 0 deletions
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 5661bc9c5..58dc01ea4 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -9,6 +9,8 @@ localhost ansible_connection=local
[compute]
localhost ansible_connection=local
+[storage]
+localhost ansible_connection=local
# You can explicitly specify which hosts run each project by updating the
# groups in the sections below. Common services are grouped together.
@@ -33,6 +35,9 @@ support
[neutron:children]
network
+[cinder:children]
+support
+
# Additional control implemented here. These groups allow you to control which
# services run on which hosts at a per-service level.
@@ -70,3 +75,16 @@ neutron
[neutron-agents:children]
neutron
+
+#Cinder
+[cinder-api:children]
+cinder
+
+[cinder-backup:children]
+storage
+
+[cinder-scheduler:children]
+cinder
+
+[cinder-volume:children]
+storage
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index a939baabc..1d7cb9cc3 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -15,6 +15,8 @@ network01
[compute]
compute01
+[storage]
+storage01
# You can explicitly specify which hosts run each project by updating the
# groups in the sections below. Common services are grouped together.
@@ -39,6 +41,9 @@ support
[neutron:children]
network
+[cinder:children]
+support
+
# Additional control implemented here. These groups allow you to control which
# services run on which hosts at a per-service level.
@@ -76,3 +81,16 @@ neutron
[neutron-agents:children]
neutron
+
+#Cinder
+[cinder-api:children]
+cinder
+
+[cinder-backup:children]
+storage
+
+[cinder-scheduler:children]
+cinder
+
+[cinder-volume:children]
+storage
diff --git a/ansible/roles/cinder/defaults/main.yml b/ansible/roles/cinder/defaults/main.yml
new file mode 100644
index 000000000..6af5f7df8
--- /dev/null
+++ b/ansible/roles/cinder/defaults/main.yml
@@ -0,0 +1,44 @@
+---
+project_name: "cinder"
+
+####################
+# Database
+####################
+cinder_database_name: "cinder"
+cinder_database_user: "cinder"
+cinder_database_address: "{{ kolla_internal_address }}"
+
+
+####################
+# Docker
+####################
+cinder_volume_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-cinder-volume"
+cinder_volume_tag: "{{ openstack_release }}"
+cinder_volume_image_full: "{{ cinder_volume_image }}:{{ cinder_volume_tag }}"
+
+cinder_scheduler_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-cinder-scheduler"
+cinder_scheduler_tag: "{{ openstack_release }}"
+cinder_scheduler_image_full: "{{ cinder_scheduler_image }}:{{ cinder_scheduler_tag }}"
+
+cinder_backup_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-cinder-backup"
+cinder_backup_tag: "{{ openstack_release }}"
+cinder_backup_image_full: "{{ cinder_backup_image }}:{{ cinder_backup_tag }}"
+
+cinder_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-cinder-api"
+cinder_api_tag: "{{ openstack_release }}"
+cinder_api_image_full: "{{ cinder_api_image }}:{{ cinder_api_tag }}"
+
+
+####################
+# Openstack
+####################
+cinder_public_address: "{{ kolla_external_address }}"
+cinder_admin_address: "{{ kolla_internal_address }}"
+cinder_internal_address: "{{ kolla_internal_address }}"
+
+cinder_logging_verbose: "{{ openstack_logging_verbose }}"
+cinder_logging_debug: "{{ openstack_logging_debug }}"
+
+cinder_keystone_user: "cinder"
+
+openstack_cinder_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" \ No newline at end of file
diff --git a/ansible/roles/cinder/tasks/bootstrap.yml b/ansible/roles/cinder/tasks/bootstrap.yml
new file mode 100644
index 000000000..3a6062e9a
--- /dev/null
+++ b/ansible/roles/cinder/tasks/bootstrap.yml
@@ -0,0 +1,80 @@
+---
+- name: Creating Cinder database
+ command: docker exec -t kolla_ansible /usr/bin/ansible localhost
+ -m mysql_db
+ -a "login_host='{{ database_address }}'
+ login_user='{{ database_user }}'
+ login_password='{{ database_password }}'
+ name='{{ cinder_database_name }}'"
+ register: database
+ changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
+ failed_when: database.stdout.split()[2] != 'SUCCESS'
+ run_once: True
+
+- name: Creating Cinder database user and setting permissions
+ command: docker exec -t kolla_ansible /usr/bin/ansible localhost
+ -m mysql_user
+ -a "login_host='{{ database_address }}'
+ login_user='{{ database_user }}'
+ login_password='{{ database_password }}'
+ name='{{ cinder_database_name }}'
+ password='{{ cinder_database_password }}'
+ host='%'
+ priv='{{ cinder_database_name }}.*:ALL'
+ append_privs='yes'"
+ register: database_user
+ changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and (database_user.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
+ failed_when: database_user.stdout.split()[2] != 'SUCCESS'
+ run_once: True
+
+- name: Starting Cinder data container
+ docker:
+ docker_api_version: "{{ docker_api_version }}"
+ net: host
+ pull: "{{ docker_pull_policy }}"
+ restart_policy: "{{ docker_restart_policy }}"
+ restart_policy_retry: "{{ docker_restart_policy_retry }}"
+ state: reloaded
+ registry: "{{ docker_registry }}"
+ username: "{{ docker_registry_username }}"
+ password: "{{ docker_registry_password }}"
+ insecure_registry: "{{ docker_insecure_registry }}"
+ name: cinder_data
+ image: "{{ cinder_api_image_full }}"
+ command: "/bin/sleep infinity"
+ volumes: "/var/lib/cinder/"
+
+- name: Starting Cinder bootstrap container
+ docker:
+ detach: False
+ docker_api_version: "{{ docker_api_version }}"
+ net: host
+ pull: "{{ docker_pull_policy }}"
+ restart_policy: "no"
+ state: reloaded
+ registry: "{{ docker_registry }}"
+ username: "{{ docker_registry_username }}"
+ password: "{{ docker_registry_password }}"
+ insecure_registry: "{{ docker_insecure_registry }}"
+ name: bootstrap_cinder
+ image: "{{ cinder_api_image_full }}"
+ volumes: "{{ node_config_directory }}/cinder/:/opt/kolla/cinder/:ro"
+ volumes_from: cinder_data
+ env:
+ KOLLA_BOOSTRAP:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+ run_once: True
+ when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
+
+# https://github.com/ansible/ansible-modules-core/pull/1031
+
+- name: Waiting for bootstrap container to exit
+ command: docker wait bootstrap_cinder
+ when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
+
+- name: Cleaning up Cinder boostrap container
+ docker:
+ name: bootstrap_cinder
+ image: "{{ cinder_api_image_full }}"
+ state: absent
+ when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
diff --git a/ansible/roles/cinder/tasks/config.yml b/ansible/roles/cinder/tasks/config.yml
new file mode 100644
index 000000000..636f28b57
--- /dev/null
+++ b/ansible/roles/cinder/tasks/config.yml
@@ -0,0 +1,80 @@
+---
+- include: ../../config.yml
+ vars:
+ service_name: "cinder-api"
+ config_source:
+ - "roles/{{ project_name }}/templates/cinder.conf.j2"
+ - "/etc/kolla/config/global.conf"
+ - "/etc/kolla/config/database.conf"
+ - "/etc/kolla/config/messaging.conf"
+ - "/etc/kolla/config/{{ project_name }}.conf"
+ - "/etc/kolla/config/{{ project_name }}/{{ service_name }}.conf"
+ config_template_dest:
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_minimal"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_global"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_database"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_messaging"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_augment"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ service_name }}.conf_augment"
+ config_dest: "{{ node_config_directory }}/{{ service_name }}/cinder.conf"
+ when: inventory_hostname in groups['cinder-api']
+
+- include: ../../config.yml
+ vars:
+ service_name: "cinder-backup"
+ config_source:
+ - "roles/{{ project_name }}/templates/cinder.conf.j2"
+ - "/etc/kolla/config/global.conf"
+ - "/etc/kolla/config/database.conf"
+ - "/etc/kolla/config/messaging.conf"
+ - "/etc/kolla/config/{{ project_name }}.conf"
+ - "/etc/kolla/config/{{ project_name }}/{{ service_name }}.conf"
+ config_template_dest:
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_minimal"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_global"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_database"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_messaging"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_augment"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ service_name }}.conf_augment"
+ config_dest: "{{ node_config_directory }}/{{ service_name }}/cinder.conf"
+ when: inventory_hostname in groups['cinder-backup']
+
+- include: ../../config.yml
+ vars:
+ service_name: "cinder-scheduler"
+ config_source:
+ - "roles/{{ project_name }}/templates/cinder.conf.j2"
+ - "/etc/kolla/config/global.conf"
+ - "/etc/kolla/config/database.conf"
+ - "/etc/kolla/config/messaging.conf"
+ - "/etc/kolla/config/{{ project_name }}.conf"
+ - "/etc/kolla/config/{{ project_name }}/{{ service_name }}.conf"
+ config_template_dest:
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_minimal"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_global"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_database"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_messaging"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_augment"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ service_name }}.conf_augment"
+ config_dest: "{{ node_config_directory }}/{{ service_name }}/cinder.conf"
+ when: inventory_hostname in groups['cinder-scheduler']
+
+- include: ../../config.yml
+ vars:
+ service_name: "cinder-volume"
+ config_source:
+ - "roles/{{ project_name }}/templates/cinder.conf.j2"
+ - "/etc/kolla/config/global.conf"
+ - "/etc/kolla/config/database.conf"
+ - "/etc/kolla/config/messaging.conf"
+ - "/etc/kolla/config/{{ project_name }}.conf"
+ - "/etc/kolla/config/{{ project_name }}/{{ service_name }}.conf"
+ config_template_dest:
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_minimal"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_global"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_database"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_messaging"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_augment"
+ - "{{ node_templates_directory }}/{{ service_name }}/{{ service_name }}.conf_augment"
+ config_dest: "{{ node_config_directory }}/{{ service_name }}/cinder.conf"
+ when: inventory_hostname in groups['cinder-volume']
diff --git a/ansible/roles/cinder/tasks/main.yml b/ansible/roles/cinder/tasks/main.yml
new file mode 100644
index 000000000..5c48120b7
--- /dev/null
+++ b/ansible/roles/cinder/tasks/main.yml
@@ -0,0 +1,8 @@
+---
+- include: register.yml
+
+- include: config.yml
+
+- include: bootstrap.yml
+
+- include: start.yml
diff --git a/ansible/roles/cinder/tasks/register.yml b/ansible/roles/cinder/tasks/register.yml
new file mode 100644
index 000000000..cb62bdca5
--- /dev/null
+++ b/ansible/roles/cinder/tasks/register.yml
@@ -0,0 +1,37 @@
+---
+- name: Creating the Cinder service and endpoint
+ command: docker exec -t kolla_ansible /usr/bin/ansible localhost
+ -m kolla_keystone_service
+ -a "service_name=cinder
+ service_type='Block Storage'
+ description='Openstack Block Storage'
+ endpoint_region={{ openstack_region_name }}
+ admin_url='http://{{ kolla_internal_address }}:{{ cinder_api_port }}'
+ internal_url='http://{{ kolla_internal_address }}:{{ cinder_api_port }}'
+ public_url='http://{{ kolla_external_address }}:{{ cinder_api_port }}'
+ region_name={{ openstack_region_name }}
+ auth={{ '{{ openstack_cinder_auth }}' }}"
+ -e "{'openstack_cinder_auth':{{ openstack_cinder_auth }}}"
+ register: cinder_endpoint
+ changed_when: "{{ cinder_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (cinder_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
+ until: cinder_endpoint.stdout.split()[2] == 'SUCCESS'
+ retries: 10
+ delay: 5
+ run_once: True
+
+- name: Creating the Cinder project, user, and role
+ command: docker exec -t kolla_ansible /usr/bin/ansible localhost
+ -m kolla_keystone_user
+ -a "project=service
+ user=cinder
+ password={{ cinder_keystone_password }}
+ role=admin
+ region_name={{ openstack_region_name }}
+ auth={{ '{{ openstack_cinder_auth }}' }}"
+ -e "{'openstack_cinder_auth':{{ openstack_cinder_auth }}}"
+ register: cinder_user
+ changed_when: "{{ cinder_user.stdout.find('localhost | SUCCESS => ') != -1 and (cinder_user.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
+ until: cinder_user.stdout.split()[2] == 'SUCCESS'
+ retries: 10
+ delay: 5
+ run_once: True \ No newline at end of file
diff --git a/ansible/roles/cinder/tasks/start.yml b/ansible/roles/cinder/tasks/start.yml
new file mode 100644
index 000000000..613974381
--- /dev/null
+++ b/ansible/roles/cinder/tasks/start.yml
@@ -0,0 +1,75 @@
+- name: Starting Cinder-api container
+ docker:
+ docker_api_version: "{{ docker_api_version }}"
+ net: host
+ pull: "{{ docker_pull_policy }}"
+ restart_policy: "{{ docker_restart_policy }}"
+ restart_policy_retry: "{{ docker_restart_policy_retry }}"
+ state: reloaded
+ registry: "{{ docker_registry }}"
+ username: "{{ docker_registry_username }}"
+ password: "{{ docker_registry_password }}"
+ insecure_registry: "{{ docker_insecure_registry }}"
+ name: cinder_api
+ image: "{{ cinder_api_image_full }}"
+ volumes: "{{ node_config_directory }}/cinder-api/:/opt/kolla/cinder/:ro"
+ env:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+ when: inventory_hostname in groups['cinder-api']
+
+- name: Starting Cinder-backup container
+ docker:
+ docker_api_version: "{{ docker_api_version }}"
+ net: host
+ pull: "{{ docker_pull_policy }}"
+ restart_policy: "{{ docker_restart_policy }}"
+ restart_policy_retry: "{{ docker_restart_policy_retry }}"
+ state: reloaded
+ registry: "{{ docker_registry }}"
+ username: "{{ docker_registry_username }}"
+ password: "{{ docker_registry_password }}"
+ insecure_registry: "{{ docker_insecure_registry }}"
+ name: cinder_backup
+ image: "{{ cinder_backup_image_full }}"
+ volumes: "{{ node_config_directory }}/cinder-backup/:/opt/kolla/cinder-backup/:ro"
+ env:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+ when: inventory_hostname in groups['cinder-backup']
+
+- name: Starting Cinder-scheduler container
+ docker:
+ docker_api_version: "{{ docker_api_version }}"
+ net: host
+ pull: "{{ docker_pull_policy }}"
+ restart_policy: "{{ docker_restart_policy }}"
+ restart_policy_retry: "{{ docker_restart_policy_retry }}"
+ state: reloaded
+ registry: "{{ docker_registry }}"
+ username: "{{ docker_registry_username }}"
+ password: "{{ docker_registry_password }}"
+ insecure_registry: "{{ docker_insecure_registry }}"
+ name: cinder_scheduler
+ image: "{{ cinder_scheduler_image_full }}"
+ volumes: "{{ node_config_directory }}/cinder-scheduler/:/opt/kolla/cinder-scheduler/:ro"
+ env:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+ when: inventory_hostname in groups['cinder-scheduler']
+
+- name: Starting Cinder-volume container
+ docker:
+ docker_api_version: "{{ docker_api_version }}"
+ net: host
+ pull: "{{ docker_pull_policy }}"
+ restart_policy: "{{ docker_restart_policy }}"
+ restart_policy_retry: "{{ docker_restart_policy_retry }}"
+ state: reloaded
+ registry: "{{ docker_registry }}"
+ username: "{{ docker_registry_username }}"
+ password: "{{ docker_registry_password }}"
+ insecure_registry: "{{ docker_insecure_registry }}"
+ name: cinder_volume
+ image: "{{ cinder_volume_image_full }}"
+ volumes: "{{ node_config_directory }}/cinder-volume/:/opt/kolla/cinder-volume/:ro"
+ env:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+ when: inventory_hostname in groups['cinder-volume']
diff --git a/ansible/roles/cinder/templates/cinder.conf.j2 b/ansible/roles/cinder/templates/cinder.conf.j2
new file mode 100644
index 000000000..77982525f
--- /dev/null
+++ b/ansible/roles/cinder/templates/cinder.conf.j2
@@ -0,0 +1,55 @@
+[DEFAULT]
+verbose = true
+debug = true
+enable_v1_api=false
+volume_name_template = %s
+glance_api_servers = http://{{ kolla_internal_address }}:{{ glance_api_port }}
+os_region_name = {{ openstack_region_name }}
+{% if cinder_volume_driver == "lvm" %}
+default_volume_type = lvmdriver-1
+enabled_backends = lvmdriver-1
+{% elif cinder_volume_driver == "ceph" %}
+default_volume_type = rbd-1
+enabled_backends = rbd-1
+{% endif %}
+osapi_volume_listen = {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}
+osapi_volume_listen_port = {{ cinder_api_port }}
+api_paste_config = /etc/cinder/api-paste.ini
+nova_catalog_info = compute:nova:internalURL
+
+[database]
+connection = mysql://{{ cinder_database_user }}:{{ cinder_database_password }}@{{ cinder_database_address }}/{{ cinder_database_name }}
+
+[keystone_authtoken]
+auth_uri = http://{{ kolla_internal_address }}:{{ keystone_public_port }}
+auth_url = http://{{ kolla_internal_address }}:{{ keystone_admin_port }}
+auth_plugin = password
+project_domain_id = default
+user_domain_id = default
+project_name = service
+username = {{ cinder_keystone_user }}
+password = {{ cinder_keystone_password }}
+
+[oslo_concurrency]
+lock_path = /var/lib/cinder/tmp
+
+[oslo_messaging_rabbit]
+rabbit_userid = {{ rabbitmq_user }}
+rabbit_password = {{ rabbitmq_password }}
+rabbit_host = {{ kolla_internal_address }}
+rabbit_ha_queues = true
+
+{% if cinder_volume_driver == "lvm" %}
+[lvmdriver-1]
+lvm_type = default
+volume_group = stack-volumes-lvmdriver-1
+volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
+volume_backend_name = lvmdriver-1
+{% elif cinder_volume_driver == "ceph" %}
+[rbd-1]
+volume_driver = cinder.volume.drivers.rbd.RBDDriver
+rbd_pool = volumes
+rbd_user = cinder
+rbd_secret_uuid = {{ metadata_secret }}
+{% endif %}
+
diff --git a/ansible/roles/haproxy/templates/haproxy.cfg.j2 b/ansible/roles/haproxy/templates/haproxy.cfg.j2
index 11a334099..f01ac268e 100644
--- a/ansible/roles/haproxy/templates/haproxy.cfg.j2
+++ b/ansible/roles/haproxy/templates/haproxy.cfg.j2
@@ -78,3 +78,9 @@ listen neutron_server
{% for host in groups['neutron-server'] %}
server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:{{ neutron_server_port }} check inter 2000 rise 2 fall 5
{% endfor %}
+
+listen cinder_api
+ bind {{ kolla_internal_address }}:{{ cinder_api_port }}
+{% for host in groups['cinder-api'] %}
+ server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:{{ cinder_api_port }} check inter 2000 rise 2 fall 5
+{% endfor %}
diff --git a/ansible/site.yml b/ansible/site.yml
index e31509aa4..5a8641a8d 100755
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -26,3 +26,7 @@
- hosts: [neutron-server, neutron-agents, compute]
roles:
- { role: neutron, tags: neutron, when: enable_neutron | bool }
+
+- hosts: [cinder-api, cinder-backup, cinder-scheduler, cinder-volume]
+ roles:
+ - { role: cinder, tags: cinder, when: enable_cinder | bool }
diff --git a/etc/kolla/config/cinder.conf b/etc/kolla/config/cinder.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/etc/kolla/config/cinder.conf
diff --git a/etc/kolla/config/cinder/cinder-api.conf b/etc/kolla/config/cinder/cinder-api.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/etc/kolla/config/cinder/cinder-api.conf
diff --git a/etc/kolla/config/cinder/cinder-backup.conf b/etc/kolla/config/cinder/cinder-backup.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/etc/kolla/config/cinder/cinder-backup.conf
diff --git a/etc/kolla/config/cinder/cinder-scheduler.conf b/etc/kolla/config/cinder/cinder-scheduler.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/etc/kolla/config/cinder/cinder-scheduler.conf
diff --git a/etc/kolla/config/cinder/cinder-volume.conf b/etc/kolla/config/cinder/cinder-volume.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/etc/kolla/config/cinder/cinder-volume.conf
diff --git a/etc/kolla/defaults.yml b/etc/kolla/defaults.yml
index 5ed397cbf..ad04c8617 100644
--- a/etc/kolla/defaults.yml
+++ b/etc/kolla/defaults.yml
@@ -33,6 +33,7 @@ nova_api_port: "8774"
neutron_server_port: "9696"
+cinder_api_port: "8776"
# These roles are required for Kolla to be operation, however a savvy deployer
# could disable some of these required roles and run thier own services.
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index 4d5fb7c9b..565201648 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -93,3 +93,10 @@ openstack_auth_v2:
# RabbitMQ options
####################
rabbitmq_user: "openstack"
+
+
+#################################
+## Cinder - Block Storage options
+#################################
+enable_cinder: "no"
+cinder_volume_driver: "lvm"
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index 754f112a6..cfe3c08cb 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -33,6 +33,9 @@ neutron_keystone_password: "password"
metadata_secret: "password"
+cinder_database_password: "password"
+cinder_keystone_password: "password"
+
####################
# RabbitMQ options
####################