]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
admin: use the config pusher function; don't clobber
authorSage Weil <sage@inktank.com>
Sun, 10 Mar 2013 06:47:29 +0000 (22:47 -0800)
committerSage Weil <sage@inktank.com>
Sun, 10 Mar 2013 06:47:29 +0000 (22:47 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
ceph_deploy/admin.py

index 344a17590a2318b1992a495cb4bb3d51730d92c0..aef7487733e25344f0111aa1f12c10029f06dcc0 100644 (file)
@@ -5,6 +5,7 @@ import os.path
 from cStringIO import StringIO
 
 from . import exc
+from . import conf
 from .cliutil import priority
 
 
@@ -18,11 +19,10 @@ def write_file(path, content):
         pass        
 
 def admin(args):
-    try:
-        with file('%s.conf' % args.cluster, 'rb') as f:
-            conf = f.read()
-    except:
-        raise RuntimeError('%s.conf file not present' % args.cluster)
+    cfg = conf.load(args)
+    conf_data = StringIO()
+    cfg.write(conf_data)
+
     try:
         with file('%s.client.admin.keyring' % args.cluster, 'rb') as f:
             keyring = f.read()
@@ -30,24 +30,39 @@ def admin(args):
         raise RuntimeError('%s.client.admin.keyring not found' %
                            args.cluster)
 
+    errors = 0
     for hostname in args.client:
         log.debug('Pushing admin keys and conf to %s', hostname)
-        sudo = args.pushy('ssh+sudo:{hostname}'.format(
-                hostname=hostname,
-                ))
-        write_file_r = sudo.compile(write_file)
-        error = write_file_r(
-            '/etc/ceph/%s.conf' % args.cluster,
-            conf
-            )
-        if error is not None:
-            raise exc.GenericError(error)
-        error = write_file_r(
-            '/etc/ceph/%s.client.admin.keyring' % args.cluster,
-            keyring
-            )
-        if error is not None:
-            raise exc.GenericError(error)
+        try:
+            sudo = args.pushy('ssh+sudo:{hostname}'.format(
+                    hostname=hostname,
+                    ))
+
+            write_conf_r = sudo.compile(conf.write_conf)
+            write_conf_r(
+                cluster=args.cluster,
+                conf=conf_data.getvalue(),
+                overwrite=args.overwrite_conf,
+                )
+
+            sudo = args.pushy('ssh+sudo:{hostname}'.format(
+                    hostname=hostname,
+                    ))
+            write_file_r = sudo.compile(write_file)
+            error = write_file_r(
+                '/etc/ceph/%s.client.admin.keyring' % args.cluster,
+                keyring
+                )
+            if error is not None:
+                raise exc.GenericError(error)
+
+        except RuntimeError as e:
+            log.error(e)
+            errors += 1
+
+    if errors:
+        raise exc.GenericError('Failed to configure %d admin hosts' % errors)
+
 
 @priority(70)
 def make(parser):