Merge "don't ask for cinder vg data if present in answers file" into folsom
This commit is contained in:
		@@ -5,16 +5,12 @@ __all__ = (
 | 
			
		||||
 | 
			
		||||
    'InstallError',
 | 
			
		||||
    'FlagValidationError',
 | 
			
		||||
    'MissingRequirements',
 | 
			
		||||
 | 
			
		||||
    'PluginError',
 | 
			
		||||
    'ParamProcessingError',
 | 
			
		||||
    'ParamValidationError',
 | 
			
		||||
 | 
			
		||||
    'NetworkError',
 | 
			
		||||
    'ScriptRuntimeError',
 | 
			
		||||
 | 
			
		||||
     
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +20,7 @@ class PackStackError(Exception):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MissingRequirements(PackStackError):
 | 
			
		||||
    """Raised when minimum install requirements are not met"""
 | 
			
		||||
    """Raised when minimum install requirements are not met."""
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -32,12 +28,10 @@ class InstallError(PackStackError):
 | 
			
		||||
    """Exception for generic errors during setup run."""
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FlagValidationError(InstallError):
 | 
			
		||||
    """Raised when single flag validation fails."""
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ParamValidationError(InstallError):
 | 
			
		||||
    """Raised when parameter value validation fails."""
 | 
			
		||||
    pass
 | 
			
		||||
@@ -46,7 +40,6 @@ class ParamValidationError(InstallError):
 | 
			
		||||
class PluginError(PackStackError):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ParamProcessingError(PluginError):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,7 @@ WARN_VAL_IS_HOSTNAME = ("Warning: Packstack failed to change given "
 | 
			
		||||
INFO_STRING_LEN_LESS_THAN_MIN="String length is less than the minimum allowed: %s"
 | 
			
		||||
INFO_STRING_EXCEEDS_MAX_LENGTH="String length exceeds the maximum length allowed: %s"
 | 
			
		||||
INFO_STRING_CONTAINS_ILLEGAL_CHARS="String contains illegal characters"
 | 
			
		||||
INFO_CINDER_VOLUMES_EXISTS="Did not create a cinder volume group, one already existed"
 | 
			
		||||
 | 
			
		||||
WARN_WEAK_PASS="Warning: Weak Password."
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -72,13 +72,13 @@ def gethostlist(CONF):
 | 
			
		||||
    for key, value in CONF.items():
 | 
			
		||||
        if key.endswith("_HOST"):
 | 
			
		||||
            value = value.split('/')[0]
 | 
			
		||||
            if value not in hosts:
 | 
			
		||||
            if value not in hosts and value:
 | 
			
		||||
                hosts.append(value)
 | 
			
		||||
        if key.endswith("_HOSTS"):
 | 
			
		||||
            for host in value.split(","):
 | 
			
		||||
                host = host.strip()
 | 
			
		||||
                host = host.split('/')[0]
 | 
			
		||||
                if host not in hosts:
 | 
			
		||||
                if host not in hosts and host:
 | 
			
		||||
                    hosts.append(host)
 | 
			
		||||
    return hosts
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,17 +7,18 @@ import uuid
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from packstack.installer import exceptions
 | 
			
		||||
from packstack.installer import run_setup as setup
 | 
			
		||||
from packstack.installer import engine_validators as validate
 | 
			
		||||
from packstack.installer import engine_processors as process
 | 
			
		||||
from packstack.installer import engine_validators as validate
 | 
			
		||||
 | 
			
		||||
from packstack.installer import basedefs
 | 
			
		||||
import packstack.installer.common_utils as utils
 | 
			
		||||
from packstack.installer.exceptions import InstallError
 | 
			
		||||
 | 
			
		||||
from packstack.modules.ospluginutils import getManifestTemplate, appendManifestFile
 | 
			
		||||
from packstack.installer.exceptions import ScriptRuntimeError
 | 
			
		||||
from packstack.installer import output_messages
 | 
			
		||||
 | 
			
		||||
# Controller object will be initialized from main flow
 | 
			
		||||
# Controller object will
 | 
			
		||||
# be initialized from main flow
 | 
			
		||||
controller = None
 | 
			
		||||
 | 
			
		||||
# Plugin name
 | 
			
		||||
@@ -26,6 +27,7 @@ PLUGIN_NAME_COLORED = utils.getColoredText(PLUGIN_NAME, basedefs.BLUE)
 | 
			
		||||
 | 
			
		||||
logging.debug("plugin %s loaded", __name__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def initConfig(controllerObject):
 | 
			
		||||
    global controller
 | 
			
		||||
    controller = controllerObject
 | 
			
		||||
@@ -67,47 +69,11 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "USE_DEFAULT"     : True,
 | 
			
		||||
                   "NEED_CONFIRM"    : True,
 | 
			
		||||
                   "CONDITION"       : False },
 | 
			
		||||
                  {"CMD_OPTION"      : "cinder-volumes-size",
 | 
			
		||||
                   "USAGE"           : "Cinder's volumes group size",
 | 
			
		||||
                   "PROMPT"          : "Enter Cinder's volumes group size",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : validate.validateStringNotEmpty,
 | 
			
		||||
                   "DEFAULT_VALUE"   : "2G",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
                   "CONF_NAME"       : "CONFIG_CINDER_VOLUMES_SIZE",
 | 
			
		||||
                   "USE_DEFAULT"     : True,
 | 
			
		||||
                   "NEED_CONFIRM"    : False,
 | 
			
		||||
                   "CONDITION"       : False },
 | 
			
		||||
                  {"CMD_OPTION"      : "cinder-volumes-path",
 | 
			
		||||
                   "USAGE"           : "Cinder's volumes group path",
 | 
			
		||||
                   "PROMPT"          : "Enter Cinder's volumes group path",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : validate.validateStringNotEmpty,
 | 
			
		||||
                   "DEFAULT_VALUE"   : "/var/lib/cinder",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
                   "CONF_NAME"       : "CONFIG_CINDER_VOLUMES_PATH",
 | 
			
		||||
                   "USE_DEFAULT"     : True,
 | 
			
		||||
                   "NEED_CONFIRM"    : False,
 | 
			
		||||
                   "CONDITION"       : False },
 | 
			
		||||
                  {"CMD_OPTION"      : "cinder-volumes",
 | 
			
		||||
                   "USAGE"           : "Cinder's volumes group name",
 | 
			
		||||
                   "PROMPT"          : "Enter Cinder's volumes group name",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : validate.validateStringNotEmpty,
 | 
			
		||||
                   "DEFAULT_VALUE"   : "cinder-volumes",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
                   "CONF_NAME"       : "CONFIG_CINDER_VOLUMES",
 | 
			
		||||
                   "USE_DEFAULT"     : True,
 | 
			
		||||
                   "NEED_CONFIRM"    : False,
 | 
			
		||||
                   "CONDITION"       : False },
 | 
			
		||||
                  {"CMD_OPTION"      : "cinder-volumes-create",
 | 
			
		||||
                   "USAGE"           : "Create Cinder's volumes group",
 | 
			
		||||
                   "PROMPT"          : "Should Cinder's volumes group be created?",
 | 
			
		||||
                   "OPTION_LIST"     : ["y", "n"],
 | 
			
		||||
                   "VALIDATION_FUNC" : createVolume,
 | 
			
		||||
                   "VALIDATORS"      : [validate.validate_options],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "y",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -126,54 +92,80 @@ def initConfig(controllerObject):
 | 
			
		||||
 | 
			
		||||
    controller.addGroup(groupDict, paramsList)
 | 
			
		||||
 | 
			
		||||
    paramsList = [
 | 
			
		||||
                  {"CMD_OPTION"      : "cinder-volumes-size",
 | 
			
		||||
                   "USAGE"           : "Cinder's volumes group size",
 | 
			
		||||
                   "PROMPT"          : "Enter Cinder's volumes group size",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATORS" : [validate.validate_not_empty],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "20G",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
                   "CONF_NAME"       : "CONFIG_CINDER_VOLUMES_SIZE",
 | 
			
		||||
                   "USE_DEFAULT"     : False,
 | 
			
		||||
                   "NEED_CONFIRM"    : False,
 | 
			
		||||
                   "CONDITION"       : False },
 | 
			
		||||
                 ]
 | 
			
		||||
 | 
			
		||||
    groupDict = { "GROUP_NAME"            : "CINDERVOLUMECREATE",
 | 
			
		||||
                  "DESCRIPTION"           : "Cinder volume create Config parameters",
 | 
			
		||||
                  "PRE_CONDITION"         : "CONFIG_CINDER_VOLUMES_CREATE",
 | 
			
		||||
                  "PRE_CONDITION_MATCH"   : "y",
 | 
			
		||||
                  "POST_CONDITION"        : False,
 | 
			
		||||
                  "POST_CONDITION_MATCH"  : True}
 | 
			
		||||
 | 
			
		||||
    controller.addGroup(groupDict, paramsList)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def initSequences(controller):
 | 
			
		||||
    if controller.CONF['CONFIG_CINDER_INSTALL'] != 'y':
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    cindersteps = [
 | 
			
		||||
             {'title': 'Adding Cinder Keystone manifest entries', 'functions':[createkeystonemanifest]},
 | 
			
		||||
             {'title': 'Checking if the Cinder server has a cinder-volumes vg', 'functions':[checkcindervg]},
 | 
			
		||||
             {'title': 'Adding Cinder manifest entries', 'functions':[createmanifest]}
 | 
			
		||||
    cinder_steps = [
 | 
			
		||||
             {'title': 'Adding Cinder Keystone manifest entries', 'functions':[create_keystone_manifest]},
 | 
			
		||||
             {'title': 'Checking if the Cinder server has a cinder-volumes vg', 'functions':[check_cinder_vg]},
 | 
			
		||||
             {'title': 'Adding Cinder manifest entries', 'functions':[create_manifest]}
 | 
			
		||||
    ]
 | 
			
		||||
    controller.addSequence("Installing OpenStack Cinder", [], [], cindersteps)
 | 
			
		||||
    controller.addSequence("Installing OpenStack Cinder", [], [], cinder_steps)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def check_cinder_vg():
 | 
			
		||||
 | 
			
		||||
def createVolume(param, options=[]):
 | 
			
		||||
    """
 | 
			
		||||
    Check that provided host is listening on port 22
 | 
			
		||||
    """
 | 
			
		||||
    if param == "n":
 | 
			
		||||
        return True
 | 
			
		||||
    cinders_volume = 'cinder-volumes'
 | 
			
		||||
 | 
			
		||||
    for option in ['CONFIG_CINDER_VOLUMES_SIZE', 'CONFIG_CINDER_VOLUMES_PATH']:
 | 
			
		||||
        param = controller.getParamByName(option)
 | 
			
		||||
        param.setKey('USE_DEFAULT', False)
 | 
			
		||||
        setup.input_param(param)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def checkcindervg():
 | 
			
		||||
    # Do we have a cinder-volumes vg?
 | 
			
		||||
    have_cinders_volume = False
 | 
			
		||||
    server = utils.ScriptRunner(controller.CONF['CONFIG_CINDER_HOST'])
 | 
			
		||||
 | 
			
		||||
    cinders_volume = controller.CONF['CONFIG_CINDER_VOLUMES']
 | 
			
		||||
    server.append('vgdisplay %s' % cinders_volume)
 | 
			
		||||
    try:
 | 
			
		||||
        server.execute()
 | 
			
		||||
        have_cinders_volume = True
 | 
			
		||||
    except ScriptRuntimeError:
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    if controller.CONF["CONFIG_CINDER_VOLUMES_CREATE"] != "y":
 | 
			
		||||
        server.append('vgdisplay %s' % cinders_volume)
 | 
			
		||||
        err = "The cinder server should contain a cinder-volumes volume group"
 | 
			
		||||
        if not have_cinders_volume:
 | 
			
		||||
            raise exceptions.MissingRequirements("The cinder server should"
 | 
			
		||||
                " contain a cinder-volumes volume group")
 | 
			
		||||
    else:
 | 
			
		||||
        if have_cinders_volume:
 | 
			
		||||
            controller.MESSAGES.append(
 | 
			
		||||
                output_messages.INFO_CINDER_VOLUMES_EXISTS)
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        server = utils.ScriptRunner(controller.CONF['CONFIG_CINDER_HOST'])
 | 
			
		||||
        logging.info("A new cinder volumes group will be created")
 | 
			
		||||
        err = "Cinder's volume group '%s' could not be created" % \
 | 
			
		||||
                            controller.CONF['CONFIG_CINDER_VOLUMES']
 | 
			
		||||
                            cinders_volume
 | 
			
		||||
 | 
			
		||||
        cinders_volume_path = controller.CONF['CONFIG_CINDER_VOLUMES_PATH']
 | 
			
		||||
        cinders_volume_path = '/var/lib/cinder'
 | 
			
		||||
        server.append('mkdir -p  %s' % cinders_volume_path)
 | 
			
		||||
        logging.debug("Volume's path: %s" % cinders_volume_path)
 | 
			
		||||
 | 
			
		||||
        cinders_volume_path = os.path.join(cinders_volume_path, cinders_volume)
 | 
			
		||||
        server.append('dd if=/dev/zero of=%s bs=1 count=0 seek=%s' % \
 | 
			
		||||
            (cinders_volume_path, controller.CONF['CONFIG_CINDER_VOLUMES_SIZE']))
 | 
			
		||||
            (cinders_volume_path,
 | 
			
		||||
             controller.CONF['CONFIG_CINDER_VOLUMES_SIZE']))
 | 
			
		||||
        server.append('losetup /dev/loop2  %s' % cinders_volume_path)
 | 
			
		||||
        server.append('pvcreate /dev/loop2')
 | 
			
		||||
        server.append('vgcreate %s /dev/loop2' % cinders_volume)
 | 
			
		||||
@@ -181,30 +173,29 @@ def checkcindervg():
 | 
			
		||||
        # Let's make sure it exists
 | 
			
		||||
        server.append('vgdisplay %s' % cinders_volume)
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        server.execute()
 | 
			
		||||
    except:
 | 
			
		||||
        if controller.CONF["CONFIG_CINDER_VOLUMES_CREATE"] == "y":
 | 
			
		||||
        try:
 | 
			
		||||
            server.execute()
 | 
			
		||||
        except:
 | 
			
		||||
            # Release loop device if cinder's volume creation
 | 
			
		||||
            # fails.
 | 
			
		||||
            try:
 | 
			
		||||
                logging.debug("Release loop device since volume's creation failed")
 | 
			
		||||
                logging.debug("Release loop device, volume creation failed")
 | 
			
		||||
                server = utils.ScriptRunner(controller.CONF['CONFIG_CINDER_HOST'])
 | 
			
		||||
                server.append('losetup -d /dev/loop2')
 | 
			
		||||
                server.execute()
 | 
			
		||||
            except:
 | 
			
		||||
                pass
 | 
			
		||||
 | 
			
		||||
        raise exceptions.MissingRequirements(err)
 | 
			
		||||
            raise exceptions.MissingRequirements(err)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def createkeystonemanifest():
 | 
			
		||||
def create_keystone_manifest():
 | 
			
		||||
    manifestfile = "%s_keystone.pp" % controller.CONF['CONFIG_KEYSTONE_HOST']
 | 
			
		||||
    manifestdata = getManifestTemplate("keystone_cinder.pp")
 | 
			
		||||
    appendManifestFile(manifestfile, manifestdata)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def createmanifest():
 | 
			
		||||
def create_manifest():
 | 
			
		||||
    manifestfile = "%s_cinder.pp" % controller.CONF['CONFIG_CINDER_HOST']
 | 
			
		||||
    manifestdata = getManifestTemplate("cinder.pp")
 | 
			
		||||
    appendManifestFile(manifestfile, manifestdata)
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ def initSequences(controller):
 | 
			
		||||
    controller.insertSequence("Clean Up", [], [], puppetpresteps, index=0)
 | 
			
		||||
 | 
			
		||||
    puppetsteps = [
 | 
			
		||||
             {'title': 'Installing dependencies', 'functions': [installpuppet]},
 | 
			
		||||
             {'title': 'Installing Dependencies', 'functions':[installdeps]},
 | 
			
		||||
             {'title': 'Copying Puppet modules and manifests', 'functions':[copyPuppetModules]},
 | 
			
		||||
             {'title': 'Applying Puppet manifests', 'functions':[applyPuppetManifest]},
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "PROMPT"          : ("To subscribe each server with RHN Satellite "
 | 
			
		||||
                                        "enter RHN Satellite server URL"),
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -93,7 +93,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "PROMPT"          : ("Enter RHN Satellite username or leave plain "
 | 
			
		||||
                                        "if you will use activation key instead"),
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : False,
 | 
			
		||||
                   "LOOSE_VALIDATION": True,
 | 
			
		||||
@@ -106,7 +106,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "PROMPT"          : ("Enter RHN Satellite password or leave plain "
 | 
			
		||||
                                        "if you will use activation key instead"),
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -119,7 +119,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "PROMPT"          : ("Enter RHN Satellite activation key or leave plain "
 | 
			
		||||
                                        "if you used username/password instead"),
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -131,7 +131,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "USAGE"           : "Specify a path or URL to a SSL CA certificate to use",
 | 
			
		||||
                   "PROMPT"          : "Specify a path or URL to a SSL CA certificate to use",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -147,7 +147,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                                        "be used as an identifier for the system in RHN "
 | 
			
		||||
                                        "Satellite"),
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -159,7 +159,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "USAGE"           : "Specify a HTTP proxy to use with RHN Satellite",
 | 
			
		||||
                   "PROMPT"          : "Specify a HTTP proxy to use with RHN Satellite",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -171,7 +171,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "USAGE"           : "Specify a username to use with an authenticated HTTP proxy",
 | 
			
		||||
                   "PROMPT"          : "Specify a username to use with an authenticated HTTP proxy",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -183,7 +183,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                   "USAGE"           : "Specify a password to use with an authenticated HTTP proxy.",
 | 
			
		||||
                   "PROMPT"          : "Specify a password to use with an authenticated HTTP proxy.",
 | 
			
		||||
                   "OPTION_LIST"     : [],
 | 
			
		||||
                   "VALIDATION_FUNC" : lambda a,b: True,
 | 
			
		||||
                   "VALIDATORS"      : [lambda a,b: True],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
@@ -196,7 +196,7 @@ def initConfig(controllerObject):
 | 
			
		||||
                                        "flags are: novirtinfo, norhnsd, nopackages"),
 | 
			
		||||
                   "PROMPT"          : "Enter comma separated list of flags passed to rhnreg_ks",
 | 
			
		||||
                   "OPTION_LIST"     : ['novirtinfo', 'norhnsd', 'nopackages'],
 | 
			
		||||
                   "VALIDATION_FUNC" : validate_multi_options,
 | 
			
		||||
                   "VALIDATORS"      : [validate_multi_options],
 | 
			
		||||
                   "DEFAULT_VALUE"   : "",
 | 
			
		||||
                   "MASK_INPUT"      : True,
 | 
			
		||||
                   "LOOSE_VALIDATION": False,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user