rgw: fix multi instances scaleout

When rgw and osd are collocated, the current workflow prevents from
scaling out the radosgw_num_instances parameter when rerunning the
playbook.

The environment file used in the rgw systemd template is rendered when
executing the `ceph-rgw` role but during a new run of the playbook (in
order to scale out rgw instances), handlers are triggered from `ceph-osd`
role which is run before `ceph-rgw`, therefore it tries to start the new
rgw daemon whereas its corresponding environment file hasn't been
rendered yet and fails like following:

```
ceph-radosgw@rgw.ceph4osd3.rgw1.service failed to run 'start-pre' task: No such file or directory
```

This commit moves the tasks generating this file in `ceph-config` role
so it is generated early.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1851906

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
(cherry picked from commit 7dd68b9ac1)
pull/5580/head
Guillaume Abrioux 2020-07-01 10:47:45 +02:00
parent 88e4dcdd8f
commit 518f4f579d
5 changed files with 31 additions and 21 deletions

View File

@ -411,6 +411,10 @@
- import_role: - import_role:
name: ceph-facts name: ceph-facts
- import_role:
name: ceph-config
tasks_from: rgw_systemd_environment_file.yml
# NOTE: changed from file module to raw find command for performance reasons # NOTE: changed from file module to raw find command for performance reasons
# The file module has to run checks on current ownership of all directories and files. This is unnecessary # The file module has to run checks on current ownership of all directories and files. This is unnecessary
# as in this case we know we want all owned by ceph user # as in this case we know we want all owned by ceph user

View File

@ -3,6 +3,10 @@
include_tasks: create_ceph_initial_dirs.yml include_tasks: create_ceph_initial_dirs.yml
when: containerized_deployment | bool when: containerized_deployment | bool
- name: include_tasks rgw_systemd_environment_file.yml
include_tasks: rgw_systemd_environment_file.yml
when: inventory_hostname in groups.get(rgw_group_name, [])
- name: config file operations related to OSDs - name: config file operations related to OSDs
when: when:
- inventory_hostname in groups.get(osd_group_name, []) - inventory_hostname in groups.get(osd_group_name, [])

View File

@ -0,0 +1,23 @@
---
- name: create rados gateway instance directories
file:
path: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}.{{ item.instance_name }}"
state: directory
owner: "{{ ceph_uid if containerized_deployment else 'ceph' }}"
group: "{{ ceph_uid if containerized_deployment else 'ceph' }}"
mode: "{{ ceph_directories_mode | default('0755') }}"
with_items: "{{ rgw_instances }}"
- name: generate environment file
copy:
dest: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}.{{ item.instance_name }}/EnvironmentFile"
owner: "root"
group: "root"
mode: "0644"
content: |
INST_NAME={{ item.instance_name }}
INST_PORT={{ item.radosgw_frontend_port }}
with_items: "{{ rgw_instances }}"
when:
- containerized_deployment | bool
- rgw_instances is defined

View File

@ -8,16 +8,6 @@
mode: "{{ ceph_directories_mode | default('0755') }}" mode: "{{ ceph_directories_mode | default('0755') }}"
with_items: "{{ rbd_client_admin_socket_path }}" with_items: "{{ rbd_client_admin_socket_path }}"
- name: create rados gateway instance directories
file:
path: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}.{{ item.instance_name }}"
state: directory
owner: "{{ ceph_uid if containerized_deployment else 'ceph' }}"
group: "{{ ceph_uid if containerized_deployment else 'ceph' }}"
mode: "{{ ceph_directories_mode | default('0755') }}"
with_items: "{{ rgw_instances }}"
when: rgw_instances is defined
- name: get keys from monitors - name: get keys from monitors
command: "{{ container_exec_cmd }} ceph --cluster {{ cluster }} auth get {{ item.name }}" command: "{{ container_exec_cmd }} ceph --cluster {{ cluster }} auth get {{ item.name }}"
register: _rgw_keys register: _rgw_keys

View File

@ -1,15 +1,4 @@
--- ---
- name: generate environment file
copy:
dest: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}.{{ item.instance_name }}/EnvironmentFile"
owner: "root"
group: "root"
mode: "0644"
content: |
INST_NAME={{ item.instance_name }}
INST_PORT={{ item.radosgw_frontend_port }}
with_items: "{{ rgw_instances }}"
- name: include_task systemd.yml - name: include_task systemd.yml
include_tasks: systemd.yml include_tasks: systemd.yml