]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-daemon: support docker; prefer podman
authorSage Weil <sage@redhat.com>
Fri, 4 Oct 2019 16:25:10 +0000 (11:25 -0500)
committerSage Weil <sage@redhat.com>
Sat, 5 Oct 2019 19:25:15 +0000 (14:25 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/ceph-daemon

index 1fb71d0a53eb9a45c78708b903e98725cc0e1c53..8e9abe383cd1cce52e454e0234634b8ad163f272 100755 (executable)
@@ -6,6 +6,8 @@ LOG_DIR='/var/log/ceph'
 UNIT_DIR='/etc/systemd/system'
 VERSION='unknown development version'
 
+PODMAN_PREFERENCE = ['podman', 'docker']  # prefer podman to docker
+
 """
 You can invoke ceph-daemon in two ways:
 
@@ -49,6 +51,8 @@ except:
 
 logging.basicConfig(level=logging.INFO)
 
+podman_path = None
+
 ##################################
 
 def get_hostname():
@@ -370,10 +374,10 @@ Before=ceph-{fsid}.target
 LimitNOFILE=1048576
 LimitNPROC=1048576
 EnvironmentFile=-/etc/environment
-ExecStartPre=-/usr/bin/podman rm ceph-{fsid}-%i
+ExecStartPre=-{podman_path} rm ceph-{fsid}-%i
 ExecStartPre=-mkdir -p /var/run/ceph
 ExecStart={data_dir}/{fsid}/%i/cmd
-ExecStop=-/usr/bin/podman stop ceph-{fsid}-%i
+ExecStop=-{podman_path} stop ceph-{fsid}-%i
 ExecStopPost=-/bin/rm -f /var/run/ceph/{fsid}-%i.asok
 Restart=on-failure
 RestartSec=10s
@@ -384,7 +388,10 @@ StartLimitBurst=5
 
 [Install]
 WantedBy=ceph-{fsid}.target
-""".format(fsid=fsid, data_dir=args.data_dir)
+""".format(
+    podman_path=podman_path,
+    fsid=fsid,
+    data_dir=args.data_dir)
     return u
 
 def gen_ssh_key(fsid):
@@ -432,7 +439,7 @@ class CephContainer:
         ]
         cname = ['--name', self.cname] if self.cname else []
         return [
-            find_program('podman'),
+            podman_path,
             'run',
             '--rm',
             '--net=host',
@@ -450,7 +457,7 @@ class CephContainer:
             '-e', f'NODE_NAME={get_hostname()}',
         ]
         return [
-            find_program('podman'),
+            podman_path,
             'run',
             '-it',
             '--net=host',
@@ -462,7 +469,7 @@ class CephContainer:
 
     def exec_cmd(self, cmd):
         return [
-            find_program('podman'),
+            podman_path,
             'exec',
             '-it',
             self.cname,
@@ -1001,6 +1008,10 @@ parser.add_argument(
     '--image',
     default=DEFAULT_IMAGE,
     help='container image')
+parser.add_argument(
+    '--docker',
+    action='store_true',
+    help='use docker instead of podman')
 parser.add_argument(
     '--data-dir',
     default=DATA_DIR,
@@ -1225,6 +1236,20 @@ except NameError:
     av = sys.argv[1:]
 
 args = parser.parse_args(av)
+
+# podman or docker?
+if args.docker:
+    podman_path = find_program('docker')
+else:
+    for i in PODMAN_PREFERENCE:
+        try:
+            podman_path = find_program(i)
+            break
+        except:
+            logging.debug('could not locate %s' % i)
+    if not podman_path:
+        raise RuntimeError('unable to locate any of %s' % PODMAN_PREFERENCE)
+
 if 'func' not in args:
     sys.stderr.write('No command specified; pass -h or --help for usage\n')
     sys.exit(1)