]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: switch to new style init containers
authorJohn Mulligan <jmulligan@redhat.com>
Fri, 17 Nov 2023 20:08:24 +0000 (15:08 -0500)
committerJohn Mulligan <jmulligan@redhat.com>
Tue, 2 Jan 2024 14:30:20 +0000 (09:30 -0500)
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 <jmulligan@redhat.com>
src/cephadm/cephadm.py
src/cephadm/cephadmlib/runscripts.py
src/cephadm/tests/test_custom_container.py

index dcb62c9517e487d183aa8f9d98ef921119522370..f9df7e0fd00b2e88a11c9d312223567f73b870b2 100755 (executable)
@@ -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)
index 7772248f362d7c45a82750cf91bc69300f9db684..6305b51bac5eb026d19ee877624c612752ca910d 100644 (file)
@@ -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
index 2bcfa0aae6c4009352976ce6595ff85698fa67b7..fec435594a7381d2b555278b448960ef73f14012 100644 (file)
@@ -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')