Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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