Change in vdsm[master]: Move start_needed_srv and shutdown_conflicting_srv to vdsm-t...
wenyi at linux.vnet.ibm.com
wenyi at linux.vnet.ibm.com
Wed Oct 24 06:45:42 UTC 2012
Wenyi Gao has uploaded a new change for review.
Change subject: Move start_needed_srv and shutdown_conflicting_srv to vdsm-tool
......................................................................
Move start_needed_srv and shutdown_conflicting_srv to vdsm-tool
Change-Id: I54eca4b2cc3a17e9819a0188e5dc4c8bd28161da
Signed-off-by: Wenyi Gao <wenyi at linux.vnet.ibm.com>
---
M .gitignore
M vdsm-tool/Makefile.am
A vdsm-tool/base.py
A vdsm-tool/needed_service.py.in
M vdsm.spec.in
M vdsm/vdsmd.init.in
6 files changed, 145 insertions(+), 42 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/59/8759/1
diff --git a/.gitignore b/.gitignore
index 49a78ef..f9c26d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,6 +41,7 @@
vdsm/vdsmd.8
vdsm/vdsmd.init
vdsm-tool/load_needed_modules.py
+vdsm-tool/needed_service.py
vdsm-tool/validate_ovirt_certs.py
vdsm_cli/vdsClient
vdsm_cli/vdscli.py
diff --git a/vdsm-tool/Makefile.am b/vdsm-tool/Makefile.am
index 997e339..0ed3226 100644
--- a/vdsm-tool/Makefile.am
+++ b/vdsm-tool/Makefile.am
@@ -27,7 +27,9 @@
dist_vdsmtool_DATA = \
__init__.py \
+ base.py \
load_needed_modules.py \
+ needed_service.py \
passwd.py \
validate_ovirt_certs.py \
$(NULL)
diff --git a/vdsm-tool/base.py b/vdsm-tool/base.py
new file mode 100644
index 0000000..9ded9a1
--- /dev/null
+++ b/vdsm-tool/base.py
@@ -0,0 +1,77 @@
+# Copyright IBM, Corp. 2012
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+import subprocess
+
+
+def exec_command(argv):
+ """
+ This function executes a given shell command.
+ """
+ try:
+ p = subprocess.Popen(argv, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ rc = p.returncode
+ except:
+ raise Exception('Failed to execute "%s"', ' '.join(argv),
+ exc_info=True)
+
+ return (rc, out, err)
+
+
+def call_init_function(function, *args, **kwargs):
+ """
+ Call a function from /etc/init.d/functions.
+ """
+ allowed_init_function = ['success', 'failure', 'pidofproc',
+ 'killproc', 'daemon']
+ rc = -1
+ srccmd = 'SYSTEMCTL_SKIP_REDIRECT=true source /etc/init.d/functions;'
+
+ if function not in allowed_init_function:
+ print('Illegal function "%s"', function)
+ return rc
+
+ tmpcmd = function + ' '.join('%s=%s' % item for item in kwargs.iteritems())
+ tmpcmd += ' ' + ' '.join(args)
+ # Only allow to execute one shell command.
+ if any(c in tmpcmd for c in (';', '&&', '||')):
+ print('Illegal function parameters "%s"', tmpcmd)
+ return rc
+
+ cmd = srccmd + tmpcmd
+ try:
+ rc = subprocess.call([cmd], shell=True)
+ except:
+ raise Exception('Failed to execute "%s"', cmd, exc_info=True)
+
+ return rc
+
+
+def print_msg(msg, success=True):
+ """
+ Print message followed by a color string "[ OK ]" or "[Failed]".
+ """
+ print msg,
+ if success:
+ call_init_function('success')
+ else:
+ call_init_function('failure')
+ print
diff --git a/vdsm-tool/needed_service.py.in b/vdsm-tool/needed_service.py.in
new file mode 100644
index 0000000..5266408
--- /dev/null
+++ b/vdsm-tool/needed_service.py.in
@@ -0,0 +1,61 @@
+# Copyright IBM, Corp. 2012
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+import os
+
+from vdsm import constants
+from vdsm.tool.base import exec_command, print_msg
+from vdsm.tool import expose
+
+EX_CHKCONFIG = '@CHKCONFIG_PATH@'
+EX_SERVICE = constants.EXT_SERVICE
+
+
+ at expose('shutdown-conflicting-srv')
+def shutdown_conflicting_srv():
+ """
+ Shutdown conflicting service
+ """
+ srv = 'libvirt-guests'
+ exec_command([EX_CHKCONFIG, srv, 'off'])
+ rc = exec_command([EX_SERVICE, srv, 'status'])[0]
+ if rc == 0:
+ if os.path.exists('/var/lock/subsys/libvirt-guests'):
+ os.unlink('/var/lock/subsys/libvirt-guests')
+ else:
+ exec_command([EX_SERVICE, srv, 'stop'])
+ return 0
+
+
+ at expose('start-needed-srv')
+def start_needed_srv():
+ """
+ Start needed service
+ """
+ services = ['iscsid', 'multipathd', 'ntpd', 'wdmd', 'sanlock']
+ for srv in services:
+ rc = exec_command([EX_SERVICE, srv, 'status'])[0]
+ if rc != 0:
+ print 'Starting %s...' % srv
+ rc = exec_command([EX_SERVICE, srv, 'start'])[0]
+ if rc != 0:
+ print_msg('vdsm: Dependent %s failed to start' % srv, False)
+ return rc
+ exec_command([EX_SERVICE, 'iscsid', 'force-start'])
+ return 0
diff --git a/vdsm.spec.in b/vdsm.spec.in
index f61a36a..dc7ee24 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -771,6 +771,8 @@
%{python_sitearch}/%{vdsm_name}/tool/passwd.py*
%{python_sitearch}/%{vdsm_name}/tool/validate_ovirt_certs.py*
%{python_sitearch}/%{vdsm_name}/tool/load_needed_modules.py*
+%{python_sitearch}/%{vdsm_name}/tool/needed_service.py*
+%{python_sitearch}/%{vdsm_name}/tool/base.py*
%files tests
%doc %{_datadir}/%{vdsm_name}/tests/README
diff --git a/vdsm/vdsmd.init.in b/vdsm/vdsmd.init.in
index 2b9ad11..35fb05e 100755
--- a/vdsm/vdsmd.init.in
+++ b/vdsm/vdsmd.init.in
@@ -32,8 +32,6 @@
CORE_DUMP_PATH=/var/log/core/core.%p.%t.dump
DOM_METADATA_BACKUP_DIR=/var/log/vdsm/backup
CORE_PATTERN=/proc/sys/kernel/core_pattern
-NEEDED_SERVICES="iscsid multipathd ntpd wdmd sanlock"
-CONFLICTING_SERVICES="libvirt-guests"
LCONF=/etc/libvirt/libvirtd.conf
QCONF=/etc/libvirt/qemu.conf
@@ -130,49 +128,11 @@
fi
}
-shutdown_conflicting_srv() {
- local srv
-
- for srv in $CONFLICTING_SERVICES
- do
- /sbin/chkconfig $srv off
- if /sbin/service $srv status > /dev/null 2>&1;
- then
- if [ "$srv" == "libvirt-guests" ]; then
- /bin/rm -f /var/lock/subsys/libvirt-guests
- else
- /sbin/service $srv stop
- fi
- fi
- done
- return 0
-}
libvirt_should_use_upstart() {
[[ -x /sbin/initctl ]]
}
-start_needed_srv() {
- local srv
- local ret_val
-
- for srv in $NEEDED_SERVICES
- do
- if ! /sbin/service $srv status > /dev/null 2>&1;
- then
- echo "Starting $srv..."
- /sbin/service $srv start
- ret_val=$?
- if [ $ret_val -ne 0 ]
- then
- log_failure_msg "$prog: Dependent $srv failed to start"
- return $ret_val
- fi
- fi
- done
-
- /sbin/service iscsid force-start
-}
test_lo() {
if ! LC_ALL=C /sbin/ifconfig lo | /bin/grep -q UP;
@@ -428,7 +388,7 @@
local ret_val
python @VDSMDIR@/hooks.pyc before_vdsm_start
- shutdown_conflicting_srv && stop_libvirtd_sysv
+ /usr/bin/vdsm-tool shutdown-conflicting-srv && stop_libvirtd_sysv
if ! @LIBEXECDIR@/vdsm-gencerts.sh --check; then
echo -n $"Configuring a self-signed VDSM host certificate: "
@@ -443,7 +403,7 @@
return $ret_val
fi
- start_needed_srv && start_libvirtd
+ /usr/bin/vdsm-tool start-needed-srv && start_libvirtd
ret_val=$?
if [ $ret_val -ne 0 ]
then
--
To view, visit http://gerrit.ovirt.org/8759
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I54eca4b2cc3a17e9819a0188e5dc4c8bd28161da
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Wenyi Gao <wenyi at linux.vnet.ibm.com>
More information about the vdsm-patches
mailing list