Changeset 2097 for trunk/packages/invirt-web
- Timestamp:
- Feb 5, 2009, 3:24:56 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/invirt-web/code/controls.py
r2095 r2097 65 65 id of the CD (e.g. 'gutsy_i386') 66 66 """ 67 try: 68 if cdtype is not None: 69 out = remctl('control', machine.name, 'create', 70 cdtype) 71 else: 72 out = remctl('control', machine.name, 'create') 73 except CodeError, e: 74 if 'already running' in e.message: 75 raise InvalidInput('action', 'create', 76 'VM %s is already on' % machine.name) 77 else: 67 if cdtype is not None: 68 out, err = remctl('control', machine.name, 'create', 69 cdtype, err=True) 70 else: 71 out, err = remctl('control', machine.name, 'create', 72 err=True) 73 if 'already running' in err: 74 raise InvalidInput('action', 'create', 75 'VM %s is already on' % machine.name) 76 elif err: 78 77 raise CodeError('"%s" on "control %s create %s' 79 78 % (err, machine.name, cdtype)) … … 158 157 Gets and parses xm list --long 159 158 """ 160 try: 161 value_string = remctl('control', machine.name, 'list-long') 162 except CodeError, e: 163 if 'is not on' in e.message: 164 return None 165 else: 166 raise 159 value_string, err_string = remctl('control', machine.name, 'list-long', 160 err=True) 161 if 'Unknown command' in err_string: 162 raise CodeError("ERROR in remctl list-long %s is not registered" % 163 (machine.name,)) 164 elif 'is not on' in err_string: 165 return None 166 elif err_string: 167 raise CodeError("ERROR in remctl list-long %s: %s" % 168 (machine.name, err_string)) 167 169 status = parseStatus(value_string) 168 170 return status … … 170 172 def listHost(machine): 171 173 """Return the host a machine is running on""" 172 try: 173 out = remctl('control', machine.name, 'listhost') 174 except CodeError, e: 174 out, err = remctl('control', machine.name, 'listhost', err=True) 175 if err: 175 176 return None 176 177 return out.strip() … … 178 179 def vnctoken(machine): 179 180 """Return a time-stamped VNC token""" 180 try: 181 out = remctl('control', machine.name, 'vnctoken') 182 except CodeError, e: 181 out, err = remctl('control', machine.name, 'vnctoken', err=True) 182 if err: 183 183 return None 184 184 return out.strip() … … 186 186 def deleteVM(machine): 187 187 """Delete a VM.""" 188 try: 189 remctl('control', machine.name, 'destroy') 190 except CodeError: 191 pass 188 remctl('control', machine.name, 'destroy', err=True) 192 189 session.begin() 193 190 delete_disk_pairs = [(machine.name, d.guest_device_name) … … 219 216 raise CodeError("Invalid action '%s'" % action) 220 217 if action == 'Reboot': 221 try: 222 if cdrom is not None: 223 out = remctl('control', machine.name, 'reboot', cdrom) 224 else: 225 out = remctl('control', machine.name, 'reboot') 226 except CodeError, e: 227 if re.match("machine '.*' is not on", e.message): 218 if cdrom is not None: 219 out, err = remctl('control', machine.name, 'reboot', cdrom, 220 err=True) 221 else: 222 out, err = remctl('control', machine.name, 'reboot', 223 err=True) 224 if err: 225 if re.match("machine '.*' is not on", err): 228 226 raise InvalidInput("action", "reboot", 229 227 "Machine is not on") 230 228 else: 231 raise 229 print >> sys.stderr, 'Error on reboot:' 230 print >> sys.stderr, err 231 raise CodeError('ERROR on remctl') 232 232 233 233 elif action == 'Power on': … … 238 238 bootMachine(machine, cdrom) 239 239 elif action == 'Power off': 240 try: 241 out = remctl('control', machine.name, 'destroy') 242 except CodeError, e: 243 if re.match("machine '.*' is not on", e.message): 240 out, err = remctl('control', machine.name, 'destroy', err=True) 241 if err: 242 if re.match("machine '.*' is not on", err): 244 243 raise InvalidInput("action", "Power off", 245 244 "Machine is not on.") 246 245 else: 247 raise 246 print >> sys.stderr, 'Error on power off:' 247 print >> sys.stderr, err 248 raise CodeError('ERROR on remctl') 248 249 elif action == 'Shutdown': 249 try: 250 out = remctl('control', machine.name, 'shutdown') 251 except CodeError, e: 252 if re.match("machine '.*' is not on", e.message): 250 out, err = remctl('control', machine.name, 'shutdown', err=True) 251 if err: 252 if re.match("machine '.*' is not on", err): 253 253 raise InvalidInput("action", "Shutdown", 254 254 "Machine is not on.") 255 255 else: 256 raise 256 print >> sys.stderr, 'Error on Shutdown:' 257 print >> sys.stderr, err 258 raise CodeError('ERROR on remctl') 257 259 elif action == 'Delete VM': 258 260 deleteVM(machine)
Note: See TracChangeset
for help on using the changeset viewer.