def _get_modifyvm_args(self, config, create): args = [] for config_key, value in config.items(): if not config_key.startswith('vm-'): continue key = config_key[3:] if not create and key.startswith(('natpf', 'hostonlyadapter')): continue if key.startswith('hostonlyadapter'): hostonlyif = self.master.hostonlyifs[value] hostonlyif.ensure(self) if key.startswith('uartmode'): if value == 'disconnected': pass elif value.startswith(('server ', 'client ', 'file ')): value = value.split(None, 1) args.extend(("--%s" % key, value[0], expand_path(value[1], config.get_path(config_key)))) else: args.extend(("--%s" % key, expand_path(value, config.get_path(config_key)))) elif key.startswith('uart') and value != 'off': value = value.split() args.append("--%s" % key) args.extend(value) else: args.extend(("--%s" % key, value)) return args
def _get_storages(self, config): storages = list(filter(None, config.get('storage', '').splitlines())) result = [] for storage in storages: args = shlex.split(storage) args_dict = {} for k, v in zip(*[iter(args)] * 2): args_dict[k[2:]] = v if 'medium' in args_dict: medium = args_dict['medium'] medium_url = urlparse(medium) if medium_url.netloc: medium = (medium_url, args_dict.pop('medium_sha1', None)) elif '.' in medium: medium = expand_path(medium, config.get_path('storage')) elif medium.startswith('vb-disk:'): try: medium = self.master.disks[medium[8:]] except KeyError: log.error("Couldn't find [vb-disk:%s] section referenced by [%s]." % (medium[8:], self.config_id)) sys.exit(1) args_dict['medium'] = medium if 'type' not in args_dict: args_dict['type'] = 'hdd' result.append(args_dict) return result
def _get_storages(self, config): storages = list(filter(None, config.get('storage', '').splitlines())) result = [] for storage in storages: args = shlex.split(storage) args_dict = {} for k, v in zip(*[iter(args)] * 2): args_dict[k[2:]] = v if 'medium' in args_dict: medium = args_dict['medium'] medium_url = urlparse(medium) if medium_url.netloc: medium = (medium_url, args_dict.pop('medium_sha1', None)) elif '.' in medium: medium = expand_path(medium, config.get_path('storage')) elif medium.startswith('vb-disk:'): try: medium = self.master.disks[medium[8:]] except KeyError: log.error( "Couldn't find [vb-disk:%s] section referenced by [%s]." % (medium[8:], self.config_id)) sys.exit(1) args_dict['medium'] = medium if 'type' not in args_dict: args_dict['type'] = 'hdd' result.append(args_dict) return result
def filename(self, instance): filename = self.config.get('filename') if filename is None: filename = self.name ext = ".%s" % self.format.lower() if not filename.endswith(ext): filename = filename + ext filename = expand_path(filename, instance._vmfolder) if not os.path.exists(filename): kw = {} if self.size: kw['size'] = self.size if self.variant: kw['variant'] = self.variant try: instance.vb.createhd(filename=filename, format=self.format, **kw) except subprocess.CalledProcessError as e: log.error("Failed to create disk '%s' at '%s':\n%s" % (self.name, filename, e)) sys.exit(1) return filename