hi,

ich habe mal die Anmerkungen übernommen und versuche nun die Funktion
get_state zu basteln. Dazu muss zuerst wieder die Liste der verfügbaren
VMs erzeugt werden, um diese dann zu durchsuchen.
Der Benutzer soll tippen können:

./vmx -g cluster1

Als Ausgabe soll ein schlichtes: off/on erscheinen.

Ruft man das vmware-cmd Tool auf, sieht das so aus:

vmware-cmd 
/vmfs/volumes/4c52874b-65503560-05f0-0021288ea4ad/cluster_1/cluster_1.vmx 
getstate

Ausgabe:

getstate() = off

Od. auch:

vmware-cmd /vmfs/volumes/4c52874b-65503560-05f0-0021288ea4ad/cacti/cacti.vmx 
getstate

getstate() = on

Mittels find und dann split müssten man das so zerlegen, dass der User
nur "cacti" od. "cluster_1" angeben kann, wobei auch Leerzeichen OK sein
müssen:

/vmfs/volumes/4c52874b-65503560-05f0-0021288ea4ad/vmwarevm/Windows XP
Professional.vmx

Ich wäre wieder für Tipps aufgeschlossen :-)

Hier mal mein derzeitiger Code, wobei ich anmerken muss, dass mir das
if/else am Ende nicht gefällt. Da gibt es sicher etwas eleganteres.

cu denny


----------------------------------------------------

#!/usr/bin/python2.5
#Dient der verwaltung von VMs

######## imports ########

import sys
from optparse import OptionParser
from subprocess import Popen, PIPE, STDOUT

####### Definitionen ########

#### Liste der registrierten VMs vom ESX erhalten ####
def reg_vm(regvm):
        vm = Popen(['vmware-cmd','-s', 'listvms'], stdout=PIPE,
stdin=PIPE, stderr=STDOUT).communicate()[0].split('\n')
        vm = [line.strip() for line in vm if line.strip()]
        if regvm == str("all"):
                for entry in vm:
                        print vm.index(entry), entry
        else:
                try: 
                        print vm[regvm]
                except IndexError:
                        print("Kein Eintrag vorhanden")
                        sys.exit(3)

def get_state(getstate):
        vm = Popen(['vmware-cmd','-s', 'listvms'], stdout=PIPE,
stdin=PIPE, stderr=STDOUT).communicate()[0].split('\n')
        vm = [line.strip() for line in vm if line.strip()]
        vm = vm.split(".")
        vm = vm.find(getstate)
        print vm

####### Arg parser ###########

parser = OptionParser()
parser.add_option("-r", "--registerd-vm",
                        action="store",
                        type="string",
                        dest="regvm",
                        help="Get list of registerd VM, use 'all' to get
all VMs")

parser.add_option("-s", "--set-state",
                        action="store",
                        type="string",
                        dest="setstate",
                        #choices=['off', 'on', 'reset'],
                        help="Set powerstate from VM")


parser.add_option("-g", "--get-state",
                        action="store",
                        type="string",
                        dest="getstate",
                        help="Get powerstate from VM")

(options, args) = parser.parse_args()

#### Werte zuweisen ####
regvm = options.regvm
print("regvm", regvm)
setstate = options.setstate
print("setstate",setstate)
getstate = options.getstate
print("getstate", getstate)

############## main #############

if regvm == None and getstate == None and setstate == None:
        print("Keine Paramter angegeben, siehe --help")
if regvm == None and (getstate == None  and setstate == None) or
(getstate != None  and setstate != None):
        print("-g und -s schliessen sich aus")
else:
        if regvm != None:
                if regvm == str("all"):
                        reg_vm(regvm)
                else:
                        regvm = int(regvm)
                        reg_vm(regvm)
        else:
                if getstate != None:
                        get_state(getstate)

Attachment: signature.asc
Description: This is a digitally signed message part

--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an