Allow environment be specified for os-svc-install

This creates environment entries in both upstart and systemd files.

Change-Id: I8ac2658fc9bfc376e91944fdbcb8d98632c40718
Related-Bug: #1226310
This commit is contained in:
Steve Baker 2013-09-16 17:38:52 -07:00
parent cf8e20e5a9
commit a269433780
2 changed files with 24 additions and 3 deletions

View File

@ -13,6 +13,6 @@ Given a system service command line and run-as user, generate and install system
os-svc-install -u nova -n nova-all -c 'nova-all --someoption' -r https://github.com/openstack/nova.git os-svc-install -u nova -n nova-all -c 'nova-all --someoption' -r https://github.com/openstack/nova.git
# install a system-start script for nova-api # install a system-start script for nova-api
os-svc-daemon -n nova-api -u nova -c /opt/stack/venvs/nova/bin/nova-api -- --config-dir /etc/nova os-svc-daemon -e 'foo=bar bar=baz' -n nova-api -u nova -c /opt/stack/venvs/nova/bin/nova-api -- --config-dir /etc/nova
``` ```

View File

@ -4,7 +4,7 @@ set -eu
DEFAULT_POSTSTART="exec sleep 1" DEFAULT_POSTSTART="exec sleep 1"
usage() { usage() {
echo "Usage: os-svc-daemon [ -ph ] [ -s POSTSTART ] -n SERVICENAME -u RUNAS -c RUNCMD -- [arg [arg...]]" echo "Usage: os-svc-daemon [ -ph ] [ -s POSTSTART ] [ -e ENV ] -n SERVICENAME -u RUNAS -c RUNCMD -- [arg [arg...]]"
echo "" echo ""
echo "SERVICENAME, RUNAS, RUNCMD, and POSTSTART can be set via the" echo "SERVICENAME, RUNAS, RUNCMD, and POSTSTART can be set via the"
echo "environment as well. Command line arguments will override" echo "environment as well. Command line arguments will override"
@ -14,6 +14,7 @@ usage() {
echo " -p Print the job file instead of writing to disk" echo " -p Print the job file instead of writing to disk"
echo " -s POSTSTART post_start will be added to the upstart job. Ignored with systemd." echo " -s POSTSTART post_start will be added to the upstart job. Ignored with systemd."
echo " default: $DEFAULT_POSTSTART" echo " default: $DEFAULT_POSTSTART"
echo " -e ENV Environment name=value entries to set in the service/job"
echo " -n SERVICENAME Name of job/service file." echo " -n SERVICENAME Name of job/service file."
echo " -u RUNAS User to run main executable as." echo " -u RUNAS User to run main executable as."
echo " -c RUNCMD Command to execute. Must stay in foreground." echo " -c RUNCMD Command to execute. Must stay in foreground."
@ -25,6 +26,7 @@ usage() {
SERVICENAME=${SERVICENAME:-""} SERVICENAME=${SERVICENAME:-""}
RUNAS=${RUNAS:-""} RUNAS=${RUNAS:-""}
RUNCMD=${RUNCMD:-""} RUNCMD=${RUNCMD:-""}
ENV=${ENV:-""}
# The default helps avoid race with daemon listening. http://pad.lv/1179766 # The default helps avoid race with daemon listening. http://pad.lv/1179766
POSTSTART=${POSTSTART:-$DEFAULT_POSTSTART} POSTSTART=${POSTSTART:-$DEFAULT_POSTSTART}
@ -39,12 +41,13 @@ print_to_file() {
OUTPUT=print_to_file OUTPUT=print_to_file
nshift=0 nshift=0
while getopts "phs:n:u:c:" opt; do while getopts "phs:n:u:c:e:" opt; do
case "$opt" in case "$opt" in
n) SERVICENAME=$OPTARG;; n) SERVICENAME=$OPTARG;;
u) RUNAS=$OPTARG;; u) RUNAS=$OPTARG;;
c) RUNCMD=$OPTARG;; c) RUNCMD=$OPTARG;;
s) POSTSTART=$OPTARG;; s) POSTSTART=$OPTARG;;
e) ENV=$OPTARG;;
p) OUTPUT=print_only;; p) OUTPUT=print_only;;
h) usage; exit 0;; h) usage; exit 0;;
\?) usage; exit 1;; \?) usage; exit 1;;
@ -72,9 +75,18 @@ function install_upstart {
local cmd=$3 local cmd=$3
shift; shift; shift shift; shift; shift
local args=$* local args=$*
local env_entries=''
if [ -n "$ENV" ]; then
local env_pad=" $ENV"
env_entries=${env_pad// /
env }
fi
$OUTPUT /etc/init/$name.conf <<EOF $OUTPUT /etc/init/$name.conf <<EOF
start on runlevel [2345] start on runlevel [2345]
stop on runlevel [016] stop on runlevel [016]
$env_entries
pre-start script pre-start script
mkdir -p /var/run/$user mkdir -p /var/run/$user
@ -98,6 +110,14 @@ function install_systemd {
local cmd=$3 local cmd=$3
shift; shift; shift shift; shift; shift
local args=$* local args=$*
local env_entries=''
if [ -n "$ENV" ]; then
local env_pad=" $ENV"
env_entries=${env_pad// /
Environment=}
fi
$OUTPUT /lib/systemd/system/$name.service <<EOF $OUTPUT /lib/systemd/system/$name.service <<EOF
[Unit] [Unit]
Description=$name Service Description=$name Service
@ -107,6 +127,7 @@ Requires=$name-create-dir.service
[Service] [Service]
ExecStart=/opt/stack/venvs/$user/bin/$cmd $args ExecStart=/opt/stack/venvs/$user/bin/$cmd $args
User=$user User=$user
$env_entries
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target