Add the ability to override master and/or minion configs from CLI

This commit is contained in:
rallytime 2016-05-06 12:53:11 -06:00
parent f543be8ff2
commit 0339ca52d9

View file

@ -232,6 +232,8 @@ _NO_DEPS=$BS_FALSE
_FORCE_SHALLOW_CLONE=$BS_FALSE
_DISABLE_SSL=$BS_FALSE
_DISABLE_REPOS=$BS_FALSE
_CUSTOM_MASTER_CONFIG="null"
_CUSTOM_MINION_CONFIG="null"
#--- FUNCTION -------------------------------------------------------------------------------------------------------
@ -334,12 +336,22 @@ __usage() {
-r Disable all repository configuration performed by this script. This
option assumes all necessary repository configuration is already present
on the system.
-J Replace the Master config file with data passed in as a json string. If a
Master config file is found, a reasonable effort will be made to save the
file with a ".bak" extension. If used in conjunction with -C or -F, no ".bak"
file will be created as either of those options will force a complete
overwrite of the file.
-j Replace the Minion config file with data passed in as a json string. If a
Minion config file is found, a reasonable effort will be made to save the
file with a ".bak" extension. If used in conjunction with -C or -F, no ".bak"
file will be created as either of those options will force a complete
overwrite of the file.
EOT
} # ---------- end of function __usage ----------
while getopts ":hvnDc:Gg:wk:s:MSNXCPFUKIA:i:Lp:dH:ZbflV:ar" opt
while getopts ":hvnDc:Gg:wk:s:MSNXCPFUKIA:i:Lp:dH:ZbflV:J:j:ar" opt
do
case "${opt}" in
@ -403,6 +415,8 @@ do
V ) _VIRTUALENV_DIR="$OPTARG" ;;
a ) _PIP_ALL=$BS_TRUE ;;
r ) _DISABLE_REPOS=$BS_TRUE ;;
J ) _CUSTOM_MASTER_CONFIG=$OPTARG ;;
j ) _CUSTOM_MINION_CONFIG=$OPTARG ;;
\?) echo
echoerror "Option does not exist : $OPTARG"
@ -452,6 +466,21 @@ if [ "$_INSTALL_MINION" -eq $BS_FALSE ] && [ "$_SALT_MINION_ID" != "null" ]; the
exit 1
fi
# Check that we're installing or configuring a master if we're being passed a master config json dict
if [ "$_CUSTOM_MASTER_CONFIG" != "null" ]; then
if [ "$_INSTALL_MASTER" -eq $BS_FALSE ] && [ "$_CONFIG_ONLY" -eq $BS_FALSE ]; then
echoerror "Don't pass a master config json dict (-J) if no master is going to be bootstrapped or configured."
exit 1
fi
fi
# Check that we're installing or configuring a minion if we're being passed a minion config json dict
if [ "$_CUSTOM_MINION_CONFIG" != "null" ]; then
if [ "$_INSTALL_MINION" -eq $BS_FALSE ] && [ "$_CONFIG_ONLY" -eq $BS_FALSE ]; then
echoerror "Don't pass a minion config json dict (-j) if no minion is going to be bootstrapped or configured."
exit 1
fi
fi
# Define installation type
if [ "$#" -eq 0 ];then
@ -1774,6 +1803,26 @@ __linkfile() {
return 0
}
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __overwriteconfig()
# DESCRIPTION: Simple function to overwrite master or minion config files.
#----------------------------------------------------------------------------------------------------------------------
__overwriteconfig() {
if [ $# -eq 2 ]; then
target=$1
json=$2
else
echoerror "Wrong number of arguments for __convert_json_to_yaml_str()"
echoinfo "USAGE: __convert_json_to_yaml_str <configfile> <jsonstring>"
exit 1
fi
# Convert json string to a yaml string and write it to config file
python -c "import json; import yaml; jsn=json.loads('$json'); yml=yaml.safe_dump(jsn, line_break='\n', default_flow_style=False); config_file=open('$target', 'w'); config_file.write(yml); config_file.close();" || return 1
return 0
}
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __rpm_import_gpg
@ -5882,6 +5931,13 @@ config_salt() {
[ -d "$_SALT_ETC_DIR" ] || mkdir "$_SALT_ETC_DIR" || return 1
[ -d "$_PKI_DIR" ] || (mkdir -p "$_PKI_DIR" && chmod 700 "$_PKI_DIR") || return 1
# If -C or -F was passed, we don't need a .bak file for the config we're updating
# This is used in the custom master/minion config file checks below
CREATE_BAK=$BS_TRUE
if [ "$_CONFIG_ONLY" -eq $BS_TRUE ] || [ "$_FORCE_OVERWRITE" -eq $BS_TRUE ]; then
CREATE_BAK=$BS_FALSE
fi
# Copy the grains file if found
if [ -f "$_TEMP_CONFIG_DIR/grains" ]; then
echodebug "Moving provided grains file from $_TEMP_CONFIG_DIR/grains to $_SALT_ETC_DIR/grains"
@ -5895,12 +5951,26 @@ config_salt() {
sleep 11
fi
if [ "$_INSTALL_MINION" -eq "$BS_TRUE" ] || [ "$_CONFIG_ONLY" -eq "$BS_TRUE" ]; then
if [ "$_INSTALL_MINION" -eq "$BS_TRUE" ] || [ "$_CONFIG_ONLY" -eq "$BS_TRUE" ] || [ "$_CUSTOM_MINION_CONFIG" != "null" ]; then
# Create the PKI directory
[ -d "$_PKI_DIR/minion" ] || (mkdir -p "$_PKI_DIR/minion" && chmod 700 "$_PKI_DIR/minion") || return 1
# Check to see if a custom minion config json dict was provided
if [ "$_CUSTOM_MINION_CONFIG" != "null" ]; then
# Check if a minion config file already exists and move to .bak if needed
if [ -f "$_SALT_ETC_DIR/minion" ] && [ "$CREATE_BAK" -eq "$BS_TRUE" ]; then
__movefile "$_SALT_ETC_DIR/minion" "$_SALT_ETC_DIR/minion.bak" $BS_TRUE || return 1
CONFIGURED_ANYTHING=$BS_TRUE
fi
# Overwrite/create the config file with the yaml string
__overwriteconfig "$_SALT_ETC_DIR/minion" "$_CUSTOM_MINION_CONFIG" || return 1
CONFIGURED_ANYTHING=$BS_TRUE
# Copy the minions configuration if found
if [ -f "$_TEMP_CONFIG_DIR/minion" ]; then
# Explicitly check for custom master config to avoid moving the minion config
elif [ -f "$_TEMP_CONFIG_DIR/minion" ] && [ "$_CUSTOM_MASTER_CONFIG" = "null" ]; then
__movefile "$_TEMP_CONFIG_DIR/minion" "$_SALT_ETC_DIR" "$_CONFIG_ONLY" || return 1
CONFIGURED_ANYTHING=$BS_TRUE
fi
@ -5934,12 +6004,25 @@ config_salt() {
OVERWRITE_MASTER_CONFIGS=$BS_TRUE
fi
if [ "$_INSTALL_MASTER" -eq $BS_TRUE ] || [ "$_INSTALL_SYNDIC" -eq $BS_TRUE ] || [ "$OVERWRITE_MASTER_CONFIGS" -eq $BS_TRUE ]; then
if [ "$_INSTALL_MASTER" -eq $BS_TRUE ] || [ "$_INSTALL_SYNDIC" -eq $BS_TRUE ] || [ "$OVERWRITE_MASTER_CONFIGS" -eq $BS_TRUE ] || [ "$_CUSTOM_MASTER_CONFIG" != "null" ]; then
# Create the PKI directory
[ -d "$_PKI_DIR/master" ] || (mkdir -p "$_PKI_DIR/master" && chmod 700 "$_PKI_DIR/master") || return 1
# Check to see if a custom master config json dict was provided
if [ "$_CUSTOM_MASTER_CONFIG" != "null" ]; then
# Check if a master config file already exists and move to .bak if needed
if [ -f "$_SALT_ETC_DIR/master" ] && [ "$CREATE_BAK" -eq "$BS_TRUE" ]; then
__movefile "$_SALT_ETC_DIR/master" "$_SALT_ETC_DIR/master.bak" $BS_TRUE || return 1
CONFIGURED_ANYTHING=$BS_TRUE
fi
# Overwrite/create the config file with the yaml string
__overwriteconfig "$_SALT_ETC_DIR/master" "$_CUSTOM_MASTER_CONFIG" || return 1
CONFIGURED_ANYTHING=$BS_TRUE
# Copy the masters configuration if found
if [ -f "$_TEMP_CONFIG_DIR/master" ]; then
elif [ -f "$_TEMP_CONFIG_DIR/master" ]; then
__movefile "$_TEMP_CONFIG_DIR/master" "$_SALT_ETC_DIR" || return 1
CONFIGURED_ANYTHING=$BS_TRUE
fi
@ -6222,6 +6305,14 @@ if [ "$_CONFIG_ONLY" -eq $BS_FALSE ]; then
fi
# Triggering config_salt() if overwriting master or minion configs
if [ "$_CUSTOM_MASTER_CONFIG" != "null" ] || [ "$_CUSTOM_MINION_CONFIG" != "null" ]; then
if [ "$_TEMP_CONFIG_DIR" = "null" ]; then
_TEMP_CONFIG_DIR="$_SALT_ETC_DIR"
fi
CONFIG_SALT_FUNC="config_salt"
fi
# Configure Salt
if [ "$_TEMP_CONFIG_DIR" != "null" ] && [ "$CONFIG_SALT_FUNC" != "null" ]; then
echoinfo "Running ${CONFIG_SALT_FUNC}()"