def __init__( self, **kwargs ):
    """ Constructor  
    """
    if 'hosts' in kwargs:
      self.__hosts = kwargs['hosts']
      del kwargs['hosts']
    else:  
      result = Registry.getHosts()
      if result['OK']:
        self.__hosts = result['Value']
      else:
        self.__hosts = []
      # Excluded hosts
      if 'exclude' in kwargs:
        self.__hosts = list ( set( self.__hosts ) - set( kwargs[ 'exclude' ] ) )

    # Ping the hosts to remove those that don't have a SystemAdministrator service
    sysAdminHosts = []
    for host in self.__hosts:
      client = SystemAdministratorClient( host )
      result = client.ping()
      if result[ 'OK' ]:
        sysAdminHosts.append( host )
    self.__hosts = sysAdminHosts
      
    self.__kwargs = dict( kwargs )  
    self.__pool = ThreadPool( len( self.__hosts ) )  
    self.__resultDict = {}
Ejemplo n.º 2
0
    def restartHost(hostName):
        """
    Restart all systems and components of a host

    :param str hostName: name of the host you want to restart
    """
        host, port = parseHostname(hostName)

        gLogger.notice("Pinging %s ..." % host)

        client = SystemAdministratorClient(host, port)
        result = client.ping()
        if not result['OK']:
            gLogger.error("Could not connect to %s: %s" %
                          (host, result['Message']))
            return result
        gLogger.notice("Host %s is active" % host)

        gLogger.notice("Initiating restart of all systems and components")
        # This restart call will always return S_ERROR because of SystemAdministrator restart
        # Connection will be lost to the host
        result = client.restartComponent('*', '*')
        if result['Message'] == "Peer closed connection":
            gLogger.notice(
                "Restarted all systems on %s : connection to SystemAdministrator lost"
                % host)
            return S_OK(result['Message'])
        gLogger.error("Received unxpected message: %s" % result['Message'])
        return result
    def __init__(self, **kwargs):
        """ Constructor  
    """
        if 'hosts' in kwargs:
            self.__hosts = kwargs['hosts']
            del kwargs['hosts']
        else:
            result = Registry.getHosts()
            if result['OK']:
                self.__hosts = result['Value']
            else:
                self.__hosts = []
            # Excluded hosts
            if 'exclude' in kwargs:
                self.__hosts = list(set(self.__hosts) - set(kwargs['exclude']))

        # Ping the hosts to remove those that don't have a SystemAdministrator service
        sysAdminHosts = []
        for host in self.__hosts:
            client = SystemAdministratorClient(host)
            result = client.ping()
            if result['OK']:
                sysAdminHosts.append(host)
        self.__hosts = sysAdminHosts

        self.__kwargs = dict(kwargs)
        self.__pool = ThreadPool(len(self.__hosts))
        self.__resultDict = {}
Ejemplo n.º 4
0
    def updateHost(hostName, version):
        """
    Apply update to specific host

    :param str hostName: name of the host you want to update
    :param str version: version vArBpC you want to update to
    """
        host, port = parseHostname(hostName)

        client = SystemAdministratorClient(host, port)
        result = client.ping()
        if not result['OK']:
            gLogger.error("Cannot connect to %s" % host)
            return result

        gLogger.notice(
            "Initiating software update of %s, this can take a while, please be patient ..."
            % host)
        result = client.updateSoftware(version, '', '', timeout=600)
        if not result['OK']:
            return result
        return S_OK()