diff --color -uNr a/agents/azure_arm/fence_azure_arm.py b/agents/azure_arm/fence_azure_arm.py --- a/agents/azure_arm/fence_azure_arm.py 2020-06-30 11:26:43.000000000 +0200 +++ b/agents/azure_arm/fence_azure_arm.py 2021-06-03 13:16:16.547120822 +0200 @@ -1,6 +1,11 @@ #!@PYTHON@ -tt -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import logging import atexit import xml.etree.ElementTree as ET diff --color -uNr a/agents/hpblade/fence_hpblade.py b/agents/hpblade/fence_hpblade.py --- a/agents/hpblade/fence_hpblade.py 2019-08-16 10:55:11.000000000 +0200 +++ b/agents/hpblade/fence_hpblade.py 2021-06-03 13:16:16.547120822 +0200 @@ -8,7 +8,11 @@ ##### import sys, re -import pexpect +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import atexit sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * diff --color -uNr a/agents/ilo/fence_ilo.py b/agents/ilo/fence_ilo.py --- a/agents/ilo/fence_ilo.py 2019-02-04 09:45:05.000000000 +0100 +++ b/agents/ilo/fence_ilo.py 2021-06-03 13:16:16.547120822 +0200 @@ -11,7 +11,12 @@ ## iLO2 / firmware 1.50 / RIBCL 2.22 ##### -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import atexit from xml.sax.saxutils import quoteattr sys.path.append("@FENCEAGENTSLIBDIR@") diff --color -uNr a/agents/ldom/fence_ldom.py b/agents/ldom/fence_ldom.py --- a/agents/ldom/fence_ldom.py 2019-02-04 09:45:05.000000000 +0100 +++ b/agents/ldom/fence_ldom.py 2021-06-03 13:16:16.547120822 +0200 @@ -7,7 +7,12 @@ ## ##### -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import atexit sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * diff --color -uNr a/agents/Makefile.am b/agents/Makefile.am --- a/agents/Makefile.am 2021-03-16 12:26:37.000000000 +0100 +++ b/agents/Makefile.am 2021-06-03 13:16:16.547120822 +0200 @@ -112,10 +112,10 @@ cisco_mds/fence_cisco_mds.delay-check: cisco_mds/fence_cisco_mds $(eval INPUT=$(subst .delay-check,,$@)) FENCE_TEST_ARGS_CISCO_MDS=$$(printf '$(FENCE_TEST_ARGS)' | sed 's#port=1#port=fc1/1#'); \ - test `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib /usr/bin/time -p \ + test `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect /usr/bin/time -p \ sh -c "printf 'delay=10\n $$FENCE_TEST_ARGS_CISCO_MDS' | $(PYTHON) ./$(INPUT)" 2>&1 |\ awk -F"[. ]" -vOFS= '/real/ {print $$2,$$3}'` -ge 1000 || ( \ - PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib /usr/bin/time -p \ + PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect /usr/bin/time -p \ sh -c "printf "delay=0\n $$FENCE_TEST_ARGS_CISCO_MDS" | $(PYTHON) ./$(INPUT)"; false ) include $(top_srcdir)/make/fencebuild.mk diff --color -uNr a/agents/netio/fence_netio.py b/agents/netio/fence_netio.py --- a/agents/netio/fence_netio.py 2019-02-04 09:45:05.000000000 +0100 +++ b/agents/netio/fence_netio.py 2021-06-03 13:16:16.547120822 +0200 @@ -1,6 +1,11 @@ #!@PYTHON@ -tt -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import atexit sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * diff --color -uNr a/agents/raritan/fence_raritan.py b/agents/raritan/fence_raritan.py --- a/agents/raritan/fence_raritan.py 2019-08-16 10:55:11.000000000 +0200 +++ b/agents/raritan/fence_raritan.py 2021-06-03 13:16:16.547120822 +0200 @@ -1,6 +1,11 @@ #!@PYTHON@ -tt -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import atexit sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * diff --color -uNr a/agents/sanbox2/fence_sanbox2.py b/agents/sanbox2/fence_sanbox2.py --- a/agents/sanbox2/fence_sanbox2.py 2019-02-11 13:05:48.000000000 +0100 +++ b/agents/sanbox2/fence_sanbox2.py 2021-06-03 13:16:16.547120822 +0200 @@ -8,7 +8,12 @@ ## +-----------------+---------------------------+ ##### -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import logging import atexit sys.path.append("@FENCEAGENTSLIBDIR@") diff --color -uNr a/agents/vmware/fence_vmware.py b/agents/vmware/fence_vmware.py --- a/agents/vmware/fence_vmware.py 2019-02-04 09:45:05.000000000 +0100 +++ b/agents/vmware/fence_vmware.py 2021-06-03 13:16:16.547120822 +0200 @@ -22,7 +22,12 @@ # VMware vCenter 4.0.0 # -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import logging import atexit sys.path.append("@FENCEAGENTSLIBDIR@") diff --color -uNr a/agents/wti/fence_wti.py b/agents/wti/fence_wti.py --- a/agents/wti/fence_wti.py 2019-02-04 09:45:05.000000000 +0100 +++ b/agents/wti/fence_wti.py 2021-06-03 13:17:33.435380703 +0200 @@ -11,12 +11,21 @@ ## WTI IPS-800-CE v1.40h (no username) ('list' tested) ##### -import sys, re, pexpect +import sys, re +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass import atexit import time sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * -from fencing import fspawn, fail, fail_usage, EC_LOGIN_DENIED +from fencing import fail, fail_usage, EC_LOGIN_DENIED +try: + from fencing import fspawn +except ImportError: + pass def get_listing(conn, options, listing_command): listing = "" diff --color -uNr a/lib/fencing.py.py b/lib/fencing.py.py --- a/lib/fencing.py.py 2021-06-03 10:34:00.000000000 +0200 +++ b/lib/fencing.py.py 2021-06-03 13:16:16.548120826 +0200 @@ -1,7 +1,12 @@ #!@PYTHON@ -tt import sys, getopt, time, os, uuid, pycurl, stat -import pexpect, re, syslog +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass +import re, syslog import logging import subprocess import threading @@ -491,29 +496,32 @@ "snmpset_path", "snmpget_path", "snmpwalk_path"] } -class fspawn(pexpect.spawn): - def __init__(self, options, command, **kwargs): - if sys.version_info[0] > 2: - kwargs.setdefault('encoding', 'utf-8') - logging.info("Running command: %s", command) - pexpect.spawn.__init__(self, command, **kwargs) - self.opt = options - - def log_expect(self, pattern, timeout): - result = self.expect(pattern, timeout if timeout != 0 else None) - logging.debug("Received: %s", self.before + self.after) - return result - - def read_nonblocking(self, size, timeout): - return pexpect.spawn.read_nonblocking(self, size=100, timeout=timeout if timeout != 0 else None) - - def send(self, message): - logging.debug("Sent: %s", message) - return pexpect.spawn.send(self, message) - - # send EOL according to what was detected in login process (telnet) - def send_eol(self, message): - return self.send(message + self.opt["eol"]) +try: + class fspawn(pexpect.spawn): + def __init__(self, options, command, **kwargs): + if sys.version_info[0] > 2: + kwargs.setdefault('encoding', 'utf-8') + logging.info("Running command: %s", command) + pexpect.spawn.__init__(self, command, **kwargs) + self.opt = options + + def log_expect(self, pattern, timeout): + result = self.expect(pattern, timeout if timeout != 0 else None) + logging.debug("Received: %s", self.before + self.after) + return result + + def read_nonblocking(self, size, timeout): + return pexpect.spawn.read_nonblocking(self, size=100, timeout=timeout if timeout != 0 else None) + + def send(self, message): + logging.debug("Sent: %s", message) + return pexpect.spawn.send(self, message) + + # send EOL according to what was detected in login process (telnet) + def send_eol(self, message): + return self.send(message + self.opt["eol"]) +except: + pass def frun(command, timeout=30, withexitstatus=False, events=None, extra_args=None, logfile=None, cwd=None, env=None, **kwargs): diff --color -uNr a/lib/fencing_snmp.py.py b/lib/fencing_snmp.py.py --- a/lib/fencing_snmp.py.py 2019-02-04 09:45:05.000000000 +0100 +++ b/lib/fencing_snmp.py.py 2021-06-03 13:16:16.548120826 +0200 @@ -2,7 +2,13 @@ # For example of use please see fence_cisco_mds -import re, pexpect +import sys +sys.path.insert(0, '/usr/lib/fence-agents/support/pexpect') +try: + import pexpect +except: + pass +import re import logging from fencing import * from fencing import fail, fail_usage, EC_TIMED_OUT, run_delay, frun diff --color -uNr a/make/agentpycheck.mk b/make/agentpycheck.mk --- a/make/agentpycheck.mk 2020-06-30 11:26:43.000000000 +0200 +++ b/make/agentpycheck.mk 2021-06-03 13:16:16.548120826 +0200 @@ -9,34 +9,34 @@ %.xml-check: %.8 $(eval INPUT=$(subst .xml-check,,$(@F))) - for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ + for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ TEMPFILE=$$(mktemp); \ - PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$$x -o metadata | $(AWK) $(AWK_VAL) > $$TEMPFILE && \ + PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$$x -o metadata | $(AWK) $(AWK_VAL) > $$TEMPFILE && \ diff $$TEMPFILE $(DATADIR)/$$x.xml || exit 1 && \ rm $$TEMPFILE; \ done %.xml-upload: %.8 $(eval INPUT=$(subst .xml-upload,,$(@F))) - for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ - PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$$x -o metadata | $(AWK) $(AWK_VAL) > $(DATADIR)/$$x.xml; \ + for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ + PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$$x -o metadata | $(AWK) $(AWK_VAL) > $(DATADIR)/$$x.xml; \ done # If test will fail, rerun fence agents to show problems %.delay-check: % $(eval INPUT=$(subst .delay-check,,$(@F))) - for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ - test `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib /usr/bin/time -p \ + for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ + test `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect /usr/bin/time -p \ sh -c "printf 'delay=10\n $(FENCE_TEST_ARGS)' | $(PYTHON) $(@D)/$$x" 2>&1 |\ awk -F"[. ]" -vOFS= '/real/ {print $$2,$$3}'` -ge 1000 || ( \ - PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib /usr/bin/time -p \ + PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect /usr/bin/time -p \ sh -c "printf 'delay=0\n $(FENCE_TEST_ARGS)' | $(PYTHON) $(@D)/$$x"; false ); \ done %.rng-check: % $(eval INPUT=$(subst .rng-check,,$(@F))) - for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ - PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@D)/$$x -o metadata | \ + for x in $(INPUT) `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$(INPUT) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ + PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@D)/$$x -o metadata | \ xsltproc ${abs_top_srcdir}/lib/fence2rng.xsl - | \ sed -e 's/ rha:description=/ description=/g' -e 's/ rha:name=/ name=/g' | \ xmllint --nsclean --noout -; \ diff --color -uNr a/make/fencebuild.mk b/make/fencebuild.mk --- a/make/fencebuild.mk 2021-03-16 09:32:22.000000000 +0100 +++ b/make/fencebuild.mk 2021-06-03 13:16:16.548120826 +0200 @@ -34,10 +34,10 @@ > $@ if [ 0 -eq `echo "$(@)" | grep fence_ > /dev/null 2>&1; echo $$?` ]; then \ - PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(top_srcdir)/lib/check_used_options.py $@; \ + PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(top_srcdir)/lib/check_used_options.py $@; \ else true ; fi - for x in `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $(@) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ +for x in `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $(@) -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ cp -f $(@) $(@D)/$$x; \ $(MAKE) $(@D)/$$x.8; \ done @@ -64,7 +64,7 @@ fi for p in $(TARGET); do \ dir=`dirname $$p`; \ - for x in `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $$p -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ + for x in `PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $$p -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"`; do \ echo " $(INSTALL_SCRIPT) $$dir/$$x '$(DESTDIR)$(sbindir)'"; \ $(INSTALL_SCRIPT) $$dir/$$x "$(DESTDIR)$(sbindir)" || exit $$?; \ echo " $(INSTALL_DATA) '$$dir/$$x.8' '$(DESTDIR)$(man8dir)'"; \ @@ -74,7 +74,7 @@ uninstall-hook: $(TARGET) files=`for p in $(TARGET); do \ - for x in \`PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib $(PYTHON) $$p -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"\`; do \ + for x in \`PYTHONPATH=$(abs_top_srcdir)/lib:$(abs_top_builddir)/lib:$(abs_top_builddir)/support/pexpect $(PYTHON) $$p -o metadata | grep symlink | sed -e "s/.*\(fence.*\)\" .*/\1/g"\`; do \ echo " rm -f '$(DESTDIR)$(sbindir)/$$x'"; \ rm -f "$(DESTDIR)$(sbindir)/$$x"; \ echo " rm -f '$(DESTDIR)$(man8dir)/$$x.8'"; \ diff --color -uNr a/make/fenceman.mk b/make/fenceman.mk --- a/make/fenceman.mk 2021-03-11 16:10:15.000000000 +0100 +++ b/make/fenceman.mk 2021-06-03 13:16:16.548120826 +0200 @@ -1,6 +1,6 @@ %.8: % $(top_srcdir)/lib/fence2man.xsl set -e && \ - PYTHONPATH=$(abs_srcdir)/lib:$(abs_builddir)/../lib:$(abs_builddir)/lib \ + PYTHONPATH=$(abs_srcdir)/lib:$(abs_builddir)/../lib:$(abs_builddir)/lib:$(abs_top_builddir)/support/pexpect \ $(PYTHON) $* -o manpage > $(@D)/.$(@F).tmp && \ xmllint --noout --relaxng $(top_srcdir)/lib/metadata.rng $(@D)/.$(@F).tmp && \ xsltproc $(top_srcdir)/lib/fence2man.xsl $(@D)/.$(@F).tmp > $@