Skip to content

Commit

Permalink
Handle radosgw hosts placement with non-default cluster name
Browse files Browse the repository at this point in the history
In cephadm-adopt.yml TASK "Update the placement of radosgw hosts"
does not handle when Ansible var cluster is something other than
"ceph", unless this patch is used.

Update module ceph_orch_apply to support optional cluster
parameter using the same style as in module ceph_config.
The command is only extended to inclue the new keyring
and config options if cluster name is not ceph.

This patch is necessary to migrate older clusters which were
deployed when custom names were supported.

Closes: https://issues.redhat.com/browse/RHCEPH-10442

Signed-off-by: John Fulton <[email protected]>
  • Loading branch information
fultonj committed Feb 4, 2025
1 parent 912de5a commit 915b33c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
2 changes: 2 additions & 0 deletions infrastructure-playbooks/cephadm-adopt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,7 @@
- name: Update the placement of radosgw hosts
ceph_orch_apply:
fsid: "{{ fsid }}"
cluster: "{{ cluster }}"
spec: |
service_type: rgw
service_id: {{ ansible_facts['hostname'] }}
Expand Down Expand Up @@ -1480,6 +1481,7 @@
- name: Update the placement of alertmanager hosts
ceph_orch_apply:
fsid: "{{ fsid }}"
cluster: "{{ cluster }}"
spec: |
service_type: alertmanager
service_id: "{{ ansible_facts['hostname'] }}"
Expand Down
29 changes: 22 additions & 7 deletions library/ceph_orch_apply.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@

from ansible.module_utils.basic import AnsibleModule # type: ignore
try:
from ansible.module_utils.ca_common import exit_module, build_base_cmd_orch # type: ignore
from ansible.module_utils.ca_common import exit_module, build_base_cmd # type: ignore
except ImportError:
from module_utils.ca_common import exit_module, build_base_cmd_orch
from module_utils.ca_common import exit_module, build_base_cmd


ANSIBLE_METADATA = {
Expand All @@ -50,6 +50,10 @@
description:
- The Ceph container image to use.
required: false
cluster:
description:
- The Ceph cluster name. Defaults to ceph
required: false
spec:
description:
- The service spec to apply
Expand Down Expand Up @@ -81,8 +85,12 @@ def parse_spec(spec: str) -> Dict:
def retrieve_current_spec(module: AnsibleModule, expected_spec: Dict) -> Dict:
""" retrieve current config of the service """
service: str = expected_spec["service_type"]
cmd = build_base_cmd_orch(module)
cmd.extend(['ls', service])
cmd = build_base_cmd(module)
if cluster != 'ceph':
conf_path = f"/etc/ceph/{cluster}.conf"
keyring_path = f"/etc/ceph/{cluster}.client.admin.keyring"
cmd.extend(['--config', conf_path, '--keyring', keyring_path])
cmd.extend(['ceph', 'orch', 'ls', service])
if 'service_name' in expected_spec:
cmd.extend([expected_spec["service_name"]])
else:
Expand All @@ -98,8 +106,13 @@ def retrieve_current_spec(module: AnsibleModule, expected_spec: Dict) -> Dict:

def apply_spec(module: "AnsibleModule",
data: str) -> Tuple[int, List[str], str, str]:
cmd = build_base_cmd_orch(module)
cmd.extend(['apply', '-i', '-'])
cmd = build_base_cmd(module)
cluster = module.params.get('cluster')
if cluster != 'ceph':
conf_path = f"/etc/ceph/{cluster}.conf"
keyring_path = f"/etc/ceph/{cluster}.client.admin.keyring"
cmd.extend(['--config', conf_path, '--keyring', keyring_path])
cmd.extend(['ceph', 'orch', 'apply', '-i', '-'])
rc, out, err = module.run_command(cmd, data=data)

if rc:
Expand Down Expand Up @@ -131,7 +144,9 @@ def run_module() -> None:
docker=dict(type=bool,
required=False,
default=False),
image=dict(type='str', required=False)
image=dict(type='str', required=False),
cluster=dict(type='str', required=False,
default='ceph')
)

module = AnsibleModule(
Expand Down

0 comments on commit 915b33c

Please sign in to comment.