Hello community, here is the log from the commit of package crmsh for openSUSE:Factory checked in at 2016-10-26 13:29:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/crmsh (Old) and /work/SRC/openSUSE:Factory/.crmsh.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "crmsh" Changes: -------- --- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes 2016-10-10 16:21:09.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.crmsh.new/crmsh.changes 2016-10-26 13:29:21.000000000 +0200 @@ -1,0 +2,9 @@ +Tue Oct 25 11:46:42 UTC 2016 - [email protected] + +- Update to version 2.3.1+git.1477204932.7939b51: + * medium: corosync: Fix missing variable in del-node + * low: crm_pssh: Fix nodenum envvar name + * low: cmd_status: More detail in verify output + * doc: Fix inverted boolean in resource set documentation + +------------------------------------------------------------------- Old: ---- crmsh-2.3.1+git.1475245522.4172084.tar.bz2 New: ---- crmsh-2.3.1+git.1477204932.7939b51.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ crmsh.spec ++++++ --- /var/tmp/diff_new_pack.akL8xE/_old 2016-10-26 13:29:23.000000000 +0200 +++ /var/tmp/diff_new_pack.akL8xE/_new 2016-10-26 13:29:23.000000000 +0200 @@ -36,7 +36,7 @@ Summary: High Availability cluster command-line interface License: GPL-2.0+ Group: %{pkg_group} -Version: 2.3.1+git.1475245522.4172084 +Version: 2.3.1+git.1477204932.7939b51 Release: 0 Url: http://crmsh.github.io Source0: %{name}-%{version}.tar.bz2 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.akL8xE/_old 2016-10-26 13:29:23.000000000 +0200 +++ /var/tmp/diff_new_pack.akL8xE/_new 2016-10-26 13:29:23.000000000 +0200 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/ClusterLabs/crmsh.git</param> - <param name="changesrevision">41720845429e9a42d4273d70a6be5cc31e324849</param></service></servicedata> \ No newline at end of file + <param name="changesrevision">d796a3b07ad5d1bd1637638bd1100175d066d24e</param></service></servicedata> \ No newline at end of file ++++++ crmsh-2.3.1+git.1475245522.4172084.tar.bz2 -> crmsh-2.3.1+git.1477204932.7939b51.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/.travis.yml new/crmsh-2.3.1+git.1477204932.7939b51/.travis.yml --- old/crmsh-2.3.1+git.1475245522.4172084/.travis.yml 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/.travis.yml 2016-10-23 08:42:12.000000000 +0200 @@ -1,15 +1,29 @@ --- -sudo: false +sudo: required +dist: trusty language: python python: - - 2.6 - - 2.7 + - "2.6" + - "2.7_with_system_site_packages" + +before_install: + - sudo add-apt-repository ppa:syseleven-platform/linux-ha -y + - sudo apt-get -qq update + - sudo apt-get install -y pacemaker libcluster-glue-dev automake autoconf python-lxml python-dateutil python-setuptools python-yaml asciidoc pkg-config + - sudo dpkg -r --force-depends crmsh install: - pip install tox-travis script: - tox + - test/travis-tests.sh + +after_failure: + - sudo cat $TRAVIS_BUILD_DIR/crmtestout/regression.out $TRAVIS_BUILD_DIR/crmtestout/crm.* /etc/apt/sources.list + - lsb_release -a + - whoami + - printenv | sort notifications: irc: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/cmd_status.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/cmd_status.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/cmd_status.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/cmd_status.py 2016-10-23 08:42:12.000000000 +0200 @@ -127,9 +127,9 @@ ''' from . import config if "ptest" in config.core.ptest: - cmd1 = "crm_verify -LV; %s -L -VVVV" % (config.core.ptest) + cmd1 = "crm_verify -LVVV; %s -L -VVVV" % (config.core.ptest) else: - cmd1 = "crm_verify -LV; %s -LjV" % (config.core.ptest) + cmd1 = "crm_verify -LVVV; %s -LjV" % (config.core.ptest) if "scores" in args: cmd1 += " -s" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/corosync.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/corosync.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/corosync.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/corosync.py 2016-10-23 08:42:12.000000000 +0200 @@ -444,6 +444,7 @@ if nth == -1: return + num_nodes = p.count('nodelist.node') p.set('quorum.two_node', '1' if num_nodes == 2 else '0') f = open(conf(), 'w') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/crm_pssh.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/crm_pssh.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/crm_pssh.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/crm_pssh.py 2016-10-23 08:42:12.000000000 +0200 @@ -83,7 +83,7 @@ for host, cmdline in l: cmd = ['ssh', host, '-o', 'PasswordAuthentication=no', - '-o', 'SendEnv=PSSH_NODENUM', + '-o', 'SendEnv=PARALLAX_NODENUM', '-o', 'StrictHostKeyChecking=no'] if hasattr(opts, 'options'): for opt in opts.options: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/history.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/history.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/history.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/history.py 2016-10-23 08:42:12.000000000 +0200 @@ -50,6 +50,7 @@ return m.group(1) return "-1" + def pe_file_in_range(pe_f, a): if not a: return pe_f diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/msg.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/msg.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/msg.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/msg.py 2016-10-23 08:42:12.000000000 +0200 @@ -2,7 +2,6 @@ # See COPYING for license information. import sys -from lxml import etree from . import config from . import clidisplay from . import options diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/ui_history.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/ui_history.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/ui_history.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/ui_history.py 2016-10-23 08:42:12.000000000 +0200 @@ -434,53 +434,36 @@ self._reset_cib_env() return s - def _worddiff(self, s1, s2): - s = None - f1 = utils.str2tmp(s1) - f2 = utils.str2tmp(s2) - if f1 and f2: - _, s = utils.get_stdout("wdiff %s %s" % (f1, f2)) - for f in (f1, f2): - try: - os.unlink(f) - except: - pass - return s - - def _unidiff(self, s1, s2, t1, t2): - s = None - f1 = utils.str2tmp(s1) - f2 = utils.str2tmp(s2) - if f1 and f2: - _, s = utils.get_stdout("diff -U 0 -d -b --label %s --label %s %s %s" % - (t1, t2, f1, f2)) - - for f in (f1, f2): + def _diff(self, pe_fun, t1, t2, html=False, wdiff=False): + def _diff_impl(s1, s2, cmd): + s = None + f1 = utils.str2tmp(s1) + f2 = utils.str2tmp(s2) try: - os.unlink(f) - except: - pass - return s + if f1 and f2: + _, s = utils.get_stdout(cmd.format(f1=f1, f2=f2)) + finally: + for f in (f1, f2): + try: + os.unlink(f) + except os.error: + pass + return s + + def _diffhtml(s1, s2, t1, t2): + import difflib + return ''.join(difflib.HtmlDiff(wrapcolumn=60).make_table(s1.split('\n'), s2.split('\n'), t1, t2)) - def _diffhtml(self, s1, s2, t1, t2): - import difflib - fromlines = s1.split('\n') - tolines = s2.split('\n') - diff_l = difflib.HtmlDiff(wrapcolumn=60).make_table( - fromlines, tolines, t1, t2) - return ''.join(diff_l) - - def _diff(self, pe_fun, t1, t2, html=False, wdiff=False): s1 = self._render_pe(pe_fun, t1) s2 = self._render_pe(pe_fun, t2) if not s1 or not s2: return None if html: - s = self._diffhtml(s1, s2, t1, t2) + s = _diffhtml(s1, s2, t1, t2) elif wdiff: - s = self._worddiff(s1, s2) + s = _diff_impl(s1, s2, "wdiff {f1} {f2}") else: - s = self._unidiff(s1, s2, t1, t2) + s = _diff_impl(s1, s2, "diff -U 0 -d -b --label %s --label %s {f1} {f2}" % (t1, t2)) return s def _common_pe_render_check(self, context, opt_l, *args): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/utils.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/utils.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/utils.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/utils.py 2016-10-23 08:42:12.000000000 +0200 @@ -10,6 +10,7 @@ import time import datetime import shutil +import shlex import bz2 import fnmatch import gc @@ -25,6 +26,7 @@ def memoize(function): "Decorator to invoke a function once only for any argument" memoized = {} + def inner(*args): if args in memoized: return memoized[args] @@ -53,6 +55,32 @@ return os.uname()[1] +def network_defaults(interface=None): + """ + returns (interface, ip-address, network, prefix-length) + """ + def valfor(l, key): + for i in range(0, len(l) - 1): + if l[i] == key: + return l[i + 1] + return None + _, outp = get_stdout("/sbin/ip -o route show") + info = [None, None, None, None] + if interface is not None: + info[0] = interface + for l in outp.splitlines(): + sp = l.split() + if info[0] is None and len(sp) >= 5 and sp[0] == 'default' and sp[1] == 'via': + info[0] = sp[4] + if info[0] is not None: + if sp[0].find('/') >= 0 and valfor(sp, 'dev') == info[0]: + nw, length = sp[0].split('/') + info[1], info[2], info[3] = valfor(sp, 'src'), nw, length + if info[0] is None: + raise ValueError("Failed to determine default network interface") + return tuple(info) + + _cib_shadow = 'CIB_shadow' _cib_in_use = '' @@ -245,6 +273,20 @@ return cmd +def chown(path, user, group): + if isinstance(user, int): + uid = user + else: + import pwd + uid = pwd.getpwnam(user).pw_uid + if isinstance(group, int): + gid = group + else: + import grp + gid = grp.getgrnam(group).gr_gid + os.chown(path, uid, gid) + + def ensure_sudo_readable(f): # make sure the tempfile is readable to crm_diff (bsc#999683) if config.core.user: @@ -327,17 +369,77 @@ return tmp +@contextmanager +def create_tempfile(suffix='', dir=None): + """ Context for temporary file. + + Will find a free temporary filename upon entering + and will try to delete the file on leaving, even in case of an exception. + + Parameters + ---------- + suffix : string + optional file suffix + dir : string + optional directory to save temporary file in + + (from http://stackoverflow.com/a/29491523) + """ + import tempfile + tf = tempfile.NamedTemporaryFile(delete=False, suffix=suffix, dir=dir) + tf.file.close() + try: + yield tf.name + finally: + try: + os.remove(tf.name) + except OSError as e: + if e.errno == 2: + pass + else: + raise + + +@contextmanager +def open_atomic(filepath, mode="r", buffering=-1, fsync=False): + """ Open temporary file object that atomically moves to destination upon + exiting. + + Allows reading and writing to and from the same filename. + + The file will not be moved to destination in case of an exception. + + Parameters + ---------- + filepath : string + the file path to be opened + fsync : bool + whether to force write the file to disk + + (from http://stackoverflow.com/a/29491523) + """ + + with create_tempfile(dir=os.path.dirname(os.path.abspath(filepath))) as tmppath: + with open(tmppath, mode, buffering) as file: + try: + yield file + finally: + if fsync: + file.flush() + os.fsync(file.fileno()) + os.rename(tmppath, filepath) + + def str2file(s, fname): ''' Write a string to a file. ''' try: - f = open(fname, "w") + with open_atomic(fname, 'w') as dst: + dst.write(s) except IOError, msg: common_err(msg) return False - f.write(s) - f.close() return True @@ -509,7 +611,7 @@ return True except OSError, (errno, strerror): if errno != os.errno.EEXIST: - common_err("Failed to acquire lock to %s: %s" %(lockdir, strerror)) + common_err("Failed to acquire lock to %s: %s" % (lockdir, strerror)) return False time.sleep(0.1) continue @@ -524,6 +626,12 @@ rmdir_r(os.path.join(lockdir, _LOCKDIR)) +def mkdirp(d, mode=0777): + if os.path.isdir(d): + return True + os.makedirs(d, mode=mode) + + def pipe_cmd_nosudo(cmd): if options.regression_tests: print ".EXT", cmd @@ -962,6 +1070,7 @@ else: pipe_string(get_pager_cmd(), term_render("".join(g))) + def page_file(filename): 'Open file in pager' if not os.path.isfile(filename): @@ -1360,6 +1469,17 @@ return "'" + s.replace("'", "'\"'\"'") + "'" +def doublequote(s): + """Return a shell-escaped version of the string *s*.""" + if not s: + return '""' + if _find_unsafe(s) is None: + return s + + # use double quotes + return '"' + s.replace('"', "\\\"") + '"' + + def fetch_opts(args, opt_l): ''' Get and remove option keywords from args. @@ -1515,6 +1635,61 @@ return _NOQUOTES_RE.match(v) is not None +def unquote(s): + """ + Reverse shell-quoting a string, so the string '"a b c"' + becomes 'a b c' + """ + sp = shlex.split(s) + if len(sp) > 0: + return sp[0] + return "" + + +def parse_sysconfig(sysconfig_file): + """ + Reads a sysconfig file into a dict + """ + ret = {} + vre = re.compile(r"(\S+)\s*=\s*(.*)") + if os.path.isfile(sysconfig_file): + for line in open(sysconfig_file).readlines(): + if line.lstrip().startswith('#'): + continue + m = vre.match(line) + if m: + ret[m.group(1)] = unquote(m.group(2)) + return ret + + +def sysconfig_set(sysconfig_file, **values): + """ + Set the values in the sysconfig file, updating the variables + if they exist already, appending them if not. + """ + vre = re.compile(r"(\S+)\s*=\s*(.*)") + outp = "" + if os.path.isfile(sysconfig_file): + for line in open(sysconfig_file).readlines(): + if line.lstrip().startswith('#'): + outp += line + else: + matched = False + m = vre.match(line) + if m: + for k, v in values.iteritems(): + if k == m.group(1): + matched = True + outp += '%s=%s\n' % (k, doublequote(v)) + del values[k] + break + if not matched: + outp += line + for k, v in values.iteritems(): + outp += '%s = %s\n' % (k, doublequote(v)) + str2file(outp, sysconfig_file) + + def remote_diff_slurp(nodes, filename): try: import parallax @@ -1611,6 +1786,7 @@ # should be obscured as a sequence of **** when printed _obscured_nvpairs = [] + def obscured(key, value): if key is not None and value is not None: for o in _obscured_nvpairs: @@ -1618,6 +1794,7 @@ return '*' * 6 return value + @contextmanager def obscure(obscure_list): global _obscured_nvpairs @@ -1629,5 +1806,4 @@ _obscured_nvpairs = prev - # vim:ts=4:sw=4:et: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/crmsh/xmlutil.py new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/xmlutil.py --- old/crmsh-2.3.1+git.1475245522.4172084/crmsh/xmlutil.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/crmsh/xmlutil.py 2016-10-23 08:42:12.000000000 +0200 @@ -15,7 +15,6 @@ from . import constants from .msg import common_err, common_error, common_warn, common_debug, cib_parse_err, err_buf from . import userdir -from . import utils from .utils import add_sudo, str2file, str2tmp, get_boolean from .utils import get_stdout, stdout2list, crm_msec, crm_time_cmp from .utils import olist, get_cib_in_use, get_tempdir @@ -666,11 +665,11 @@ def sanitize_cib(doc): xml_processnodes(doc, is_status_node, rmnodes) - #xml_processnodes(doc, true, printid) - #xml_processnodes(doc, is_emptynvpairs, rmnodes) - #xml_processnodes(doc, is_emptyops, rmnodes) + # xml_processnodes(doc, true, printid) + # xml_processnodes(doc, is_emptynvpairs, rmnodes) + # xml_processnodes(doc, is_emptyops, rmnodes) xml_processnodes(doc, is_entity, rmnodes) - #xml_processnodes(doc, is_comment, rmnodes) + # xml_processnodes(doc, is_comment, rmnodes) xml_processnodes(doc, is_container, sort_container_children) xml_processnodes(doc, true, remove_dflt_attrs) xml_processnodes(doc, true, remove_text) @@ -858,25 +857,29 @@ TODO: if sort_elements is disabled, only sort to resolve inter-dependencies. ''' - if config.core.sort_elements: - sortfn = lambda k: (_sort_xml_order.get(k.tag, _SORT_LAST), k.get('id')) - else: - sortfn = lambda k: _sort_xml_order.get(k.tag, _SORT_LAST) - return sorted(nl, key=sortfn) + def sort_elements(k): + return _sort_xml_order.get(k.tag, _SORT_LAST), k.get('id') + + def sort_type(k): + return _sort_xml_order.get(k.tag, _SORT_LAST) + + return sorted(nl, key=sort_elements if config.core.sort_elements else sort_type) -def processing_sort_cli(cl): +def processing_sort_cli(nl): ''' - cl: list of objects (CibObject) + nl: list of objects (CibObject) Returns the given list in order TODO: if sort_elements is disabled, only sort to resolve inter-dependencies. ''' - if config.core.sort_elements: - sortfn = lambda k: (_sort_cli_order.get(k.obj_type, _SORT_LAST), k.obj_id) - else: - sortfn = lambda k: _sort_cli_order.get(k.obj_type, _SORT_LAST) - return sorted(cl, key=sortfn) + def sort_elements(k): + return _sort_cli_order.get(k.obj_type, _SORT_LAST), k.obj_id + + def sort_type(k): + return _sort_cli_order.get(k.obj_type, _SORT_LAST) + + return sorted(nl, key=sort_elements if config.core.sort_elements else sort_type) def is_resource_cli(s): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/data-manifest new/crmsh-2.3.1+git.1477204932.7939b51/data-manifest --- old/crmsh-2.3.1+git.1475245522.4172084/data-manifest 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/data-manifest 2016-10-23 08:42:12.000000000 +0200 @@ -127,6 +127,8 @@ test/testcases/shadow test/testcases/shadow.exp test/testcases/xmlonly.sh +test/travis-expected-pacemaker-1.1.12.patch +test/travis-tests.sh test/unittests/bug-862577_corosync.conf test/unittests/corosync.conf.1 test/unittests/corosync.conf.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/doc/crm.8.adoc new/crmsh-2.3.1+git.1477204932.7939b51/doc/crm.8.adoc --- old/crmsh-2.3.1+git.1475245522.4172084/doc/crm.8.adoc 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/doc/crm.8.adoc 2016-10-23 08:42:12.000000000 +0200 @@ -663,7 +663,7 @@ +sequential+ and +require-all+. +sequential+:: - If true, the resources in the set do not depend on each other + If false, the resources in the set do not depend on each other internally. Setting +sequential+ to +true+ implies a strict order of dependency within the set. @@ -785,7 +785,7 @@ priority. The parameter list with the highest priority is applied first, but only if the rule expressions for that parameter list all apply. In this case, the rule `#uname eq node1` limits the parameter -list so that it is only applied on `node1. +list so that it is only applied on `node1`. Note that rule expressions are not terminated and are immediately followed by the data to which the rule is applied. In this case, the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/setup.py new/crmsh-2.3.1+git.1477204932.7939b51/setup.py --- old/crmsh-2.3.1+git.1475245522.4172084/setup.py 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/setup.py 2016-10-23 08:42:12.000000000 +0200 @@ -13,4 +13,4 @@ install_requires=['parallax', 'lxml', 'PyYAML', 'python-dateutil'], scripts=['crm'], data_files=[('/usr/share/crmsh', ['doc/crm.8.adoc'])], - include_package_data = True) + include_package_data=True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/test/evaltest.sh new/crmsh-2.3.1+git.1477204932.7939b51/test/evaltest.sh --- old/crmsh-2.3.1+git.1475245522.4172084/test/evaltest.sh 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/test/evaltest.sh 2016-10-23 08:42:12.000000000 +0200 @@ -3,7 +3,7 @@ # See COPYING for license information. : ${TESTDIR:=testcases} -: ${CRM:=/usr/sbin/crm} +: ${CRM:=crm} CRM_NO_REG="$CRM" CRM="$CRM -R" export PYTHONUNBUFFERED=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/test/regression.sh new/crmsh-2.3.1+git.1477204932.7939b51/test/regression.sh --- old/crmsh-2.3.1+git.1475245522.4172084/test/regression.sh 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/test/regression.sh 2016-10-23 08:42:12.000000000 +0200 @@ -195,6 +195,6 @@ then echo "seems like some tests failed or else something not expected" echo "check $OUTF and diff files in $OUTDIR" - echo "in case you wonder what lrmd was doing, read $CRM_LOGF and $CRM_DEBUGF" + echo "in case you wonder what lrmd was doing, read $(abspath $CRM_LOGF) and $(abspath $CRM_DEBUGF)" exit 1 fi >&3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/test/testcases/history.excl new/crmsh-2.3.1+git.1477204932.7939b51/test/testcases/history.excl --- old/crmsh-2.3.1+git.1475245522.4172084/test/testcases/history.excl 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/test/testcases/history.excl 2016-10-23 08:42:12.000000000 +0200 @@ -1 +1,3 @@ ^ptest.*: +^\.EXT tar -C ['][^']+['] -cj -f ['][^']+['] _crmsh_regtest +^Report saved in ['][^']+ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/test/testcases/history.exp new/crmsh-2.3.1+git.1477204932.7939b51/test/testcases/history.exp --- old/crmsh-2.3.1+git.1475245522.4172084/test/testcases/history.exp 2016-09-30 16:25:22.000000000 +0200 +++ new/crmsh-2.3.1+git.1477204932.7939b51/test/testcases/history.exp 2016-10-23 08:42:12.000000000 +0200 @@ -379,8 +379,6 @@ .INP: session current session: _crmsh_regtest .INP: session pack -.EXT tar -C '/var/cache/crm/history-root/session/_crmsh_regtest/..' -cj -f '/root/_crmsh_regtest.tar.bz2' _crmsh_regtest -Report saved in '/root/_crmsh_regtest.tar.bz2' .TRY History 2 .INP: history .INP: session load _crmsh_regtest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/test/travis-expected-pacemaker-1.1.12.patch new/crmsh-2.3.1+git.1477204932.7939b51/test/travis-expected-pacemaker-1.1.12.patch --- old/crmsh-2.3.1+git.1475245522.4172084/test/travis-expected-pacemaker-1.1.12.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/crmsh-2.3.1+git.1477204932.7939b51/test/travis-expected-pacemaker-1.1.12.patch 2016-10-23 08:42:12.000000000 +0200 @@ -0,0 +1,93 @@ +--- a/test/testcases/edit.exp 2016-10-20 22:50:33.744542999 +0000 ++++ b/test/testcases/edit.exp 2016-10-20 22:50:39.591102718 +0000 +@@ -83,3 +83,6 @@ + ERROR: 46: g1 refers to missing object nosuch +-.INP: filter "sed 's/^/# this is a comment\n/'" loc-d1 ++.INP: filter "sed 's/^/# this is a comment ++ERROR: 47: configure.modgroup: No closing quotation ++.INP: /'" loc-d1 ++ERROR: 48: configure.modgroup: No closing quotation + .INP: rsc_defaults $id="rsc_options" failure-timeout=10m +--- a/test/testcases/resource.exp 2016-10-20 22:50:33.768542999 +0000 ++++ b/test/testcases/resource.exp 2016-10-20 22:51:02.357001702 +0000 +@@ -136,4 +136,2 @@ + .EXT crm_resource -r 'p0' -p 'a0' -v '1 2 3' +- +-Set 'p0' option: id=p0-instance_attributes-a0 set=p0-instance_attributes name=a0=1 2 3 + .INP: configure +@@ -181,3 +179,3 @@ + .EXT crm_resource -r 'p0' -d 'a0' +-Deleted 'p0' option: id=p0-instance_attributes-a0 name=a0 ++Deleted p0 option: id=p0-instance_attributes-a0 name=a0 + .INP: configure +@@ -201,4 +199,2 @@ + .EXT crm_resource --meta -r 'p0' -p 'm0' -v '123' +- +-Set 'p0' option: id=p0-meta_attributes-m0 set=p0-meta_attributes name=m0=123 + .INP: configure +@@ -248,3 +244,3 @@ + .EXT crm_resource --meta -r 'p0' -d 'm0' +-Deleted 'p0' option: id=p0-meta_attributes-m0 name=m0 ++Deleted p0 option: id=p0-meta_attributes-m0 name=m0 + .INP: configure +@@ -922,3 +918,2 @@ + .EXT crm_simulate -sUL +-3 of 6 resources DISABLED and 0 BLOCKED from being started due to failures + +@@ -932,3 +927,3 @@ + Stopped: [ node1 ] +- p3 (ocf::heartbeat:Dummy): Stopped ( disabled ) ++ p3 (ocf::heartbeat:Dummy): Stopped + Master/Slave Set: msg [g] +--- a/test/testcases/ra.exp 2016-10-20 22:50:33.764542999 +0000 ++++ b/test/testcases/ra.exp 2016-10-20 22:51:07.084514246 +0000 +@@ -24,8 +24,5 @@ + +-state (string, [/var/run/Dummy-Dummy.state]): State file ++state (string, [/var/run//Dummy-{OCF_RESOURCE_INSTANCE}.state]): State file + Location to store the resource state in. + +-passwd (string): Password +- Fake password field +- + fake (string, [dummy]): +@@ -37,10 +34,2 @@ + +-fail_start_on (string): Report bogus start failure on specified host +- Start actions will return failure if running on the host specified here, but +- the resource will start successfully anyway (future monitor calls will find it +- running). This can be used to test on-fail=ignore. +- +-envfile (string): Environment dump file +- If this is set, the environment will be dumped to this file for every call. +- + Operations' defaults (advisory minimum): +@@ -74,2 +63,5 @@ + ++stonith-timeout (time, [60s]): How long to wait for the STONITH action to complete per a stonith device. ++ Overrides the stonith-timeout cluster property ++ + priority (integer, [0]): The priority of the stonith resource. Devices are tried in order of highest priority to lowest. +@@ -87,10 +79,2 @@ + +-pcmk_delay_max (time, [0s]): Enable random delay for stonith actions and specify the maximum of random delay +- This prevents double fencing when using slow devices such as sbd. +- Use this to enable random delay for stonith actions and specify the maximum of random delay. +- +-pcmk_action_limit (integer, [1]): The maximum number of actions can be performed in parallel on this device +- Pengine property concurrent-fencing=true needs to be configured first. +- Then use this to specify the maximum number of actions can be performed in parallel on this device. -1 is unlimited. +- + pcmk_reboot_action (string, [reboot]): Advanced use only: An alternate command to run instead of 'reboot' +--- a/test/testcases/newfeatures.exp 2016-10-20 22:50:33.756542999 +0000 ++++ b/test/testcases/newfeatures.exp 2016-10-20 22:51:11.803701832 +0000 +@@ -18,2 +18,3 @@ + .INP: alert notify_9 /usr/share/pacemaker/alerts/alert_snmp.sh attributes trap_add_hires_timestamp_oid="false" trap_node_states="non-trap" trap_resource_tasks="start,stop,monitor,promote,demote" to "192.168.40.9" ++ERROR: 17: alert not supported by the RNG schema + .INP: show tag:ones and type:location +@@ -44,5 +45,2 @@ + stonith-enabled=no +-alert notify_9 "/usr/share/pacemaker/alerts/alert_snmp.sh" \ +- attributes trap_add_hires_timestamp_oid=false trap_node_states=non-trap trap_resource_tasks="start,stop,monitor,promote,demote" \ +- to 192.168.40.9 + .INP: _test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-2.3.1+git.1475245522.4172084/test/travis-tests.sh new/crmsh-2.3.1+git.1477204932.7939b51/test/travis-tests.sh --- old/crmsh-2.3.1+git.1475245522.4172084/test/travis-tests.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/crmsh-2.3.1+git.1477204932.7939b51/test/travis-tests.sh 2016-10-23 08:42:12.000000000 +0200 @@ -0,0 +1,13 @@ +#!/bin/sh +set -ev +patch -p1 < test/travis-expected-pacemaker-1.1.12.patch +./autogen.sh +./configure --prefix=/usr +sudo make install +sudo cp -f /usr/bin/crm /usr/sbin/crm +if [ "$TRAVIS_PYTHON_VERSION" = "2.7_with_system_site_packages" ]; then + pip -v --isolated install parallax + sudo /usr/share/crmsh/tests/regression.sh + cd /usr/share/crmsh/tests + sudo ./cib-tests.sh +fi
