Allow specifying of a global --password option
This fixes bz#1108742 by providing a new global parameter "--default-password", that will be the default for all other password parameters if set. Each individual password parameter can override the default global, and if none are set, a random password will be used as before. As part of the change, process_param_value() has been updated, to avoid leaking passwords when they are modified by a processor function. Change-Id: Ic5947567599c8b221b7a9e60acb4708429507741
This commit is contained in:
@@ -43,7 +43,10 @@ Global Options
|
|||||||
Set to 'y' if you would like Packstack to install the OpenStack Client packages. An admin "rc" file will also be installed ['y', 'n'].
|
Set to 'y' if you would like Packstack to install the OpenStack Client packages. An admin "rc" file will also be installed ['y', 'n'].
|
||||||
|
|
||||||
**CONFIG_NTP_SERVERS**
|
**CONFIG_NTP_SERVERS**
|
||||||
Comma separated list of NTP servers. Leave plain if Packstack should not install ntpd on instances..
|
Comma separated list of NTP servers. Leave plain if Packstack should not install ntpd on instances.
|
||||||
|
|
||||||
|
**CONFIG_DEFAULT_PASSWORD**
|
||||||
|
A default password to be used on all services, databases, keys, etc. It will be overriden by any explicitly set password. Leave plain to not set a default password.
|
||||||
|
|
||||||
**CONFIG_NAGIOS_INSTALL**
|
**CONFIG_NAGIOS_INSTALL**
|
||||||
Set to 'y' if you would like Packstack to install Nagios to monitor openstack hosts ['y', 'n'].
|
Set to 'y' if you would like Packstack to install Nagios to monitor openstack hosts ['y', 'n'].
|
||||||
|
|||||||
@@ -85,5 +85,5 @@ ERR_FAILURE="General failure"
|
|||||||
ERR_NO_ANSWER_FILE="Error: Could not find file %s"
|
ERR_NO_ANSWER_FILE="Error: Could not find file %s"
|
||||||
ERR_ONLY_1_FLAG="Error: The %s flag is mutually exclusive to all other command line options"
|
ERR_ONLY_1_FLAG="Error: The %s flag is mutually exclusive to all other command line options"
|
||||||
ERR_REMOVE_REMOTE_VAR="Error: Failed to remove directory %s on %s, it contains sensitive data and should be removed"
|
ERR_REMOVE_REMOTE_VAR="Error: Failed to remove directory %s on %s, it contains sensitive data and should be removed"
|
||||||
|
ERR_REMOVE_TMP_FILE="Error: Failed to remove temporary file %s, it contains sensitive data and should be removed"
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import netaddr
|
import netaddr
|
||||||
import os
|
import os
|
||||||
|
import uuid
|
||||||
|
|
||||||
from .utils import ScriptRunner, force_ip
|
from .utils import ScriptRunner, force_ip
|
||||||
from .exceptions import ParamProcessingError, NetworkError
|
from .exceptions import ParamProcessingError, NetworkError
|
||||||
@@ -11,7 +12,7 @@ __all__ = ('ParamProcessingError', 'process_cidr', 'process_host',
|
|||||||
'process_ssh_key')
|
'process_ssh_key')
|
||||||
|
|
||||||
|
|
||||||
def process_cidr(param, process_args=None):
|
def process_cidr(param, param_name, process_args=None):
|
||||||
"""
|
"""
|
||||||
Corrects given CIDR if necessary.
|
Corrects given CIDR if necessary.
|
||||||
"""
|
"""
|
||||||
@@ -24,7 +25,7 @@ def process_cidr(param, process_args=None):
|
|||||||
raise ParamProcessingError(str(ex))
|
raise ParamProcessingError(str(ex))
|
||||||
|
|
||||||
|
|
||||||
def process_host(param, process_args=None):
|
def process_host(param, param_name, process_args=None):
|
||||||
"""
|
"""
|
||||||
Tries to change given parameter to IP address, if it is in hostname
|
Tries to change given parameter to IP address, if it is in hostname
|
||||||
format
|
format
|
||||||
@@ -37,7 +38,7 @@ def process_host(param, process_args=None):
|
|||||||
raise ParamProcessingError(str(ex))
|
raise ParamProcessingError(str(ex))
|
||||||
|
|
||||||
|
|
||||||
def process_ssh_key(param, process_args=None):
|
def process_ssh_key(param, param_name, process_args=None):
|
||||||
"""
|
"""
|
||||||
Generates SSH key if given key in param doesn't exist. In case param
|
Generates SSH key if given key in param doesn't exist. In case param
|
||||||
is an empty string it generates default SSH key ($HOME/.ssh/id_rsa).
|
is an empty string it generates default SSH key ($HOME/.ssh/id_rsa).
|
||||||
@@ -63,7 +64,7 @@ def process_ssh_key(param, process_args=None):
|
|||||||
return param
|
return param
|
||||||
|
|
||||||
|
|
||||||
def process_add_quotes_around_values(param, process_args=None):
|
def process_add_quotes_around_values(param, param_name, process_args=None):
|
||||||
"""
|
"""
|
||||||
Add a single quote character around each element of a comma
|
Add a single quote character around each element of a comma
|
||||||
separated list of values
|
separated list of values
|
||||||
@@ -77,3 +78,33 @@ def process_add_quotes_around_values(param, process_args=None):
|
|||||||
params_list[index] = elem
|
params_list[index] = elem
|
||||||
param = ','.join(params_list)
|
param = ','.join(params_list)
|
||||||
return param
|
return param
|
||||||
|
|
||||||
|
def process_password(param, param_name, process_args=None):
|
||||||
|
"""
|
||||||
|
Process passwords, checking the following:
|
||||||
|
1- If there is a user-entered password, use it
|
||||||
|
2- Otherwise, check for a global default password, and use it if available
|
||||||
|
3- As a last resort, generate a random password
|
||||||
|
"""
|
||||||
|
if not hasattr(process_password,"pw_dict"):
|
||||||
|
process_password.pw_dict = {}
|
||||||
|
|
||||||
|
if param == "PW_PLACEHOLDER":
|
||||||
|
if process_args["CONFIG_DEFAULT_PASSWORD"] != "":
|
||||||
|
param = process_args["CONFIG_DEFAULT_PASSWORD"]
|
||||||
|
else:
|
||||||
|
# We need to make sure we store the random password we provide
|
||||||
|
# and return it once we are asked for it again
|
||||||
|
if param_name.endswith("_CONFIRMED"):
|
||||||
|
unconfirmed_param = param_name[:-10]
|
||||||
|
if unconfirmed_param in process_password.pw_dict:
|
||||||
|
param = process_password.pw_dict[unconfirmed_param]
|
||||||
|
else:
|
||||||
|
param = uuid.uuid4().hex[:16]
|
||||||
|
process_password.pw_dict[unconfirmed_param] = param
|
||||||
|
elif not param_name in process_password.pw_dict:
|
||||||
|
param = uuid.uuid4().hex[:16]
|
||||||
|
process_password.pw_dict[param_name] = param
|
||||||
|
else:
|
||||||
|
param = process_password.pw_dict[param_name]
|
||||||
|
return param
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ commandLineValues = {}
|
|||||||
# List to hold all values to be masked in logging (i.e. passwords and sensitive data)
|
# List to hold all values to be masked in logging (i.e. passwords and sensitive data)
|
||||||
#TODO: read default values from conf_param?
|
#TODO: read default values from conf_param?
|
||||||
masked_value_set = set()
|
masked_value_set = set()
|
||||||
|
tmpfiles = []
|
||||||
|
|
||||||
def initLogging (debug):
|
def initLogging (debug):
|
||||||
global logFile
|
global logFile
|
||||||
@@ -147,8 +147,7 @@ def input_param(param):
|
|||||||
confirmedParamName = param.CONF_NAME + "_CONFIRMED"
|
confirmedParamName = param.CONF_NAME + "_CONFIRMED"
|
||||||
confirmedParam.CONF_NAME = confirmedParamName
|
confirmedParam.CONF_NAME = confirmedParamName
|
||||||
confirmedParam.PROMPT = output_messages.INFO_CONF_PARAMS_PASSWD_CONFIRM_PROMPT
|
confirmedParam.PROMPT = output_messages.INFO_CONF_PARAMS_PASSWD_CONFIRM_PROMPT
|
||||||
confirmedParam.VALIDATORS = [validators.validate_not_empty]
|
# Now get both values from user (with existing validations)
|
||||||
# Now get both values from user (with existing validations
|
|
||||||
while True:
|
while True:
|
||||||
_getInputFromUser(param)
|
_getInputFromUser(param)
|
||||||
_getInputFromUser(confirmedParam)
|
_getInputFromUser(confirmedParam)
|
||||||
@@ -274,10 +273,11 @@ def process_param_value(param, value):
|
|||||||
logging.debug("Processing value of parameter "
|
logging.debug("Processing value of parameter "
|
||||||
"%s." % param.CONF_NAME)
|
"%s." % param.CONF_NAME)
|
||||||
try:
|
try:
|
||||||
new_value = proc_func(_value, controller.CONF)
|
new_value = proc_func(_value, param.CONF_NAME, controller.CONF)
|
||||||
if new_value != _value:
|
if new_value != _value:
|
||||||
msg = output_messages.INFO_CHANGED_VALUE
|
if param.MASK_INPUT == False:
|
||||||
print msg % (_value, new_value)
|
msg = output_messages.INFO_CHANGED_VALUE
|
||||||
|
print msg % (_value, new_value)
|
||||||
_value = new_value
|
_value = new_value
|
||||||
else:
|
else:
|
||||||
logging.debug("Processor returned the original "
|
logging.debug("Processor returned the original "
|
||||||
@@ -429,6 +429,19 @@ def _getanswerfilepath():
|
|||||||
controller.MESSAGES.append(msg)
|
controller.MESSAGES.append(msg)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
def _gettmpanswerfilepath():
|
||||||
|
path = None
|
||||||
|
msg = "Could not find a suitable path on which to create the temporary answerfile"
|
||||||
|
|
||||||
|
ts = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
|
||||||
|
|
||||||
|
p = os.path.expanduser("~/")
|
||||||
|
if os.access(p, os.W_OK):
|
||||||
|
path = os.path.abspath(os.path.join(p, "tmp-packstack-answers-%s.txt"%ts))
|
||||||
|
tmpfiles.append(path)
|
||||||
|
|
||||||
|
return path
|
||||||
|
|
||||||
def _handleInteractiveParams():
|
def _handleInteractiveParams():
|
||||||
try:
|
try:
|
||||||
logging.debug("Groups: %s" % ', '.join([x.GROUP_NAME for x in controller.getAllGroups()]))
|
logging.debug("Groups: %s" % ', '.join([x.GROUP_NAME for x in controller.getAllGroups()]))
|
||||||
@@ -474,13 +487,8 @@ def _handleInteractiveParams():
|
|||||||
else:
|
else:
|
||||||
logging.debug("no post condition check for group %s" % group.GROUP_NAME)
|
logging.debug("no post condition check for group %s" % group.GROUP_NAME)
|
||||||
|
|
||||||
path = _getanswerfilepath()
|
|
||||||
|
|
||||||
_displaySummary()
|
_displaySummary()
|
||||||
|
|
||||||
if path:
|
|
||||||
generateAnswerFile(path)
|
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
logging.error("keyboard interrupt caught")
|
logging.error("keyboard interrupt caught")
|
||||||
raise Exception(output_messages.ERR_EXP_KEYBOARD_INTERRUPT)
|
raise Exception(output_messages.ERR_EXP_KEYBOARD_INTERRUPT)
|
||||||
@@ -589,6 +597,11 @@ def _main(configFile=None):
|
|||||||
# Get parameters
|
# Get parameters
|
||||||
_handleParams(configFile)
|
_handleParams(configFile)
|
||||||
|
|
||||||
|
# Generate answer file
|
||||||
|
path = _getanswerfilepath()
|
||||||
|
if path:
|
||||||
|
generateAnswerFile(path)
|
||||||
|
|
||||||
# Update masked_value_list with user input values
|
# Update masked_value_list with user input values
|
||||||
_updateMaskedValueSet()
|
_updateMaskedValueSet()
|
||||||
|
|
||||||
@@ -634,6 +647,20 @@ def remove_remote_var_dirs():
|
|||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
controller.MESSAGES.append(utils.color_text(msg, 'red'))
|
controller.MESSAGES.append(utils.color_text(msg, 'red'))
|
||||||
|
|
||||||
|
def remove_temp_files():
|
||||||
|
"""
|
||||||
|
Removes any temporary files generated during
|
||||||
|
configuration
|
||||||
|
"""
|
||||||
|
for myfile in tmpfiles:
|
||||||
|
try:
|
||||||
|
os.unlink(myfile)
|
||||||
|
except Exception as e:
|
||||||
|
msg = output_messages.ERR_REMOVE_TMP_FILE % (myfile)
|
||||||
|
logging.error(msg)
|
||||||
|
logging.exception(e)
|
||||||
|
controller.MESSAGES.append(utils.color_text(msg, 'red'))
|
||||||
|
|
||||||
|
|
||||||
def generateAnswerFile(outputFile, overrides={}):
|
def generateAnswerFile(outputFile, overrides={}):
|
||||||
sep = os.linesep
|
sep = os.linesep
|
||||||
@@ -688,7 +715,7 @@ def single_step_aio_install(options):
|
|||||||
single_step_install(options)
|
single_step_install(options)
|
||||||
|
|
||||||
def single_step_install(options):
|
def single_step_install(options):
|
||||||
answerfilepath = _getanswerfilepath()
|
answerfilepath = _gettmpanswerfilepath()
|
||||||
if not answerfilepath:
|
if not answerfilepath:
|
||||||
_printAdditionalMessages()
|
_printAdditionalMessages()
|
||||||
return
|
return
|
||||||
@@ -892,6 +919,12 @@ def main():
|
|||||||
if options.gen_answer_file:
|
if options.gen_answer_file:
|
||||||
# Make sure only --gen-answer-file was supplied
|
# Make sure only --gen-answer-file was supplied
|
||||||
validateSingleFlag(options, "gen_answer_file")
|
validateSingleFlag(options, "gen_answer_file")
|
||||||
|
answerfilepath = _gettmpanswerfilepath()
|
||||||
|
if not answerfilepath:
|
||||||
|
_printAdditionalMessages()
|
||||||
|
return
|
||||||
|
generateAnswerFile(answerfilepath)
|
||||||
|
_handleParams(answerfilepath)
|
||||||
generateAnswerFile(options.gen_answer_file)
|
generateAnswerFile(options.gen_answer_file)
|
||||||
# Are we installing an all in one
|
# Are we installing an all in one
|
||||||
elif options.allinone:
|
elif options.allinone:
|
||||||
@@ -926,6 +959,7 @@ def main():
|
|||||||
|
|
||||||
finally:
|
finally:
|
||||||
remove_remote_var_dirs()
|
remove_remote_var_dirs()
|
||||||
|
remove_temp_files()
|
||||||
|
|
||||||
# Always print user params to log
|
# Always print user params to log
|
||||||
_printAdditionalMessages()
|
_printAdditionalMessages()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import uuid
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer import basedefs
|
from packstack.installer import basedefs
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
@@ -95,12 +96,13 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for NSS certificate database",
|
"PROMPT": "Enter the password for NSS certificate database",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:32],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": False,
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": True,
|
"LOOSE_VALIDATION": True,
|
||||||
"CONF_NAME": "CONFIG_AMQP_NSS_CERTDB_PW",
|
"CONF_NAME": "CONFIG_AMQP_NSS_CERTDB_PW",
|
||||||
"USE_DEFAULT": False,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
{"CMD_OPTION": "amqp-ssl-port",
|
{"CMD_OPTION": "amqp-ssl-port",
|
||||||
@@ -186,12 +188,13 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for user authentication",
|
"PROMPT": "Enter the password for user authentication",
|
||||||
"OPTION_LIST": ["y", "n"],
|
"OPTION_LIST": ["y", "n"],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": False,
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": True,
|
"LOOSE_VALIDATION": True,
|
||||||
"CONF_NAME": "CONFIG_AMQP_AUTH_PASSWORD",
|
"CONF_NAME": "CONFIG_AMQP_AUTH_PASSWORD",
|
||||||
"USE_DEFAULT": False,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
]
|
]
|
||||||
group = {"GROUP_NAME": "AMQPAUTH",
|
group = {"GROUP_NAME": "AMQPAUTH",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import uuid
|
|||||||
|
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.modules.shortcuts import get_mq
|
from packstack.modules.shortcuts import get_mq
|
||||||
from packstack.modules.ospluginutils import (getManifestTemplate,
|
from packstack.modules.ospluginutils import (getManifestTemplate,
|
||||||
appendManifestFile)
|
appendManifestFile)
|
||||||
@@ -44,10 +45,11 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Ceilometer Keystone access",
|
"PROMPT": "Enter the password for the Ceilometer Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -43,11 +43,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Cinder DB access",
|
"PROMPT": "Enter the password for the Cinder DB access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_CINDER_DB_PW",
|
"CONF_NAME": "CONFIG_CINDER_DB_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -57,11 +58,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Cinder Keystone access",
|
"PROMPT": "Enter the password for the Cinder Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_CINDER_KS_PW",
|
"CONF_NAME": "CONFIG_CINDER_KS_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import uuid
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer import basedefs
|
from packstack.installer import basedefs
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer.utils import split_hosts
|
from packstack.installer.utils import split_hosts
|
||||||
@@ -29,11 +30,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Glance DB access",
|
"PROMPT": "Enter the password for the Glance DB access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_GLANCE_DB_PW",
|
"CONF_NAME": "CONFIG_GLANCE_DB_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -43,11 +45,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Glance Keystone access",
|
"PROMPT": "Enter the password for the Glance Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_GLANCE_KS_PW",
|
"CONF_NAME": "CONFIG_GLANCE_KS_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import os
|
|||||||
|
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.shortcuts import get_mq
|
from packstack.modules.shortcuts import get_mq
|
||||||
from packstack.modules.ospluginutils import (getManifestTemplate,
|
from packstack.modules.ospluginutils import (getManifestTemplate,
|
||||||
@@ -31,11 +32,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Heat MySQL user",
|
"PROMPT": "Enter the password for the Heat MySQL user",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_HEAT_DB_PW",
|
"CONF_NAME": "CONFIG_HEAT_DB_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -60,11 +62,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Heat Keystone access",
|
"PROMPT": "Enter the password for the Heat Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_HEAT_KS_PW",
|
"CONF_NAME": "CONFIG_HEAT_KS_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -142,12 +145,13 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter password for Keystone domain admin user for Heat",
|
"PROMPT": "Enter password for Keystone domain admin user for Heat",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": False,
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_HEAT_DOMAIN_PASSWORD",
|
"CONF_NAME": "CONFIG_HEAT_DOMAIN_PASSWORD",
|
||||||
"USE_DEFAULT": False,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
]
|
]
|
||||||
group = {"GROUP_NAME": "Heat",
|
group = {"GROUP_NAME": "Heat",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import logging
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer import basedefs
|
from packstack.installer import basedefs
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
@@ -28,11 +29,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Keystone DB access",
|
"PROMPT": "Enter the password for the Keystone DB access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_KEYSTONE_DB_PW",
|
"CONF_NAME": "CONFIG_KEYSTONE_DB_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -54,7 +56,8 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Keystone admin user",
|
"PROMPT": "Enter the password for the Keystone admin user",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_KEYSTONE_ADMIN_PW",
|
"CONF_NAME": "CONFIG_KEYSTONE_ADMIN_PW",
|
||||||
@@ -67,7 +70,8 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Keystone demo user",
|
"PROMPT": "Enter the password for the Keystone demo user",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_KEYSTONE_DEMO_PW",
|
"CONF_NAME": "CONFIG_KEYSTONE_DEMO_PW",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import uuid
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer.utils import split_hosts
|
from packstack.installer.utils import split_hosts
|
||||||
from packstack.modules.common import filtered_hosts
|
from packstack.modules.common import filtered_hosts
|
||||||
@@ -59,7 +60,8 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the MariaDB admin user",
|
"PROMPT": "Enter the password for the MariaDB admin user",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": True,
|
"LOOSE_VALIDATION": True,
|
||||||
"CONF_NAME": "CONFIG_MARIADB_PW",
|
"CONF_NAME": "CONFIG_MARIADB_PW",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import uuid
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer import basedefs, output_messages
|
from packstack.installer import basedefs, output_messages
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
@@ -29,7 +30,8 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the nagiosadmin user",
|
"PROMPT": "Enter the password for the nagiosadmin user",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"PROCESSORS": [processors.process_password],
|
||||||
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": True,
|
"LOOSE_VALIDATION": True,
|
||||||
"CONF_NAME": "CONFIG_NAGIOS_PW",
|
"CONF_NAME": "CONFIG_NAGIOS_PW",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import uuid
|
|||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer import exceptions
|
from packstack.installer import exceptions
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer import output_messages
|
from packstack.installer import output_messages
|
||||||
from packstack.installer.utils import split_hosts
|
from packstack.installer.utils import split_hosts
|
||||||
|
|
||||||
@@ -36,11 +37,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for Neutron Keystone access",
|
"PROMPT": "Enter the password for Neutron Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_NEUTRON_KS_PW",
|
"CONF_NAME": "CONFIG_NEUTRON_KS_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -49,11 +51,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for Neutron DB access",
|
"PROMPT": "Enter the password for Neutron DB access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_NEUTRON_DB_PW",
|
"CONF_NAME": "CONFIG_NEUTRON_DB_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -93,11 +96,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter Neutron metadata agent password",
|
"PROMPT": "Enter Neutron metadata agent password",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_NEUTRON_METADATA_PW",
|
"CONF_NAME": "CONFIG_NEUTRON_METADATA_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
|
|||||||
@@ -39,11 +39,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Nova DB access",
|
"PROMPT": "Enter the password for the Nova DB access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_NOVA_DB_PW",
|
"CONF_NAME": "CONFIG_NOVA_DB_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
@@ -53,11 +54,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Nova Keystone access",
|
"PROMPT": "Enter the password for the Nova Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_NOVA_KS_PW",
|
"CONF_NAME": "CONFIG_NOVA_KS_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,25 @@ def initConfig(controller):
|
|||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": False,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
|
{"CMD_OPTION": "default-password",
|
||||||
|
"USAGE": (
|
||||||
|
"Set a default password everywhere. The default password "
|
||||||
|
"will be overriden by whatever password is set for each "
|
||||||
|
"individual service or user."
|
||||||
|
),
|
||||||
|
"PROMPT": (
|
||||||
|
"Enter a default password to be used. Leave blank for a "
|
||||||
|
"randomly generated one."
|
||||||
|
),
|
||||||
|
"OPTION_LIST": [],
|
||||||
|
"DEFAULT_VALUE": '',
|
||||||
|
"MASK_INPUT": True,
|
||||||
|
"LOOSE_VALIDATION": False,
|
||||||
|
"CONF_NAME": "CONFIG_DEFAULT_PASSWORD",
|
||||||
|
"USE_DEFAULT": False,
|
||||||
|
"NEED_CONFIRM": True,
|
||||||
|
"CONDITION": False},
|
||||||
|
|
||||||
{"CMD_OPTION": "mariadb-install",
|
{"CMD_OPTION": "mariadb-install",
|
||||||
"USAGE": (
|
"USAGE": (
|
||||||
"Set to 'y' if you would like Packstack to install MariaDB"
|
"Set to 'y' if you would like Packstack to install MariaDB"
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import uuid
|
|||||||
|
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.common import is_all_in_one
|
from packstack.modules.common import is_all_in_one
|
||||||
from packstack.modules.ospluginutils import (appendManifestFile,
|
from packstack.modules.ospluginutils import (appendManifestFile,
|
||||||
@@ -81,7 +82,8 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Tempest Provisioning user",
|
"PROMPT": "Enter the password for the Tempest Provisioning user",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_PROVISION_TEMPEST_USER_PW",
|
"CONF_NAME": "CONFIG_PROVISION_TEMPEST_USER_PW",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import logging
|
|||||||
import netaddr
|
import netaddr
|
||||||
|
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
from packstack.installer import processors
|
||||||
from packstack.installer.exceptions import ParamValidationError
|
from packstack.installer.exceptions import ParamValidationError
|
||||||
from packstack.installer import basedefs
|
from packstack.installer import basedefs
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
@@ -34,11 +35,12 @@ def initConfig(controller):
|
|||||||
"PROMPT": "Enter the password for the Swift Keystone access",
|
"PROMPT": "Enter the password for the Swift Keystone access",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_not_empty],
|
"VALIDATORS": [validators.validate_not_empty],
|
||||||
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
||||||
|
"PROCESSORS": [processors.process_password],
|
||||||
"MASK_INPUT": True,
|
"MASK_INPUT": True,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_SWIFT_KS_PW",
|
"CONF_NAME": "CONFIG_SWIFT_KS_PW",
|
||||||
"USE_DEFAULT": True,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ from ..test_base import PackstackTestCaseMixin
|
|||||||
class ProcessorsTestCase(PackstackTestCaseMixin, TestCase):
|
class ProcessorsTestCase(PackstackTestCaseMixin, TestCase):
|
||||||
def test_process_host(self):
|
def test_process_host(self):
|
||||||
"""Test packstack.installer.processors.process_host"""
|
"""Test packstack.installer.processors.process_host"""
|
||||||
proc_local = process_host('localhost',
|
proc_local = process_host('localhost', 'HOSTNAME',
|
||||||
process_args={'allow_localhost': True})
|
process_args={'allow_localhost': True})
|
||||||
self.assertIn(proc_local, ['127.0.0.1', '::1'])
|
self.assertIn(proc_local, ['127.0.0.1', '::1'])
|
||||||
|
|
||||||
def test_process_ssh_key(self):
|
def test_process_ssh_key(self):
|
||||||
"""Test packstack.installer.processors.process_ssh_key"""
|
"""Test packstack.installer.processors.process_ssh_key"""
|
||||||
path = process_ssh_key(os.path.join(self.tempdir, 'id_rsa'))
|
path = process_ssh_key(os.path.join(self.tempdir, 'id_rsa'), 'SSH_KEY')
|
||||||
# test if key was created
|
# test if key was created
|
||||||
self.assertEquals(True, bool(path))
|
self.assertEquals(True, bool(path))
|
||||||
# test if key exists
|
# test if key exists
|
||||||
|
|||||||
Reference in New Issue
Block a user