image = session['image']
available = image.os.sysprep_params
- needed = image.os.needed_sysprep_params()
+ needed = image.os.needed_sysprep_params
+ names = needed.keys()
if len(needed) == 0:
return True
fields = []
- for param in needed:
- default = available[param.name] if param.name in available else ""
- fields.append(("%s: " % param.description, default, param.length))
+ for name in names:
+ param = needed[name]
+ default = available[name] if name in available else ""
+ fields.append(("%s: " % param.description, default, param.maxlen))
txt = "Please provide the following system preparation parameters:"
code, output = d.form(txt, height=13, width=WIDTH, form_height=len(fields),
sysprep_params = {}
for i in range(len(fields)):
- if needed[i].validator(output[i]):
- image.os.sysprep_params[needed[i].name] = output[i]
+ param = needed[names[i]]
+ if param.validator(output[i]):
+ image.os.sysprep_params[names[i]] = output[i]
else:
d.msgbox("The value you provided for parameter: %s is not valid" %
name, width=SMALL_WIDTH)
if 'DESCRIPTION' in session['metadata'] else '')
# Create Sysprep Params Wizard Page
- needed = image.os.needed_sysprep_params()
+ needed = image.os.needed_sysprep_params
+ param_names = needed.keys()
def sysprep_params_fields():
fields = []
available = image.os.sysprep_params
- for param in needed:
- text = param.description
- default = available[param.name] if param.name in available else ""
- fields.append(("%s: " % text, default, param.length))
+ for name in param_names:
+ text = needed[name].description
+ default = available[name] if name in available else ""
+ fields.append(("%s: " % text, default, needed[name].maxlen))
return fields
def sysprep_params_validate(answer):
params = {}
for i in range(len(answer)):
- if needed[i].validator(answer):
- params[needed[i].name] = answer[i]
+ if needed[param_names[i]].validator(answer):
+ params[param_names[i]] = answer[i]
else:
session['dialog'].msgbox("Invalid value for parameter `%s'" %
- needed[i].name)
+ param_names[i])
raise WizardReloadPage
return params
def sysprep(message, enabled=True, **kwargs):
"""Decorator for system preparation tasks"""
- def wrapper1(func):
+ def wrapper(func):
func.sysprep = True
func.enabled = enabled
func.executed = False
setattr(func, key, val)
@wraps(func)
- def wrapper2(self, print_message=True):
+ def inner(self, print_message=True):
if print_message:
self.out.output(message)
return func(self)
- return wrapper2
+ return inner
- return wrapper1
+ return wrapper
+
+
+def add_sysprep_param(name, descr, maxlen, default=None,
+ validator=lambda x: True):
+ """Decorator for init that adds the definition for a system preparation
+ parameter
+ """
+ def wrapper(func):
+
+ @wraps(func)
+ def inner(self, *args, **kwargs):
+
+ func(self, *args, **kwargs)
+
+ if not hasattr(self, 'needed_sysprep_params'):
+ self.needed_sysprep_params = {}
+ getattr(self, 'needed_sysprep_params')[name] = \
+ self.SysprepParam(descr, maxlen, validator)
+ return inner
+
+ return wrapper
+
+
+def del_sysprep_param(name):
+ """Decorator for init that deletes a previously added sysprep parameter
+ definition .
+ """
+ def wrapper(func):
+
+ @wraps(func)
+ def inner(self, *args, **kwargs):
+ del self.needed_sysprep_params[nam]
+ func(self, *args, **kwargs)
+
+ return inner
+
+ return wrapper
class OSBase(object):
"""Basic operating system class"""
- SysprepParam = namedtuple('SysprepParam',
- 'name description length validator')
+ SysprepParam = namedtuple('SysprepParam', 'description maxlen validator')
def __init__(self, image, **kargs):
self.image = image
self.out.output()
- def needed_sysprep_params(self):
- """Returns a list of needed sysprep parameters. Each element in the
- list is a SysprepParam object.
- """
- return []
-
def list_syspreps(self):
"""Returns a list of sysprep objects"""
objs = [getattr(self, name) for name in dir(self)
"""This module hosts OS-specific code common for the various Microsoft
Windows OSs."""
-from image_creator.os_type import OSBase, sysprep
+from image_creator.os_type import OSBase, sysprep, add_sysprep_param
from image_creator.util import FatalError, check_guestfs_version, get_command
from image_creator.winexe import WinEXE, WinexeTimeout
class Windows(OSBase):
"""OS class for Windows"""
+
+ @add_sysprep_param('password', 'Image Administrator Password', 20)
def __init__(self, image, **kargs):
super(Windows, self).__init__(image, **kargs)
self.product_name = self.g.inspect_get_product_name(self.root)
- def needed_sysprep_params(self):
- """Returns a list of needed sysprep parameters. Each element in the
- list is a SysprepParam object.
- """
- password = self.SysprepParam(
- 'password', 'Image Administrator Password', 20, lambda x: True)
-
- return [password]
-
@sysprep('Disabling IPv6 privacy extensions')
def disable_ipv6_privacy_extensions(self):
"""Disable IPv6 privacy extensions"""
raise FatalError("Image is already syspreped!")
txt = "System preparation parameter: `%s' is needed but missing!"
- for param in self.needed_sysprep_params():
- if param[0] not in self.sysprep_params:
- raise FatalError(txt % param[0])
+ for param in self.needed_sysprep_params:
+ if param not in self.sysprep_params:
+ raise FatalError(txt % param)
self.mount(readonly=False)
try: