2009-06-29 6 views
-1

Ich muss mehrere Server, Netzwerkdienste, Appalication Server (Apache, Tomcat) verwalten und verwalten (Start Stop, Software installieren).Mule vs ActiveMQ für Python

Ich würde gerne Python verwenden, da C++ scheint komplex und weniger produktiv für die Sache Aufgabe. Ich bin mir nicht sicher, welche Middleware verwendet werden soll. ActiveMQ und Mule scheinen eine gute Wahl zu sein, obwohl sie in Java geschrieben sind. Ich verstehe besser ActiveMQ und ich weiß sehr wenig über ESB.

Irgendwelche Ratschläge? Irgendeine Option für Python?

Ich sah, dass es Bohnenstange gibt, aber ist zu einfach und unflexibel. Ich brauche ein Nachrichtensystem für die Koordination sowie eine Möglichkeit, tar.gz-Datei an den Server (Softwarepakete) zu senden.

Ich war dort war eine messaging Lösung native in Python.

+0

Zum einen die Beschreibung Ihres Ziel, dh Verwaltung von Servern, und was Sie fordern, dh Messaging-Systeme, scheinen nicht sehr gut passen. Es gibt Systeme zum Starten, Stoppen und Installieren von Software bereits. Es ist nicht offensichtlich, warum Sie einen schreiben würden, und noch weniger, warum Sie ein Nachrichtensystem dafür benötigen würden. Zweitens, Sie erklären nicht wirklich Ihre Anforderungen für das Messaging-System, so dass es schwer für jeden ist, Sie zu diesem Thema zu führen. –

+0

Bitte klären Sie Ihre Ziele. Sagen Sie wirklich, was Sie "fertig" machen wollen. – gahooa

Antwort

1

Ein Beispiel Python „Skript“, die verschiedene Dienste auf mehreren Remote-Servern verwaltet:

Was für ein gehackt zusammen Skript folgt, die verwendet werden können, verschiedene Dienste auf Servern zu verwalten, die Sie den SSH-Zugriff haben.

Sie möchten idealerweise einen ssh-agent ausführen lassen oder Ihre Passphrase oft eingeben.

Für Befehle, die erhöhte Rechte auf dem Remotecomputer erfordern, können Sie sehen, dass "sudo" aufgerufen wird. Dies bedeutet, dass Sie benötigen, um Ihre sudoers zu ändern, auf jedem Remote-Computer-Datei, und fügen Sie Einträge wie folgt aus (vorausgesetzt, Ihr Benutzername == deploy):

Defaults:deploy !requiretty 
Defaults:deploy !authenticate 

deploy ALL=\ 
    /sbin/service httpd status,\ 
    /sbin/service httpd configtest,\ 
    /sbin/service httpd graceful 

Die ersten beiden Zeilen ermöglichen dem Benutzer deploysudo ohne laufen zu tty oder wiederholen Sie das Passwort - was bedeutet, dass es ohne weitere Eingabe direkt über ssh ausgeführt werden kann. Hier ist ein Beispiel Python Befehl Vorteil sudo auf einem Remote zu nehmen:

CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd graceful')) 

Wie auch immer, dies ist nicht eine „gerade“ Antwort auf Ihre Frage, sondern eine Darstellung, wie einfach Sie Python und ein paar verwenden können anderer Techniken, um ein Systemmanagement-Tool zu erstellen, das zu 100% auf Ihre spezifischen Bedürfnisse zugeschnitten ist.

Übrigens sagt das folgende Skript "deutlich und deutlich", wenn einer der Befehle einen Exit-Status> 0 zurückgegeben hat, so dass Sie die Ausgabe selbst analysieren können.

Dies wurde zusammengehackt, als ein Projekt, mit dem ich arbeitete, mit einem Load Balancer gestartet wurde und es nicht mehr notwendig war, alle Befehle auf jedem Server auszuführen. Sie können dies ändern oder erweitern, um mit rsync zu arbeiten, um Dateien zu verteilen, oder sogar Updates für die Skripte, die Sie auf den fernen Servern hosten, um die Arbeit zu erledigen.

#!/usr/bin/python 


from optparse import OptionParser 
import subprocess 
import sys 

def die(sMessage): 
     print 
     print sMessage 
     print 
     sys.exit(2) 


################################################################################################### 
# Settings 

# The [email protected]: for the SourceURLs (NO TRAILING SLASH) 
RemoteUsers = [ 
     "[email protected]", 
     "[email protected]", 
     ] 

################################################################################################### 
# Global Variables 

# optparse.Parser instance 
Parser       = None 

# optparse.Values instance full of command line options 
Opt        = None 

# List of command line arguments 
Arg          = None 

################################################################################################### 
Parser = OptionParser(usage="%prog [options] [Command[, Subcommand]]") 


Parser.add_option("--interactive", 
     dest = "Interactive", 
     action = "store_true", 
     default = False, 
     help = "Ask before doing each operation." 
     ) 

# Parse command line 
Opt, Arg = Parser.parse_args() 

def HelpAndExit(): 
     print "This command is used to run commands on the application servers." 
     print 
     print "Usage:" 
     print " deploy-control [--interactive] Command" 
     print 
     print "Options:" 
     print " --interactive :: will ask before executing each operation" 
     print 
     print "Servers:" 
     for s in RemoteUsers: print " " + s 
     print 
     print "Web Server Commands:" 
     print " deploy-control httpd status" 
     print " deploy-control httpd configtest" 
     print " deploy-control httpd graceful" 
     print " deploy-control loadbalancer in" 
     print " deploy-control loadbalancer out" 
     print 
     print "App Server Commands:" 
     print " deploy-control 6x6server status" 
     print " deploy-control 6x6server stop" 
     print " deploy-control 6x6server start" 
     print " deploy-control 6x6server status" 
     print " deploy-control wb4server stop" 
     print " deploy-control wb4server start" 
     print " deploy-control wb4server restart" 
     print " deploy-control wb4server restart" 
     print 
     print "System Commands:" 
     print " deploy-control disk usage" 
     print " deploy-control uptime" 
     print 
     sys.exit(2) 

def YesNo(sPrompt): 
     while True: 
       s = raw_input(sPrompt) 
       if s in ('y', 'yes'): 
         return True 
       elif s in ('n', 'no'): 
         return False 
       else: 
         print "Invalid input!" 


# Implicitly verified below in if/else 
Command = tuple(Arg) 

if Command in (('help',),()): 
     HelpAndExit() 


ResultList = [] 
################################################################################################### 
for UH in RemoteUsers: 
     print "-"*80 
     print "Running %s command on: %s" % (Command, UH) 

     if Opt.Interactive and not YesNo("Do you want to run this command? "): 
       print "Skipping!" 
       print 
       continue 

     #---------------------------------------------------------------------------------------------- 
     if Command == ('httpd', 'configtest'): 
       CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd configtest')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('httpd', 'graceful'): 
       CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd graceful')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('httpd', 'status'): 
       CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd status')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('loadbalancer', 'in'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/loadbalancer-in')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('loadbalancer', 'out'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/loadbalancer-out')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('disk', 'usage'): 
       CommandResult = subprocess.call(('ssh', UH, 'df -h')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('uptime',): 
       CommandResult = subprocess.call(('ssh', UH, 'uptime')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'status'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-status')) 
       if CommandResult > 0: 
         print "Servers not running!!!" 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'stop'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-stop')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'start'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-start')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'restart'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-restart')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'status'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-status')) 
       if CommandResult > 0: 
         print "Servers not running!!!" 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'stop'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-stop')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'start'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-start')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'restart'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-restart')) 

     #---------------------------------------------------------------------------------------------- 
     else: 
       print 
       print "#"*80 
       print 
       print "Error: invalid command" 
       print 
       HelpAndExit() 

     #---------------------------------------------------------------------------------------------- 
     ResultList.append(CommandResult) 
     print 


################################################################################################### 
if any(ResultList): 
     print "#"*80 
     print "#"*80 
     print "#"*80 
     print 
     print "ERRORS FOUND. SEE ABOVE" 
     print 
     sys.exit(0) 

else: 
     print "-"*80 
     print 
     print "Looks OK!" 
     print 
     sys.exit(1) 
+0

Danke, wie du gesagt hast, das beantwortet meine Frage nicht. Ihr Code ist jedoch sehr interessant. – rtacconi

+0

Ok, ssh, wie verwalten Sie Windows? – rtacconi