]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tasks/ceph_manager: simplify remote lookup, and make it cluster aware
authorJosh Durgin <jdurgin@redhat.com>
Wed, 23 Mar 2016 23:45:51 +0000 (16:45 -0700)
committerJosh Durgin <jdurgin@redhat.com>
Fri, 20 May 2016 18:08:52 +0000 (11:08 -0700)
Re-implement find_remote() using ctx.cluster.only() with a matcher
function that includes the manager's cluster, and use it instead of
miscellaneous ctx.cluster.only() calls elsewhere.

Signed-off-by: Josh Durgin <jdurgin@redhat.com>
(cherry picked from commit ff49deb6f0beb99b0115d606cc1bc4f4bf293f5c)

tasks/ceph_manager.py

index 542cb8f370a8676191f832069b22e5fb68eb1f20..030417fb42bdd57b608e2d3990b87d304a9430cc 100644 (file)
@@ -955,13 +955,15 @@ class CephManager:
         :return: a Remote instance for the host where the
                  requested role is placed
         """
-        for _remote, roles_for_host in self.ctx.cluster.remotes.iteritems():
-            for id_ in teuthology.roles_of_type(roles_for_host, service_type):
-                if id_ == str(service_id):
-                    return _remote
-
-        raise KeyError("Service {0}.{1} not found".format(service_type,
-                                                          service_id))
+        def _is_instance(role):
+            role_tuple = teuthology.split_role(role)
+            return role_tuple == (self.cluster, service_type, str(service_id))
+        try:
+            (remote,) = self.ctx.cluster.only(_is_instance).remotes.keys()
+        except ValueError:
+            raise KeyError("Service {0}.{1} not found".format(service_type,
+                                                              service_id))
+        return remote
 
     def admin_socket(self, service_type, service_id,
                      command, check_status=True):
@@ -1776,8 +1778,7 @@ class CephManager:
         or by stopping.
         """
         if self.config.get('powercycle'):
-            (remote,) = (self.ctx.cluster.only('osd.{o}'.format(o=osd)).
-                         remotes.iterkeys())
+            remote = self.find_remote('osd', osd)
             self.log('kill_osd on osd.{o} '
                      'doing powercycle of {s}'.format(o=osd, s=remote.name))
             assert remote.console is not None, ("powercycling requested "
@@ -1803,8 +1804,7 @@ class CephManager:
         or by restarting.
         """
         if self.config.get('powercycle'):
-            (remote,) = (self.ctx.cluster.only('osd.{o}'.format(o=osd)).
-                         remotes.iterkeys())
+            remote = self.find_remote('osd', osd)
             self.log('kill_osd on osd.{o} doing powercycle of {s}'.
                      format(o=osd, s=remote.name))
             assert remote.console is not None, ("powercycling requested "
@@ -1864,8 +1864,7 @@ class CephManager:
         or by doing a stop.
         """
         if self.config.get('powercycle'):
-            (remote,) = (self.ctx.cluster.only('mon.{m}'.format(m=mon)).
-                         remotes.iterkeys())
+            remote = self.find_remote('mon', mon)
             self.log('kill_mon on mon.{m} doing powercycle of {s}'.
                      format(m=mon, s=remote.name))
             assert remote.console is not None, ("powercycling requested "
@@ -1883,8 +1882,7 @@ class CephManager:
         or by doing a normal restart.
         """
         if self.config.get('powercycle'):
-            (remote,) = (self.ctx.cluster.only('mon.{m}'.format(m=mon)).
-                         remotes.iterkeys())
+            remote = self.find_remote('mon', mon)
             self.log('revive_mon on mon.{m} doing powercycle of {s}'.
                      format(m=mon, s=remote.name))
             assert remote.console is not None, ("powercycling requested "