| 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 | 
+
-
+
 | 
#!/usr/bin/python
""" vws - script to control QEMU/KVM virtual workstations """
# pylint: disable=bad-builtin
from ConfigParser import ConfigParser
from argparse import ArgumentParser, Namespace
import fcntl
import socket, select
import errno
import re
import os, sys, time, os.path
import pwd
VERSION = 0.4
def find_vm(name):
    """ Search and return VM directory """
    search_path = [os.path.join(os.search_path = [os.path.join(pwd.getpwuid(os.getuid()).pw_dir, "VWs"),
                   config.get("directories", "SharedVMs"),
                   config.get("directories", "AutostartVMs")]
    for dirname in search_path:
        if not os.access(dirname, os.X_OK):
            continue
        if (name in os.listdir(dirname) and
                os.access(os.path.join(dirname, name, "start"), os.X_OK)):environ['HOME'], "VWs"), | 
| ︙ |  |  | 
| 
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367 | 
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
 | 
-
+
 | 
    address = find_usb(options, get_vm_devices(options.sock))
    answer = send_command(options.sock, "usb_del %s" % address)
    print answer
def cmd_list(options):
    """ vws list """
    count = 0
    search_path = [("private",os.search_path = [("private",os.path.join(pwd.getpwuid(os.getuid()).pw_dir, "VWs")),
                   ("shared",config.get("directories", "SharedVMs")),
                   ("autostart",config.get("directories", "AutostartVMs"))]
    maxlen = 0
    vms = []
    bridges = set()
    for (vmtype,dirname) in search_path:environ['HOME'] + "/VWs"), | 
| ︙ |  |  | 
| 
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559 | 
546
547
548
549
550
551
552
553
554
555
556
557
558
559
 | 
-
 | 
            print >>sys.stderr, "VM is not running in snapshot mode"
            sys.exit(1)
def cmd_autostart(options):
    """
    Starts all VMs which are in the autostart directory
    """
dirname =  config.get("directories", "AutostartVMs")
    userinfo=pwd.getpwnam(config.get("permissions","autostart_user"))
    if not userinfo:
        print >>sys.stderr, ("User %s doesn't exists %s" % 
                             config.get("permissions","autostart_user"))
        sys.exit(1)
    os.setgid(userinfo.pw_gid)    import pwd | 
| ︙ |  |  | 
| 
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709 | 
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
 | 
-
+
 | 
               "usb":"-usb"}
    macaddr = ":".join(["%02x" % ord(x) for x in  chr(0x52) + os.urandom(5)])
    if parsed_args.shared:
        machinedir = os.path.join(config.get("directories", "SharedVMs"),
                                  parsed_args.machine)
        dirmode = 0775
    else:
        machinedir = os.path.join(os.machinedir = os.path.join(pwd.getpwuid(os.getuid()).pw_dir, "VWs",
                                  parsed_args.machine)
        dirmode = 0775
    if parsed_args.net != 'user':
        bridges = list_bridges()
        if not parsed_args.net in bridges:
            print >>sys.stderr, ("No such bridge %s. Available ones %s" %environ["HOME"], "VWs", | 
| ︙ |  |  | 
| 
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838 | 
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
 | 
+
+
+
-
+
 | 
config.set('tools', 'lsusb', 'lsusb')
config.set('tools', 'arp', '/usr/sbin/arp')
config.add_section('permissions')
config.set('permissions','vm_group','kvm')
config.set('permissions','autostart_user','root')
config.set('permissions','setgid_vm','yes')
# Read configration files
if os.getuid() != 0:
    config.read(['/etc/vws.conf',os.path.join(pwd.getpwuid(os.getuid()).pw_dir + '.vwsrc')])
else:   
config.read(['/etc/vws.confconfig.read(['/etc/vws.conf'])
# Parse argument
args = ArgumentParser(description="Manage Virtual Workstations")
cmds = args.add_subparsers(dest='command', help="sub-command help")
p = cmds.add_parser("list", help="List existing VWs",
                    description="List existing VWs")
p.add_argument("--state", action='store_const', const=True, default=False,
               dest='state', help='Show state of the machine')', os.environ['HOME'] + '/.vwsrc']) | 
| ︙ |  |  |