From: Sébastien Han Date: Thu, 27 Sep 2018 14:31:22 +0000 (+0200) Subject: infra: rename osd-configure to add-osd and improve it X-Git-Tag: v3.2.0beta6~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=fbd878c8d5d20535c7f4eee685e84f70e1faf617;p=ceph-ansible.git infra: rename osd-configure to add-osd and improve it The playbook has various improvements: * run ceph-validate role before doing anything * run ceph-fetch-keys only on the first monitor of the inventory list * set noup flag so PGs get distributed once all the new OSDs have been added to the cluster and unset it when they are up and running Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1624962 Signed-off-by: Sébastien Han --- diff --git a/infrastructure-playbooks/add-osd.yml b/infrastructure-playbooks/add-osd.yml new file mode 100644 index 000000000..4a99cd380 --- /dev/null +++ b/infrastructure-playbooks/add-osd.yml @@ -0,0 +1,94 @@ +--- +# This playbook is used to add a new OSD to +# an existing cluster without the need for running +# the ceph-docker-common or ceph-common and ceph-mon role again against all +# of the existing monitors. +# +# It can run from any machine. Even if the fetch directory is not present +# it will be created. +# +# Ensure that all monitors are present in the mons +# group in your inventory so that the ceph configuration file +# is created correctly for the new OSD(s). +# +# It is expected to edit your inventory file to only point to the OSD hosts +# you want to play the playbook on. So you need to comment already deployed OSD +# and let uncommented the new OSDs. +# +- hosts: + - mons + - osds + + gather_facts: False + + vars: + delegate_facts_host: True + + pre_tasks: + - name: gather facts + setup: + when: + - not delegate_facts_host | bool + + - name: gather and delegate facts + setup: + delegate_to: "{{ item }}" + delegate_facts: True + with_items: + - "{{ groups['mons'] }}" + - "{{ groups['osds'] }}" + run_once: True + when: + - delegate_facts_host | bool + + roles: + - ceph-defaults + - ceph-validate + +- hosts: "{{ groups['mons'][0] }}" + gather_facts: False + become: True + + roles: + - role: ceph-defaults + - role: ceph-fetch-keys + + post_tasks: + - name: set_fact docker_exec_cmd if containerized_deployment + set_fact: + docker_exec_cmd: "docker exec ceph-mon-{{ hostvars[groups[mon_group_name][0]]['ansible_hostname'] }}" + when: containerized_deployment + +- hosts: osds + gather_facts: False + become: True + + pre_tasks: + # this task is needed so we can skip the openstack_config.yml include in roles/ceph-osd + - name: set_fact add_osd + set_fact: + add_osd: True + + - name: set noup flag + command: "{{ docker_exec_cmd | default('') }} ceph --cluster {{ cluster }} osd set noup" + delegate_to: "{{ groups['mons'][0] }}" + run_once: True + changed_when: False + + roles: + - role: ceph-defaults + - role: ceph-handler + - role: ceph-infra + - role: ceph-docker-common + when: containerized_deployment | bool + - role: ceph-common + when: not containerized_deployment | bool + - role: ceph-config + - role: ceph-osd + + post_tasks: + - name: unset noup flag + command: "{{ docker_exec_cmd | default('') }} ceph --cluster {{ cluster }} osd unset noup" + delegate_to: "{{ groups['mons'][0] }}" + run_once: True + changed_when: False \ No newline at end of file diff --git a/infrastructure-playbooks/osd-configure.yml b/infrastructure-playbooks/osd-configure.yml deleted file mode 100644 index b35e12142..000000000 --- a/infrastructure-playbooks/osd-configure.yml +++ /dev/null @@ -1,20 +0,0 @@ ---- -# This playbook is used to add a new OSD to -# an existing cluster without the need for running -# the ceph-common or ceph-mon role again against all -# of the existing monitors. -# -# Ensure that all monitors are present in the mons -# group in your inventory so that the ceph.conf is -# created correctly for the new OSD. -- hosts: mons - become: True - roles: - - ceph-defaults - - ceph-fetch-keys - -- hosts: osds - become: True - roles: - - ceph-defaults - - ceph-osd diff --git a/roles/ceph-osd/tasks/main.yml b/roles/ceph-osd/tasks/main.yml index 3b88fe19d..9e098c06f 100644 --- a/roles/ceph-osd/tasks/main.yml +++ b/roles/ceph-osd/tasks/main.yml @@ -80,6 +80,7 @@ openstack_keys_tmp: "{{ openstack_keys_tmp|default([]) + [ { 'key': item.key, 'name': item.name, 'caps': { 'mon': item.mon_cap, 'osd': item.osd_cap|default(''), 'mds': item.mds_cap|default(''), 'mgr': item.mgr_cap|default('') } , 'mode': item.mode } ] }}" with_items: "{{ openstack_keys }}" when: + - not add_osd|default(False) - openstack_config - item.get('mon_cap', None) # it's enough to assume we are running an old-fashionned syntax simply by checking the presence of mon_cap since every key needs this cap @@ -87,11 +88,13 @@ set_fact: openstack_keys: "{{ openstack_keys_tmp }}" when: + - not add_osd|default(False) - openstack_keys_tmp is defined # Create the pools listed in openstack_pools - name: include openstack_config.yml include_tasks: openstack_config.yml when: + - not add_osd|default(False) - openstack_config - inventory_hostname == groups[osd_group_name] | last