From: Sage Weil Date: Mon, 1 Mar 2021 22:42:15 +0000 (-0500) Subject: cephadm: add docker.service dependency in systemd units X-Git-Tag: v15.2.13~2^2~26^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=514fc603d019f304f20b666e523dcce83689f0ca;p=ceph.git cephadm: add docker.service dependency in systemd units This ensures that (1) we start after the docker daemon is running, and (2) a restart of docker will also restart the ceph services. Fixes: https://tracker.ceph.com/issues/46745 Signed-off-by: Sage Weil (cherry picked from commit 0b5bc8fc2e11f1ec84be96e7a2bdbb884e1d0de3) Conflicts: src/cephadm/cephadm src/cephadm/tests/test_cephadm.py --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 564028fa6eae..7e29e674e384 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -2482,6 +2482,7 @@ def get_unit_file(fsid): 'Type=forking\n' 'PIDFile=/%t/%n-pid\n') + docker = 'docker' in container_path u = """# generated by cephadm [Unit] Description=Ceph %i for {fsid} @@ -2490,8 +2491,9 @@ Description=Ceph %i for {fsid} # http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget # these can be removed once ceph-mon will dynamically change network # configuration. -After=network-online.target local-fs.target time-sync.target +After=network-online.target local-fs.target time-sync.target{docker_after} Wants=network-online.target local-fs.target time-sync.target +{docker_requires} PartOf=ceph-{fsid}.target Before=ceph-{fsid}.target @@ -2517,7 +2519,11 @@ WantedBy=ceph-{fsid}.target container_path=container_path, fsid=fsid, data_dir=args.data_dir, - extra_args=extra_args) + extra_args=extra_args, + # if docker, we depend on docker.service + docker_after=' docker.service' if docker else '', + docker_requires='Requires=docker.service\n' if docker else '', +) return u diff --git a/src/cephadm/tests/test_cephadm.py b/src/cephadm/tests/test_cephadm.py index 5487f43b3a88..c58fcd7f3295 100644 --- a/src/cephadm/tests/test_cephadm.py +++ b/src/cephadm/tests/test_cephadm.py @@ -12,6 +12,16 @@ with patch('builtins.open', create=True): cd = SourceFileLoader('cephadm', 'cephadm').load_module() class TestCephAdm(object): + + def test_docker_unit_file(self): + cd.args = mock.Mock() + cd.container_path = '/usr/bin/docker' + r = cd.get_unit_file('9b9d7609-f4d5-4aba-94c8-effa764d96c9') + assert 'Requires=docker.service' in r + cd.container_path = '/usr/sbin/podman' + r = cd.get_unit_file('9b9d7609-f4d5-4aba-94c8-effa764d96c9') + assert 'Requires=docker.service' not in r + def test_is_not_fsid(self): assert not cd.is_fsid('no-uuid')