A continuación tenemos un pequeño script en Python que usa el demonio XML-RPC de OpenGroupware.org para añadir un equipo y miembros al equipo.

Uso

El primer parámetro que se da al script, especifica el nombre del equipo a ser creado (en el ejemplo de abajo es igual a myteam).
El segundo parámetro especifica los logins de las cuentas a ser añadidas al equipo, separadas por comas (en el ejemplo de abajo son root,bjoern,joe).

Si especifica cuentas no válidas, el script le avisará y no añadirá las cuentas al nuevo equipo (como puede ver en el ejemplo, la cuenta joe no existe en el sistema y consecuentemente no habrá sido añadida al equipo).

Sample Run
bjoern@grobi:xmlrpc # ./skyrix_add_team_members.py myteam root,bjoern,joe  
Team 'myteam' successfully created (ID '12740')
Invalid account 'joe' specified
Successfully added members ['root', 'bjoern']
bjoern@grobi:xmlrpc # 

Para ejecutar el script necesita el 'parcheado' xmlrpclib.py el cual está disponible aquí. Ver las intrucciones generales Python para más detalles.

Necesita cambiar las variables en the __init__ section para que corresponda con su sistema, especialmente el password del usuario 'root' se debe de cambiar.

Descargar el script

Script Source
#!/usr/bin/env python

# $Id$

# adds a team and the given users to the SKYRiX system

import socket, sys, string, xmlrpclib
from types import *

class AddTeamTool:

    def __init__(self):
        """ initialization """
        self.__url   = 'http://localhost:20000/RPC2'
        self.__login = 'root'
        self.__pwd = 'YOUR_SKYRIX_ROOT_PASSWORD'


    def initDaemon(self):
        """ init XML-RPC daemon """
        try:
            self.__server = xmlrpclib.ServerProxy(self.__url,
                                                  login=self.__login,
                                                  password=self.__pwd)
        except TypeError,e:
            sys.stderr.write("ERROR: You are probably using the wrong version"
                             "of xmlrpclib\nGet the right version at:\n")
            sys.stderr.write("http://developer.skyrix.com/02_skyrix/xmlrpc/"
                             "xmlrpclib.py\n")
            return 2
        except IOError,e:
            sys.stderr.write("ERROR: %s\n" % e)
            return 3
        return 0
        
    def run(self):
        result = self.initDaemon()
        if result != 0: return result
        
        teamName = sys.argv[1]
        members  = None
        if len(sys.argv) > 2:
            members = string.split(sys.argv[2],',')

        try:
            teamId = self.__server.team.insert({'login' : teamName,
                                                'description' : teamName,
                                                })

        except socket.error,e:
            sys.stderr.write("Couldn't connect to the XML-RPC daemon\n")
            return 2
            
        except:
            sys.stderr.write("An error occured when creating the team\n")
            return 2

        if type(teamId) is IntType:
            print "Team '%s' successfully created (ID '%s')" % (teamName,
                                                                teamId)
        else:
            print "Creating team failed..."
            return 1

        if members != None:

            memberIds = []
            
            for member in members:
                try:
                    valid = self.__server.account.getByLogin(member)
                except:
                    sys.stderr.write("An error occured when searching for "
                                     "the login\n")
                    return 1
                
                if type(valid) is DictType:
                    memberIds.append(valid['id'])

                else:
                    sys.stderr.write("Invalid account '%s' "
                                     "specified\n" % member)
                    members.remove(member)

            try:
                result = self.__server.team.setMembers(teamId, memberIds)
            except:
                sys.stderr.write("An error occured when adding members\n")
                return 1

            if result.value == 1:
                print "Successfully added members %s" % members
            else:
                print "Adding members failed"
                return 1
        return 0

if __name__ == "__main__":

  if len(sys.argv) == 1:
      sys.stderr.write("No team name provided\n")
      sys.exit(2)

  tool = AddTeamTool()

  try:
      returnCode = tool.run()
  except KeyboardInterrupt:
      sys.stderr.write("Program cancelled by user\n")
      returnCode = 2

  sys.exit(returnCode)

Autor
  • Björn Stierand