1
0
mirror of https://gerrit.ovirt.org/vdsm synced 2026-02-05 21:46:27 +01:00
Files
vdsm/init/daemonAdapter
Sandro Bonazzola 992f635a4e reduce W504 issues
reduced W504 issues by covering init, static and vdsm_hooks directories.
Updated statistics.

Change-Id: Iab72f7cb01aae8862cb72e5afa474eed91e4112d
Signed-off-by: Sandro Bonazzola <sbonazzo@redhat.com>
2021-12-02 23:04:37 +02:00

131 lines
4.6 KiB
Python
Executable File

#!/usr/bin/python3
# Copyright 2013 IBM, Inc.
#
# 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
#
from __future__ import absolute_import
import argparse
import os
import sys
import syslog
import traceback
from stat import S_IRUSR, S_IWUSR
from vdsm.config import config
class DaemonAdapter(object):
def __init__(self):
self._args = None
def _parse_args(self):
parser = argparse.ArgumentParser(
description='Start daemon process with various daemon options')
parser.add_argument(
'-0', '--stdin', dest='stdin', default=None,
metavar='dest', help='Redirect stdin to new destination')
parser.add_argument(
'-1', '--stdout', dest='stdout', default=None,
metavar='dest', help='Redirect stdout to new destination')
parser.add_argument(
'-2', '--stderr', dest='stderr', default=None,
metavar='dest', help='Redirect stderr to new destination')
parser.add_argument(
'--syslog', dest='syslog', default=False, action='store_true',
help='Reporting errors to syslog when specified')
parser.add_argument(
'target', action='store', nargs=1, metavar='targetFullPath',
help='Full path of the target binary to start')
parser.add_argument(
'targetOptions', default=list(), nargs=argparse.REMAINDER,
metavar='target_opt0 target_opt1 ...', action='store',
help='Add options to be passed to target')
self._args = parser.parse_args(sys.argv[1:])
def _log(self, msg):
if self._args and self._args.syslog:
for m in msg.splitlines():
syslog.syslog(m)
else:
sys.stderr.write("%s\n" % msg)
def execute(self):
try:
self._parse_args()
os.nice(config.getint('vars', 'vdsm_nice'))
env = os.environ.copy()
# Python path is needed to get sitecustomize.py imported from
# target directory.
pythonpath = os.path.dirname(self._args.target[0])
if 'PYTHONPATH' in env:
pythonpath += ':' + env['PYTHONPATH']
env.update({
'LIBVIRT_DEBUG': config.get(
'vars', 'libvirt_env_variable_debug'),
'LIBVIRT_LOG_FILTERS': config.get(
'vars', 'libvirt_env_variable_log_filters'),
'LIBVIRT_LOG_OUTPUTS': config.get(
'vars', 'libvirt_env_variable_log_outputs'),
'LC_ALL': 'C.UTF8',
'PYTHONPATH': pythonpath,
})
cmd = [self._args.target[0]] + self._args.targetOptions
if self._args.stdin:
fdin = os.open(self._args.stdin, os.O_RDONLY)
os.dup2(fdin, sys.stdin.fileno())
os.close(fdin)
# stdout and stderr redirection should be in last minute,
# otherwise it swallows error messages from daemonAdapter when
# redirected to /dev/null.
if self._args.stdout:
fdout = os.open(
self._args.stdout,
os.O_WRONLY | os.O_CREAT | os.O_APPEND,
S_IRUSR | S_IWUSR
)
os.dup2(fdout, sys.stdout.fileno())
os.close(fdout)
if self._args.stderr:
fderr = os.open(
self._args.stderr,
os.O_WRONLY | os.O_CREAT | os.O_APPEND,
S_IRUSR | S_IWUSR
)
os.dup2(fderr, sys.stderr.fileno())
os.close(fderr)
os.execve(cmd[0], cmd, env)
except Exception:
self._log("Error in daemonAdapater: %s " % traceback.format_exc())
finally:
return 1
if __name__ == '__main__':
d = DaemonAdapter()
sys.exit(d.execute())