From: John Mulligan Date: Fri, 17 Nov 2023 20:08:24 +0000 (-0500) Subject: cephadm: switch to new style init containers X-Git-Tag: v19.3.0~284^2~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d653bec59cd2d3b60811339670e32cdd3b9a7f72;p=ceph.git cephadm: switch to new style init containers Convert the call that writes out files for a daemon to use the new dedicated systemd-unit support for init containers. Signed-off-by: John Mulligan --- diff --git a/src/cephadm/cephadm.py b/src/cephadm/cephadm.py index dcb62c9517e4..f9df7e0fd00b 100755 --- a/src/cephadm/cephadm.py +++ b/src/cephadm/cephadm.py @@ -125,7 +125,7 @@ from cephadmlib.net_utils import ( wrap_ipv6, ) from cephadmlib.locking import FileLock -from cephadmlib.daemon_identity import DaemonIdentity +from cephadmlib.daemon_identity import DaemonIdentity, DaemonSubIdentity from cephadmlib.packagers import create_packager, Packager from cephadmlib.logging import ( cephadm_init_logging, @@ -1126,7 +1126,10 @@ def deploy_daemon_units( install_sysctl(ctx, ident.fsid, daemon_form_create(ctx, ident)) # systemd - systemd_unit.update_files(ctx, ident) + ic_ids = [ + DaemonSubIdentity.must(ic.identity) for ic in init_containers or [] + ] + systemd_unit.update_files(ctx, ident, init_container_ids=ic_ids) call_throws(ctx, ['systemctl', 'daemon-reload']) unit_name = get_unit_name(ident.fsid, ident.daemon_type, ident.daemon_id) diff --git a/src/cephadm/cephadmlib/runscripts.py b/src/cephadm/cephadmlib/runscripts.py index 7772248f362d..6305b51bac5e 100644 --- a/src/cephadm/cephadmlib/runscripts.py +++ b/src/cephadm/cephadmlib/runscripts.py @@ -54,6 +54,7 @@ def write_service_scripts( post_stop_file_path = data_dir / 'unit.poststop' stop_file_path = data_dir / 'unit.stop' image_file_path = data_dir / 'unit.image' + initctr_file_path = data_dir / 'init_containers.run' # use an ExitStack to make writing the files an all-or-nothing affair. If # any file fails to write then the write_new'd file will not get renamed # into place @@ -63,11 +64,6 @@ def write_service_scripts( runf.write('set -e\n') for command in pre_start_commands or []: _write_command(ctx, runf, command) - init_containers = init_containers or [] - if init_containers: - _write_init_container_cmds_clean(ctx, runf, init_containers[0]) - for idx, ic in enumerate(init_containers): - _write_init_container_cmds(ctx, runf, idx, ic) _write_container_cmd_to_bash(ctx, runf, container, ident.daemon_name) # some metadata about the deploy @@ -90,6 +86,14 @@ def write_service_scripts( meta['ports'] = [] metaf.write(json.dumps(meta, indent=4) + '\n') + # init-container commands + if init_containers: + initf = estack.enter_context(write_new(initctr_file_path)) + _write_init_container_cmds_clean(ctx, initf, init_containers[0]) + for idx, ic in enumerate(init_containers): + _write_init_container_cmds(ctx, initf, idx, ic) + initf.write('exit 0\n') + # post-stop command(s) pstopf = estack.enter_context(write_new(post_stop_file_path)) # this is a fallback to eventually stop any underlying container that diff --git a/src/cephadm/tests/test_custom_container.py b/src/cephadm/tests/test_custom_container.py index 2bcfa0aae6c4..fec435594a73 100644 --- a/src/cephadm/tests/test_custom_container.py +++ b/src/cephadm/tests/test_custom_container.py @@ -221,14 +221,17 @@ def test_deploy_custom_container_and_inits(cephadm_fs): if not l.startswith(('#', 'set', '/usr/bin/podman run')) ]), 'remaining commands should be "rms"' - idx = runfile_lines.index('# init container cleanup') - assert idx > 0 - assert runfile_lines[idx + 1].startswith('! /usr/bin/podman rm') - assert runfile_lines[idx + 2].startswith('! /usr/bin/podman rm') + with open(f'/var/lib/ceph/{fsid}/container.tdccai/init_containers.run') as f: + icfile_lines = f.read().splitlines() + + idx = icfile_lines.index('# init container cleanup') + assert idx >= 0 + assert icfile_lines[idx + 1].startswith('! /usr/bin/podman rm') + assert icfile_lines[idx + 2].startswith('! /usr/bin/podman rm') - idx = runfile_lines.index('# init container 0: ceph-b01dbeef-701d-9abe-0000-e1e5a47004a7-container-tdccai-init') + idx = icfile_lines.index('# init container 0: ceph-b01dbeef-701d-9abe-0000-e1e5a47004a7-container-tdccai-init') assert idx > 0 - assert runfile_lines[idx + 1] == ( + assert icfile_lines[idx + 1] == ( '/usr/bin/podman run' ' --stop-signal=SIGTERM' ' --entrypoint /usr/local/bin/prepare.sh' @@ -237,12 +240,12 @@ def test_deploy_custom_container_and_inits(cephadm_fs): ' -v /var/lib/ceph/b01dbeef-701d-9abe-0000-e1e5a47004a7/container.tdccai/data1:/var/lib/myapp' ' quay.io/foobar/quux:latest' ) - assert runfile_lines[idx + 2].startswith('! /usr/bin/podman rm') - assert runfile_lines[idx + 3].startswith('! /usr/bin/podman rm') + assert icfile_lines[idx + 2].startswith('! /usr/bin/podman rm') + assert icfile_lines[idx + 3].startswith('! /usr/bin/podman rm') - idx = runfile_lines.index('# init container 1: ceph-b01dbeef-701d-9abe-0000-e1e5a47004a7-container-tdccai-init') + idx = icfile_lines.index('# init container 1: ceph-b01dbeef-701d-9abe-0000-e1e5a47004a7-container-tdccai-init') assert idx > 0 - assert runfile_lines[idx + 1] == ( + assert icfile_lines[idx + 1] == ( '/usr/bin/podman run' ' --stop-signal=SIGTERM' ' --entrypoint /usr/local/bin/populate.sh' @@ -253,5 +256,5 @@ def test_deploy_custom_container_and_inits(cephadm_fs): ' quay.io/foobar/quux:latest' ' --source=https://my.cool.example.com/samples/geo.1.txt' ) - assert runfile_lines[idx + 2].startswith('! /usr/bin/podman rm') - assert runfile_lines[idx + 3].startswith('! /usr/bin/podman rm') + assert icfile_lines[idx + 2].startswith('! /usr/bin/podman rm') + assert icfile_lines[idx + 3].startswith('! /usr/bin/podman rm')