Self-sufficient DIB elements

Improvements:
1. Updated DIB elements do not require any external scripts
   (like setup.sh and setup-centos.sh)
2. upstart and systemd are used to setup murano-agent
   as a service
3. Cross-distribution aspects are handled by DIB

Required changes: https://review.openstack.org/#/c/153172/

Change-Id: I9de74f89ade8bbf042696bc8d826d554beb4138c
This commit is contained in:
Alexey Deryugin 2015-02-06 14:09:19 +03:00
parent 836229cde2
commit 72f2601e94
10 changed files with 86 additions and 713 deletions

View File

@ -1,19 +1,28 @@
Murano
======
Murano Project introduces an application catalog, which allows application
developers and cloud administrators to publish various cloud-ready
applications in a browsable categorised catalog, which may be used by the
cloud users (including the inexperienced ones) to pick-up the needed
applications and services and composes the reliable environments out of them
in a "push-the-button" manner.
murano-agent
Murano Agent
============
Murano Agent is a VM-side guest agent that accepts commands from
Murano Conductor and executes them. We have two Agent implementations
targeting different platforms, but eventually we going to end up with
Python Agent that works on Linux and uses new execution plan format
described in `Unified Agent <https://wiki.openstack.org/wiki/Murano/UnifiedAgent>`_
Murano Agent is a VM-side guest agent that accepts commands from Murano engine
and executes them.
Image building using dib
------------------------
contrib/elements contains
`diskimage-builder <https://git.openstack.org/cgit/openstack/diskimage-builder>`_
elements to build an image which contains the Murano Agent required to use Murano.
An example Ubuntu based image containing the agent can be built and uploaded
to glance with the following commands:
::
git clone https://git.openstack.org/openstack/diskimage-builder.git
git clone https://git.openstack.org/stackforge/murano-agent.git
export ELEMENTS_PATH=murano-agent/contrib/elements
diskimage-builder/bin/disk-image-create vm ubuntu \
murano-agent -o ubuntu-murano-agent.qcow2
glance image-create --disk-format qcow2 --container-format bare \
--name ubuntu-murano < ubuntu-murano.qcow2
Project Resources
-----------------
@ -30,26 +39,7 @@ Additional resources are linked from the project wiki page:
https://wiki.openstack.org/wiki/Murano
Image building using dib
------------------------
contrib/elements contains `diskimage-builder <https://github.com/openstack/diskimage-builder>`_
elements to build an image which contains the Murano Agent required to use Murano.
An example ubuntu based image containing the agent can be built and uploaded to glance
with the following commands:
::
git clone https://git.openstack.org/openstack/diskimage-builder.git
git clone https://git.openstack.org/stackforge/murano-agent.git
export ELEMENTS_PATH=murano-agent/contrib/elements
diskimage-builder/bin/disk-image-create vm ubuntu murano-agent -o ubuntu-murano-agent.qcow2
glance image-create --disk-format qcow2 --container-format bare --name ubuntu-murano < ubuntu-murano.qcow2
License
-------
Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0
Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0

View File

@ -1,15 +0,0 @@
#!/bin/bash
set -x
install-packages git wget make gcc python-pip python-iso8601 python-six python-anyjson python-eventlet python-dev python-setuptools
mkdir -p /opt/git
git clone https://github.com/stackforge/murano-agent.git /opt/git/murano-agent
cd /opt/git/murano-agent
if [ "$DISTRO_NAME" = 'debian' ] || [ "$DISTRO_NAME" = 'ubuntu' ]; then
./setup.sh install
else
# rhel7/centos7/fedora
./setup-centos.sh install
fi

View File

@ -1,41 +0,0 @@
#!/bin/bash
# Until http://pad.lv/1101347 is fixed, we need this user to be able to
# Log on to heat booted machines using the given SSH keypair
set -uex
# This is a specific workaround for Ubuntu 12.10 "quantal"
distro=$(lsb_release -is || :)
if [ "$distro" != "Ubuntu" ] ; then
exit 0
fi
codename=$(lsb_release -cs || :)
if [ "$codename" != "quantal" ] ; then
exit 0
fi
# Setup ec2-user as expected by HEAT
if ! getent passwd ec2-user ; then
useradd -m -G admin ec2-user -s /bin/bash
fi
if ! [ -e /etc/sudoers.d/ec2-user ] ; then
echo "ec2-user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ec2-user
chmod 0440 /etc/sudoers.d/ec2-user
visudo -c
fi
# We must pin to this fixed cloud-init from the demo ppa to ensure keys
# are installed. This can be removed if http://pad.lv/1100920 is ever
# fixed in the distro
add-apt-repository -y ppa:tripleo/demo
apt-get update
cat > /etc/apt/preferences.d/cloud-init-from-ppa <<EOF
Package: cloud-init
Pin: release o=LP-PPA-tripleo-demo
Pin-Priority: 900
EOF
# Should pull from demo PPA if cloud-init exists there.
# Since this is Ubuntu only, the --force-yes is OK
install-packages --force-yes cloud-init

View File

@ -0,0 +1,37 @@
#!/bin/bash
set -eu
install-packages git-core wget make gcc python-pip python-dev python-setuptools python-virtualenv
name=murano-agent
svc_root=${DIB_MURANO_AGENT_SVC_ROOT:-/opt/stack/$name}
install_dir=${DIB_MURANO_AGENT_INSTALL_DIR:-/opt/stack/venvs/$name}
repo=${DIB_MURANO_AGENT_REPO:-git://git.openstack.org/stackforge/murano-agent.git}
branch=${DIB_MURANO_AGENT_BRANCH:-master}
# clone murano-agent source code into /opt/stack/murano-agent
mkdir -p $svc_root
git clone --depth=1 -b $branch $repo $svc_root
# install murano-agent into virtualenv at /ops/stack/venvs/murano-agent
virtualenv $install_dir
$install_dir/bin/pip install $svc_root
# setup config file at /etc/murano/agent.conf
mkdir -p /etc/murano
pushd ${svc_root}
${install_dir}/bin/oslo-config-generator --config-file ${svc_root}/etc/oslo-config-generator/muranoagent.conf
popd
cp ${svc_root}/etc/muranoagent/muranoagent.conf.sample /etc/murano/agent.conf.sample
# install upstart script for murano-agent
if [ -d "/etc/init/" ]; then
install -D -g root -o root -m 0755 $(dirname $0)/murano-agent.conf /etc/init/
fi
if [ -d "/etc/systemd/system/" ]; then
install -D -g root -o root -m 0755 $(dirname $0)/murano-agent.service /etc/systemd/system/
fi

View File

@ -0,0 +1,14 @@
start on runlevel [2345]
stop on runlevel [016]
respawn
# the default post-start of 1 second sleep delays respawning enough to
# not hit the default of 10 times in 5 seconds. Make it 2 times in 5s.
respawn limit 2 5
# We're logging to syslog
console none
exec start-stop-daemon --start -c root --exec /opt/stack/venvs/murano-agent/bin/muranoagent -- --config-dir /etc/murano 2>&1 | logger -t murano-agent
post-start exec sleep 1

View File

@ -0,0 +1,10 @@
[Unit]
Description=OpenStack Murano Agent
[Service]
Type=simple
ExecStart=/opt/stack/venvs/murano-agent/bin/muranoagent --config-dir /etc/murano
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@ -1,103 +0,0 @@
#!/bin/sh
# Copyright (c) 2013 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# Author: Igor Yozhikov <iyozhikov@mirantis.com>
#
### BEGIN INIT INFO
# Provides: murano-agent
# Required-Start: $network $local_fs $remote_fs $syslog
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Launches the murano linux agent
# Description: This startup script launches murano linux agent.
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="murano-agent"
NAME=murano-agent
DAEMON=/usr/local/bin/muranoagent
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
SYSTEM_USER=root
CONFIG_FILE=/etc/murano/agent.conf
DATADIR=/var/murano/plans
# Exit if the package is not installed
[ -x $DAEMON ] || exit 5
# source function library
. /lib/lsb/init-functions
if [ ! -d "$DATADIR" ]; then
mkdir -p ${DATADIR}
chown ${SYSTEM_USER} ${DATADIR}
fi
do_start () {
start-stop-daemon --start --background --quiet --chuid $SYSTEM_USER:$SYSTEM_USER --make-pidfile --pidfile $PIDFILE --startas $DAEMON --test -- --config-file=$CONFIG_FILE > /dev/null || return 1
start-stop-daemon --start --background --quiet --chuid $SYSTEM_USER:$SYSTEM_USER --make-pidfile --pidfile $PIDFILE --startas $DAEMON -- --config-file=$CONFIG_FILE || return 2
}
do_stop () {
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

View File

@ -1,103 +0,0 @@
#!/bin/sh
# Copyright (c) 2013 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# Author: Igor Yozhikov <iyozhikov@mirantis.com>
#
### BEGIN INIT INFO
# Provides: murano-agent
# Required-Start: $network $local_fs $remote_fs $syslog
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Launches the murano linux agent
# Description: This startup script launches murano linux agent.
### END INIT INFO
# chkconfig: 3 90 10
# description: This startup script launches the murano linux agent.
# config: /etc/murano/agent.conf
#
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="murano-agent"
NAME=murano-agent
DAEMON=/usr/local/bin/muranoagent
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
SYSTEM_USER=root
CONFIG_FILE=/etc/murano/agent.conf
DATADIR=/var/murano/plans
LOCKFILE=/var/lock/subsys/$NAME
# Exit if the package is not installed
[ -x $DAEMON ] || exit 5
# source function library
. /etc/init.d/functions
RETVAL=0
if [ ! -d "$DATADIR" ]; then
mkdir -p $DATADIR
chown $SYSTEM_USER $DATADIR
fi
start() {
echo -n "Starting $NAME: "
daemon --user $SYSTEM_USER "$DAEMON --config-file=$CONFIG_FILE &>/dev/null & echo \$! > $PIDFILE"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $LOCKFILE
return $RETVAL
}
stop() {
echo -n "Stopping $NAME: "
#killproc $DAEMON -TERM
killproc -p $PIDFILE $DAEMON
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
return $RETVAL
}
restart() {
stop
start
}
rh_status() {
# run checks to determine if the service is running or use generic status
status $DAEMON
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 2
esac
exit $?

View File

@ -1,210 +0,0 @@
#!/bin/sh
# Copyright (c) 2013 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# CentOS script
LOGLVL=1
SERVICE_CONTENT_DIRECTORY=`cd $(dirname "$0") && pwd`
PREREQ_PKGS="git wget make gcc python-pip python-iso8601 python-six python-anyjson python-eventlet python-devel python-setuptools"
PIPAPPS="pip python-pip pip-python"
PIPCMD=""
SERVICE_SRV_NAME="murano-agent"
ETC_CFG_DIR="/etc/murano"
# Functions
# Loger function
log()
{
MSG=$1
if [ $LOGLVL -gt 0 ]; then
echo "LOG:> $MSG"
fi
}
# find pip
find_pip()
{
for cmd in $PIPAPPS
do
_cmd=$(which $cmd 2>/dev/null)
if [ $? -eq 0 ];then
break
fi
done
if [ -z $_cmd ];then
echo "Can't find \"pip\" in system, please install it first, exiting!"
exit 1
else
PIPCMD=$_cmd
fi
}
# Check or install package
in_sys_pkg()
{
PKG=$1
rpm -q $PKG > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "Package \"$PKG\" already installed"
else
log "Installing \"$PKG\"..."
yum install $PKG --assumeyes > /dev/null 2>&1
if [ $? -ne 0 ];then
log "installation fails, exiting!!!"
exit
fi
fi
}
# install
inst()
{
# Checking packages
for PKG in $PREREQ_PKGS
do
in_sys_pkg $PKG
done
# Find python pip
find_pip
MRN_CND_SPY=$SERVICE_CONTENT_DIRECTORY/setup.py
if [ -e $MRN_CND_SPY ]; then
chmod +x $MRN_CND_SPY
log "$MRN_CND_SPY output:_____________________________________________________________"
## Setup through pip
# Creating tarball
rm -rf $SERVICE_CONTENT_DIRECTORY/*.egg-info
cd $SERVICE_CONTENT_DIRECTORY && python $MRN_CND_SPY egg_info
if [ $? -ne 0 ];then
log "\"$MRN_CND_SPY\" egg info creation FAILS, exiting!!!"
exit 1
fi
rm -rf $SERVICE_CONTENT_DIRECTORY/dist/*
cd $SERVICE_CONTENT_DIRECTORY && $MRN_CND_SPY sdist
if [ $? -ne 0 ];then
log "\"$MRN_CND_SPY\" tarball creation FAILS, exiting!!!"
exit 1
fi
# Running tarball install
TRBL_FILE=$(basename `ls $SERVICE_CONTENT_DIRECTORY/dist/murano-agent*.tar.gz`)
$PIPCMD install $SERVICE_CONTENT_DIRECTORY/dist/$TRBL_FILE
if [ $? -ne 0 ];then
log "$PIPCMD install \"$TRBL_FILE\" FAILS, recreate terball with \"python setup.py sdist\" command, exiting!!!"
exit 1
fi
# Creating etc directory for config files
if [ ! -d $ETC_CFG_DIR ];then
log "Creating $ETC_CFG_DIR direcory..."
mkdir -p $ETC_CFG_DIR
if [ $? -ne 0 ];then
log "Can't create $ETC_CFG_DIR, exiting!!!"
exit 1
fi
fi
log "Making sample configuration file at \"$ETC_CFG_DIR\""
cp -f "$SERVICE_CONTENT_DIRECTORY/etc/agent.conf" "$ETC_CFG_DIR/agent.conf"
else
log "$MRN_CND_SPY not found!"
fi
}
# searching for service executable in path
get_service_exec_path()
{
if [ -z "$SERVICE_EXEC_PATH" ]; then
SERVICE_EXEC_PATH=$(which muranoagent)
if [ $? -ne 0 ]; then
log "Can't find \"muranoagent ($SERVICE_SRV_NAME)\", please install the \"$SERVICE_SRV_NAME\" by running \"$(basename "$0") install\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
exit 1
fi
else
if [ ! -x "$SERVICE_EXEC_PATH" ]; then
log "\"$SERVICE_EXEC_PATH\" in not executable, please install the muranoagent \"($SERVICE_SRV_NAME)\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
exit 1
fi
fi
}
# uninstall
uninst()
{
# Uninstall trough pip
find_pip
# looking up for python package installed
PYPKG=$SERVICE_SRV_NAME
_pkg=$($PIPCMD freeze | grep $PYPKG)
if [ $? -eq 0 ]; then
log "Removing package \"$PYPKG\" with pip"
$PIPCMD uninstall $_pkg --yes
else
log "Python package \"$PYPKG\" not found"
fi
}
# inject init
injectinit()
{
log "Enabling $SERVICE_SRV_NAME in init.d..."
cp -f "$SERVICE_CONTENT_DIRECTORY/init.d/murano-agent-el6" "/etc/init.d/$SERVICE_SRV_NAME"
sed -i "s/DAEMON=.*/DAEMON=$(echo $SERVICE_EXEC_PATH | sed -e 's/\//\\\//g')/" /etc/init.d/$SERVICE_SRV_NAME
chmod 755 /etc/init.d/$SERVICE_SRV_NAME
chkconfig --add $SERVICE_SRV_NAME
chkconfig $SERVICE_SRV_NAME on
}
purgeinit()
{
log "Removing from init.d..."
chkconfig $SERVICE_SRV_NAME off
chkconfig --del $SERVICE_SRV_NAME
rm -f /etc/init.d/$SERVICE_SRV_NAME
#Fedora compat.
systemctl --system daemon-reload > /dev/null 2>&1
}
# Command line args'
COMMAND="$1"
case $COMMAND in
inject-init )
get_service_exec_path
log "Injecting \"$SERVICE_SRV_NAME\" to init..."
injectinit
postinst
;;
install )
inst
get_service_exec_path
injectinit
;;
purge-init )
log "Purging \"$SERVICE_SRV_NAME\" from init..."
service $SERVICE_SRV_NAME stop
purgeinit
;;
uninstall )
log "Uninstalling \"$SERVICE_SRV_NAME\" from system..."
service $SERVICE_SRV_NAME stop
purgeinit
uninst
;;
* )
echo -e "Usage: $(basename "$0") command \nCommands:\n\tinstall - Install $SERVICE_SRV_NAME software\n\tuninstall - Uninstall $SERVICE_SRV_NAME software\n\tinject-init - Add $SERVICE_SRV_NAME to the system start-up\n\tpurge-init - Remove $SERVICE_SRV_NAME from the system start-up"
exit 1
;;
esac

206
setup.sh
View File

@ -1,206 +0,0 @@
#!/bin/sh
# Copyright (c) 2013 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# Ubuntu script
LOGLVL=1
SERVICE_CONTENT_DIRECTORY=`cd $(dirname "$0") && pwd`
PREREQ_PKGS="git wget make gcc python-pip python-iso8601 python-six python-anyjson python-eventlet python-dev python-setuptools"
PIPAPPS="pip python-pip pip-python"
PIPCMD=""
SERVICE_SRV_NAME="murano-agent"
ETC_CFG_DIR="/etc/murano"
# Functions
# Loger function
log()
{
MSG=$1
if [ $LOGLVL -gt 0 ]; then
echo "LOG:> $MSG"
fi
}
# find pip
find_pip()
{
for cmd in $PIPAPPS
do
_cmd=$(which $cmd 2>/dev/null)
if [ $? -eq 0 ];then
break
fi
done
if [ -z $_cmd ];then
echo "Can't find \"pip\" in system, please install it first, exiting!"
exit 1
else
PIPCMD=$_cmd
fi
}
# Check or install package
in_sys_pkg()
{
PKG=$1
dpkg -s $PKG > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "Package \"$PKG\" already installed"
else
log "Installing \"$PKG\"..."
apt-get install $PKG --yes > /dev/null 2>&1
if [ $? -ne 0 ];then
log "installation fails, exiting!!!"
exit
fi
fi
}
# install
inst()
{
# Checking packages
for PKG in $PREREQ_PKGS
do
in_sys_pkg $PKG
done
# Find python pip
find_pip
MRN_CND_SPY=$SERVICE_CONTENT_DIRECTORY/setup.py
if [ -e $MRN_CND_SPY ]; then
chmod +x $MRN_CND_SPY
log "$MRN_CND_SPY output:_____________________________________________________________"
## Setup through pip
# Creating tarball
rm -rf $SERVICE_CONTENT_DIRECTORY/*.egg-info
cd $SERVICE_CONTENT_DIRECTORY && python $MRN_CND_SPY egg_info
if [ $? -ne 0 ];then
log "\"$MRN_CND_SPY\" egg info creation FAILS, exiting!!!"
exit 1
fi
rm -rf $SERVICE_CONTENT_DIRECTORY/dist/*
cd $SERVICE_CONTENT_DIRECTORY && $MRN_CND_SPY sdist
if [ $? -ne 0 ];then
log "\"$MRN_CND_SPY\" tarball creation FAILS, exiting!!!"
exit 1
fi
# Running tarball install
TRBL_FILE=$(basename `ls $SERVICE_CONTENT_DIRECTORY/dist/murano-agent*.tar.gz`)
$PIPCMD install $SERVICE_CONTENT_DIRECTORY/dist/$TRBL_FILE
if [ $? -ne 0 ];then
log "$PIPCMD install \"$TRBL_FILE\" FAILS, recreate terball with \"python setup.py sdist\" command, exiting!!!"
exit 1
fi
# Creating etc directory for config files
if [ ! -d $ETC_CFG_DIR ];then
log "Creating $ETC_CFG_DIR direcory..."
mkdir -p $ETC_CFG_DIR
if [ $? -ne 0 ];then
log "Can't create $ETC_CFG_DIR, exiting!!!"
exit 1
fi
fi
log "Making sample configuration file at \"$ETC_CFG_DIR\""
cp -f "$SERVICE_CONTENT_DIRECTORY/etc/agent.conf" "$ETC_CFG_DIR/agent.conf"
else
log "$MRN_CND_SPY not found!"
fi
}
# searching for service executable in path
get_service_exec_path()
{
if [ -z "$SERVICE_EXEC_PATH" ]; then
SERVICE_EXEC_PATH=$(which muranoagent)
if [ $? -ne 0 ]; then
log "Can't find \"muranoagent ($SERVICE_SRV_NAME)\", please install the \"$SERVICE_SRV_NAME\" by running \"$(basename "$0") install\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
exit 1
fi
else
if [ ! -x "$SERVICE_EXEC_PATH" ]; then
log "\"$SERVICE_EXEC_PATH\" in not executable, please install the muranoagent \"($SERVICE_SRV_NAME)\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
exit 1
fi
fi
}
# uninstall
uninst()
{
# Uninstall trough pip
find_pip
# looking up for python package installed
PYPKG=$SERVICE_SRV_NAME
_pkg=$($PIPCMD freeze | grep $PYPKG)
if [ $? -eq 0 ]; then
log "Removing package \"$PYPKG\" with pip"
$PIPCMD uninstall $_pkg --yes
else
log "Python package \"$PYPKG\" not found"
fi
}
# inject init
injectinit()
{
log "Enabling $SERVICE_SRV_NAME in init.d..."
cp -f "$SERVICE_CONTENT_DIRECTORY/init.d/murano-agent-deb" "/etc/init.d/$SERVICE_SRV_NAME"
sed -i "s/DAEMON=.*/DAEMON=$(echo $SERVICE_EXEC_PATH | sed -e 's/\//\\\//g')/" /etc/init.d/$SERVICE_SRV_NAME
chmod 755 /etc/init.d/$SERVICE_SRV_NAME
update-rc.d $SERVICE_SRV_NAME defaults
}
purgeinit()
{
log "Removing from init.d..."
update-rc.d -f $SERVICE_SRV_NAME remove
rm -f /etc/init.d/$SERVICE_SRV_NAME
}
# Command line args'
COMMAND="$1"
case $COMMAND in
inject-init )
get_service_exec_path
log "Injecting \"$SERVICE_SRV_NAME\" to init..."
injectinit
postinst
;;
install )
inst
get_service_exec_path
injectinit
;;
purge-init )
log "Purging \"$SERVICE_SRV_NAME\" from init..."
service $SERVICE_SRV_NAME stop
purgeinit
;;
uninstall )
log "Uninstalling \"$SERVICE_SRV_NAME\" from system..."
service $SERVICE_SRV_NAME stop
purgeinit
uninst
;;
* )
echo -e "Usage: $(basename "$0") command \nCommands:\n\tinstall - Install $SERVICE_SRV_NAME software\n\tuninstall - Uninstall $SERVICE_SRV_NAME software\n\tinject-init - Add $SERVICE_SRV_NAME to the system start-up\n\tpurge-init - Remove $SERVICE_SRV_NAME from the system start-up"
exit 1
;;
esac