Skip to content

Commit

Permalink
radosgw systemd support
Browse files Browse the repository at this point in the history
Added a radosgw systemd support and associated prestart script.
  - With improved checking over first revison.
  - ceph-radosgw-prestart.sh now installed in /usr/lib/ceph-radosgw

Signed-off-by: Owen Synge <[email protected]>
  • Loading branch information
oms4suse authored and liewegas committed Aug 1, 2015
1 parent ef961be commit fbc85e3
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
100 changes: 100 additions & 0 deletions src/ceph-radosgw-prestart.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#!/bin/bash

eval set -- "$(getopt -o n: --long name:,cluster: -- $@)"

while true ; do
case "$1" in
-n|--name) name=$2; shift 2 ;;
--cluster) cluster=$2; shift 2 ;;
--) shift ; break ;;
esac
done

CEPHCONF=`which ceph-conf`
RADOSGW=`which radosgw`

if [ -z "${CEPHCONF}" ]; then
CEPHCONF=/usr/bin/${CEPHCONF}
fi

if [ ! -x "${CEPHCONF}" ]; then
echo "${CEPHCONF} could not start, it is not executable."
exit 1
fi

if [ -z "$RADOSGW" ]; then
RADOSGW=/usr/bin/radosgw
fi

if [ ! -x "$RADOSGW" ]; then
echo "$RADOSGW could not start, it is not executable."
exit 1
fi

# prefix for radosgw instances in ceph.conf
PREFIX='client.radosgw.'

if [ -z "$name" ]; then
echo "no name paramter"
exit 1
fi

if [ -z "$cluster" ]; then
cluster="ceph"
fi

ceph_conf_file="/etc/ceph/${cluster}.conf"

if [ ! -f "${ceph_conf_file}" ] ; then
echo "ceph config file not found: $ceph_conf_file"
exit 1
fi

longname=${PREFIX}${name}
testname=$(${CEPHCONF} -c ${ceph_conf_file} --list-sections $PREFIX | grep $longname )

if [ -z "$testname" ]; then
echo "error parsing '$name' : valid types are: $(echo $(${CEPHCONF} -c ${ceph_conf_file} --list-sections $PREFIX | sed s/$PREFIX//))"
exit 1
fi

auto_start=`${CEPHCONF} -c ${ceph_conf_file} -n $longname 'auto start'`
if [ "$auto_start" = "no" ] || [ "$auto_start" = "false" ] || [ "$auto_start" = "0" ]; then
echo "ceph.conf:[$longname], says not to start."
exit 1
fi

# is the socket defined? if it's not, this instance shouldn't run as a daemon.
rgw_socket=`$RADOSGW -c ${ceph_conf_file} -n $longname --show-config-value rgw_socket_path`
if [ -z "$rgw_socket" ]; then
echo "socket $rgw_socket could not be found in ceph.conf:[$longname], not starting."
exit 1
fi

# mapped to this host?
host=`${CEPHCONF} -c ${ceph_conf_file} -n $longname host`
hostname=`hostname -s`
if [ "$host" != "$hostname" ]; then
echo "hostname $hostname could not be found in ceph.conf:[$longname], not starting."
exit 1
fi

user=`${CEPHCONF} -c ${ceph_conf_file} -n $longname user`
if [ -n "$user" ]; then
if [ "$USER" != "$user" ]; then
echo "enviroment \$USER '$USER' does not match '$longname' user '$user'"
exit 1
fi
fi


log_file=`$RADOSGW -c ${ceph_conf_file} -n $longname --show-config-value log_file`
if [ -n "$log_file" ]; then
if [ ! -f "$log_file" ]; then
touch "$log_file"
touchrc=$?
if [ 0 != $touchrc ] ; then
exit $touchrc
fi
fi
fi
15 changes: 15 additions & 0 deletions systemd/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[Unit]
Description=Ceph rados gateway
After=network-online.target local-fs.target
Wants=network-online.target local-fs.target
PartOf=ceph.target

[Service]
EnvironmentFile=-/etc/sysconfig/ceph
Environment=CLUSTER=ceph
ExecStart=/usr/bin/radosgw -f --conf /etc/ceph/${CLUSTER}.conf --name client.radosgw.%i
ExecStartPre=/usr/lib/ceph-radosgw/ceph-radosgw-prestart.sh --cluster ${CLUSTER} --name %i
User=wwwrun

[Install]
WantedBy=ceph.target

0 comments on commit fbc85e3

Please sign in to comment.