diff --git a/packstack/installer/core/parameters.py b/packstack/installer/core/parameters.py index 5636c1690..e27c5e0c1 100644 --- a/packstack/installer/core/parameters.py +++ b/packstack/installer/core/parameters.py @@ -11,7 +11,7 @@ class Parameter(object): allowed_keys = ('CONF_NAME', 'CMD_OPTION', 'USAGE', 'PROMPT', 'PROCESSORS', 'VALIDATORS', 'LOOSE_VALIDATION', 'DEFAULT_VALUE', 'USE_DEFAULT', 'OPTION_LIST', - 'MASK_INPUT', 'NEED_CONFIRM','CONDITION') + 'MASK_INPUT', 'NEED_CONFIRM', 'CONDITION', 'DEPRECATES') def __init__(self, attributes=None): attributes = attributes or {} diff --git a/packstack/installer/run_setup.py b/packstack/installer/run_setup.py index 8dfc5ecda..605c58a1e 100644 --- a/packstack/installer/run_setup.py +++ b/packstack/installer/run_setup.py @@ -310,22 +310,53 @@ def _handleGroupCondition(config, conditionName, conditionValue): return conditionValue -def _loadParamFromFile(config, section, paramName): +def _loadParamFromFile(config, section, param_name): """ read param from file validate it and load to to global conf dict """ - # Get paramName from answer file + param = controller.getParamByName(param_name) + + # Get value from answer file try: - value = config.get(section, paramName) + value = config.get(section, param_name) except ConfigParser.NoOptionError: - raise KeyError('Parser cannot find option %s in ' - 'answer file.' % paramName) + value = None + # Check for deprecated parameters + deprecated = param.DEPRECATES if param.DEPRECATES is not None else [] + for old_name in deprecated: + try: + val = config.get(section, old_name) + except ConfigParser.NoOptionError: + continue + if not val: + # value is empty string + continue + if value is None: + value = val + if value != val: + raise ValueError('Parameter %(param_name)s deprecates ' + 'following parameters:\n%(deprecated)s.\n' + 'Please either use parameter %(param_name)s ' + 'or use same value for all deprecated ' + 'parameters.' % locals()) + if deprecated and value is not None: + controller.MESSAGES.append('Deprecated parameter has been used ' + 'in answer file. Please use parameter ' + '%(param_name)s next time. This ' + 'parameter deprecates following ' + 'parameters: %(deprecated)s.' + % locals()) + if value is None: + # Let's use default value if we have one + value = getattr(param, 'DEFAULT_VALUE', None) + if value is None: + raise KeyError('Parser cannot find option %s in answer file.' + % param_name) # Validate param value using its validation func - param = controller.getParamByName(paramName) value = process_param_value(param, value) validate_param_value(param, value) diff --git a/packstack/plugins/amqp_002.py b/packstack/plugins/amqp_002.py index 559a92eb7..a8e597fb5 100644 --- a/packstack/plugins/amqp_002.py +++ b/packstack/plugins/amqp_002.py @@ -37,7 +37,8 @@ def initConfig(controller): "CONF_NAME": "CONFIG_AMQP_BACKEND", "USE_DEFAULT": False, "NEED_CONFIRM": False, - "CONDITION": False}, + "CONDITION": False, + "DEPRECATES": ['CONFIG_AMQP_SERVER']}, {"CMD_OPTION": "amqp-host", "USAGE": ("The IP address of the server on which to install the " diff --git a/packstack/plugins/prescript_000.py b/packstack/plugins/prescript_000.py index 089235a80..02d6c33a3 100644 --- a/packstack/plugins/prescript_000.py +++ b/packstack/plugins/prescript_000.py @@ -264,7 +264,22 @@ def initConfig(controller): "LOOSE_VALIDATION": False, "USE_DEFAULT": False, "NEED_CONFIRM": False, - "CONDITION": False}, + "CONDITION": False, + "DEPRECATES": ['CONFIG_CEILOMETER_HOST', + 'CONFIG_CINDER_HOST', + 'CONFIG_GLANCE_HOST', + 'CONFIG_HORIZON_HOST', + 'CONFIG_HEAT_HOST', + 'CONFIG_KEYSTONE_HOST', + 'CONFIG_NAGIOS_HOST', + 'CONFIG_NEUTRON_SERVER_HOST', + 'CONFIG_NEUTRON_LBAAS_HOSTS', + 'CONFIG_NOVA_API_HOST', + 'CONFIG_NOVA_CERT_HOST', + 'CONFIG_NOVA_VNCPROXY_HOST', + 'CONFIG_NOVA_SCHED_HOST', + 'CONFIG_OSCLIENT_HOST', + 'CONFIG_SWIFT_PROXY_HOSTS']}, {"CONF_NAME": "CONFIG_COMPUTE_HOSTS", "CMD_OPTION": "os-compute-hosts", @@ -280,7 +295,8 @@ def initConfig(controller): "LOOSE_VALIDATION": False, "USE_DEFAULT": False, "NEED_CONFIRM": False, - "CONDITION": False}, + "CONDITION": False, + "DEPRECATES": ['CONFIG_NOVA_COMPUTE_HOSTS']}, {"CONF_NAME": "CONFIG_NETWORK_HOSTS", "CMD_OPTION": "os-network-hosts", @@ -297,7 +313,11 @@ def initConfig(controller): "LOOSE_VALIDATION": False, "USE_DEFAULT": False, "NEED_CONFIRM": False, - "CONDITION": False}, + "CONDITION": False, + "DEPRECATES": ['CONFIG_NEUTRON_L3_HOSTS', + 'CONFIG_NEUTRON_DHCP_HOSTS', + 'CONFIG_NEUTRON_METADATA_HOSTS', + 'CONFIG_NOVA_NETWORK_HOSTS']}, {"CMD_OPTION": "os-vmware", "USAGE": ("Set to 'y' if you want to use VMware vCenter as hypervisor" diff --git a/packstack/plugins/swift_600.py b/packstack/plugins/swift_600.py index 8ffd3f668..0ba6b7298 100644 --- a/packstack/plugins/swift_600.py +++ b/packstack/plugins/swift_600.py @@ -58,7 +58,8 @@ def initConfig(controller): "CONF_NAME": "CONFIG_SWIFT_STORAGES", "USE_DEFAULT": False, "NEED_CONFIRM": False, - "CONDITION": False}, + "CONDITION": False, + "DEPRECATES": ['CONFIG_SWIFT_STORAGE_HOSTS']}, {"CMD_OPTION": "os-swift-storage-zones", "USAGE": ("Number of swift storage zones, this number MUST be "