Check-in [a51866b638]
Not logged in
Overview
Comment:Make vws list --stated distinguish between stopped and hyberated (by vws save) machines
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: a51866b638cfc6209625eac79ff7ffe89db25133
User & Date: vitus on 2019-10-03 07:54:53
Other Links: manifest | tags
Context
2019-10-03
10:26
Fixed random mac generation for python3 check-in: 7eafff75ba user: vitus tags: trunk
07:54
Make vws list --stated distinguish between stopped and hyberated (by vws save) machines check-in: a51866b638 user: vitus tags: trunk
07:27
More info on bridge configuration check-in: 46b8264cac user: vitus tags: trunk
Changes

Modified vws from [d549c75576] to [0aa3cad620].

209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
    """
    Checks if there is snapshot of running vm which should be restored
    Returns either id of this snapshot or None
    """

    nxt = 0
    with os.popen("qemu-img info \"%s\"" %
                  (get_drives(vmdir)[0]), "r") as f:
        for line in f:
            if line == 'Snapshot list:\n':
                nxt = 2
            elif nxt == 2 and line.startswith('ID'):
                nxt = 1
            elif nxt == 1:
                nxt = 0







|







209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
    """
    Checks if there is snapshot of running vm which should be restored
    Returns either id of this snapshot or None
    """

    nxt = 0
    with os.popen("qemu-img info \"%s\"" %
                  (os.path.join(vmdir, get_drives(vmdir)[0])), "r") as f:
        for line in f:
            if line == 'Snapshot list:\n':
                nxt = 2
            elif nxt == 2 and line.startswith('ID'):
                nxt = 1
            elif nxt == 1:
                nxt = 0
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
    if options.gui:
        os.system((config.get('tools', 'viewer') + "&") % uri)
    elif not options.stopped:
        print("VM already running use uri %s" % uri, file=sys.stderr)

def cmd_stop(options):
    """ vws stop """
    if snapshot_mode(options.sock) or options.hard:
        try:
            send_command(options.sock, 'quit')
        except IOError as ex:
            # Expect IOError here
            if str(ex).find("EOF from monitor"):
                print("monitor socket closed")
            else:







|







281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
    if options.gui:
        os.system((config.get('tools', 'viewer') + "&") % uri)
    elif not options.stopped:
        print("VM already running use uri %s" % uri, file=sys.stderr)

def cmd_stop(options):
    """ vws stop """
    if options.hard or snapshot_mode(options.sock):
        try:
            send_command(options.sock, 'quit')
        except IOError as ex:
            # Expect IOError here
            if str(ex).find("EOF from monitor"):
                print("monitor socket closed")
            else:
328
329
330
331
332
333
334

335
336
337
338
339
340
341
342
def cmd_save(options):
    """ vws save """
    answer = send_command(options.sock, 'savevm')
    if re.search("Error", answer):
        print(answer, file=sys.stderr)
        sys.exit(1)
    else:

        send_command(options.sock, 'quit')

def cmd_cdrom(options):
    """ vws cdrom """
    if options.id  is None:
        # Search for devices which could be interpreted as CDROM
        devlist = send_command(options.sock, "info block")
        for dev in  re.findall("([-\\w]+): [^\n]+\n    Removable device:",







>
|







328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
def cmd_save(options):
    """ vws save """
    answer = send_command(options.sock, 'savevm')
    if re.search("Error", answer):
        print(answer, file=sys.stderr)
        sys.exit(1)
    else:
        options.hard = True
        cmd_stop(options)

def cmd_cdrom(options):
    """ vws cdrom """
    if options.id  is None:
        # Search for devices which could be interpreted as CDROM
        devlist = send_command(options.sock, "info block")
        for dev in  re.findall("([-\\w]+): [^\n]+\n    Removable device:",
425
426
427
428
429
430
431




432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
    print(answer)

def make_vm_listing(vmname, dirname, vmtype):
    """ makes dict with vm properties for short index """
    f = {"name":vmname, "type":vmtype}
    sock = connect_vm(dirname)
    if sock is None:




        f.update({"state":"stopped", "uri":"-", "ip":"-"})
        f.update(read_netinfo(os.path.join(dirname, "start")))
    else:
        uri = spiceurl(sock)
        if uri is None:
            f.update({"state":"problem", "uri":"None", "ip":"-"})
            f.update(read_netinfo(os.path.join(dirname, "start")))
        else:
            f["uri"] = uri[uri.rindex(":")+1:]
            f.update(get_netinfo(sock))
            sock.shutdown(socket.SHUT_RDWR)
            sock.close()
            f["state"] = "running"
    return f


def add_ip_address(listing):
    """ Adds IP addresses from ARP into VM listing """
    bridges = set()
    for vminfo in listing:







>
>
>
>
|




|






|







426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
    print(answer)

def make_vm_listing(vmname, dirname, vmtype):
    """ makes dict with vm properties for short index """
    f = {"name":vmname, "type":vmtype}
    sock = connect_vm(dirname)
    if sock is None:
        if check_for_snapshot(dirname):
            f['state'] = "sleeping"
        else:
            f['state'] = 'stopped '
        f.update({"uri":"-", "ip":"-"})
        f.update(read_netinfo(os.path.join(dirname, "start")))
    else:
        uri = spiceurl(sock)
        if uri is None:
            f.update({"state":"problem ", "uri":"None", "ip":"-"})
            f.update(read_netinfo(os.path.join(dirname, "start")))
        else:
            f["uri"] = uri[uri.rindex(":")+1:]
            f.update(get_netinfo(sock))
            sock.shutdown(socket.SHUT_RDWR)
            sock.close()
            f["state"] = "running "
    return f


def add_ip_address(listing):
    """ Adds IP addresses from ARP into VM listing """
    bridges = set()
    for vminfo in listing: