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,
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)
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
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
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
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'
' -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'
' 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')