diff --git a/defaults/main.yml b/defaults/main.yml index 41734c2d..70f3b9ff 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -265,8 +265,25 @@ cinder_services: # by the py_pkgs lookup. cinder_role_project_group: cinder_all +# Define the following dictionary variable to enable qos settings on volumes. +# cinder_qos_specs +# - name: high-iops +# options: +# consumer: front-end +# read_iops_sec: 2000 +# write_iops_sec: 2000 +# cinder_volume_types: +# - volumes-1 +# - volumes-2 +# - name: low-iops +# options: +# consumer: front-end +# write_iops_sec: 100 + ## Tunable overrides cinder_policy_overrides: {} cinder_rootwrap_conf_overrides: {} cinder_api_paste_ini_overrides: {} cinder_cinder_conf_overrides: {} + +_UUID_regex: "[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}" diff --git a/doc/source/configure-cinder.rst b/doc/source/configure-cinder.rst index dbd2abc5..72793138 100644 --- a/doc/source/configure-cinder.rst +++ b/doc/source/configure-cinder.rst @@ -461,3 +461,27 @@ each storage node that will use it. The ``cinder-volume.yml`` playbook will automatically install the ``nfs-common`` file across the hosts, transitioning from an LVM to a NetApp back end. + +Configuring cinder qos specs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Deployers may optionally define the variable ``cinder_qos_specs`` +to create qos specs. This variable is a list of dictionaries that +contain the options for each qos spec. cinder volume-types may be +assigned to a qos spec by defining the key ``cinder_volume_types`` in +the desired qos spec dictionary. + +.. code-block:: console + + - name: high-iops + options: + consumer: front-end + read_iops_sec: 2000 + write_iops_sec: 2000 + cinder_volume_types: + - volumes-1 + - volumes-2 + - name: low-iops + options: + consumer: front-end + write_iops_sec: 100 diff --git a/releasenotes/notes/qos-support-1c601862ab2f9825.yaml b/releasenotes/notes/qos-support-1c601862ab2f9825.yaml new file mode 100644 index 00000000..8c14016e --- /dev/null +++ b/releasenotes/notes/qos-support-1c601862ab2f9825.yaml @@ -0,0 +1,5 @@ +--- +features: + - Deployers can now define the varible ``cinder_qos_specs`` + to create qos specs and assign those specs to desired + cinder volume types. diff --git a/tasks/cinder_backends.yml b/tasks/cinder_backends.yml index cacf5daa..e75b0370 100644 --- a/tasks/cinder_backends.yml +++ b/tasks/cinder_backends.yml @@ -42,3 +42,9 @@ {% endfor %} with_dict: "{{ cinder_backends|default({}) }}" when: item.value.extra_volume_types is defined + +- include: cinder_qos.yml + static: no + when: cinder_qos_specs is defined + tags: + - cinder-qos diff --git a/tasks/cinder_qos.yml b/tasks/cinder_qos.yml new file mode 100644 index 00000000..d0157622 --- /dev/null +++ b/tasks/cinder_qos.yml @@ -0,0 +1,39 @@ +--- +# Copyright 2016, Walmart Stores, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Add in cinder qos types + shell: | + . {{ ansible_env.HOME }}/openrc + {{ cinder_bin }}/cinder qos-list | grep {{ item.name }} || \ + {{ cinder_bin }}/cinder qos-create {{ item.name }}\ + {% for k,v in item.options.iteritems() %} {{ k }}={{ v }}{% endfor %} + with_items: cinder_qos_specs + tags: + - cinder-qos + +- name: Associate qos types to volume types + shell: | + . {{ ansible_env.HOME }}/openrc + {% for vtype in item.cinder_volume_types %} + {{ cinder_bin }}/cinder qos-associate \ + $({{ cinder_bin }}/cinder qos-list | grep {{ item.name }} | grep -oE "{{ _UUID_regex }}") \ + $({{ cinder_bin }}/cinder type-list | grep {{ vtype }} | grep -oE "{{ _UUID_regex }}") + {% endfor %} + with_items: cinder_qos_specs + when: + - item.cinder_volume_types is defined + tags: + - cinder-qos + - cinder-qos-associate