def testDistantServers(self): """test distant_servers()""" nodes = NodeSet("foo,bar") self.assertEqual(Server.distant_servers(nodes), nodes) nodes_short = nodes | NodeSet(Server.hostname_short()) self.assertEqual(Server.distant_servers(nodes_short), nodes) nodes_long = nodes | NodeSet(Server.hostname_long()) self.assertEqual(Server.distant_servers(nodes_long), nodes)
def testDistantServers(self): """test distant_servers()""" nodes = NodeSet("foo,bar") self.assertEqual(Server.distant_servers(nodes), nodes) nodes_short = nodes | NodeSet(Server.hostname_short()) self.assertEqual(Server.distant_servers(nodes_short), nodes) nodes_long = nodes | NodeSet(Server.hostname_long()) self.assertEqual(Server.distant_servers(nodes_long), nodes)
def _distant_action_by_server(self, action_class, servers, **kwargs): # filter local server distant_servers = Server.distant_servers(servers) # perform action on distant servers if len(distant_servers) > 0: action = action_class(nodes=distant_servers, fs=self, **kwargs) action.launch() self._run_actions() if action.status() == ACT_ERROR: err_code = None if task_self().num_timeout(): err_code = -1 elif task_self().max_retcode(): err_code = task_self().max_retcode() # FSRemoteError is limited and cannot handle more than 1 error msg, nodes = list(self.proxy_errors.walk())[0] nodes = NodeSet.fromlist(nodes) msg = str(msg).replace('THIS_SHINE_HOST', str(nodes)) raise FSRemoteError(nodes, err_code, msg)
def remove(self, servers=None, **kwargs): """ Remove FS config files. """ result = 0 if servers is None: # Get all possible servers servers = self.components.managed().allservers() # filter local server distant_servers = Server.distant_servers(servers) # If size is different, we have a local server in the list if len(distant_servers) < len(servers): # remove local fs configuration file fs_file = os.path.join(Globals().get_conf_dir(), "%s.xmf" % self.fs_name) if os.path.exists(fs_file): self.hdlr.log('detail', msg='[DEL] %s' % fs_file) if kwargs.get('dryrun', False): result = 0 else: result = os.remove(fs_file) if len(distant_servers) > 0: # Perform the remove operations on all targets for these nodes. self._proxy_action('remove', distant_servers, **kwargs).launch() # Run local actions and FSProxyAction self._run_actions() if len(self.proxy_errors) > 0: return RUNTIME_ERROR return result