From 4e65941e4188aa5b52ca7f6a12552f0a8d6e3b5a Mon Sep 17 00:00:00 2001 From: jtudelag Date: Sun, 4 Mar 2018 23:06:48 +0100 Subject: [PATCH] Adds RGWs pool creation to containerized installation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit ceph command has to be executed from one of the monitor containers if not admin copy present in RGWs. Task has to be delegated then. Adds test to check proper RGW pool creation for Docker container scenarios. Signed-off-by: Jorge Tudela (cherry picked from commit 8704144e3157aa253fb7563fe701d9d434bf2f3e) Signed-off-by: Sébastien Han --- roles/ceph-rgw/tasks/docker/main.yml | 5 ++++ roles/ceph-rgw/tasks/docker/rgw_pool_pgs.yml | 26 +++++++++++++++++++ roles/ceph-rgw/tasks/main.yml | 11 ++++++-- roles/ceph-rgw/tasks/rgw_pool_pgs.yml | 20 ++++++++++++-- .../7/docker-collocation/group_vars/rgws | 6 +++++ .../centos/7/docker/group_vars/rgws | 5 ++++ tests/functional/tests/rgw/test_rgw_tuning.py | 15 +++++++++++ 7 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 roles/ceph-rgw/tasks/docker/rgw_pool_pgs.yml create mode 100644 tests/functional/centos/7/docker-collocation/group_vars/rgws diff --git a/roles/ceph-rgw/tasks/docker/main.yml b/roles/ceph-rgw/tasks/docker/main.yml index badfd027d..df26503b8 100644 --- a/roles/ceph-rgw/tasks/docker/main.yml +++ b/roles/ceph-rgw/tasks/docker/main.yml @@ -9,3 +9,8 @@ - name: include start_docker_rgw.yml include: start_docker_rgw.yml + +- name: include rgw_pool_pgs.yml + include: rgw_pool_pgs.yml + when: + - create_pools is defined diff --git a/roles/ceph-rgw/tasks/docker/rgw_pool_pgs.yml b/roles/ceph-rgw/tasks/docker/rgw_pool_pgs.yml new file mode 100644 index 000000000..ba781bb76 --- /dev/null +++ b/roles/ceph-rgw/tasks/docker/rgw_pool_pgs.yml @@ -0,0 +1,26 @@ +--- +# If admin key has been copied to the RGWs, we can run the command from them. +- name: create rgw pools if create_pools is defined + command: "{{ docker_exec_cmd }} ceph --connect-timeout 5 --cluster {{ cluster }} osd pool create {{ item.key }} {{ item.value.pg_num }}" + changed_when: false + run_once: true + with_dict: "{{ create_pools }}" + when: + - copy_admin_key + +# If no admin key has been copied to the RGWs, we have to run the command from the first monitor. +- name: set_fact docker_exec_mon_cmd + set_fact: + docker_exec_mon_cmd: "docker exec ceph-mon-{{ hostvars[groups.get(mon_group_name)[0]]['ansible_hostname'] }}" + when: + - not copy_admin_key + +# If no admin key has been copied to the RGWs, we have to run the command from the first monitor. +- name: create rgw pools if create_pools is defined, delegated to first monitor + command: "{{ docker_exec_mon_cmd }} ceph --connect-timeout 5 --cluster {{ cluster }} osd pool create {{ item.key }} {{ item.value.pg_num }}" + changed_when: false + run_once: true + delegate_to: "{{ groups[mon_group_name][0] }}" + with_dict: "{{ create_pools }}" + when: + - not copy_admin_key diff --git a/roles/ceph-rgw/tasks/main.yml b/roles/ceph-rgw/tasks/main.yml index 1a54a0567..dbbf7f72a 100644 --- a/roles/ceph-rgw/tasks/main.yml +++ b/roles/ceph-rgw/tasks/main.yml @@ -30,8 +30,9 @@ include: rgw_pool_pgs.yml when: - create_pools is defined - static: False - + - not containerized_deployment + static: False + - name: include multisite/main.yml include: multisite/main.yml when: @@ -47,3 +48,9 @@ - containerized_deployment # Hard code this so we will skip the entire file instead of individual tasks (Default isn't Consistent) static: False + +- name: include rgw_pool_pgs.yml + include: rgw_pool_pgs.yml + when: + - create_pools is defined + static: False diff --git a/roles/ceph-rgw/tasks/rgw_pool_pgs.yml b/roles/ceph-rgw/tasks/rgw_pool_pgs.yml index 4e6d38817..3675475b3 100644 --- a/roles/ceph-rgw/tasks/rgw_pool_pgs.yml +++ b/roles/ceph-rgw/tasks/rgw_pool_pgs.yml @@ -2,7 +2,23 @@ - name: create rgw pools if create_pools is defined command: ceph --connect-timeout 5 --cluster {{ cluster }} osd pool create {{ item.key }} {{ item.value.pg_num }} changed_when: false - failed_when: false + run_once: true with_dict: "{{ create_pools }}" when: - - create_pools is defined + - not containerized_deployment + +# On first monitor. +- name: set_fact docker_exec_rgw_cmd + set_fact: + docker_exec_rgw_cmd: "docker exec ceph-mon-{{ hostvars[groups.get(mon_group_name)[0]]['ansible_hostname'] }}" + when: + - containerized_deployment + +- name: create rgw pools if create_pools is defined + command: "{{ docker_exec_rgw_cmd }} ceph --connect-timeout 5 --cluster {{ cluster }} osd pool create {{ item.key }} {{ item.value.pg_num }}" + changed_when: false + run_once: true + with_dict: "{{ create_pools }}" + delegate_to: "{{ groups[mon_group_name][0] }}" + when: + - containerized_deployment diff --git a/tests/functional/centos/7/docker-collocation/group_vars/rgws b/tests/functional/centos/7/docker-collocation/group_vars/rgws new file mode 100644 index 000000000..75c89230f --- /dev/null +++ b/tests/functional/centos/7/docker-collocation/group_vars/rgws @@ -0,0 +1,6 @@ +--- +create_pools: + foo: + pg_num: 17 + bar: + pg_num: 19 diff --git a/tests/functional/centos/7/docker/group_vars/rgws b/tests/functional/centos/7/docker/group_vars/rgws index faec15233..65f9b2311 100644 --- a/tests/functional/centos/7/docker/group_vars/rgws +++ b/tests/functional/centos/7/docker/group_vars/rgws @@ -1,2 +1,7 @@ --- copy_admin_key: True +create_pools: + foo: + pg_num: 17 + bar: + pg_num: 19 diff --git a/tests/functional/tests/rgw/test_rgw_tuning.py b/tests/functional/tests/rgw/test_rgw_tuning.py index 9140d23e5..2b3d75c25 100644 --- a/tests/functional/tests/rgw/test_rgw_tuning.py +++ b/tests/functional/tests/rgw/test_rgw_tuning.py @@ -26,3 +26,18 @@ class TestRGWs(object): assert pool_name in output pg_num_str = "pg_num {pg_num}".format(pg_num=pg_num["pg_num"]) assert pg_num_str in output + + @pytest.mark.docker + def test_docker_rgw_tuning_pools_are_set(self, node, host): + hostname = node["vars"]["inventory_hostname"] + cluster = node['cluster_name'] + cmd = "sudo docker exec ceph-rgw-{hostname} ceph --cluster={cluster} --connect-timeout 5 osd dump".format( + hostname=hostname, + cluster=cluster + ) + output = host.check_output(cmd) + pools = node["vars"]["create_pools"] + for pool_name, pg_num in pools.items(): + assert pool_name in output + pg_num_str = "pg_num {pg_num}".format(pg_num=pg_num["pg_num"]) + assert pg_num_str in output -- 2.39.5