]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: add docker.service dependency in systemd units 39804/head
authorSage Weil <sage@newdream.net>
Mon, 1 Mar 2021 22:42:15 +0000 (17:42 -0500)
committerSebastian Wagner <sebastian.wagner@suse.com>
Wed, 3 Mar 2021 11:30:37 +0000 (12:30 +0100)
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 <sage@newdream.net>
(cherry picked from commit 0b5bc8fc2e11f1ec84be96e7a2bdbb884e1d0de3)

Conflicts:
src/cephadm/cephadm
src/cephadm/tests/test_cephadm.py

src/cephadm/cephadm
src/cephadm/tests/test_cephadm.py

index 564028fa6eaef7aaf2ff566dc502be25963c33b1..7e29e674e3842be6d6365dd3114587744ff20b0d 100755 (executable)
@@ -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
 
index 5487f43b3a88ccb85a6233fe41659f3bd6fe549f..c58fcd7f32950a5cb47f01059b268948f32e8072 100644 (file)
@@ -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')