Allow non-interactive execution of install_server

This PR adds the ability to execute the installation script non-interactively, useful for automated provisioning scripts such as Chef, Puppet, Ansible, Salt, etc.
Simply feed the environment variables into the install script to skip the prompts.

For debug and verification purposes, the script will still output the selected config variables.
The plus side is that the environment variables also support command substitution (see REDIS_EXECUTABLE).

```
sudo REDIS_PORT=1234 REDIS_CONFIG_FILE=/etc/redis/1234.conf REDIS_LOG_FILE=/var/log/redis_1234.log REDIS_DATA_DIR=/var/lib/redis/1234 REDIS_EXECUTABLE=`command -v redis-server` ./utils/install_server.sh

Welcome to the redis service installer
This script will help you easily set up a running redis server

Selected config:
Port           : 1234
Config file    : /etc/redis/1234.conf
Log file       : /var/log/redis_1234.log
Data dir       : /var/lib/redis/1234
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Copied /tmp/1234.conf => /etc/init.d/redis_1234
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
```
This commit is contained in:
Michiel De Mey 2016-05-13 11:47:55 +02:00
parent 646c958bbd
commit af1e63c365

View File

@ -42,6 +42,7 @@ SCRIPTPATH=$(dirname $SCRIPT)
#Initial defaults #Initial defaults
_REDIS_PORT=6379 _REDIS_PORT=6379
_MANUAL_EXECUTION=false
echo "Welcome to the redis service installer" echo "Welcome to the redis service installer"
echo "This script will help you easily set up a running redis server" echo "This script will help you easily set up a running redis server"
@ -53,13 +54,18 @@ if [ "$(id -u)" -ne 0 ] ; then
exit 1 exit 1
fi fi
if ! echo $REDIS_PORT | egrep -q '^[0-9]+$' ; then
_MANUAL_EXECUTION=true
#Read the redis port #Read the redis port
read -p "Please select the redis port for this instance: [$_REDIS_PORT] " REDIS_PORT read -p "Please select the redis port for this instance: [$_REDIS_PORT] " REDIS_PORT
if ! echo $REDIS_PORT | egrep -q '^[0-9]+$' ; then if ! echo $REDIS_PORT | egrep -q '^[0-9]+$' ; then
echo "Selecting default: $_REDIS_PORT" echo "Selecting default: $_REDIS_PORT"
REDIS_PORT=$_REDIS_PORT REDIS_PORT=$_REDIS_PORT
fi fi
fi
if [ -z "$REDIS_CONFIG_FILE" ] ; then
_MANUAL_EXECUTION=true
#read the redis config file #read the redis config file
_REDIS_CONFIG_FILE="/etc/redis/$REDIS_PORT.conf" _REDIS_CONFIG_FILE="/etc/redis/$REDIS_PORT.conf"
read -p "Please select the redis config file name [$_REDIS_CONFIG_FILE] " REDIS_CONFIG_FILE read -p "Please select the redis config file name [$_REDIS_CONFIG_FILE] " REDIS_CONFIG_FILE
@ -67,7 +73,10 @@ if [ -z "$REDIS_CONFIG_FILE" ] ; then
REDIS_CONFIG_FILE=$_REDIS_CONFIG_FILE REDIS_CONFIG_FILE=$_REDIS_CONFIG_FILE
echo "Selected default - $REDIS_CONFIG_FILE" echo "Selected default - $REDIS_CONFIG_FILE"
fi fi
fi
if [ -z "$REDIS_LOG_FILE" ] ; then
_MANUAL_EXECUTION=true
#read the redis log file path #read the redis log file path
_REDIS_LOG_FILE="/var/log/redis_$REDIS_PORT.log" _REDIS_LOG_FILE="/var/log/redis_$REDIS_PORT.log"
read -p "Please select the redis log file name [$_REDIS_LOG_FILE] " REDIS_LOG_FILE read -p "Please select the redis log file name [$_REDIS_LOG_FILE] " REDIS_LOG_FILE
@ -75,8 +84,10 @@ if [ -z "$REDIS_LOG_FILE" ] ; then
REDIS_LOG_FILE=$_REDIS_LOG_FILE REDIS_LOG_FILE=$_REDIS_LOG_FILE
echo "Selected default - $REDIS_LOG_FILE" echo "Selected default - $REDIS_LOG_FILE"
fi fi
fi
if [ -z "$REDIS_DATA_DIR" ] ; then
_MANUAL_EXECUTION=true
#get the redis data directory #get the redis data directory
_REDIS_DATA_DIR="/var/lib/redis/$REDIS_PORT" _REDIS_DATA_DIR="/var/lib/redis/$REDIS_PORT"
read -p "Please select the data directory for this instance [$_REDIS_DATA_DIR] " REDIS_DATA_DIR read -p "Please select the data directory for this instance [$_REDIS_DATA_DIR] " REDIS_DATA_DIR
@ -84,7 +95,10 @@ if [ -z "$REDIS_DATA_DIR" ] ; then
REDIS_DATA_DIR=$_REDIS_DATA_DIR REDIS_DATA_DIR=$_REDIS_DATA_DIR
echo "Selected default - $REDIS_DATA_DIR" echo "Selected default - $REDIS_DATA_DIR"
fi fi
fi
if [ ! -x "$REDIS_EXECUTABLE" ] ; then
_MANUAL_EXECUTION=true
#get the redis executable path #get the redis executable path
_REDIS_EXECUTABLE=`command -v redis-server` _REDIS_EXECUTABLE=`command -v redis-server`
read -p "Please select the redis executable path [$_REDIS_EXECUTABLE] " REDIS_EXECUTABLE read -p "Please select the redis executable path [$_REDIS_EXECUTABLE] " REDIS_EXECUTABLE
@ -96,6 +110,7 @@ if [ ! -x "$REDIS_EXECUTABLE" ] ; then
exit 1 exit 1
fi fi
fi fi
fi
#check the default for redis cli #check the default for redis cli
CLI_EXEC=`command -v redis-cli` CLI_EXEC=`command -v redis-cli`
@ -112,7 +127,9 @@ echo "Data dir : $REDIS_DATA_DIR"
echo "Executable : $REDIS_EXECUTABLE" echo "Executable : $REDIS_EXECUTABLE"
echo "Cli Executable : $CLI_EXEC" echo "Cli Executable : $CLI_EXEC"
if $_MANUAL_EXECUTION == true ; then
read -p "Is this ok? Then press ENTER to go on or Ctrl-C to abort." _UNUSED_ read -p "Is this ok? Then press ENTER to go on or Ctrl-C to abort." _UNUSED_
fi
mkdir -p `dirname "$REDIS_CONFIG_FILE"` || die "Could not create redis config directory" mkdir -p `dirname "$REDIS_CONFIG_FILE"` || die "Could not create redis config directory"
mkdir -p `dirname "$REDIS_LOG_FILE"` || die "Could not create redis log dir" mkdir -p `dirname "$REDIS_LOG_FILE"` || die "Could not create redis log dir"