]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: create /var/run/ceph dir via unit.run, not unit file
authorSage Weil <sage@redhat.com>
Thu, 2 Apr 2020 23:36:39 +0000 (18:36 -0500)
committerSebastian Wagner <sebastian.wagner@suse.com>
Tue, 7 Apr 2020 09:37:24 +0000 (11:37 +0200)
The systemd unit file is shared with non-ceph daemons, which (1) don't
need the /var/run directory, and (2) are based on a uid/gid from a
different container image, which means we can't figure out the right
ceph uid/gid from them to set the ownership properly.

Instead, put it in the unit.run file... and only for ceph daemons when
we have the uid/gid we need.

Fixes: https://tracker.ceph.com/issues/44894
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit a3be5f2aca8ac8163906e3015740327440a375b1)

src/cephadm/cephadm

index d0af801b60fd7d4f5a33f568473ad6ad43276037..dc12a13da96c103c111fbcd7f325a461d57b4bf6 100755 (executable)
@@ -1650,6 +1650,10 @@ def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
             prestart = nfs_ganesha.get_rados_grace_container('add')
             f.write(' '.join(prestart.run_cmd()) + '\n')
 
+        if daemon_type in Ceph.daemons:
+            install_path = find_program('install')
+            f.write('{install_path} -d -m0770 -o {uid} -g {gid} /var/run/ceph/{fsid}\n'.format(install_path=install_path, fsid=fsid, uid=uid, gid=gid))
+
         # container run command
         f.write(' '.join(c.run_cmd()) + '\n')
         os.fchmod(f.fileno(), 0o600)
@@ -1690,7 +1694,7 @@ def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
 
     # systemd
     install_base_units(fsid)
-    unit = get_unit_file(fsid, uid, gid)
+    unit = get_unit_file(fsid)
     unit_file = 'ceph-%s@.service' % (fsid)
     with open(args.unit_dir + '/' + unit_file + '.new', 'w') as f:
         f.write(unit)
@@ -1827,9 +1831,8 @@ def install_base_units(fsid):
 }
 """ % fsid)
 
-def get_unit_file(fsid, uid, gid):
-    # type: (str, int, int) -> str
-    install_path = find_program('install')
+def get_unit_file(fsid):
+    # type: (str) -> str
     u = """# generated by cephadm
 [Unit]
 Description=Ceph %i for {fsid}
@@ -1849,7 +1852,6 @@ LimitNOFILE=1048576
 LimitNPROC=1048576
 EnvironmentFile=-/etc/environment
 ExecStartPre=-{container_path} rm ceph-{fsid}-%i
-ExecStartPre=-{install_path} -d -m0770 -o {uid} -g {gid} /var/run/ceph/{fsid}
 ExecStart=/bin/bash {data_dir}/{fsid}/%i/unit.run
 ExecStop=-{container_path} stop ceph-{fsid}-%i
 ExecStopPost=-/bin/bash {data_dir}/{fsid}/%i/unit.poststop
@@ -1865,10 +1867,7 @@ StartLimitBurst=5
 WantedBy=ceph-{fsid}.target
 """.format(
     container_path=container_path,
-    install_path=install_path,
     fsid=fsid,
-    uid=uid,
-    gid=gid,
     data_dir=args.data_dir)
     return u