diff --git a/configure.ac b/configure.ac index 9ebec93cc9..b45d2896cf 100644 --- a/configure.ac +++ b/configure.ac @@ -1,2027 +1,2034 @@ dnl dnl autoconf for Pacemaker dnl dnl Copyright 2009-2021 the Pacemaker project contributors dnl dnl The version control history for this file may have further details. dnl dnl This source code is licensed under the GNU General Public License version 2 dnl or later (GPLv2+) WITHOUT ANY WARRANTY. dnl =============================================== dnl Bootstrap dnl =============================================== AC_PREREQ(2.64) dnl AC_CONFIG_MACRO_DIR is deprecated as of autoconf 2.70 (2020-12-08). dnl Once we can require that version, we can simplify this, and no longer dnl need ACLOCAL_AMFLAGS in Makefile.am. m4_ifdef([AC_CONFIG_MACRO_DIRS], [AC_CONFIG_MACRO_DIRS([m4])], [AC_CONFIG_MACRO_DIR([m4])]) AC_DEFUN([AC_DATAROOTDIR_CHECKED]) dnl Suggested structure: dnl information on the package dnl checks for programs dnl checks for libraries dnl checks for header files dnl checks for types dnl checks for structures dnl checks for compiler characteristics dnl checks for library functions dnl checks for system services m4_include([m4/version.m4]) AC_INIT([pacemaker], VERSION_NUMBER, [users@clusterlabs.org], [pacemaker], PCMK_URL) PCMK_FEATURES="" LT_CONFIG_LTDL_DIR([libltdl]) AC_CONFIG_AUX_DIR([libltdl/config]) AC_CANONICAL_HOST dnl Where #defines that autoconf makes (e.g. HAVE_whatever) go dnl dnl Internal header: include/config.h dnl - Contains ALL defines dnl - include/config.h.in is generated automatically by autoheader dnl - NOT to be included in any header files except crm_internal.h dnl (which is also not to be included in any other header files) dnl dnl External header: include/crm_config.h dnl - Contains a subset of defines checked here dnl - Manually edit include/crm_config.h.in to have configure include dnl new defines dnl - Should not include HAVE_* defines dnl - Safe to include anywhere AC_CONFIG_HEADERS([include/config.h include/crm_config.h]) dnl 1.13: minimum automake version required dnl foreign: don't require GNU-standard top-level files dnl tar-ustar: use (older) POSIX variant of generated tar rather than v7 dnl subdir-objects: keep .o's with their .c's (no-op in 2.0+) AM_INIT_AUTOMAKE([1.13 foreign tar-ustar subdir-objects]) dnl Require minimum version of pkg-config PKG_PROG_PKG_CONFIG(0.27) AS_IF([test "x${PKG_CONFIG}" != x], [], [AC_MSG_FAILURE([Could not find required build tool pkg-config (0.27 or later)])]) PKG_INSTALLDIR PKG_NOARCH_INSTALLDIR dnl Example 2.4. Silent Custom Rule to Generate a File dnl %-bar.pc: %.pc dnl $(AM_V_GEN)$(LN_S) $(notdir $^) $@ dnl Versioned attributes implementation is not yet production-ready AC_DEFINE_UNQUOTED(ENABLE_VERSIONED_ATTRS, 0, [Enable versioned attributes]) CC_IN_CONFIGURE=yes export CC_IN_CONFIGURE LDD=ldd GLIB_TESTS dnl ======================================================================== dnl Compiler characteristics dnl ======================================================================== dnl A particular compiler can be forced by setting the CC environment variable AC_PROG_CC dnl Use at least C99 if possible. This will generate an "obsolete" warning dnl since autoconf 2.70, but is needed for older versions. AC_PROG_CC_STDC dnl C++ is not needed for build, just maintainer utilities AC_PROG_CXX dnl We use md5.c from gnulib, which has its own m4 macros. Per its docs: dnl "The macro gl_EARLY must be called as soon as possible after verifying that dnl the C compiler is working. ... The core part of the gnulib checks are done dnl by the macro gl_INIT." In addition, prevent gnulib from introducing OpenSSL dnl as a dependency. gl_EARLY gl_SET_CRYPTO_CHECK_DEFAULT([no]) gl_INIT # --enable-new-dtags: Use RUNPATH instead of RPATH. # It is necessary to have this done before libtool does linker detection. # See also: https://github.com/kronosnet/kronosnet/issues/107 AX_CHECK_LINK_FLAG([-Wl,--enable-new-dtags], [AM_LDFLAGS=-Wl,--enable-new-dtags], [AC_MSG_ERROR(["Linker support for --enable-new-dtags is required"])]) AC_SUBST([AM_LDFLAGS]) saved_LDFLAGS="$LDFLAGS" LDFLAGS="$AM_LDFLAGS $LDFLAGS" LT_INIT([dlopen]) LDFLAGS="$saved_LDFLAGS" LTDL_INIT([convenience]) AC_TYPE_SIZE_T AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) dnl =============================================== dnl Helpers dnl =============================================== cc_supports_flag() { local CFLAGS="-Werror $@" AC_MSG_CHECKING([whether $CC supports $@]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[ ]])], [RC=0; AC_MSG_RESULT([yes])], [RC=1; AC_MSG_RESULT([no])]) return $RC } # Some tests need to use their own CFLAGS cc_temp_flags() { ac_save_CFLAGS="$CFLAGS" CFLAGS="$*" } cc_restore_flags() { CFLAGS=$ac_save_CFLAGS } # yes_no_try $user_response $default DISABLED=0 REQUIRED=1 OPTIONAL=2 yes_no_try() { local value AS_IF([test x"$1" = x""], [value="$2"], [value="$1"]) AS_CASE(["`echo "$value" | tr '[A-Z]' '[a-z]'`"], [0|no|false|disable], [return $DISABLED], [1|yes|true|enable], [return $REQUIRED], [try|check], [return $OPTIONAL] ) AC_MSG_ERROR([Invalid option value "$value"]) } check_systemdsystemunitdir() { AC_MSG_CHECKING([which system unit file directory to use]) PKG_CHECK_VAR([systemdsystemunitdir], [systemd], [systemdsystemunitdir]) AC_MSG_RESULT([${systemdsystemunitdir}]) test x"$systemdsystemunitdir" != x"" return $? } dnl =============================================== dnl Configure Options dnl =============================================== dnl Actual library checks come later, but pkg-config can be used here to grab dnl external values to use as defaults for configure options dnl --enable-* options: build process AC_ARG_ENABLE([quiet], [AS_HELP_STRING([--enable-quiet], [suppress make output unless there is an error @<:@no@:>@])] ) yes_no_try "$enable_quiet" "no" enable_quiet=$? AC_ARG_ENABLE([fatal-warnings], [AS_HELP_STRING([--enable-fatal-warnings], [enable pedantic and fatal warnings for gcc @<:@try@:>@])], ) yes_no_try "$enable_fatal_warnings" "try" enable_fatal_warnings=$? AC_ARG_ENABLE([hardening], [AS_HELP_STRING([--enable-hardening], [harden the resulting executables/libraries @<:@try@:>@])] ) yes_no_try "$enable_hardening" "try" enable_hardening=$? dnl --enable-* options: features AC_ARG_ENABLE([systemd], [AS_HELP_STRING([--enable-systemd], [enable support for managing resources via systemd @<:@try@:>@])] ) yes_no_try "$enable_systemd" "try" enable_systemd=$? AC_ARG_ENABLE([upstart], [AS_HELP_STRING([--enable-upstart], [enable support for managing resources via Upstart @<:@try@:>@])] ) yes_no_try "$enable_upstart" "try" enable_upstart=$? dnl --enable-* options: compatibility AC_ARG_ENABLE([compat-2.0], [AS_HELP_STRING([--enable-compat-2.0], m4_normalize([ preserve certain output as it was in 2.0; this option will be available only for the lifetime of the 2.1 series @<:@no@:>@]))] ) yes_no_try "$enable_compat_2_0" "no" enable_compat_2_0=$? AS_IF([test $enable_compat_2_0 -ne $DISABLED], [ AC_DEFINE_UNQUOTED([PCMK__COMPAT_2_0], [1], [Keep certain output compatible with 2.0 release series]) PCMK_FEATURES="$PCMK_FEATURES compat-2.0" ] ) # Add an option to create symlinks at the pre-2.0.0 daemon name locations, so # that users and tools can continue to invoke those names directly (e.g., for # meta-data). This option will be deprecated in a future release. AC_ARG_ENABLE([legacy-links], [AS_HELP_STRING([--enable-legacy-links], [add symlinks for old daemon names @<:@no@:>@])] ) yes_no_try "$enable_legacy_links" "no" enable_legacy_links=$? AM_CONDITIONAL([BUILD_LEGACY_LINKS], [test $enable_legacy_links -ne $DISABLED]) dnl --with-* options: basic parameters dnl This argument is defined via an M4 macro so default can be a variable AC_DEFUN([VERSION_ARG], [AC_ARG_WITH([version], [AS_HELP_STRING([--with-version=VERSION], [override package version @<:@$1@:>@])], [ PACEMAKER_VERSION="$withval" ], [ PACEMAKER_VERSION="$PACKAGE_VERSION" ])] ) VERSION_ARG(VERSION_NUMBER) # Redefine PACKAGE_VERSION and VERSION according to PACEMAKER_VERSION in case # the user used --with-version. Unfortunately, this can only affect the # substitution variables and later uses in this file, not the config.h # constants, so we have to be careful to use only PACEMAKER_VERSION in C code. PACKAGE_VERSION=$PACEMAKER_VERSION VERSION=$PACEMAKER_VERSION CRM_DAEMON_USER="" AC_ARG_WITH([daemon-user], [AS_HELP_STRING([--with-daemon-user=USER], [user to run unprivileged Pacemaker daemons as (advanced option: changing this may break other cluster components unless similarly configured) @<:@hacluster@:>@])], [ CRM_DAEMON_USER="$withval" ] ) CRM_DAEMON_GROUP="" AC_ARG_WITH([daemon-group], [AS_HELP_STRING([--with-daemon-group=GROUP], [group to run unprivileged Pacemaker daemons as (advanced option: changing this may break other cluster components unless similarly configured) @<:@haclient@:>@])], [ CRM_DAEMON_GROUP="$withval" ] ) BUG_URL="" AC_ARG_WITH([bug-url], [AS_HELP_STRING([--with-bug-url=DIR], m4_normalize([ address where users should submit bug reports @<:@https://bugs.clusterlabs.org/enter_bug.cgi?product=Pacemaker@:>@]))], [ BUG_URL="$withval" ] ) dnl --with-* options: features AC_ARG_WITH([cibsecrets], [AS_HELP_STRING([--with-cibsecrets], [support separate file for CIB secrets @<:@no@:>@])] ) yes_no_try "$with_cibsecrets" "no" with_cibsecrets=$? AC_ARG_WITH([gnutls], [AS_HELP_STRING([--with-gnutls], [support Pacemaker Remote and remote-tls-port using GnuTLS @<:@try@:>@])] ) yes_no_try "$with_gnutls" "try" with_gnutls=$? PCMK_GNUTLS_PRIORITIES="NORMAL" AC_ARG_WITH([gnutls-priorities], [AS_HELP_STRING([--with-gnutls-priorities], [default GnuTLS cipher priorities @<:@NORMAL@:>@])], [ test x"$withval" = x"no" || PCMK_GNUTLS_PRIORITIES="$withval" ] ) AC_ARG_WITH([concurrent-fencing-default], [AS_HELP_STRING([--with-concurrent-fencing-default], [default value for concurrent-fencing cluster option @<:@false@:>@])], ) AS_CASE([$with_concurrent_fencing_default], [""], [with_concurrent_fencing_default="false"], [false], [], [true], [PCMK_FEATURES="$PCMK_FEATURES default-concurrent-fencing"], [AC_MSG_ERROR([Invalid value "$with_concurrent_fencing_default" for --with-concurrent-fencing-default])] ) AC_DEFINE_UNQUOTED([PCMK__CONCURRENT_FENCING_DEFAULT], ["$with_concurrent_fencing_default"], [Default value for concurrent-fencing cluster option]) AC_ARG_WITH([corosync], [AS_HELP_STRING([--with-corosync], [support the Corosync messaging and membership layer @<:@try@:>@])] ) yes_no_try "$with_corosync" "try" with_corosync=$? AC_ARG_WITH([nagios], [AS_HELP_STRING([--with-nagios], [support nagios resources])] ) yes_no_try "$with_nagios" "try" with_nagios=$? dnl --with-* options: directory locations AC_ARG_WITH([nagios-plugin-dir], [AS_HELP_STRING([--with-nagios-plugin-dir=DIR], [directory for nagios plugins @<:@LIBEXECDIR/nagios/plugins@:>@])], [ NAGIOS_PLUGIN_DIR="$withval" ] ) AC_ARG_WITH([nagios-metadata-dir], [AS_HELP_STRING([--with-nagios-metadata-dir=DIR], [directory for nagios plugins metadata @<:@DATADIR/nagios/plugins-metadata@:>@])], [ NAGIOS_METADATA_DIR="$withval" ] ) INITDIR="" AC_ARG_WITH([initdir], [AS_HELP_STRING([--with-initdir=DIR], [directory for init (rc) scripts])], [ INITDIR="$withval" ] ) systemdsystemunitdir="${systemdsystemunitdir-}" AC_ARG_WITH([systemdsystemunitdir], [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [directory for systemd unit files (advanced option: must match what systemd uses)])], [ systemdsystemunitdir="$withval" ] ) CONFIGDIR="" AC_ARG_WITH([configdir], [AS_HELP_STRING([--with-configdir=DIR], [directory for Pacemaker configuration file @<:@SYSCONFDIR/sysconfig@:>@])], [ CONFIGDIR="$withval" ] ) dnl --runstatedir is available as of autoconf 2.70 (2020-12-08). When users dnl have an older version, they can use our --with-runstatedir. pcmk_runstatedir="" AC_ARG_WITH([runstatedir], [AS_HELP_STRING([--with-runstatedir=DIR], [modifiable per-process data @<:@LOCALSTATEDIR/run@:>@ (ignored if --runstatedir is available)])], [ pcmk_runstatedir="$withval" ] ) CRM_LOG_DIR="" AC_ARG_WITH([logdir], [AS_HELP_STRING([--with-logdir=DIR], [directory for Pacemaker log file @<:@LOCALSTATEDIR/log/pacemaker@:>@])], [ CRM_LOG_DIR="$withval" ] ) CRM_BUNDLE_DIR="" AC_ARG_WITH([bundledir], [AS_HELP_STRING([--with-bundledir=DIR], [directory for Pacemaker bundle logs @<:@LOCALSTATEDIR/log/pacemaker/bundles@:>@])], [ CRM_BUNDLE_DIR="$withval" ] ) dnl Get default from resource-agents if possible. Otherwise, the default uses dnl /usr/lib rather than libdir because it's determined by the OCF project and dnl not Pacemaker. Even if a user wants to install Pacemaker to /usr/local or dnl such, the OCF agents will be expected in their usual location. However, we dnl do give the user the option to override it. PKG_CHECK_VAR([OCF_ROOT_DIR], [resource-agents], [ocfrootdir], [], [OCF_ROOT_DIR="/usr/lib/ocf"]) AC_ARG_WITH([ocfdir], [AS_HELP_STRING([--with-ocfdir=DIR], m4_normalize([ OCF resource agent root directory (advanced option: changing this may break other cluster components unless similarly configured) @<:@value from resource-agents package if available otherwise /usr/lib/ocf@:>@]))], [ OCF_ROOT_DIR="$withval" ] ) AC_SUBST(OCF_ROOT_DIR) AC_DEFINE_UNQUOTED([OCF_ROOT_DIR], ["$OCF_ROOT_DIR"], [OCF root directory for resource agents and libraries]) dnl Get default from fence-agents if available PKG_CHECK_VAR([FA_PREFIX], [fence-agents], [prefix], [PCMK__FENCE_BINDIR="${FA_PREFIX}/sbin"], [PCMK__FENCE_BINDIR="$sbindir"]) AC_ARG_WITH([fence-bindir], [AS_HELP_STRING([--with-fence-bindir=DIR], m4_normalize([ directory for executable fence agents @<:@value from fence-agents package if available otherwise SBINDIR@:>@]))], [ PCMK__FENCE_BINDIR="$withval" ] ) AC_SUBST(PCMK__FENCE_BINDIR) dnl --with-* options: non-production testing AC_ARG_WITH([profiling], [AS_HELP_STRING([--with-profiling], [disable optimizations, for effective profiling @<:@no@:>@])] ) yes_no_try "$with_profiling" "no" with_profiling=$? AC_ARG_WITH([coverage], [AS_HELP_STRING([--with-coverage], [disable optimizations, for effective profiling and coverage testing @<:@no@:>@])] ) yes_no_try "$with_coverage" "no" with_coverage=$? AC_ARG_WITH([sanitizers], [AS_HELP_STRING([--with-sanitizers=...,...], [enable SANitizer build, do *NOT* use for production. Only ASAN/UBSAN/TSAN are currently supported])], [ SANITIZERS="$withval" ], [ SANITIZERS="" ]) dnl =============================================== dnl General Processing dnl =============================================== AC_DEFINE_UNQUOTED(PACEMAKER_VERSION, "$VERSION", [Version number of this Pacemaker build]) PACKAGE_SERIES=`echo $VERSION | awk -F. '{ print $1"."$2 }'` AC_SUBST(PACKAGE_SERIES) AC_PROG_LN_S AC_PROG_MKDIR_P # Check for fatal warning support AS_IF([test $enable_fatal_warnings -ne $DISABLED && test "$GCC" = "yes" && cc_supports_flag -Werror], [WERROR="-Werror"], [ WERROR="" AS_CASE([$enable_fatal_warnings], [$REQUIRED], [AC_MSG_ERROR([Compiler does not support fatal warnings])], [$OPTIONAL], [ AC_MSG_NOTICE([Compiler does not support fatal warnings]) enable_fatal_warnings=$DISABLED ]) ]) AC_MSG_NOTICE([Sanitizing prefix: ${prefix}]) AS_IF([test "$prefix" = "NONE"], [ prefix=/usr dnl Fix default variables - "prefix" variable if not specified AS_IF([test "$localstatedir" = "\${prefix}/var"], [localstatedir="/var"]) AS_IF([test "$sysconfdir" = "\${prefix}/etc"], [sysconfdir="/etc"]) ]) AC_MSG_NOTICE([Sanitizing exec_prefix: ${exec_prefix}]) case $exec_prefix in prefix|NONE) exec_prefix=$prefix ;; esac AC_MSG_NOTICE([Sanitizing INITDIR: ${INITDIR}]) case $INITDIR in prefix) INITDIR=$prefix;; "") AC_MSG_CHECKING([which init (rc) directory to use]) for initdir in /etc/init.d /etc/rc.d/init.d /sbin/init.d \ /usr/local/etc/rc.d /etc/rc.d do if test -d $initdir then INITDIR=$initdir break fi done AC_MSG_RESULT([$INITDIR]) ;; esac AC_SUBST(INITDIR) AC_MSG_NOTICE([Sanitizing libdir: ${libdir}]) case $libdir in prefix|NONE) AC_MSG_CHECKING([which lib directory to use]) for aDir in lib64 lib do trydir="${exec_prefix}/${aDir}" if test -d ${trydir} then libdir=${trydir} break fi done AC_MSG_RESULT([$libdir]); ;; esac dnl Expand autoconf variables so that we don't end up with '${prefix}' dnl in #defines and python scripts dnl NOTE: Autoconf deliberately leaves them unexpanded to allow dnl make exec_prefix=/foo install dnl No longer being able to do this seems like no great loss to me... eval prefix="`eval echo ${prefix}`" eval exec_prefix="`eval echo ${exec_prefix}`" eval bindir="`eval echo ${bindir}`" eval sbindir="`eval echo ${sbindir}`" eval libexecdir="`eval echo ${libexecdir}`" eval datadir="`eval echo ${datadir}`" eval sysconfdir="`eval echo ${sysconfdir}`" eval sharedstatedir="`eval echo ${sharedstatedir}`" eval localstatedir="`eval echo ${localstatedir}`" eval libdir="`eval echo ${libdir}`" eval includedir="`eval echo ${includedir}`" eval oldincludedir="`eval echo ${oldincludedir}`" eval infodir="`eval echo ${infodir}`" eval mandir="`eval echo ${mandir}`" dnl Home-grown variables if [ test "x${runstatedir}" = "x" ]; then if [ test "x${pcmk_runstatedir}" = "x" ]; then runstatedir="${localstatedir}/run" else runstatedir="${pcmk_runstatedir}" fi fi eval runstatedir="$(eval echo ${runstatedir})" AC_DEFINE_UNQUOTED([PCMK_RUN_DIR], ["$runstatedir"], [Location for modifiable per-process data]) AC_SUBST(runstatedir) eval INITDIR="${INITDIR}" eval docdir="`eval echo ${docdir}`" if test x"${docdir}" = x""; then docdir=${datadir}/doc/${PACKAGE}-${VERSION} fi AC_SUBST(docdir) if test x"${CONFIGDIR}" = x""; then CONFIGDIR="${sysconfdir}/sysconfig" fi AC_SUBST(CONFIGDIR) if test x"${CRM_LOG_DIR}" = x""; then CRM_LOG_DIR="${localstatedir}/log/pacemaker" fi AC_DEFINE_UNQUOTED(CRM_LOG_DIR,"$CRM_LOG_DIR", Location for Pacemaker log file) AC_SUBST(CRM_LOG_DIR) if test x"${CRM_BUNDLE_DIR}" = x""; then CRM_BUNDLE_DIR="${localstatedir}/log/pacemaker/bundles" fi AC_DEFINE_UNQUOTED(CRM_BUNDLE_DIR,"$CRM_BUNDLE_DIR", Location for Pacemaker bundle logs) AC_SUBST(CRM_BUNDLE_DIR) eval PCMK__FENCE_BINDIR="`eval echo ${PCMK__FENCE_BINDIR}`" AC_DEFINE_UNQUOTED(PCMK__FENCE_BINDIR,"$PCMK__FENCE_BINDIR", [Location for executable fence agents]) AS_IF([test x"${PCMK_GNUTLS_PRIORITIES}" != x""], [], [AC_MSG_ERROR([--with-gnutls-priorities value must not be empty])]) AC_DEFINE_UNQUOTED([PCMK_GNUTLS_PRIORITIES], ["$PCMK_GNUTLS_PRIORITIES"], [GnuTLS cipher priorities]) if test x"${BUG_URL}" = x""; then BUG_URL="https://bugs.clusterlabs.org/enter_bug.cgi?product=Pacemaker" fi AC_SUBST(BUG_URL) for j in prefix exec_prefix bindir sbindir libexecdir datadir sysconfdir \ sharedstatedir localstatedir libdir includedir oldincludedir infodir \ mandir INITDIR docdir CONFIGDIR do dirname=`eval echo '${'${j}'}'` if test ! -d "$dirname" then AC_MSG_WARN([$j directory ($dirname) does not exist (yet)]) fi done us_auth= AC_CHECK_HEADER([sys/socket.h], [ AC_CHECK_DECL([SO_PEERCRED], [ # Linux AC_CHECK_TYPE([struct ucred], [ us_auth=peercred_ucred; AC_DEFINE([US_AUTH_PEERCRED_UCRED], [1], [Define if Unix socket auth method is getsockopt(s, SO_PEERCRED, &ucred, ...)]) ], [ # OpenBSD AC_CHECK_TYPE([struct sockpeercred], [ us_auth=localpeercred_sockepeercred; AC_DEFINE([US_AUTH_PEERCRED_SOCKPEERCRED], [1], [Define if Unix socket auth method is getsockopt(s, SO_PEERCRED, &sockpeercred, ...)]) ], [], [[#include ]]) ], [[#define _GNU_SOURCE #include ]]) ], [], [[#include ]]) ]) AS_IF([test -z "${us_auth}"], [ # FreeBSD AC_CHECK_DECL([getpeereid], [ us_auth=getpeereid; AC_DEFINE([US_AUTH_GETPEEREID], [1], [Define if Unix socket auth method is getpeereid(s, &uid, &gid)]) ], [ # Solaris/OpenIndiana AC_CHECK_DECL([getpeerucred], [ us_auth=getpeerucred; AC_DEFINE([US_AUTH_GETPEERUCRED], [1], [Define if Unix socket auth method is getpeercred(s, &ucred)]) ], [ AC_MSG_FAILURE([No way to authenticate a Unix socket peer]) ], [[#include ]]) ]) ]) dnl OS-based decision-making is poor autotools practice; feature-based dnl mechanisms are strongly preferred. Keep this section to a bare minimum; dnl regard as a "necessary evil". INIT_EXT="" PROCFS=0 case "$host_os" in dnl Solaris and some *BSD versions support procfs but not files we need *bsd*) INIT_EXT=".sh" ;; *linux*) PROCFS=1 ;; darwin*) LIBS="$LIBS -L${prefix}/lib" CFLAGS="$CFLAGS -I${prefix}/include" ;; esac AC_SUBST(INIT_EXT) AC_DEFINE_UNQUOTED([SUPPORT_PROCFS], [$PROCFS], [Define to 1 if procfs is supported]) case "$host_cpu" in ppc64|powerpc64) case $CFLAGS in *powerpc64*) ;; *) if test "$GCC" = yes; then CFLAGS="$CFLAGS -m64" fi ;; esac ;; esac # C99 doesn't guarantee uint64_t type and related format specifiers, but # prerequisites, corosync + libqb, use that widely, so the target platforms # are already pre-constrained to those "64bit-clean" (doesn't imply native # bit width) and hence we deliberately refrain from artificial surrogates # (sans manipulation through cached values). AC_CACHE_VAL( [pcmk_cv_decl_inttypes], [ AC_CHECK_DECLS( [PRIu64, PRIu32, PRIx32, SCNu64], [pcmk_cv_decl_inttypes="PRIu64 PRIu32 PRIx32 SCNu64"], [ # test shall only react on "no" cached result & error out respectively if test "x$ac_cv_have_decl_PRIu64" = xno; then AC_MSG_ERROR([lack of inttypes.h based specifier serving uint64_t (PRIu64)]) elif test "x$ac_cv_have_decl_PRIu32" = xno; then AC_MSG_ERROR([lack of inttypes.h based specifier serving uint32_t (PRIu32)]) elif test "x$ac_cv_have_decl_PRIx32" = xno; then AC_MSG_ERROR([lack of inttypes.h based hexa specifier serving uint32_t (PRIx32)]) elif test "x$ac_cv_have_decl_SCNu64" = xno; then AC_MSG_ERROR([lack of inttypes.h based specifier gathering uint64_t (SCNu64)]) fi ], [[#include ]] ) ] ) ( set $pcmk_cv_decl_inttypes AC_DEFINE_UNQUOTED([U64T], [$1], [Correct format specifier for U64T]) AC_DEFINE_UNQUOTED([U32T], [$2], [Correct format specifier for U32T]) AC_DEFINE_UNQUOTED([X32T], [$3], [Correct format specifier for X32T]) AC_DEFINE_UNQUOTED([U64TS], [$4], [Correct format specifier for U64TS]) ) dnl =============================================== dnl Program Paths dnl =============================================== PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin" export PATH dnl Replacing AC_PROG_LIBTOOL with AC_CHECK_PROG because LIBTOOL dnl was NOT being expanded all the time thus causing things to fail. AC_CHECK_PROGS(LIBTOOL, glibtool libtool libtool15 libtool13) AS_IF([test "x${LIBTOOL}" != "x"], [], [AC_MSG_FAILURE([Could not find required build tool libtool (or equivalent)])]) dnl Pacemaker's executable python scripts will invoke the python specified by dnl configure's PYTHON variable. If not specified, AM_PATH_PYTHON will check a dnl built-in list with (unversioned) "python" having precedence. To configure dnl Pacemaker to use a specific python interpreter version, define PYTHON dnl when calling configure, for example: ./configure PYTHON=/usr/bin/python3.6 dnl Ensure PYTHON is an absolute path AS_IF([test x"${PYTHON}" != x""], [AC_PATH_PROG([PYTHON], [$PYTHON])]) dnl Require a minimum Python version AM_PATH_PYTHON([3.4]) AC_PATH_PROGS([ASCIIDOC_CONV], [asciidoc asciidoctor]) AC_PATH_PROG([HELP2MAN], [help2man]) AC_PATH_PROG([SPHINX], [sphinx-build]) AC_PATH_PROG([INKSCAPE], [inkscape]) AC_PATH_PROG([XSLTPROC], [xsltproc]) AC_PATH_PROG([XMLCATALOG], [xmlcatalog]) dnl Bash is needed for building man pages and running regression tests. dnl BASH is already an environment variable, so use something else. AC_PATH_PROG([BASH_PATH], [bash]) AS_IF([test "x${BASH_PATH}" != "x"], [], [AC_MSG_FAILURE([Could not find required build tool bash])]) AC_PATH_PROGS(VALGRIND_BIN, valgrind, /usr/bin/valgrind) AC_DEFINE_UNQUOTED(VALGRIND_BIN, "$VALGRIND_BIN", Valgrind command) AM_CONDITIONAL(BUILD_HELP, test x"${HELP2MAN}" != x"") if test x"${HELP2MAN}" != x""; then PCMK_FEATURES="$PCMK_FEATURES generated-manpages" fi MANPAGE_XSLT="" if test x"${XSLTPROC}" != x""; then AC_MSG_CHECKING([for DocBook-to-manpage transform]) # first try to figure out correct template using xmlcatalog query, # resort to extensive (semi-deterministic) file search if that fails DOCBOOK_XSL_URI='http://docbook.sourceforge.net/release/xsl/current' DOCBOOK_XSL_PATH='manpages/docbook.xsl' MANPAGE_XSLT=$(${XMLCATALOG} "" ${DOCBOOK_XSL_URI}/${DOCBOOK_XSL_PATH} \ | sed -n 's|^file://||p;q') if test x"${MANPAGE_XSLT}" = x""; then DIRS=$(find "${datadir}" -name $(basename $(dirname ${DOCBOOK_XSL_PATH})) \ -type d | LC_ALL=C sort) XSLT=$(basename ${DOCBOOK_XSL_PATH}) for d in ${DIRS} do if test -f "${d}/${XSLT}"; then MANPAGE_XSLT="${d}/${XSLT}" break fi done fi fi AC_MSG_RESULT([$MANPAGE_XSLT]) AC_SUBST(MANPAGE_XSLT) AM_CONDITIONAL(BUILD_XML_HELP, test x"${MANPAGE_XSLT}" != x"") if test x"${MANPAGE_XSLT}" != x""; then PCMK_FEATURES="$PCMK_FEATURES agent-manpages" fi AM_CONDITIONAL([IS_ASCIIDOC], [echo "${ASCIIDOC_CONV}" | grep -Eq 'asciidoc$']) AM_CONDITIONAL([BUILD_ASCIIDOC], [test "x${ASCIIDOC_CONV}" != x]) if test "x${ASCIIDOC_CONV}" != x; then PCMK_FEATURES="$PCMK_FEATURES ascii-docs" fi AM_CONDITIONAL([BUILD_SPHINX_DOCS], [test x"${SPHINX}" != x"" && test x"${INKSCAPE}" != x""]) AM_COND_IF([BUILD_SPHINX_DOCS], [PCMK_FEATURES="$PCMK_FEATURES books"]) dnl Pacemaker's shell scripts (and thus man page builders) rely on GNU getopt AC_MSG_CHECKING([for GNU-compatible getopt]) IFS_orig=$IFS IFS=: for PATH_DIR in $PATH do IFS=$IFS_orig GETOPT_PATH="${PATH_DIR}/getopt" if test -f "$GETOPT_PATH" && test -x "$GETOPT_PATH" ; then $GETOPT_PATH -T >/dev/null 2>/dev/null if test $? -eq 4; then break fi fi GETOPT_PATH="" done IFS=$IFS_orig AS_IF([test -n "$GETOPT_PATH"], [AC_MSG_RESULT([$GETOPT_PATH])], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([Could not find required build tool GNU-compatible getopt]) ]) AC_SUBST([GETOPT_PATH]) dnl ======================================================================== dnl checks for library functions to replace them dnl dnl NoSuchFunctionName: dnl is a dummy function which no system supplies. It is here to make dnl the system compile semi-correctly on OpenBSD which doesn't know dnl how to create an empty archive dnl dnl scandir: Only on BSD. dnl System-V systems may have it, but hidden and/or deprecated. dnl A replacement function is supplied for it. dnl dnl strerror: returns a string that corresponds to an errno. dnl A replacement function is supplied for it. dnl dnl strnlen: is a gnu function similar to strlen, but safer. dnl We wrote a tolerably-fast replacement function for it. dnl dnl strndup: is a gnu function similar to strdup, but safer. dnl We wrote a tolerably-fast replacement function for it. AC_REPLACE_FUNCS(alphasort NoSuchFunctionName scandir strerror strchrnul strnlen strndup) dnl =============================================== dnl Libraries dnl =============================================== AC_CHECK_LIB(socket, socket) dnl -lsocket AC_CHECK_LIB(c, dlopen) dnl if dlopen is in libc... AC_CHECK_LIB(dl, dlopen) dnl -ldl (for Linux) AC_CHECK_LIB(rt, sched_getscheduler) dnl -lrt (for Tru64) AC_CHECK_LIB(gnugetopt, getopt_long) dnl -lgnugetopt ( if available ) AC_CHECK_LIB(pam, pam_start) dnl -lpam (if available) PKG_CHECK_MODULES([UUID], [uuid], [CPPFLAGS="${CPPFLAGS} ${UUID_CFLAGS}" LIBS="${LIBS} ${UUID_LIBS}"]) AC_CHECK_FUNCS([sched_setscheduler]) if test "$ac_cv_func_sched_setscheduler" != yes; then PC_LIBS_RT="" else PC_LIBS_RT="-lrt" fi AC_SUBST(PC_LIBS_RT) # Require minimum glib version PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.42.0], [CPPFLAGS="${CPPFLAGS} ${GLIB_CFLAGS}" LIBS="${LIBS} ${GLIB_LIBS}"]) # Check whether high-resolution sleep function is available AC_CHECK_FUNCS([nanosleep usleep]) # # Where is dlopen? # if test "$ac_cv_lib_c_dlopen" = yes; then LIBADD_DL="" elif test "$ac_cv_lib_dl_dlopen" = yes; then LIBADD_DL=-ldl else LIBADD_DL=${lt_cv_dlopen_libs} fi PKG_CHECK_MODULES(LIBXML2, [libxml-2.0], [CPPFLAGS="${CPPFLAGS} ${LIBXML2_CFLAGS}" LIBS="${LIBS} ${LIBXML2_LIBS}"]) REQUIRE_LIB([xslt], [xsltApplyStylesheet]) dnl ======================================================================== dnl Headers dnl ======================================================================== # Some distributions insert #warnings into deprecated headers. If we will # enable fatal warnings for the build, then enable them for the header checks # as well, otherwise the build could fail even though the header check # succeeds. (We should probably be doing this in more places.) cc_temp_flags "$CFLAGS $WERROR" # Optional headers (inclusion of these should be conditional in C code) AC_CHECK_HEADERS([getopt.h]) AC_CHECK_HEADERS([linux/swab.h]) AC_CHECK_HEADERS([stddef.h]) AC_CHECK_HEADERS([sys/signalfd.h]) AC_CHECK_HEADERS([uuid/uuid.h]) AC_CHECK_HEADERS([security/pam_appl.h pam/pam_appl.h]) # Required headers REQUIRE_HEADER([arpa/inet.h]) REQUIRE_HEADER([ctype.h]) REQUIRE_HEADER([dirent.h]) REQUIRE_HEADER([errno.h]) REQUIRE_HEADER([glib.h]) REQUIRE_HEADER([grp.h]) REQUIRE_HEADER([limits.h]) REQUIRE_HEADER([netdb.h]) REQUIRE_HEADER([netinet/in.h]) REQUIRE_HEADER([netinet/ip.h], [ #include #include ]) REQUIRE_HEADER([pwd.h]) REQUIRE_HEADER([signal.h]) REQUIRE_HEADER([stdio.h]) REQUIRE_HEADER([stdlib.h]) REQUIRE_HEADER([string.h]) REQUIRE_HEADER([strings.h]) REQUIRE_HEADER([sys/ioctl.h]) REQUIRE_HEADER([sys/param.h]) REQUIRE_HEADER([sys/reboot.h]) REQUIRE_HEADER([sys/resource.h]) REQUIRE_HEADER([sys/socket.h]) REQUIRE_HEADER([sys/stat.h]) REQUIRE_HEADER([sys/time.h]) REQUIRE_HEADER([sys/types.h]) REQUIRE_HEADER([sys/utsname.h]) REQUIRE_HEADER([sys/wait.h]) REQUIRE_HEADER([time.h]) REQUIRE_HEADER([unistd.h]) REQUIRE_HEADER([libxml/xpath.h]) REQUIRE_HEADER([libxslt/xslt.h]) cc_restore_flags AC_CHECK_FUNCS([uuid_unparse], [], [AC_MSG_FAILURE([Could not find required C function uuid_unparse()])]) AC_CACHE_CHECK([whether __progname and __progname_full are available], [pf_cv_var_progname], AC_LINK_IFELSE([ AC_LANG_PROGRAM([[extern char *__progname, *__progname_full;]], [[__progname = "foo"; __progname_full = "foo bar";]], [pf_cv_var_progname="yes"], [pf_cv_var_progname="no"]) ])) AS_IF([test "$pf_cv_var_progname" = "yes"], [AC_DEFINE(HAVE___PROGNAME,1,[ ])]) dnl ======================================================================== dnl Generic declarations dnl ======================================================================== AC_CHECK_DECLS([CLOCK_MONOTONIC], [PCMK_FEATURES="$PCMK_FEATURES monotonic"], [], [[ #include ]]) dnl ======================================================================== dnl Structures dnl ======================================================================== AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[[#include ]]) AC_CHECK_MEMBER([struct dirent.d_type], AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE,1,[Define this if struct dirent has d_type]),, [#include ]) dnl ======================================================================== dnl Functions dnl ======================================================================== REQUIRE_FUNC([getopt]) REQUIRE_FUNC([setenv]) REQUIRE_FUNC([unsetenv]) AC_CACHE_CHECK(whether sscanf supports %m, pf_cv_var_sscanf, AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include const char *s = "some-command-line-arg"; int main(int argc, char **argv) { char *name = NULL; int n = sscanf(s, "%ms", &name); return n == 1 ? 0 : 1; } ]])], pf_cv_var_sscanf="yes", pf_cv_var_sscanf="no", pf_cv_var_sscanf="no")) AS_IF([test "$pf_cv_var_sscanf" = "yes"], [AC_DEFINE(SSCANF_HAS_M, 1, [ ])]) dnl ======================================================================== dnl bzip2 dnl ======================================================================== REQUIRE_HEADER([bzlib.h]) REQUIRE_LIB([bz2], [BZ2_bzBuffToBuffCompress]) dnl ======================================================================== dnl sighandler_t is missing from Illumos, Solaris11 systems dnl ======================================================================== AC_MSG_CHECKING([for sighandler_t]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[sighandler_t *f;]])], [ AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_SIGHANDLER_T], [1], [Define to 1 if sighandler_t is available]) ], [AC_MSG_RESULT([no])]) dnl ======================================================================== dnl ncurses dnl ======================================================================== dnl dnl A few OSes (e.g. Linux) deliver a default "ncurses" alongside "curses". dnl Many non-Linux deliver "curses"; sites may add "ncurses". dnl dnl However, the source-code recommendation for both is to #include "curses.h" dnl (i.e. "ncurses" still wants the include to be simple, no-'n', "curses.h"). dnl dnl ncurses takes precedence. dnl AC_CHECK_HEADERS([curses.h curses/curses.h ncurses.h ncurses/ncurses.h]) dnl Although n-library is preferred, only look for it if the n-header was found. CURSESLIBS='' PC_NAME_CURSES="" PC_LIBS_CURSES="" AS_IF([test "$ac_cv_header_ncurses_h" = "yes"], [ AC_CHECK_LIB(ncurses, printw, [AC_DEFINE(HAVE_LIBNCURSES,1, have ncurses library)]) CURSESLIBS=`$PKG_CONFIG --libs ncurses` || CURSESLIBS='-lncurses' PC_NAME_CURSES="ncurses" ]) AS_IF([test "$ac_cv_header_ncurses_ncurses_h" = "yes"], [ AC_CHECK_LIB(ncurses, printw, [AC_DEFINE(HAVE_LIBNCURSES,1, have ncurses library)]) CURSESLIBS=`$PKG_CONFIG --libs ncurses` || CURSESLIBS='-lncurses' PC_NAME_CURSES="ncurses" ]) dnl Only look for non-n-library if there was no n-library. AS_IF([test X"$CURSESLIBS" = X"" && test "$ac_cv_header_curses_h" = "yes"], [ AC_CHECK_LIB(curses, printw, [CURSESLIBS='-lcurses'; AC_DEFINE(HAVE_LIBCURSES,1, have curses library)]) PC_LIBS_CURSES="$CURSESLIBS" ]) dnl Only look for non-n-library if there was no n-library. AS_IF([test X"$CURSESLIBS" = X"" && test "$ac_cv_header_curses_curses_h" = "yes"], [ AC_CHECK_LIB(curses, printw, [CURSESLIBS='-lcurses'; AC_DEFINE(HAVE_LIBCURSES,1, have curses library)]) PC_LIBS_CURSES="$CURSESLIBS" ]) if test "x$CURSESLIBS" != "x"; then PCMK_FEATURES="$PCMK_FEATURES ncurses" fi dnl Check for printw() prototype compatibility AS_IF([test X"$CURSESLIBS" != X"" && cc_supports_flag -Wcast-qual], [ ac_save_LIBS=$LIBS LIBS="$CURSESLIBS" cc_temp_flags "-Wcast-qual $WERROR" # avoid broken test because of hardened build environment in Fedora 23+ # - https://fedoraproject.org/wiki/Changes/Harden_All_Packages # - https://bugzilla.redhat.com/1297985 AS_IF([cc_supports_flag -fPIC], [CFLAGS="$CFLAGS -fPIC"]) AC_MSG_CHECKING([whether curses library is compatible]) AC_LINK_IFELSE( [AC_LANG_PROGRAM([ #if defined(HAVE_NCURSES_H) # include #elif defined(HAVE_NCURSES_NCURSES_H) # include #elif defined(HAVE_CURSES_H) # include #endif ], [printw((const char *)"Test");] )], [AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no]) AC_MSG_WARN(m4_normalize([Disabling curses because the printw() function of your (n)curses library is old. If you wish to enable curses, update to a newer version (ncurses 5.4 or later is recommended, available from https://invisible-island.net/ncurses/) ])) AC_DEFINE([HAVE_INCOMPATIBLE_PRINTW], [1], [Define to 1 if curses library has incompatible printw()]) ] ) LIBS=$ac_save_LIBS cc_restore_flags ]) AC_SUBST(CURSESLIBS) AC_SUBST(PC_NAME_CURSES) AC_SUBST(PC_LIBS_CURSES) dnl ======================================================================== dnl Profiling and GProf dnl ======================================================================== CFLAGS_ORIG="$CFLAGS" AS_IF([test $with_coverage -ne $DISABLED], [ with_profiling=$REQUIRED PCMK_FEATURES="$PCMK_FEATURES coverage" CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" dnl During linking, make sure to specify -lgcov or -coverage ] ) AS_IF([test $with_profiling -ne $DISABLED], [ with_profiling=$REQUIRED PCMK_FEATURES="$PCMK_FEATURES profile" dnl Disable various compiler optimizations CFLAGS="$CFLAGS -fno-omit-frame-pointer -fno-inline -fno-builtin" dnl CFLAGS="$CFLAGS -fno-inline-functions" dnl CFLAGS="$CFLAGS -fno-default-inline" dnl CFLAGS="$CFLAGS -fno-inline-functions-called-once" dnl CFLAGS="$CFLAGS -fno-optimize-sibling-calls" dnl Turn off optimization so tools can get accurate line numbers CFLAGS=`echo $CFLAGS | sed \ -e 's/-O.\ //g' \ -e 's/-Wp,-D_FORTIFY_SOURCE=.\ //g' \ -e 's/-D_FORTIFY_SOURCE=.\ //g'` CFLAGS="$CFLAGS -O0 -g3 -gdwarf-2" AC_MSG_NOTICE([CFLAGS before adding profiling options: $CFLAGS_ORIG]) AC_MSG_NOTICE([CFLAGS after: $CFLAGS]) ] ) AC_DEFINE_UNQUOTED([SUPPORT_PROFILING], [$with_profiling], [Support profiling]) dnl ======================================================================== dnl Cluster infrastructure - LibQB dnl ======================================================================== PKG_CHECK_MODULES(libqb, libqb >= 0.17) CPPFLAGS="$libqb_CFLAGS $CPPFLAGS" LIBS="$libqb_LIBS $LIBS" dnl libqb 2.0.2+ (2020-10) AC_CHECK_FUNCS(qb_ipcc_auth_get, AC_DEFINE(HAVE_IPCC_AUTH_GET, 1, [Have qb_ipcc_auth_get function])) dnl libqb 2.0.0+ (2020-05) CHECK_ENUM_VALUE([qb/qblog.h],[qb_log_conf],[QB_LOG_CONF_MAX_LINE_LEN]) CHECK_ENUM_VALUE([qb/qblog.h],[qb_log_conf],[QB_LOG_CONF_ELLIPSIS]) dnl Support Linux-HA fence agents if available if test "$cross_compiling" != "yes"; then CPPFLAGS="$CPPFLAGS -I${prefix}/include/heartbeat" fi AC_CHECK_HEADERS([stonith/stonith.h], [ AC_CHECK_LIB([pils], [PILLoadPlugin]) AC_CHECK_LIB([plumb], [G_main_add_IPC_Channel]) PCMK_FEATURES="$PCMK_FEATURES lha" ]) AM_CONDITIONAL([BUILD_LHA_SUPPORT], [test "$ac_cv_header_stonith_stonith_h" = "yes"]) dnl =============================================== dnl Variables needed for substitution dnl =============================================== CRM_SCHEMA_DIRECTORY="${datadir}/pacemaker" AC_DEFINE_UNQUOTED(CRM_SCHEMA_DIRECTORY,"$CRM_SCHEMA_DIRECTORY", Location for the Pacemaker Relax-NG Schema) AC_SUBST(CRM_SCHEMA_DIRECTORY) CRM_CORE_DIR="${localstatedir}/lib/pacemaker/cores" AC_DEFINE_UNQUOTED(CRM_CORE_DIR,"$CRM_CORE_DIR", Location to store core files produced by Pacemaker daemons) AC_SUBST(CRM_CORE_DIR) if test x"${CRM_DAEMON_USER}" = x""; then CRM_DAEMON_USER="hacluster" fi AC_DEFINE_UNQUOTED(CRM_DAEMON_USER,"$CRM_DAEMON_USER", User to run Pacemaker daemons as) AC_SUBST(CRM_DAEMON_USER) if test x"${CRM_DAEMON_GROUP}" = x""; then CRM_DAEMON_GROUP="haclient" fi AC_DEFINE_UNQUOTED(CRM_DAEMON_GROUP,"$CRM_DAEMON_GROUP", Group to run Pacemaker daemons as) AC_SUBST(CRM_DAEMON_GROUP) CRM_PACEMAKER_DIR=${localstatedir}/lib/pacemaker AC_DEFINE_UNQUOTED(CRM_PACEMAKER_DIR,"$CRM_PACEMAKER_DIR", Location to store directory produced by Pacemaker daemons) AC_SUBST(CRM_PACEMAKER_DIR) CRM_BLACKBOX_DIR=${localstatedir}/lib/pacemaker/blackbox AC_DEFINE_UNQUOTED(CRM_BLACKBOX_DIR,"$CRM_BLACKBOX_DIR", Where to keep blackbox dumps) AC_SUBST(CRM_BLACKBOX_DIR) PE_STATE_DIR="${localstatedir}/lib/pacemaker/pengine" AC_DEFINE_UNQUOTED(PE_STATE_DIR,"$PE_STATE_DIR", Where to keep scheduler outputs) AC_SUBST(PE_STATE_DIR) CRM_CONFIG_DIR="${localstatedir}/lib/pacemaker/cib" AC_DEFINE_UNQUOTED(CRM_CONFIG_DIR,"$CRM_CONFIG_DIR", Where to keep configuration files) AC_SUBST(CRM_CONFIG_DIR) CRM_CONFIG_CTS="${localstatedir}/lib/pacemaker/cts" AC_DEFINE_UNQUOTED(CRM_CONFIG_CTS,"$CRM_CONFIG_CTS", Where to keep cts stateful data) AC_SUBST(CRM_CONFIG_CTS) CRM_DAEMON_DIR="${libexecdir}/pacemaker" AC_DEFINE_UNQUOTED(CRM_DAEMON_DIR,"$CRM_DAEMON_DIR", Location for Pacemaker daemons) AC_SUBST(CRM_DAEMON_DIR) CRM_STATE_DIR="${runstatedir}/crm" AC_DEFINE_UNQUOTED([CRM_STATE_DIR], ["$CRM_STATE_DIR"], [Where to keep state files and sockets]) AC_SUBST(CRM_STATE_DIR) CRM_RSCTMP_DIR="${runstatedir}/resource-agents" AC_DEFINE_UNQUOTED(CRM_RSCTMP_DIR,"$CRM_RSCTMP_DIR", Where resource agents should keep state files) AC_SUBST(CRM_RSCTMP_DIR) PACEMAKER_CONFIG_DIR="${sysconfdir}/pacemaker" AC_DEFINE_UNQUOTED(PACEMAKER_CONFIG_DIR,"$PACEMAKER_CONFIG_DIR", Where to keep configuration files like authkey) AC_SUBST(PACEMAKER_CONFIG_DIR) OCF_RA_DIR="$OCF_ROOT_DIR/resource.d" AC_DEFINE_UNQUOTED(OCF_RA_DIR,"$OCF_RA_DIR", Location for OCF RAs) AC_SUBST(OCF_RA_DIR) AC_DEFINE_UNQUOTED(SBIN_DIR,"$sbindir",[Location for system binaries]) AC_PATH_PROGS(GIT, git false) AC_MSG_CHECKING([build version]) BUILD_VERSION=$Format:%h$ if test $BUILD_VERSION != ":%h$"; then AC_MSG_RESULT([$BUILD_VERSION (archive hash)]) elif test -x $GIT && test -d .git; then BUILD_VERSION=`$GIT log --pretty="format:%h" -n 1` AC_MSG_RESULT([$BUILD_VERSION (git hash)]) else # The current directory name make a reasonable default # Most generated archives will include the hash or tag BASE=`basename $PWD` BUILD_VERSION=`echo $BASE | sed s:.*[[Pp]]acemaker-::` AC_MSG_RESULT([$BUILD_VERSION (directory name)]) fi AC_DEFINE_UNQUOTED(BUILD_VERSION, "$BUILD_VERSION", Build version) AC_SUBST(BUILD_VERSION) HAVE_dbus=1 PKG_CHECK_MODULES([DBUS], [dbus-1], [CPPFLAGS="${CPPFLAGS} ${DBUS_CFLAGS}"], [HAVE_dbus=0]) AC_DEFINE_UNQUOTED(SUPPORT_DBUS, $HAVE_dbus, Support dbus) AM_CONDITIONAL(BUILD_DBUS, test $HAVE_dbus = 1) AC_CHECK_TYPES([DBusBasicValue],,,[[#include ]]) if test $HAVE_dbus = 0; then PC_NAME_DBUS="" else PC_NAME_DBUS="dbus-1" fi AC_SUBST(PC_NAME_DBUS) AS_CASE([$enable_systemd], [$REQUIRED], [ AS_IF([test $HAVE_dbus = 0], [AC_MSG_FAILURE([Cannot support systemd resources without DBus])]) AS_IF([test "$ac_cv_have_decl_CLOCK_MONOTONIC" = "no"], [AC_MSG_FAILURE([Cannot support systemd resources without monotonic clock])]) AS_IF([check_systemdsystemunitdir], [], [AC_MSG_FAILURE([Cannot support systemd resources without systemdsystemunitdir])]) ], [$OPTIONAL], [ AS_IF([test $HAVE_dbus = 0 \ || test "$ac_cv_have_decl_CLOCK_MONOTONIC" = "no"], [enable_systemd=$DISABLED], [ AC_MSG_CHECKING([for systemd version (using dbus-send)]) ret=$({ dbus-send --system --print-reply \ --dest=org.freedesktop.systemd1 \ /org/freedesktop/systemd1 \ org.freedesktop.DBus.Properties.Get \ string:org.freedesktop.systemd1.Manager \ string:Version 2>/dev/null \ || echo "version unavailable"; } | tail -n1) # sanitize output a bit (interested just in value, not type), # ret is intentionally unenquoted so as to normalize whitespace ret=$(echo ${ret} | cut -d' ' -f2-) AC_MSG_RESULT([${ret}]) AS_IF([test "$ret" != "unavailable" \ || systemctl --version 2>/dev/null | grep -q systemd], [ AS_IF([check_systemdsystemunitdir], [enable_systemd=$REQUIRED], [enable_systemd=$DISABLED]) ], [enable_systemd=$DISABLED] ) ]) ], ) AC_MSG_CHECKING([whether to enable support for managing resources via systemd]) AS_IF([test $enable_systemd -eq $DISABLED], [AC_MSG_RESULT([no])], [ AC_MSG_RESULT([yes]) PCMK_FEATURES="$PCMK_FEATURES systemd" ] ) AC_SUBST([systemdsystemunitdir]) AC_DEFINE_UNQUOTED([SUPPORT_SYSTEMD], [$enable_systemd], [Support systemd resources]) AM_CONDITIONAL([BUILD_SYSTEMD], [test $enable_systemd = $REQUIRED]) AC_SUBST(SUPPORT_SYSTEMD) AS_CASE([$enable_upstart], [$REQUIRED], [ AS_IF([test $HAVE_dbus = 0], [AC_MSG_FAILURE([Cannot support Upstart resources without DBus])]) ], [$OPTIONAL], [ AS_IF([test $HAVE_dbus = 0], [enable_upstart=$DISABLED], [ AC_MSG_CHECKING([for Upstart version (using dbus-send)]) ret=$({ dbus-send --system --print-reply \ --dest=com.ubuntu.Upstart \ /com/ubuntu/Upstart org.freedesktop.DBus.Properties.Get \ string:com.ubuntu.Upstart0_6 string:version 2>/dev/null \ || echo "version unavailable"; } | tail -n1) # sanitize output a bit (interested just in value, not type), # ret is intentionally unenquoted so as to normalize whitespace ret=$(echo ${ret} | cut -d' ' -f2-) AC_MSG_RESULT([${ret}]) AS_IF([test "$ret" != "unavailable" \ || initctl --version 2>/dev/null | grep -q upstart], [enable_upstart=$REQUIRED], [enable_upstart=$DISABLED] ) ]) ], ) AC_MSG_CHECKING([whether to enable support for managing resources via Upstart]) AS_IF([test $enable_upstart -eq $DISABLED], [AC_MSG_RESULT([no])], [ AC_MSG_RESULT([yes]) PCMK_FEATURES="$PCMK_FEATURES upstart" ] ) AC_DEFINE_UNQUOTED([SUPPORT_UPSTART], [$enable_upstart], [Support Upstart resources]) AM_CONDITIONAL([BUILD_UPSTART], [test $enable_upstart -eq $REQUIRED]) AC_SUBST(SUPPORT_UPSTART) AS_CASE([$with_nagios], [$REQUIRED], [ AS_IF([test "$ac_cv_have_decl_CLOCK_MONOTONIC" = "no"], [AC_MSG_FAILURE([Cannot support nagios resources without monotonic clock])]) ], [$OPTIONAL], [ AS_IF([test "$ac_cv_have_decl_CLOCK_MONOTONIC" = "no"], [with_nagios=$DISABLED], [with_nagios=$REQUIRED]) ] ) AS_IF([test $with_nagios -eq $REQUIRED], [PCMK_FEATURES="$PCMK_FEATURES nagios"]) AC_DEFINE_UNQUOTED([SUPPORT_NAGIOS], [$with_nagios], [Support nagios plugins]) AM_CONDITIONAL([BUILD_NAGIOS], [test $with_nagios -eq $REQUIRED]) if test x"$NAGIOS_PLUGIN_DIR" = x""; then NAGIOS_PLUGIN_DIR="${libexecdir}/nagios/plugins" fi AC_DEFINE_UNQUOTED(NAGIOS_PLUGIN_DIR, "$NAGIOS_PLUGIN_DIR", Directory for nagios plugins) AC_SUBST(NAGIOS_PLUGIN_DIR) if test x"$NAGIOS_METADATA_DIR" = x""; then NAGIOS_METADATA_DIR="${datadir}/nagios/plugins-metadata" fi AC_DEFINE_UNQUOTED(NAGIOS_METADATA_DIR, "$NAGIOS_METADATA_DIR", Directory for nagios plugins metadata) AC_SUBST(NAGIOS_METADATA_DIR) STACKS="" CLUSTERLIBS="" PC_NAME_CLUSTER="" dnl ======================================================================== dnl Cluster stack - Corosync dnl ======================================================================== COROSYNC_LIBS="" AS_CASE([$with_corosync], [$REQUIRED], [ # These will be fatal if unavailable PKG_CHECK_MODULES([cpg], [libcpg]) PKG_CHECK_MODULES([cfg], [libcfg]) PKG_CHECK_MODULES([cmap], [libcmap]) PKG_CHECK_MODULES([quorum], [libquorum]) PKG_CHECK_MODULES([libcorosync_common], [libcorosync_common]) ] [$OPTIONAL], [ PKG_CHECK_MODULES([cpg], [libcpg], [], [with_corosync=$DISABLED]) PKG_CHECK_MODULES([cfg], [libcfg], [], [with_corosync=$DISABLED]) PKG_CHECK_MODULES([cmap], [libcmap], [], [with_corosync=$DISABLED]) PKG_CHECK_MODULES([quorum], [libquorum], [], [with_corosync=$DISABLED]) PKG_CHECK_MODULES([libcorosync_common], [libcorosync_common], [], [with_corosync=$DISABLED]) AS_IF([test $with_corosync -ne $DISABLED], [with_corosync=$REQUIRED]) ] ) AS_IF([test $with_corosync -ne $DISABLED], [ AC_MSG_CHECKING([for Corosync 2 or later]) AC_MSG_RESULT([yes]) CFLAGS="$CFLAGS $libqb_CFLAGS $cpg_CFLAGS $cfg_CFLAGS $cmap_CFLAGS $quorum_CFLAGS $libcorosync_common_CFLAGS" COROSYNC_LIBS="$COROSYNC_LIBS $cpg_LIBS $cfg_LIBS $cmap_LIBS $quorum_LIBS $libcorosync_common_LIBS" CLUSTERLIBS="$CLUSTERLIBS $COROSYNC_LIBS" PC_NAME_CLUSTER="$PC_CLUSTER_NAME libcfg libcmap libcorosync_common libcpg libquorum" STACKS="$STACKS corosync-ge-2" dnl Shutdown tracking added (back) to corosync Jan 2021 saved_LIBS="$LIBS" LIBS="$LIBS $COROSYNC_LIBS" AC_CHECK_FUNCS(corosync_cfg_trackstart, AC_DEFINE(HAVE_COROSYNC_CFG_TRACKSTART, 1, [Have corosync_cfg_trackstart function])) LIBS="$saved_LIBS" ] ) AC_DEFINE_UNQUOTED([SUPPORT_COROSYNC], [$with_corosync], [Support the Corosync messaging and membership layer]) AM_CONDITIONAL([BUILD_CS_SUPPORT], [test $with_corosync -eq $REQUIRED]) AC_SUBST([SUPPORT_COROSYNC]) dnl dnl Cluster stack - Sanity dnl AS_IF([test "x$STACKS" != "x"], [AC_MSG_NOTICE([Supported stacks:${STACKS}])], [AC_MSG_FAILURE([At least one cluster stack must be supported])]) PCMK_FEATURES="${PCMK_FEATURES}${STACKS}" AC_SUBST(CLUSTERLIBS) AC_SUBST(PC_NAME_CLUSTER) dnl ======================================================================== dnl CIB secrets dnl ======================================================================== AS_IF([test $with_cibsecrets -ne $DISABLED], [ with_cibsecrets=$REQUIRED PCMK_FEATURES="$PCMK_FEATURES cibsecrets" LRM_CIBSECRETS_DIR="${localstatedir}/lib/pacemaker/lrm/secrets" AC_DEFINE_UNQUOTED([LRM_CIBSECRETS_DIR], ["$LRM_CIBSECRETS_DIR"], [Location for CIB secrets]) AC_SUBST([LRM_CIBSECRETS_DIR]) ] ) AC_DEFINE_UNQUOTED([SUPPORT_CIBSECRETS], [$with_cibsecrets], [Support CIB secrets]) AM_CONDITIONAL([BUILD_CIBSECRETS], [test $with_cibsecrets -eq $REQUIRED]) dnl ======================================================================== dnl GnuTLS dnl ======================================================================== dnl Require GnuTLS >=2.12.0 (2011-03) for Pacemaker Remote support PC_NAME_GNUTLS="" AS_CASE([$with_gnutls], [$REQUIRED], [ REQUIRE_LIB([gnutls], [gnutls_sec_param_to_pk_bits]) REQUIRE_HEADER([gnutls/gnutls.h]) ], [$OPTIONAL], [ AC_CHECK_LIB([gnutls], [gnutls_sec_param_to_pk_bits], [], [with_gnutls=$DISABLED]) AC_CHECK_HEADERS([gnutls/gnutls.h], [], [with_gnutls=$DISABLED]) ] ) AS_IF([test $with_gnutls -ne $DISABLED], [ PC_NAME_GNUTLS="gnutls" PCMK_FEATURES="$PCMK_FEATURES remote" ] ) AC_SUBST([PC_NAME_GNUTLS]) AM_CONDITIONAL([BUILD_REMOTE], [test $with_gnutls -ne $DISABLED]) dnl ======================================================================== dnl System Health dnl ======================================================================== dnl Check if servicelog development package is installed SERVICELOG=servicelog-1 SERVICELOG_EXISTS="no" AC_MSG_CHECKING([for $SERVICELOG packages]) if $PKG_CONFIG --exists $SERVICELOG then PKG_CHECK_MODULES([SERVICELOG], [servicelog-1]) SERVICELOG_EXISTS="yes" PCMK_FEATURES="$PCMK_FEATURES servicelog" fi AC_MSG_RESULT([$SERVICELOG_EXISTS]) AM_CONDITIONAL(BUILD_SERVICELOG, test "$SERVICELOG_EXISTS" = "yes") dnl Check if OpenIMPI packages and servicelog are installed OPENIPMI="OpenIPMI OpenIPMIposix" OPENIPMI_SERVICELOG_EXISTS="no" AC_MSG_CHECKING([for $SERVICELOG $OPENIPMI packages]) if $PKG_CONFIG --exists $OPENIPMI $SERVICELOG then PKG_CHECK_MODULES([OPENIPMI_SERVICELOG],[OpenIPMI OpenIPMIposix]) REQUIRE_HEADER([malloc.h]) OPENIPMI_SERVICELOG_EXISTS="yes" PCMK_FEATURES="$PCMK_FEATURES ipmiservicelogd" fi AC_MSG_RESULT([$OPENIPMI_SERVICELOG_EXISTS]) AM_CONDITIONAL(BUILD_OPENIPMI_SERVICELOG, test "$OPENIPMI_SERVICELOG_EXISTS" = "yes") # --- ASAN/UBSAN/TSAN (see man gcc) --- # when using SANitizers, we need to pass the -fsanitize.. # to both CFLAGS and LDFLAGS. The CFLAGS/LDFLAGS must be # specified as first in the list or there will be runtime # issues (for example user has to LD_PRELOAD asan for it to work # properly). AS_IF([test -n "${SANITIZERS}"], [ SANITIZERS=$(echo $SANITIZERS | sed -e 's/,/ /g') for SANITIZER in $SANITIZERS do AS_CASE([$SANITIZER], [asan|ASAN], [ SANITIZERS_CFLAGS="$SANITIZERS_CFLAGS -fsanitize=address" SANITIZERS_LDFLAGS="$SANITIZERS_LDFLAGS -fsanitize=address -lasan" REQUIRE_LIB([asan],[main]) ], [ubsan|UBSAN], [ SANITIZERS_CFLAGS="$SANITIZERS_CFLAGS -fsanitize=undefined" SANITIZERS_LDFLAGS="$SANITIZERS_LDFLAGS -fsanitize=undefined -lubsan" REQUIRE_LIB([ubsan],[main]) ], [tsan|TSAN], [ SANITIZERS_CFLAGS="$SANITIZERS_CFLAGS -fsanitize=thread" SANITIZERS_LDFLAGS="$SANITIZERS_LDFLAGS -fsanitize=thread -ltsan" REQUIRE_LIB([tsan],[main]) ]) done ]) dnl ======================================================================== dnl Compiler flags dnl ======================================================================== dnl Make sure that CFLAGS is not exported. If the user did dnl not have CFLAGS in their environment then this should have dnl no effect. However if CFLAGS was exported from the user's dnl environment, then the new CFLAGS will also be exported dnl to sub processes. if export | fgrep " CFLAGS=" > /dev/null; then SAVED_CFLAGS="$CFLAGS" unset CFLAGS CFLAGS="$SAVED_CFLAGS" unset SAVED_CFLAGS fi AC_ARG_VAR([CFLAGS_HARDENED_LIB], [extra C compiler flags for hardened libraries]) AC_ARG_VAR([LDFLAGS_HARDENED_LIB], [extra linker flags for hardened libraries]) AC_ARG_VAR([CFLAGS_HARDENED_EXE], [extra C compiler flags for hardened executables]) AC_ARG_VAR([LDFLAGS_HARDENED_EXE], [extra linker flags for hardened executables]) CC_EXTRAS="" AS_IF([test "$GCC" != yes], [CFLAGS="$CFLAGS -g"], [ CFLAGS="$CFLAGS -ggdb" dnl When we don't have diagnostic push / pull, we can't explicitly disable dnl checking for nonliteral formats in the places where they occur on purpose dnl thus we disable nonliteral format checking globally as we are aborting dnl on warnings. dnl what makes the things really ugly is that nonliteral format checking is dnl obviously available as an extra switch in very modern gcc but for older dnl gcc this is part of -Wformat=2 dnl so if we have push/pull we can enable -Wformat=2 -Wformat-nonliteral dnl if we don't have push/pull but -Wformat-nonliteral we can enable -Wformat=2 dnl otherwise none of both gcc_diagnostic_push_pull=no cc_temp_flags "$CFLAGS $WERROR" AC_MSG_CHECKING([for gcc diagnostic push / pull]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #pragma GCC diagnostic push #pragma GCC diagnostic pop ]])], [ AC_MSG_RESULT([yes]) gcc_diagnostic_push_pull=yes ], AC_MSG_RESULT([no])) cc_restore_flags AS_IF([cc_supports_flag "-Wformat-nonliteral"], [gcc_format_nonliteral=yes], [gcc_format_nonliteral=no]) # We had to eliminate -Wnested-externs because of libtool changes # Make sure to order options so that the former stand for prerequisites # of the latter (e.g., -Wformat-nonliteral requires -Wformat). EXTRA_FLAGS="-fgnu89-inline" EXTRA_FLAGS="$EXTRA_FLAGS -Wall" EXTRA_FLAGS="$EXTRA_FLAGS -Waggregate-return" EXTRA_FLAGS="$EXTRA_FLAGS -Wbad-function-cast" EXTRA_FLAGS="$EXTRA_FLAGS -Wcast-align" EXTRA_FLAGS="$EXTRA_FLAGS -Wdeclaration-after-statement" EXTRA_FLAGS="$EXTRA_FLAGS -Wendif-labels" EXTRA_FLAGS="$EXTRA_FLAGS -Wfloat-equal" EXTRA_FLAGS="$EXTRA_FLAGS -Wformat-security" EXTRA_FLAGS="$EXTRA_FLAGS -Wmissing-prototypes" EXTRA_FLAGS="$EXTRA_FLAGS -Wmissing-declarations" EXTRA_FLAGS="$EXTRA_FLAGS -Wnested-externs" EXTRA_FLAGS="$EXTRA_FLAGS -Wno-long-long" EXTRA_FLAGS="$EXTRA_FLAGS -Wno-strict-aliasing" EXTRA_FLAGS="$EXTRA_FLAGS -Wpointer-arith" EXTRA_FLAGS="$EXTRA_FLAGS -Wstrict-prototypes" EXTRA_FLAGS="$EXTRA_FLAGS -Wwrite-strings" EXTRA_FLAGS="$EXTRA_FLAGS -Wunused-but-set-variable" EXTRA_FLAGS="$EXTRA_FLAGS -Wunsigned-char" AS_IF([test "x$gcc_diagnostic_push_pull" = "xyes"], [ AC_DEFINE([GCC_FORMAT_NONLITERAL_CHECKING_ENABLED], [], [gcc can complain about nonliterals in format]) EXTRA_FLAGS="$EXTRA_FLAGS -Wformat=2 -Wformat-nonliteral" ], [test "x$gcc_format_nonliteral" = "xyes"], [EXTRA_FLAGS="$EXTRA_FLAGS -Wformat=2"]) # Additional warnings it might be nice to enable one day # -Wshadow # -Wunreachable-code for j in $EXTRA_FLAGS do AS_IF([cc_supports_flag $CC_EXTRAS $j], [CC_EXTRAS="$CC_EXTRAS $j"]) done AC_MSG_NOTICE([Using additional gcc flags: ${CC_EXTRAS}]) ]) dnl dnl Hardening flags dnl dnl The prime control of whether to apply (targeted) hardening build flags and dnl which ones is --{enable,disable}-hardening option passed to ./configure: dnl dnl --enable-hardening=try (default): dnl depending on whether any of CFLAGS_HARDENED_EXE, LDFLAGS_HARDENED_EXE, dnl CFLAGS_HARDENED_LIB or LDFLAGS_HARDENED_LIB environment variables dnl (see below) is set and non-null, all these custom flags (even if not dnl set) are used as are, otherwise the best effort is made to offer dnl reasonably strong hardening in several categories (RELRO, PIE, dnl "bind now", stack protector) according to what the selected toolchain dnl can offer dnl dnl --enable-hardening: dnl same effect as --enable-hardening=try when the environment variables dnl in question are suppressed dnl dnl --disable-hardening: dnl do not apply any targeted hardening measures at all dnl dnl The user-injected environment variables that regulate the hardening in dnl default case are as follows: dnl dnl * CFLAGS_HARDENED_EXE, LDFLAGS_HARDENED_EXE dnl compiler and linker flags (respectively) for daemon programs dnl (pacemakerd, pacemaker-attrd, pacemaker-controld, pacemaker-execd, dnl cib, stonithd, pacemaker-remoted, pacemaker-schedulerd) dnl dnl * CFLAGS_HARDENED_LIB, LDFLAGS_HARDENED_LIB dnl compiler and linker flags (respectively) for libraries linked dnl with the daemon programs dnl dnl Note that these are purposedly targeted variables (addressing particular dnl targets all over the scattered Makefiles) and have no effect outside of dnl the predestined scope (e.g., CLI utilities). For a global reach, dnl use CFLAGS, LDFLAGS, etc. as usual. dnl dnl For guidance on the suitable flags consult, for instance: dnl https://fedoraproject.org/wiki/Changes/Harden_All_Packages#Detailed_Harden_Flags_Description dnl https://owasp.org/index.php/C-Based_Toolchain_Hardening#GCC.2FBinutils dnl AS_IF([test $enable_hardening -eq $OPTIONAL], [ AS_IF([test "$(env | grep -Ec '^(C|LD)FLAGS_HARDENED_(EXE|LIB)=.')" = 0], [enable_hardening=$REQUIRED], [AC_MSG_NOTICE([Hardening: using custom flags from environment])] ) ], [ unset CFLAGS_HARDENED_EXE unset CFLAGS_HARDENED_LIB unset LDFLAGS_HARDENED_EXE unset LDFLAGS_HARDENED_LIB ] ) AS_CASE([$enable_hardening], [$DISABLED], [AC_MSG_NOTICE([Hardening: explicitly disabled])], [$REQUIRED], [ CFLAGS_HARDENED_EXE= CFLAGS_HARDENED_LIB= LDFLAGS_HARDENED_EXE= LDFLAGS_HARDENED_LIB= relro=0 pie=0 bindnow=0 # daemons incl. libs: partial RELRO flag="-Wl,-z,relro" CC_CHECK_LDFLAGS(["${flag}"], [ LDFLAGS_HARDENED_EXE="${LDFLAGS_HARDENED_EXE} ${flag}" LDFLAGS_HARDENED_LIB="${LDFLAGS_HARDENED_LIB} ${flag}" relro=1 ]) # daemons: PIE for both CFLAGS and LDFLAGS AS_IF([cc_supports_flag -fPIE], [ flag="-pie" CC_CHECK_LDFLAGS(["${flag}"], [ CFLAGS_HARDENED_EXE="${CFLAGS_HARDENED_EXE} -fPIE" LDFLAGS_HARDENED_EXE="${LDFLAGS_HARDENED_EXE} ${flag}" pie=1 ]) ] ) # daemons incl. libs: full RELRO if sensible + as-needed linking # so as to possibly mitigate startup performance # hit caused by excessive linking with unneeded # libraries AS_IF([test "${relro}" = 1 && test "${pie}" = 1], [ flag="-Wl,-z,now" CC_CHECK_LDFLAGS(["${flag}"], [ LDFLAGS_HARDENED_EXE="${LDFLAGS_HARDENED_EXE} ${flag}" LDFLAGS_HARDENED_LIB="${LDFLAGS_HARDENED_LIB} ${flag}" bindnow=1 ]) ] ) AS_IF([test "${bindnow}" = 1], [ flag="-Wl,--as-needed" CC_CHECK_LDFLAGS(["${flag}"], [ LDFLAGS_HARDENED_EXE="${LDFLAGS_HARDENED_EXE} ${flag}" LDFLAGS_HARDENED_LIB="${LDFLAGS_HARDENED_LIB} ${flag}" ]) ]) # universal: prefer strong > all > default stack protector if possible flag= AS_IF([cc_supports_flag -fstack-protector-strong], [flag="-fstack-protector-strong"], [cc_supports_flag -fstack-protector-all], [flag="-fstack-protector-all"], [cc_supports_flag -fstack-protector], [flag="-fstack-protector"] ) AS_IF([test -n "${flag}"], [ CC_EXTRAS="${CC_EXTRAS} ${flag}" stackprot=1 ] ) AS_IF([test "${relro}" = 1 || test "${pie}" = 1 || test "${stackprot}" = 1], [AC_MSG_NOTICE([Hardening: relro=${relro} pie=${pie} bindnow=${bindnow} stackprot=${flag}])], [AC_MSG_WARN([Hardening: no suitable features in the toolchain detected])] ) ], ) CFLAGS="$SANITIZERS_CFLAGS $CFLAGS $CC_EXTRAS" LDFLAGS="$SANITIZERS_LDFLAGS $LDFLAGS" CFLAGS_HARDENED_EXE="$SANITIZERS_CFLAGS $CFLAGS_HARDENED_EXE" LDFLAGS_HARDENED_EXE="$SANITIZERS_LDFLAGS $LDFLAGS_HARDENED_EXE" NON_FATAL_CFLAGS="$CFLAGS" AC_SUBST(NON_FATAL_CFLAGS) dnl dnl We reset CFLAGS to include our warnings *after* all function dnl checking goes on, so that our warning flags don't keep the dnl AC_*FUNCS() calls above from working. In particular, -Werror will dnl *always* cause us troubles if we set it before here. dnl dnl AS_IF([test $enable_fatal_warnings -ne $DISABLED], [ AC_MSG_NOTICE([Enabling fatal compiler warnings]) CFLAGS="$CFLAGS $WERROR" ]) AC_SUBST(CFLAGS) dnl This is useful for use in Makefiles that need to remove one specific flag CFLAGS_COPY="$CFLAGS" AC_SUBST(CFLAGS_COPY) AC_SUBST(LIBADD_DL) dnl extra flags for dynamic linking libraries AC_SUBST(LOCALE) dnl Options for cleaning up the compiler output AS_IF([test $enable_quiet -ne $DISABLED], [ AC_MSG_NOTICE([Suppressing make details]) QUIET_LIBTOOL_OPTS="--silent" QUIET_MAKE_OPTS="-s" # POSIX compliant ], [ QUIET_LIBTOOL_OPTS="" QUIET_MAKE_OPTS="" ] ) dnl Put the above variables to use LIBTOOL="${LIBTOOL} --tag=CC \$(QUIET_LIBTOOL_OPTS)" MAKEFLAGS="${MAKEFLAGS} ${QUIET_MAKE_OPTS}" AC_SUBST(CC) AC_SUBST(MAKEFLAGS) AC_SUBST(LIBTOOL) AC_SUBST(QUIET_LIBTOOL_OPTS) AC_DEFINE_UNQUOTED(CRM_FEATURES, "$PCMK_FEATURES", Set of enabled features) AC_SUBST(PCMK_FEATURES) dnl Files we output that need to be executable CONFIG_FILES_EXEC([cts/CTSlab.py], [cts/LSBDummy], [cts/OCFIPraTest.py], [cts/cluster_test], [cts/cts], [cts/cts-cli], [cts/cts-coverage], [cts/cts-exec], [cts/cts-fencing], [cts/cts-log-watcher], [cts/cts-regression], [cts/cts-scheduler], [cts/cts-support], [cts/lxc_autogen.sh], [cts/benchmark/clubench], [cts/fence_dummy], [cts/pacemaker-cts-dummyd], [daemons/fenced/fence_legacy], [doc/abi-check], [extra/resources/ClusterMon], [extra/resources/HealthSMART], [extra/resources/SysInfo], [extra/resources/ifspeed], [extra/resources/o2cb], [tools/crm_failcount], [tools/crm_master], [tools/crm_report], [tools/crm_standby], [tools/cibsecret], [tools/pcmk_simtimes]) dnl Other files we output AC_CONFIG_FILES(Makefile \ cts/Makefile \ cts/CTS.py \ cts/CTSvars.py \ cts/benchmark/Makefile \ cts/pacemaker-cts-dummyd@.service \ + cts/scheduler/Makefile \ + cts/scheduler/dot/Makefile \ + cts/scheduler/exp/Makefile \ + cts/scheduler/scores/Makefile \ + cts/scheduler/stderr/Makefile \ + cts/scheduler/summary/Makefile \ + cts/scheduler/xml/Makefile \ daemons/Makefile \ daemons/attrd/Makefile \ daemons/based/Makefile \ daemons/controld/Makefile \ daemons/execd/Makefile \ daemons/execd/pacemaker_remote \ daemons/execd/pacemaker_remote.service \ daemons/fenced/Makefile \ daemons/pacemakerd/Makefile \ daemons/pacemakerd/pacemaker \ daemons/pacemakerd/pacemaker.service \ daemons/pacemakerd/pacemaker.upstart \ daemons/pacemakerd/pacemaker.combined.upstart \ daemons/schedulerd/Makefile \ devel/Makefile \ doc/Doxyfile \ doc/Makefile \ doc/sphinx/Makefile \ extra/Makefile \ extra/alerts/Makefile \ extra/resources/Makefile \ extra/logrotate/Makefile \ extra/logrotate/pacemaker \ include/Makefile \ include/crm/Makefile \ include/crm/cib/Makefile \ include/crm/common/Makefile \ include/crm/cluster/Makefile \ include/crm/fencing/Makefile \ include/crm/pengine/Makefile \ include/pcmki/Makefile \ replace/Makefile \ lib/Makefile \ lib/libpacemaker.pc \ lib/pacemaker.pc \ lib/pacemaker-cib.pc \ lib/pacemaker-lrmd.pc \ lib/pacemaker-service.pc \ lib/pacemaker-pe_rules.pc \ lib/pacemaker-pe_status.pc \ lib/pacemaker-fencing.pc \ lib/pacemaker-cluster.pc \ lib/common/Makefile \ lib/common/tests/Makefile \ lib/common/tests/agents/Makefile \ lib/common/tests/cmdline/Makefile \ lib/common/tests/flags/Makefile \ lib/common/tests/operations/Makefile \ lib/common/tests/strings/Makefile \ lib/common/tests/utils/Makefile \ lib/common/tests/xpath/Makefile \ lib/cluster/Makefile \ lib/cib/Makefile \ lib/gnu/Makefile \ lib/pacemaker/Makefile \ lib/pengine/Makefile \ lib/pengine/tests/Makefile \ lib/pengine/tests/rules/Makefile \ lib/fencing/Makefile \ lib/lrmd/Makefile \ lib/services/Makefile \ maint/Makefile \ tests/Makefile \ tools/Makefile \ tools/report.collector \ tools/report.common \ tools/crm_mon.service \ tools/crm_mon.upstart \ xml/Makefile \ xml/pacemaker-schemas.pc \ ) dnl Now process the entire list of files added by previous dnl calls to AC_CONFIG_FILES() AC_OUTPUT() # Strip leading space from features list PCMK_FEATURES=`echo -e "$PCMK_FEATURES" | sed -e 's/^ //'` dnl ***************** dnl Configure summary dnl ***************** AC_MSG_NOTICE([]) AC_MSG_NOTICE([$PACKAGE configuration:]) AC_MSG_NOTICE([ Version = ${VERSION} (Build: $BUILD_VERSION)]) AC_MSG_NOTICE([ Features = ${PCMK_FEATURES}]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ Prefix = ${prefix}]) AC_MSG_NOTICE([ Executables = ${sbindir}]) AC_MSG_NOTICE([ Man pages = ${mandir}]) AC_MSG_NOTICE([ Libraries = ${libdir}]) AC_MSG_NOTICE([ Header files = ${includedir}]) AC_MSG_NOTICE([ Arch-independent files = ${datadir}]) AC_MSG_NOTICE([ State information = ${localstatedir}]) AC_MSG_NOTICE([ System configuration = ${sysconfdir}]) AC_MSG_NOTICE([ OCF agents = ${OCF_ROOT_DIR}]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ HA group name = ${CRM_DAEMON_GROUP}]) AC_MSG_NOTICE([ HA user name = ${CRM_DAEMON_USER}]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ CFLAGS = ${CFLAGS}]) AC_MSG_NOTICE([ CFLAGS_HARDENED_EXE = ${CFLAGS_HARDENED_EXE}]) AC_MSG_NOTICE([ CFLAGS_HARDENED_LIB = ${CFLAGS_HARDENED_LIB}]) AC_MSG_NOTICE([ LDFLAGS_HARDENED_EXE = ${LDFLAGS_HARDENED_EXE}]) AC_MSG_NOTICE([ LDFLAGS_HARDENED_LIB = ${LDFLAGS_HARDENED_LIB}]) AC_MSG_NOTICE([ Libraries = ${LIBS}]) AC_MSG_NOTICE([ Stack Libraries = ${CLUSTERLIBS}]) AC_MSG_NOTICE([ Unix socket auth method = ${us_auth}]) diff --git a/cts/Makefile.am b/cts/Makefile.am index 2a7377444e..7d4eda272b 100644 --- a/cts/Makefile.am +++ b/cts/Makefile.am @@ -1,103 +1,94 @@ # # Copyright 2001-2021 the Pacemaker project contributors # # The version control history for this file may have further details. # # This source code is licensed under the GNU General Public License version 2 # or later (GPLv2+) WITHOUT ANY WARRANTY. # MAINTAINERCLEANFILES = Makefile.in noinst_SCRIPTS = cluster_test \ OCFIPraTest.py # Commands intended to be run only via other commands halibdir = $(CRM_DAEMON_DIR) dist_halib_SCRIPTS = cts-log-watcher \ cts-support # Test commands and globally applicable test files should be in $(testdir), # and command-specific test data should be in a command-specific subdirectory. testdir = $(datadir)/$(PACKAGE)/tests test_SCRIPTS = cts-cli \ cts-coverage \ cts-exec \ cts-fencing \ cts-regression \ cts-scheduler dist_test_DATA = README.md \ valgrind-pcmk.suppressions ctslibdir = $(pythondir)/cts ctslib_PYTHON = __init__.py \ CIB.py \ cib_xml.py \ CM_common.py \ CM_corosync.py \ CTSaudits.py \ CTSscenarios.py \ CTStests.py \ environment.py \ logging.py \ patterns.py \ remote.py \ watcher.py nodist_ctslib_PYTHON = CTS.py \ CTSvars.py ctsdir = $(testdir)/cts cts_DATA = pacemaker-cts-dummyd@.service dist_cts_DATA = cts.conf if BUILD_UPSTART dist_cts_DATA += pacemaker-cts-dummyd.conf endif cts_SCRIPTS = CTSlab.py \ cts \ fence_dummy \ LSBDummy \ lxc_autogen.sh \ pacemaker-cts-dummyd clidir = $(testdir)/cli dist_cli_DATA = cli/constraints.xml \ cli/crmadmin-cluster-remote-guest-nodes.xml \ cli/crm_diff_new.xml \ cli/crm_diff_old.xml \ cli/crm_mon.xml \ cli/crm_mon-partial.xml \ cli/crm_resource_digests.xml \ cli/regression.acls.exp \ cli/regression.crm_mon.exp \ cli/regression.dates.exp \ cli/regression.rules.exp \ cli/regression.tools.exp \ cli/regression.upgrade.exp \ cli/regression.validity.exp -PE_TESTS = $(wildcard scheduler/*.scores) -pedir = $(testdir)/scheduler -dist_pe_DATA = $(PE_TESTS) \ - $(PE_TESTS:%.scores=%.xml) \ - $(PE_TESTS:%.scores=%.exp) \ - $(PE_TESTS:%.scores=%.dot) \ - $(PE_TESTS:%.scores=%.summary) \ - $(wildcard scheduler/*.stderr) - scheduler-list: - @for T in "$(srcdir)"/scheduler/*.xml; do \ + @for T in "$(srcdir)"/scheduler/xml/*.xml; do \ echo $$(basename $$T .xml); \ done CLEANFILES = $(builddir)/.regression.failed.diff clean-local: - rm -f scheduler/*.pe.* + rm -f scheduler/*/*.pe -SUBDIRS = benchmark +SUBDIRS = benchmark scheduler cts-support-install: cts-support ./cts-support install cts-support-uninstall: cts-support ./cts-support uninstall diff --git a/cts/cts-scheduler.in b/cts/cts-scheduler.in index 8e5eb2c9b3..40abfc5c2a 100644 --- a/cts/cts-scheduler.in +++ b/cts/cts-scheduler.in @@ -1,1528 +1,1528 @@ #!@PYTHON@ """ Regression tests for Pacemaker's scheduler """ __copyright__ = "Copyright 2004-2021 the Pacemaker project contributors" __license__ = "GNU General Public License version 2 or later (GPLv2+) WITHOUT ANY WARRANTY" import io import os import re import sys import stat import shlex import shutil import argparse import subprocess import platform DESC = """Regression tests for Pacemaker's scheduler""" # Each entry in TESTS is a group of tests, where each test consists of a # test base name, test description, and additional test arguments. # Test groups will be separated by newlines in output. TESTS = [ [ [ "simple1", "Offline" ], [ "simple2", "Start" ], [ "simple3", "Start 2" ], [ "simple4", "Start Failed" ], [ "simple6", "Stop Start" ], [ "simple7", "Shutdown" ], #[ "simple8", "Stonith" ], #[ "simple9", "Lower version" ], #[ "simple10", "Higher version" ], [ "simple11", "Priority (ne)" ], [ "simple12", "Priority (eq)" ], [ "simple8", "Stickiness" ], ], [ [ "group1", "Group" ], [ "group2", "Group + Native" ], [ "group3", "Group + Group" ], [ "group4", "Group + Native (nothing)" ], [ "group5", "Group + Native (move)" ], [ "group6", "Group + Group (move)" ], [ "group7", "Group colocation" ], [ "group13", "Group colocation (cant run)" ], [ "group8", "Group anti-colocation" ], [ "group9", "Group recovery" ], [ "group10", "Group partial recovery" ], [ "group11", "Group target_role" ], [ "group14", "Group stop (graph terminated)" ], [ "group15", "Negative group colocation" ], [ "bug-1573", "Partial stop of a group with two children" ], [ "bug-1718", "Mandatory group ordering - Stop group_FUN" ], [ "bug-lf-2613", "Move group on failure" ], [ "bug-lf-2619", "Move group on clone failure" ], [ "group-fail", "Ensure stop order is preserved for partially active groups" ], [ "group-unmanaged", "No need to restart r115 because r114 is unmanaged" ], [ "group-unmanaged-stopped", "Make sure r115 is stopped when r114 fails" ], [ "group-dependents", "Account for the location preferences of things colocated with a group" ], [ "group-stop-ordering", "Ensure blocked group member stop does not force other member stops" ], ], [ [ "rsc_dep1", "Must not" ], [ "rsc_dep3", "Must" ], [ "rsc_dep5", "Must not 3" ], [ "rsc_dep7", "Must 3" ], [ "rsc_dep10", "Must (but cant)" ], [ "rsc_dep2", "Must (running)" ], [ "rsc_dep8", "Must (running : alt)" ], [ "rsc_dep4", "Must (running + move)" ], [ "asymmetric", "Asymmetric - require explicit location constraints" ], ], [ [ "orphan-0", "Orphan ignore" ], [ "orphan-1", "Orphan stop" ], [ "orphan-2", "Orphan stop, remove failcount" ], ], [ [ "params-0", "Params: No change" ], [ "params-1", "Params: Changed" ], [ "params-2", "Params: Resource definition" ], [ "params-3", "Params: Restart instead of reload if start pending" ], [ "params-4", "Params: Reload" ], [ "params-5", "Params: Restart based on probe digest" ], [ "novell-251689", "Resource definition change + target_role=stopped" ], [ "bug-lf-2106", "Restart all anonymous clone instances after config change" ], [ "params-6", "Params: Detect reload in previously migrated resource" ], [ "nvpair-id-ref", "Support id-ref in nvpair with optional name" ], [ "not-reschedule-unneeded-monitor", "Do not reschedule unneeded monitors while resource definitions have changed" ], [ "reload-becomes-restart", "Cancel reload if restart becomes required" ], ], [ [ "target-0", "Target Role : baseline" ], [ "target-1", "Target Role : master" ], [ "target-2", "Target Role : invalid" ], ], [ [ "base-score", "Set a node's default score for all nodes" ], ], [ [ "date-1", "Dates", [ "-t", "2005-020" ] ], [ "date-2", "Date Spec - Pass", [ "-t", "2005-020T12:30" ] ], [ "date-3", "Date Spec - Fail", [ "-t", "2005-020T11:30" ] ], [ "origin", "Timing of recurring operations", [ "-t", "2014-05-07 00:28:00" ] ], [ "probe-0", "Probe (anon clone)" ], [ "probe-1", "Pending Probe" ], [ "probe-2", "Correctly re-probe cloned groups" ], [ "probe-3", "Probe (pending node)" ], [ "probe-4", "Probe (pending node + stopped resource)" ], [ "standby", "Standby" ], [ "comments", "Comments" ], ], [ [ "one-or-more-0", "Everything starts" ], [ "one-or-more-1", "Nothing starts because of A" ], [ "one-or-more-2", "D can start because of C" ], [ "one-or-more-3", "D cannot start because of B and C" ], [ "one-or-more-4", "D cannot start because of target-role" ], [ "one-or-more-5", "Start A and F even though C and D are stopped" ], [ "one-or-more-6", "Leave A running even though B is stopped" ], [ "one-or-more-7", "Leave A running even though C is stopped" ], [ "bug-5140-require-all-false", "Allow basegrp:0 to stop" ], [ "clone-require-all-1", "clone B starts node 3 and 4" ], [ "clone-require-all-2", "clone B remains stopped everywhere" ], [ "clone-require-all-3", "clone B stops everywhere because A stops everywhere" ], [ "clone-require-all-4", "clone B remains on node 3 and 4 with only one instance of A remaining" ], [ "clone-require-all-5", "clone B starts on node 1 3 and 4" ], [ "clone-require-all-6", "clone B remains active after shutting down instances of A" ], [ "clone-require-all-7", "clone A and B both start at the same time. all instances of A start before B" ], [ "clone-require-all-no-interleave-1", "C starts everywhere after A and B" ], [ "clone-require-all-no-interleave-2", "C starts on nodes 1, 2, and 4 with only one active instance of B" ], [ "clone-require-all-no-interleave-3", "C remains active when instance of B is stopped on one node and started on another" ], [ "one-or-more-unrunnable-instances", "Avoid dependencies on instances that won't ever be started" ], ], [ [ "location-date-rules-1", "Use location constraints with ineffective date-based rules" ], [ "location-date-rules-2", "Use location constraints with effective date-based rules" ], [ "nvpair-date-rules-1", "Use nvpair blocks with a variety of date-based rules" ], [ "value-source", "Use location constraints with node attribute expressions using value-source" ], [ "rule-dbl-as-auto-number-match", "Floating-point rule values default to number comparison: match" ], [ "rule-dbl-as-auto-number-no-match", "Floating-point rule values default to number comparison: no " "match" ], [ "rule-dbl-as-integer-match", "Floating-point rule values set to integer comparison: match" ], [ "rule-dbl-as-integer-no-match", "Floating-point rule values set to integer comparison: no match" ], [ "rule-dbl-as-number-match", "Floating-point rule values set to number comparison: match" ], [ "rule-dbl-as-number-no-match", "Floating-point rule values set to number comparison: no match" ], [ "rule-dbl-parse-fail-default-str-match", "Floating-point rule values fail to parse, default to string " "comparison: match" ], [ "rule-dbl-parse-fail-default-str-no-match", "Floating-point rule values fail to parse, default to string " "comparison: no match" ], [ "rule-int-as-auto-integer-match", "Integer rule values default to integer comparison: match" ], [ "rule-int-as-auto-integer-no-match", "Integer rule values default to integer comparison: no match" ], [ "rule-int-as-integer-match", "Integer rule values set to integer comparison: match" ], [ "rule-int-as-integer-no-match", "Integer rule values set to integer comparison: no match" ], [ "rule-int-as-number-match", "Integer rule values set to number comparison: match" ], [ "rule-int-as-number-no-match", "Integer rule values set to number comparison: no match" ], [ "rule-int-parse-fail-default-str-match", "Integer rule values fail to parse, default to string " "comparison: match" ], [ "rule-int-parse-fail-default-str-no-match", "Integer rule values fail to parse, default to string " "comparison: no match" ], ], [ [ "order1", "Order start 1" ], [ "order2", "Order start 2" ], [ "order3", "Order stop" ], [ "order4", "Order (multiple)" ], [ "order5", "Order (move)" ], [ "order6", "Order (move w/ restart)" ], [ "order7", "Order (mandatory)" ], [ "order-optional", "Order (score=0)" ], [ "order-required", "Order (score=INFINITY)" ], [ "bug-lf-2171", "Prevent group start when clone is stopped" ], [ "order-clone", "Clone ordering should be able to prevent startup of dependent clones" ], [ "order-sets", "Ordering for resource sets" ], [ "order-serialize", "Serialize resources without inhibiting migration" ], [ "order-serialize-set", "Serialize a set of resources without inhibiting migration" ], [ "clone-order-primitive", "Order clone start after a primitive" ], [ "clone-order-16instances", "Verify ordering of 16 cloned resources" ], [ "order-optional-keyword", "Order (optional keyword)" ], [ "order-mandatory", "Order (mandatory keyword)" ], [ "bug-lf-2493", "Don't imply colocation requirements when applying ordering constraints with clones" ], [ "ordered-set-basic-startup", "Constraint set with default order settings" ], [ "ordered-set-natural", "Allow natural set ordering" ], [ "order-wrong-kind", "Order (error)" ], ], [ [ "coloc-loop", "Colocation - loop" ], [ "coloc-many-one", "Colocation - many-to-one" ], [ "coloc-list", "Colocation - many-to-one with list" ], [ "coloc-group", "Colocation - groups" ], [ "coloc-slave-anti", "Anti-colocation with slave shouldn't prevent master colocation" ], [ "coloc-attr", "Colocation based on node attributes" ], [ "coloc-negative-group", "Negative colocation with a group" ], [ "coloc-intra-set", "Intra-set colocation" ], [ "bug-lf-2435", "Colocation sets with a negative score" ], [ "coloc-clone-stays-active", "Ensure clones don't get stopped/demoted because a dependent must stop" ], [ "coloc_fp_logic", "Verify floating point calculations in colocation are working" ], [ "colo_master_w_native", "cl#5070 - Verify promotion order is affected when colocating master to native rsc" ], [ "colo_slave_w_native", "cl#5070 - Verify promotion order is affected when colocating slave to native rsc" ], [ "anti-colocation-order", "cl#5187 - Prevent resources in an anti-colocation from even temporarily running on a same node" ], [ "anti-colocation-master", "Organize order of actions for master resources in anti-colocations" ], [ "anti-colocation-slave", "Organize order of actions for slave resources in anti-colocations" ], [ "enforce-colo1", "Always enforce B with A INFINITY" ], [ "complex_enforce_colo", "Always enforce B with A INFINITY. (make sure heat-engine stops)" ], [ "coloc-dependee-should-stay", "Stickiness outweighs group colocation" ], [ "coloc-dependee-should-move", "Group colocation outweighs stickiness" ], [ "colocation-influence", "Respect colocation influence" ], ], [ [ "rsc-sets-seq-true", "Resource Sets - sequential=false" ], [ "rsc-sets-seq-false", "Resource Sets - sequential=true" ], [ "rsc-sets-clone", "Resource Sets - Clone" ], [ "rsc-sets-master", "Resource Sets - Master" ], [ "rsc-sets-clone-1", "Resource Sets - Clone (lf#2404)" ], ], [ [ "attrs1", "string: eq (and)" ], [ "attrs2", "string: lt / gt (and)" ], [ "attrs3", "string: ne (or)" ], [ "attrs4", "string: exists" ], [ "attrs5", "string: not_exists" ], [ "attrs6", "is_dc: true" ], [ "attrs7", "is_dc: false" ], [ "attrs8", "score_attribute" ], [ "per-node-attrs", "Per node resource parameters" ], ], [ [ "mon-rsc-1", "Schedule Monitor - start" ], [ "mon-rsc-2", "Schedule Monitor - move" ], [ "mon-rsc-3", "Schedule Monitor - pending start" ], [ "mon-rsc-4", "Schedule Monitor - move/pending start" ], ], [ [ "rec-rsc-0", "Resource Recover - no start" ], [ "rec-rsc-1", "Resource Recover - start" ], [ "rec-rsc-2", "Resource Recover - monitor" ], [ "rec-rsc-3", "Resource Recover - stop - ignore" ], [ "rec-rsc-4", "Resource Recover - stop - block" ], [ "rec-rsc-5", "Resource Recover - stop - fence" ], [ "rec-rsc-6", "Resource Recover - multiple - restart" ], [ "rec-rsc-7", "Resource Recover - multiple - stop" ], [ "rec-rsc-8", "Resource Recover - multiple - block" ], [ "rec-rsc-9", "Resource Recover - group/group" ], [ "monitor-recovery", "on-fail=block + resource recovery detected by recurring monitor" ], [ "stop-failure-no-quorum", "Stop failure without quorum" ], [ "stop-failure-no-fencing", "Stop failure without fencing available" ], [ "stop-failure-with-fencing", "Stop failure with fencing available" ], [ "multiple-active-block-group", "Support of multiple-active=block for resource groups" ], [ "multiple-monitor-one-failed", "Consider resource failed if any of the configured monitor operations failed" ], ], [ [ "quorum-1", "No quorum - ignore" ], [ "quorum-2", "No quorum - freeze" ], [ "quorum-3", "No quorum - stop" ], [ "quorum-4", "No quorum - start anyway" ], [ "quorum-5", "No quorum - start anyway (group)" ], [ "quorum-6", "No quorum - start anyway (clone)" ], [ "bug-cl-5212", "No promotion with no-quorum-policy=freeze" ], [ "suicide-needed-inquorate", "no-quorum-policy=suicide: suicide necessary" ], [ "suicide-not-needed-initial-quorum", "no-quorum-policy=suicide: suicide not necessary at initial quorum" ], [ "suicide-not-needed-never-quorate", "no-quorum-policy=suicide: suicide not necessary if never quorate" ], [ "suicide-not-needed-quorate", "no-quorum-policy=suicide: suicide necessary if quorate" ], ], [ [ "rec-node-1", "Node Recover - Startup - no fence" ], [ "rec-node-2", "Node Recover - Startup - fence" ], [ "rec-node-3", "Node Recover - HA down - no fence" ], [ "rec-node-4", "Node Recover - HA down - fence" ], [ "rec-node-5", "Node Recover - CRM down - no fence" ], [ "rec-node-6", "Node Recover - CRM down - fence" ], [ "rec-node-7", "Node Recover - no quorum - ignore" ], [ "rec-node-8", "Node Recover - no quorum - freeze" ], [ "rec-node-9", "Node Recover - no quorum - stop" ], [ "rec-node-10", "Node Recover - no quorum - stop w/fence" ], [ "rec-node-11", "Node Recover - CRM down w/ group - fence" ], [ "rec-node-12", "Node Recover - nothing active - fence" ], [ "rec-node-13", "Node Recover - failed resource + shutdown - fence" ], [ "rec-node-15", "Node Recover - unknown lrm section" ], [ "rec-node-14", "Serialize all stonith's" ], ], [ [ "multi1", "Multiple Active (stop/start)" ], ], [ [ "migrate-begin", "Normal migration" ], [ "migrate-success", "Completed migration" ], [ "migrate-partial-1", "Completed migration, missing stop on source" ], [ "migrate-partial-2", "Successful migrate_to only" ], [ "migrate-partial-3", "Successful migrate_to only, target down" ], [ "migrate-partial-4", "Migrate from the correct host after migrate_to+migrate_from" ], [ "bug-5186-partial-migrate", "Handle partial migration when src node loses membership" ], [ "migrate-fail-2", "Failed migrate_from" ], [ "migrate-fail-3", "Failed migrate_from + stop on source" ], [ "migrate-fail-4", "Failed migrate_from + stop on target - ideally we wouldn't need to re-stop on target" ], [ "migrate-fail-5", "Failed migrate_from + stop on source and target" ], [ "migrate-fail-6", "Failed migrate_to" ], [ "migrate-fail-7", "Failed migrate_to + stop on source" ], [ "migrate-fail-8", "Failed migrate_to + stop on target - ideally we wouldn't need to re-stop on target" ], [ "migrate-fail-9", "Failed migrate_to + stop on source and target" ], [ "migration-ping-pong", "Old migrate_to failure + successful migrate_from on same node" ], [ "migrate-stop", "Migration in a stopping stack" ], [ "migrate-start", "Migration in a starting stack" ], [ "migrate-stop_start", "Migration in a restarting stack" ], [ "migrate-stop-complex", "Migration in a complex stopping stack" ], [ "migrate-start-complex", "Migration in a complex starting stack" ], [ "migrate-stop-start-complex", "Migration in a complex moving stack" ], [ "migrate-shutdown", "Order the post-migration 'stop' before node shutdown" ], [ "migrate-1", "Migrate (migrate)" ], [ "migrate-2", "Migrate (stable)" ], [ "migrate-3", "Migrate (failed migrate_to)" ], [ "migrate-4", "Migrate (failed migrate_from)" ], [ "novell-252693", "Migration in a stopping stack" ], [ "novell-252693-2", "Migration in a starting stack" ], [ "novell-252693-3", "Non-Migration in a starting and stopping stack" ], [ "bug-1820", "Migration in a group" ], [ "bug-1820-1", "Non-migration in a group" ], [ "migrate-5", "Primitive migration with a clone" ], [ "migrate-fencing", "Migration after Fencing" ], [ "migrate-both-vms", "Migrate two VMs that have no colocation" ], [ "migration-behind-migrating-remote", "Migrate resource behind migrating remote connection" ], [ "1-a-then-bm-move-b", "Advanced migrate logic. A then B. migrate B" ], [ "2-am-then-b-move-a", "Advanced migrate logic, A then B, migrate A without stopping B" ], [ "3-am-then-bm-both-migrate", "Advanced migrate logic. A then B. migrate both" ], [ "4-am-then-bm-b-not-migratable", "Advanced migrate logic, A then B, B not migratable" ], [ "5-am-then-bm-a-not-migratable", "Advanced migrate logic. A then B. move both, a not migratable" ], [ "6-migrate-group", "Advanced migrate logic, migrate a group" ], [ "7-migrate-group-one-unmigratable", "Advanced migrate logic, migrate group mixed with allow-migrate true/false" ], [ "8-am-then-bm-a-migrating-b-stopping", "Advanced migrate logic, A then B, A migrating, B stopping" ], [ "9-am-then-bm-b-migrating-a-stopping", "Advanced migrate logic, A then B, B migrate, A stopping" ], [ "10-a-then-bm-b-move-a-clone", "Advanced migrate logic, A clone then B, migrate B while stopping A" ], [ "11-a-then-bm-b-move-a-clone-starting", "Advanced migrate logic, A clone then B, B moving while A is start/stopping" ], [ "a-promote-then-b-migrate", "A promote then B start. migrate B" ], [ "a-demote-then-b-migrate", "A demote then B stop. migrate B" ], # @TODO: If pacemaker implements versioned attributes, uncomment this test #[ "migrate-versioned", "Disable migration for versioned resources" ], [ "bug-lf-2422", "Dependency on partially active group - stop ocfs:*" ], ], [ [ "clone-anon-probe-1", "Probe the correct (anonymous) clone instance for each node" ], [ "clone-anon-probe-2", "Avoid needless re-probing of anonymous clones" ], [ "clone-anon-failcount", "Merge failcounts for anonymous clones" ], [ "force-anon-clone-max", "Update clone-max properly when forcing a clone to be anonymous" ], [ "anon-instance-pending", "Assign anonymous clone instance numbers properly when action pending" ], [ "inc0", "Incarnation start" ], [ "inc1", "Incarnation start order" ], [ "inc2", "Incarnation silent restart, stop, move" ], [ "inc3", "Inter-incarnation ordering, silent restart, stop, move" ], [ "inc4", "Inter-incarnation ordering, silent restart, stop, move (ordered)" ], [ "inc5", "Inter-incarnation ordering, silent restart, stop, move (restart 1)" ], [ "inc6", "Inter-incarnation ordering, silent restart, stop, move (restart 2)" ], [ "inc7", "Clone colocation" ], [ "inc8", "Clone anti-colocation" ], [ "inc9", "Non-unique clone" ], [ "inc10", "Non-unique clone (stop)" ], [ "inc11", "Primitive colocation with clones" ], [ "inc12", "Clone shutdown" ], [ "cloned-group", "Make sure only the correct number of cloned groups are started" ], [ "cloned-group-stop", "Ensure stopping qpidd also stops glance and cinder" ], [ "clone-no-shuffle", "Don't prioritize allocation of instances that must be moved" ], [ "clone-max-zero", "Orphan processing with clone-max=0" ], [ "clone-anon-dup", "Bug LF#2087 - Correctly parse the state of anonymous clones that are active more than once per node" ], [ "bug-lf-2160", "Don't shuffle clones due to colocation" ], [ "bug-lf-2213", "clone-node-max enforcement for cloned groups" ], [ "bug-lf-2153", "Clone ordering constraints" ], [ "bug-lf-2361", "Ensure clones observe mandatory ordering constraints if the LHS is unrunnable" ], [ "bug-lf-2317", "Avoid needless restart of primitive depending on a clone" ], [ "clone-colocate-instance-1", "Colocation with a specific clone instance (negative example)" ], [ "clone-colocate-instance-2", "Colocation with a specific clone instance" ], [ "clone-order-instance", "Ordering with specific clone instances" ], [ "bug-lf-2453", "Enforce mandatory clone ordering without colocation" ], [ "bug-lf-2508", "Correctly reconstruct the status of anonymous cloned groups" ], [ "bug-lf-2544", "Balanced clone placement" ], [ "bug-lf-2445", "Redistribute clones with node-max > 1 and stickiness = 0" ], [ "bug-lf-2574", "Avoid clone shuffle" ], [ "bug-lf-2581", "Avoid group restart due to unrelated clone (re)start" ], [ "bug-cl-5168", "Don't shuffle clones" ], [ "bug-cl-5170", "Prevent clone from starting with on-fail=block" ], [ "clone-fail-block-colocation", "Move colocated group when failed clone has on-fail=block" ], [ "clone-interleave-1", "Clone-3 cannot start on pcmk-1 due to interleaved ordering (no colocation)" ], [ "clone-interleave-2", "Clone-3 must stop on pcmk-1 due to interleaved ordering (no colocation)" ], [ "clone-interleave-3", "Clone-3 must be recovered on pcmk-1 due to interleaved ordering (no colocation)" ], [ "rebalance-unique-clones", "Rebalance unique clone instances with no stickiness" ], [ "clone-requires-quorum-recovery", "Clone with requires=quorum on failed node needing recovery" ], [ "clone-requires-quorum", "Clone with requires=quorum with presumed-inactive instance on failed node" ], ], [ [ "cloned_start_one", "order first clone then clone... first clone_min=2" ], [ "cloned_start_two", "order first clone then clone... first clone_min=2" ], [ "cloned_stop_one", "order first clone then clone... first clone_min=2" ], [ "cloned_stop_two", "order first clone then clone... first clone_min=2" ], [ "clone_min_interleave_start_one", "order first clone then clone... first clone_min=2 and then has interleave=true" ], [ "clone_min_interleave_start_two", "order first clone then clone... first clone_min=2 and then has interleave=true" ], [ "clone_min_interleave_stop_one", "order first clone then clone... first clone_min=2 and then has interleave=true" ], [ "clone_min_interleave_stop_two", "order first clone then clone... first clone_min=2 and then has interleave=true" ], [ "clone_min_start_one", "order first clone then primitive... first clone_min=2" ], [ "clone_min_start_two", "order first clone then primitive... first clone_min=2" ], [ "clone_min_stop_all", "order first clone then primitive... first clone_min=2" ], [ "clone_min_stop_one", "order first clone then primitive... first clone_min=2" ], [ "clone_min_stop_two", "order first clone then primitive... first clone_min=2" ], ], [ [ "unfence-startup", "Clean unfencing" ], [ "unfence-definition", "Unfencing when the agent changes" ], [ "unfence-parameters", "Unfencing when the agent parameters changes" ], [ "unfence-device", "Unfencing when a cluster has only fence devices" ], ], [ [ "master-0", "Stopped -> Slave" ], [ "master-1", "Stopped -> Promote" ], [ "master-2", "Stopped -> Promote : notify" ], [ "master-3", "Stopped -> Promote : master location" ], [ "master-4", "Started -> Promote : master location" ], [ "master-5", "Promoted -> Promoted" ], [ "master-6", "Promoted -> Promoted (2)" ], [ "master-7", "Promoted -> Fenced" ], [ "master-8", "Promoted -> Fenced -> Moved" ], [ "master-9", "Stopped + Promotable + No quorum" ], [ "master-10", "Stopped -> Promotable : notify with monitor" ], [ "master-11", "Stopped -> Promote : colocation" ], [ "novell-239082", "Demote/Promote ordering" ], [ "novell-239087", "Stable master placement" ], [ "master-12", "Promotion based solely on rsc_location constraints" ], [ "master-13", "Include preferences of colocated resources when placing master" ], [ "master-demote", "Ordering when actions depends on demoting a slave resource" ], [ "master-ordering", "Prevent resources from starting that need a master" ], [ "bug-1765", "Master-Master Colocation (do not stop the slaves)" ], [ "master-group", "Promotion of cloned groups" ], [ "bug-lf-1852", "Don't shuffle master/slave instances unnecessarily" ], [ "master-failed-demote", "Don't retry failed demote actions" ], [ "master-failed-demote-2", "Don't retry failed demote actions (notify=false)" ], [ "master-depend", "Ensure resources that depend on the master don't get allocated until the master does" ], [ "master-reattach", "Re-attach to a running master" ], [ "master-allow-start", "Don't include master score if it would prevent allocation" ], [ "master-colocation", "Allow master instances placemaker to be influenced by colocation constraints" ], [ "master-pseudo", "Make sure promote/demote pseudo actions are created correctly" ], [ "master-role", "Prevent target-role from promoting more than master-max instances" ], [ "bug-lf-2358", "Master-Master anti-colocation" ], [ "master-promotion-constraint", "Mandatory master colocation constraints" ], [ "unmanaged-master", "Ensure role is preserved for unmanaged resources" ], [ "master-unmanaged-monitor", "Start the correct monitor operation for unmanaged masters" ], [ "master-demote-2", "Demote does not clear past failure" ], [ "master-move", "Move master based on failure of colocated group" ], [ "master-probed-score", "Observe the promotion score of probed resources" ], [ "colocation_constraint_stops_master", "cl#5054 - Ensure master is demoted when stopped by colocation constraint" ], [ "colocation_constraint_stops_slave", "cl#5054 - Ensure slave is not demoted when stopped by colocation constraint" ], [ "order_constraint_stops_master", "cl#5054 - Ensure master is demoted when stopped by order constraint" ], [ "order_constraint_stops_slave", "cl#5054 - Ensure slave is not demoted when stopped by order constraint" ], [ "master_monitor_restart", "cl#5072 - Ensure master monitor operation will start after promotion" ], [ "bug-rh-880249", "Handle replacement of an m/s resource with a primitive" ], [ "bug-5143-ms-shuffle", "Prevent master shuffling due to promotion score" ], [ "master-demote-block", "Block promotion if demote fails with on-fail=block" ], [ "master-dependent-ban", "Don't stop instances from being active because a dependent is banned from that host" ], [ "master-stop", "Stop instances due to location constraint with role=Started" ], [ "master-partially-demoted-group", "Allow partially demoted group to finish demoting" ], [ "bug-cl-5213", "Ensure role colocation with -INFINITY is enforced" ], [ "bug-cl-5219", "Allow unrelated resources with a common colocation target to remain promoted" ], [ "master-asymmetrical-order", "Fix the behaviors of multi-state resources with asymmetrical ordering" ], [ "master-notify", "Master promotion with notifies" ], [ "master-score-startup", "Use permanent master scores without LRM history" ], [ "failed-demote-recovery", "Recover resource in slave role after demote fails" ], [ "failed-demote-recovery-master", "Recover resource in master role after demote fails" ], [ "on_fail_demote1", "Recovery with on-fail=\"demote\" on healthy cluster, remote, guest, and bundle nodes" ], [ "on_fail_demote2", "Recovery with on-fail=\"demote\" with promotion on different node" ], [ "on_fail_demote3", "Recovery with on-fail=\"demote\" with no promotion" ], [ "on_fail_demote4", "Recovery with on-fail=\"demote\" on failed cluster, remote, guest, and bundle nodes" ], [ "no_quorum_demote", "Promotable demotion and primitive stop with no-quorum-policy=\"demote\"" ], [ "no-promote-on-unrunnable-guest", "Don't select bundle instance for promotion when container can't run" ], ], [ [ "history-1", "Correctly parse stateful-1 resource state" ], ], [ [ "managed-0", "Managed (reference)" ], [ "managed-1", "Not managed - down" ], [ "managed-2", "Not managed - up" ], [ "bug-5028", "Shutdown should block if anything depends on an unmanaged resource" ], [ "bug-5028-detach", "Ensure detach still works" ], [ "bug-5028-bottom", "Ensure shutdown still blocks if the blocked resource is at the bottom of the stack" ], [ "unmanaged-stop-1", "cl#5155 - Block the stop of resources if any depending resource is unmanaged" ], [ "unmanaged-stop-2", "cl#5155 - Block the stop of resources if the first resource in a mandatory stop order is unmanaged" ], [ "unmanaged-stop-3", "cl#5155 - Block the stop of resources if any depending resource in a group is unmanaged" ], [ "unmanaged-stop-4", "cl#5155 - Block the stop of resources if any depending resource in the middle of a group is unmanaged" ], [ "unmanaged-block-restart", "Block restart of resources if any dependent resource in a group is unmanaged" ], ], [ [ "interleave-0", "Interleave (reference)" ], [ "interleave-1", "coloc - not interleaved" ], [ "interleave-2", "coloc - interleaved" ], [ "interleave-3", "coloc - interleaved (2)" ], [ "interleave-pseudo-stop", "Interleaved clone during stonith" ], [ "interleave-stop", "Interleaved clone during stop" ], [ "interleave-restart", "Interleaved clone during dependency restart" ], ], [ [ "notify-0", "Notify reference" ], [ "notify-1", "Notify simple" ], [ "notify-2", "Notify simple, confirm" ], [ "notify-3", "Notify move, confirm" ], [ "novell-239079", "Notification priority" ], #[ "notify-2", "Notify - 764" ], [ "notifs-for-unrunnable", "Don't schedule notifications for an unrunnable action" ], [ "route-remote-notify", "Route remote notify actions through correct cluster node" ], [ "notify-behind-stopping-remote", "Don't schedule notifications behind stopped remote" ], ], [ [ "594", "OSDL #594 - Unrunnable actions scheduled in transition" ], [ "662", "OSDL #662 - Two resources start on one node when incarnation_node_max = 1" ], [ "696", "OSDL #696 - CRM starts stonith RA without monitor" ], [ "726", "OSDL #726 - Attempting to schedule rsc_posic041_monitor_5000 _after_ a stop" ], [ "735", "OSDL #735 - Correctly detect that rsc_hadev1 is stopped on hadev3" ], [ "764", "OSDL #764 - Missing monitor op for DoFencing:child_DoFencing:1" ], [ "797", "OSDL #797 - Assert triggered: task_id_i > max_call_id" ], [ "829", "OSDL #829" ], [ "994", "OSDL #994 - Stopping the last resource in a resource group causes the entire group to be restarted" ], [ "994-2", "OSDL #994 - with a dependent resource" ], [ "1360", "OSDL #1360 - Clone stickiness" ], [ "1484", "OSDL #1484 - on_fail=stop" ], [ "1494", "OSDL #1494 - Clone stability" ], [ "unrunnable-1", "Unrunnable" ], [ "unrunnable-2", "Unrunnable 2" ], [ "stonith-0", "Stonith loop - 1" ], [ "stonith-1", "Stonith loop - 2" ], [ "stonith-2", "Stonith loop - 3" ], [ "stonith-3", "Stonith startup" ], [ "stonith-4", "Stonith node state" ], [ "dc-fence-ordering", "DC needs fencing while other nodes are shutting down" ], [ "bug-1572-1", "Recovery of groups depending on master/slave" ], [ "bug-1572-2", "Recovery of groups depending on master/slave when the master is never re-promoted" ], [ "bug-1685", "Depends-on-master ordering" ], [ "bug-1822", "Don't promote partially active groups" ], [ "bug-pm-11", "New resource added to a m/s group" ], [ "bug-pm-12", "Recover only the failed portion of a cloned group" ], [ "bug-n-387749", "Don't shuffle clone instances" ], [ "bug-n-385265", "Don't ignore the failure stickiness of group children - resource_idvscommon should stay stopped" ], [ "bug-n-385265-2", "Ensure groups are migrated instead of remaining partially active on the current node" ], [ "bug-lf-1920", "Correctly handle probes that find active resources" ], [ "bnc-515172", "Location constraint with multiple expressions" ], [ "colocate-primitive-with-clone", "Optional colocation with a clone" ], [ "use-after-free-merge", "Use-after-free in native_merge_weights" ], [ "bug-lf-2551", "STONITH ordering for stop" ], [ "bug-lf-2606", "Stonith implies demote" ], [ "bug-lf-2474", "Ensure resource op timeout takes precedence over op_defaults" ], [ "bug-suse-707150", "Prevent vm-01 from starting due to colocation/ordering" ], [ "bug-5014-A-start-B-start", "Verify when A starts B starts using symmetrical=false" ], [ "bug-5014-A-stop-B-started", "Verify when A stops B does not stop if it has already started using symmetric=false" ], [ "bug-5014-A-stopped-B-stopped", "Verify when A is stopped and B has not started, B does not start before A using symmetric=false" ], [ "bug-5014-CthenAthenB-C-stopped", "Verify when C then A is symmetrical=true, A then B is symmetric=false, and C is stopped that nothing starts" ], [ "bug-5014-CLONE-A-start-B-start", "Verify when A starts B starts using clone resources with symmetric=false" ], [ "bug-5014-CLONE-A-stop-B-started", "Verify when A stops B does not stop if it has already started using clone resources with symmetric=false" ], [ "bug-5014-GROUP-A-start-B-start", "Verify when A starts B starts when using group resources with symmetric=false" ], [ "bug-5014-GROUP-A-stopped-B-started", "Verify when A stops B does not stop if it has already started using group resources with symmetric=false" ], [ "bug-5014-GROUP-A-stopped-B-stopped", "Verify when A is stopped and B has not started, B does not start before A using group resources with symmetric=false" ], [ "bug-5014-ordered-set-symmetrical-false", "Verify ordered sets work with symmetrical=false" ], [ "bug-5014-ordered-set-symmetrical-true", "Verify ordered sets work with symmetrical=true" ], [ "bug-5007-masterslave_colocation", "Verify use of colocation scores other than INFINITY and -INFINITY work on multi-state resources" ], [ "bug-5038", "Prevent restart of anonymous clones when clone-max decreases" ], [ "bug-5025-1", "Automatically clean up failcount after resource config change with reload" ], [ "bug-5025-2", "Make sure clear failcount action isn't set when config does not change" ], [ "bug-5025-3", "Automatically clean up failcount after resource config change with restart" ], [ "bug-5025-4", "Clear failcount when last failure is a start op and rsc attributes changed" ], [ "failcount", "Ensure failcounts are correctly expired" ], [ "failcount-block", "Ensure failcounts are not expired when on-fail=block is present" ], [ "per-op-failcount", "Ensure per-operation failcount is handled and not passed to fence agent" ], [ "on-fail-ignore", "Ensure on-fail=ignore works even beyond migration-threshold" ], [ "monitor-onfail-restart", "bug-5058 - Monitor failure with on-fail set to restart" ], [ "monitor-onfail-stop", "bug-5058 - Monitor failure wiht on-fail set to stop" ], [ "bug-5059", "No need to restart p_stateful1:*" ], [ "bug-5069-op-enabled", "Test on-fail=ignore with failure when monitor is enabled" ], [ "bug-5069-op-disabled", "Test on-fail-ignore with failure when monitor is disabled" ], [ "obsolete-lrm-resource", "cl#5115 - Do not use obsolete lrm_resource sections" ], [ "expire-non-blocked-failure", "Ignore failure-timeout only if the failed operation has on-fail=block" ], [ "asymmetrical-order-move", "Respect asymmetrical ordering when trying to move resources" ], [ "asymmetrical-order-restart", "Respect asymmetrical ordering when restarting dependent resource" ], [ "start-then-stop-with-unfence", "Avoid graph loop with start-then-stop constraint plus unfencing" ], [ "order-expired-failure", "Order failcount cleanup after remote fencing" ], [ "ignore_stonith_rsc_order1", "cl#5056- Ignore order constraint between stonith and non-stonith rsc" ], [ "ignore_stonith_rsc_order2", "cl#5056- Ignore order constraint with group rsc containing mixed stonith and non-stonith" ], [ "ignore_stonith_rsc_order3", "cl#5056- Ignore order constraint, stonith clone and mixed group" ], [ "ignore_stonith_rsc_order4", "cl#5056- Ignore order constraint, stonith clone and clone with nested mixed group" ], [ "honor_stonith_rsc_order1", "cl#5056- Honor order constraint, stonith clone and pure stonith group(single rsc)" ], [ "honor_stonith_rsc_order2", "cl#5056- Honor order constraint, stonith clone and pure stonith group(multiple rsc)" ], [ "honor_stonith_rsc_order3", "cl#5056- Honor order constraint, stonith clones with nested pure stonith group" ], [ "honor_stonith_rsc_order4", "cl#5056- Honor order constraint, between two native stonith rscs" ], [ "multiply-active-stonith", "Multiply active stonith" ], [ "probe-timeout", "cl#5099 - Default probe timeout" ], [ "order-first-probes", "cl#5301 - respect order constraints when relevant resources are being probed" ], [ "concurrent-fencing", "Allow performing fencing operations in parallel" ], [ "priority-fencing-delay", "Delay fencing targeting the more significant node" ], ], [ [ "systemhealth1", "System Health () #1" ], [ "systemhealth2", "System Health () #2" ], [ "systemhealth3", "System Health () #3" ], [ "systemhealthn1", "System Health (None) #1" ], [ "systemhealthn2", "System Health (None) #2" ], [ "systemhealthn3", "System Health (None) #3" ], [ "systemhealthm1", "System Health (Migrate On Red) #1" ], [ "systemhealthm2", "System Health (Migrate On Red) #2" ], [ "systemhealthm3", "System Health (Migrate On Red) #3" ], [ "systemhealtho1", "System Health (Only Green) #1" ], [ "systemhealtho2", "System Health (Only Green) #2" ], [ "systemhealtho3", "System Health (Only Green) #3" ], [ "systemhealthp1", "System Health (Progessive) #1" ], [ "systemhealthp2", "System Health (Progessive) #2" ], [ "systemhealthp3", "System Health (Progessive) #3" ], ], [ [ "utilization", "Placement Strategy - utilization" ], [ "minimal", "Placement Strategy - minimal" ], [ "balanced", "Placement Strategy - balanced" ], ], [ [ "placement-stickiness", "Optimized Placement Strategy - stickiness" ], [ "placement-priority", "Optimized Placement Strategy - priority" ], [ "placement-location", "Optimized Placement Strategy - location" ], [ "placement-capacity", "Optimized Placement Strategy - capacity" ], ], [ [ "utilization-order1", "Utilization Order - Simple" ], [ "utilization-order2", "Utilization Order - Complex" ], [ "utilization-order3", "Utilization Order - Migrate" ], [ "utilization-order4", "Utilization Order - Live Migration (bnc#695440)" ], [ "utilization-shuffle", "Don't displace prmExPostgreSQLDB2 on act2, Start prmExPostgreSQLDB1 on act3" ], [ "load-stopped-loop", "Avoid transition loop due to load_stopped (cl#5044)" ], [ "load-stopped-loop-2", "cl#5235 - Prevent graph loops that can be introduced by load_stopped -> migrate_to ordering" ], ], [ [ "colocated-utilization-primitive-1", "Colocated Utilization - Primitive" ], [ "colocated-utilization-primitive-2", "Colocated Utilization - Choose the most capable node" ], [ "colocated-utilization-group", "Colocated Utilization - Group" ], [ "colocated-utilization-clone", "Colocated Utilization - Clone" ], [ "utilization-check-allowed-nodes", "Only check the capacities of the nodes that can run the resource" ], ], [ [ "reprobe-target_rc", "Ensure correct target_rc for reprobe of inactive resources" ], [ "node-maintenance-1", "cl#5128 - Node maintenance" ], [ "node-maintenance-2", "cl#5128 - Node maintenance (coming out of maintenance mode)" ], [ "shutdown-maintenance-node", "Do not fence a maintenance node if it shuts down cleanly" ], [ "rsc-maintenance", "Per-resource maintenance" ], ], [ [ "not-installed-agent", "The resource agent is missing" ], [ "not-installed-tools", "Something the resource agent needs is missing" ], ], [ [ "stopped-monitor-00", "Stopped Monitor - initial start" ], [ "stopped-monitor-01", "Stopped Monitor - failed started" ], [ "stopped-monitor-02", "Stopped Monitor - started multi-up" ], [ "stopped-monitor-03", "Stopped Monitor - stop started" ], [ "stopped-monitor-04", "Stopped Monitor - failed stop" ], [ "stopped-monitor-05", "Stopped Monitor - start unmanaged" ], [ "stopped-monitor-06", "Stopped Monitor - unmanaged multi-up" ], [ "stopped-monitor-07", "Stopped Monitor - start unmanaged multi-up" ], [ "stopped-monitor-08", "Stopped Monitor - migrate" ], [ "stopped-monitor-09", "Stopped Monitor - unmanage started" ], [ "stopped-monitor-10", "Stopped Monitor - unmanaged started multi-up" ], [ "stopped-monitor-11", "Stopped Monitor - stop unmanaged started" ], [ "stopped-monitor-12", "Stopped Monitor - unmanaged started multi-up (target-role=Stopped)" ], [ "stopped-monitor-20", "Stopped Monitor - initial stop" ], [ "stopped-monitor-21", "Stopped Monitor - stopped single-up" ], [ "stopped-monitor-22", "Stopped Monitor - stopped multi-up" ], [ "stopped-monitor-23", "Stopped Monitor - start stopped" ], [ "stopped-monitor-24", "Stopped Monitor - unmanage stopped" ], [ "stopped-monitor-25", "Stopped Monitor - unmanaged stopped multi-up" ], [ "stopped-monitor-26", "Stopped Monitor - start unmanaged stopped" ], [ "stopped-monitor-27", "Stopped Monitor - unmanaged stopped multi-up (target-role=Started)" ], [ "stopped-monitor-30", "Stopped Monitor - new node started" ], [ "stopped-monitor-31", "Stopped Monitor - new node stopped" ], ], [ # This is a combo test to check: # - probe timeout defaults to the minimum-interval monitor's # - duplicate recurring operations are ignored # - if timeout spec is bad, the default timeout is used # - failure is blocked with on-fail=block even if ISO8601 interval is specified # - started/stopped role monitors are started/stopped on right nodes [ "intervals", "Recurring monitor interval handling" ], ], [ [ "ticket-primitive-1", "Ticket - Primitive (loss-policy=stop, initial)" ], [ "ticket-primitive-2", "Ticket - Primitive (loss-policy=stop, granted)" ], [ "ticket-primitive-3", "Ticket - Primitive (loss-policy-stop, revoked)" ], [ "ticket-primitive-4", "Ticket - Primitive (loss-policy=demote, initial)" ], [ "ticket-primitive-5", "Ticket - Primitive (loss-policy=demote, granted)" ], [ "ticket-primitive-6", "Ticket - Primitive (loss-policy=demote, revoked)" ], [ "ticket-primitive-7", "Ticket - Primitive (loss-policy=fence, initial)" ], [ "ticket-primitive-8", "Ticket - Primitive (loss-policy=fence, granted)" ], [ "ticket-primitive-9", "Ticket - Primitive (loss-policy=fence, revoked)" ], [ "ticket-primitive-10", "Ticket - Primitive (loss-policy=freeze, initial)" ], [ "ticket-primitive-11", "Ticket - Primitive (loss-policy=freeze, granted)" ], [ "ticket-primitive-12", "Ticket - Primitive (loss-policy=freeze, revoked)" ], [ "ticket-primitive-13", "Ticket - Primitive (loss-policy=stop, standby, granted)" ], [ "ticket-primitive-14", "Ticket - Primitive (loss-policy=stop, granted, standby)" ], [ "ticket-primitive-15", "Ticket - Primitive (loss-policy=stop, standby, revoked)" ], [ "ticket-primitive-16", "Ticket - Primitive (loss-policy=demote, standby, granted)" ], [ "ticket-primitive-17", "Ticket - Primitive (loss-policy=demote, granted, standby)" ], [ "ticket-primitive-18", "Ticket - Primitive (loss-policy=demote, standby, revoked)" ], [ "ticket-primitive-19", "Ticket - Primitive (loss-policy=fence, standby, granted)" ], [ "ticket-primitive-20", "Ticket - Primitive (loss-policy=fence, granted, standby)" ], [ "ticket-primitive-21", "Ticket - Primitive (loss-policy=fence, standby, revoked)" ], [ "ticket-primitive-22", "Ticket - Primitive (loss-policy=freeze, standby, granted)" ], [ "ticket-primitive-23", "Ticket - Primitive (loss-policy=freeze, granted, standby)" ], [ "ticket-primitive-24", "Ticket - Primitive (loss-policy=freeze, standby, revoked)" ], ], [ [ "ticket-group-1", "Ticket - Group (loss-policy=stop, initial)" ], [ "ticket-group-2", "Ticket - Group (loss-policy=stop, granted)" ], [ "ticket-group-3", "Ticket - Group (loss-policy-stop, revoked)" ], [ "ticket-group-4", "Ticket - Group (loss-policy=demote, initial)" ], [ "ticket-group-5", "Ticket - Group (loss-policy=demote, granted)" ], [ "ticket-group-6", "Ticket - Group (loss-policy=demote, revoked)" ], [ "ticket-group-7", "Ticket - Group (loss-policy=fence, initial)" ], [ "ticket-group-8", "Ticket - Group (loss-policy=fence, granted)" ], [ "ticket-group-9", "Ticket - Group (loss-policy=fence, revoked)" ], [ "ticket-group-10", "Ticket - Group (loss-policy=freeze, initial)" ], [ "ticket-group-11", "Ticket - Group (loss-policy=freeze, granted)" ], [ "ticket-group-12", "Ticket - Group (loss-policy=freeze, revoked)" ], [ "ticket-group-13", "Ticket - Group (loss-policy=stop, standby, granted)" ], [ "ticket-group-14", "Ticket - Group (loss-policy=stop, granted, standby)" ], [ "ticket-group-15", "Ticket - Group (loss-policy=stop, standby, revoked)" ], [ "ticket-group-16", "Ticket - Group (loss-policy=demote, standby, granted)" ], [ "ticket-group-17", "Ticket - Group (loss-policy=demote, granted, standby)" ], [ "ticket-group-18", "Ticket - Group (loss-policy=demote, standby, revoked)" ], [ "ticket-group-19", "Ticket - Group (loss-policy=fence, standby, granted)" ], [ "ticket-group-20", "Ticket - Group (loss-policy=fence, granted, standby)" ], [ "ticket-group-21", "Ticket - Group (loss-policy=fence, standby, revoked)" ], [ "ticket-group-22", "Ticket - Group (loss-policy=freeze, standby, granted)" ], [ "ticket-group-23", "Ticket - Group (loss-policy=freeze, granted, standby)" ], [ "ticket-group-24", "Ticket - Group (loss-policy=freeze, standby, revoked)" ], ], [ [ "ticket-clone-1", "Ticket - Clone (loss-policy=stop, initial)" ], [ "ticket-clone-2", "Ticket - Clone (loss-policy=stop, granted)" ], [ "ticket-clone-3", "Ticket - Clone (loss-policy-stop, revoked)" ], [ "ticket-clone-4", "Ticket - Clone (loss-policy=demote, initial)" ], [ "ticket-clone-5", "Ticket - Clone (loss-policy=demote, granted)" ], [ "ticket-clone-6", "Ticket - Clone (loss-policy=demote, revoked)" ], [ "ticket-clone-7", "Ticket - Clone (loss-policy=fence, initial)" ], [ "ticket-clone-8", "Ticket - Clone (loss-policy=fence, granted)" ], [ "ticket-clone-9", "Ticket - Clone (loss-policy=fence, revoked)" ], [ "ticket-clone-10", "Ticket - Clone (loss-policy=freeze, initial)" ], [ "ticket-clone-11", "Ticket - Clone (loss-policy=freeze, granted)" ], [ "ticket-clone-12", "Ticket - Clone (loss-policy=freeze, revoked)" ], [ "ticket-clone-13", "Ticket - Clone (loss-policy=stop, standby, granted)" ], [ "ticket-clone-14", "Ticket - Clone (loss-policy=stop, granted, standby)" ], [ "ticket-clone-15", "Ticket - Clone (loss-policy=stop, standby, revoked)" ], [ "ticket-clone-16", "Ticket - Clone (loss-policy=demote, standby, granted)" ], [ "ticket-clone-17", "Ticket - Clone (loss-policy=demote, granted, standby)" ], [ "ticket-clone-18", "Ticket - Clone (loss-policy=demote, standby, revoked)" ], [ "ticket-clone-19", "Ticket - Clone (loss-policy=fence, standby, granted)" ], [ "ticket-clone-20", "Ticket - Clone (loss-policy=fence, granted, standby)" ], [ "ticket-clone-21", "Ticket - Clone (loss-policy=fence, standby, revoked)" ], [ "ticket-clone-22", "Ticket - Clone (loss-policy=freeze, standby, granted)" ], [ "ticket-clone-23", "Ticket - Clone (loss-policy=freeze, granted, standby)" ], [ "ticket-clone-24", "Ticket - Clone (loss-policy=freeze, standby, revoked)" ], ], [ [ "ticket-master-1", "Ticket - Master (loss-policy=stop, initial)" ], [ "ticket-master-2", "Ticket - Master (loss-policy=stop, granted)" ], [ "ticket-master-3", "Ticket - Master (loss-policy-stop, revoked)" ], [ "ticket-master-4", "Ticket - Master (loss-policy=demote, initial)" ], [ "ticket-master-5", "Ticket - Master (loss-policy=demote, granted)" ], [ "ticket-master-6", "Ticket - Master (loss-policy=demote, revoked)" ], [ "ticket-master-7", "Ticket - Master (loss-policy=fence, initial)" ], [ "ticket-master-8", "Ticket - Master (loss-policy=fence, granted)" ], [ "ticket-master-9", "Ticket - Master (loss-policy=fence, revoked)" ], [ "ticket-master-10", "Ticket - Master (loss-policy=freeze, initial)" ], [ "ticket-master-11", "Ticket - Master (loss-policy=freeze, granted)" ], [ "ticket-master-12", "Ticket - Master (loss-policy=freeze, revoked)" ], [ "ticket-master-13", "Ticket - Master (loss-policy=stop, standby, granted)" ], [ "ticket-master-14", "Ticket - Master (loss-policy=stop, granted, standby)" ], [ "ticket-master-15", "Ticket - Master (loss-policy=stop, standby, revoked)" ], [ "ticket-master-16", "Ticket - Master (loss-policy=demote, standby, granted)" ], [ "ticket-master-17", "Ticket - Master (loss-policy=demote, granted, standby)" ], [ "ticket-master-18", "Ticket - Master (loss-policy=demote, standby, revoked)" ], [ "ticket-master-19", "Ticket - Master (loss-policy=fence, standby, granted)" ], [ "ticket-master-20", "Ticket - Master (loss-policy=fence, granted, standby)" ], [ "ticket-master-21", "Ticket - Master (loss-policy=fence, standby, revoked)" ], [ "ticket-master-22", "Ticket - Master (loss-policy=freeze, standby, granted)" ], [ "ticket-master-23", "Ticket - Master (loss-policy=freeze, granted, standby)" ], [ "ticket-master-24", "Ticket - Master (loss-policy=freeze, standby, revoked)" ], ], [ [ "ticket-rsc-sets-1", "Ticket - Resource sets (1 ticket, initial)" ], [ "ticket-rsc-sets-2", "Ticket - Resource sets (1 ticket, granted)" ], [ "ticket-rsc-sets-3", "Ticket - Resource sets (1 ticket, revoked)" ], [ "ticket-rsc-sets-4", "Ticket - Resource sets (2 tickets, initial)" ], [ "ticket-rsc-sets-5", "Ticket - Resource sets (2 tickets, granted)" ], [ "ticket-rsc-sets-6", "Ticket - Resource sets (2 tickets, granted)" ], [ "ticket-rsc-sets-7", "Ticket - Resource sets (2 tickets, revoked)" ], [ "ticket-rsc-sets-8", "Ticket - Resource sets (1 ticket, standby, granted)" ], [ "ticket-rsc-sets-9", "Ticket - Resource sets (1 ticket, granted, standby)" ], [ "ticket-rsc-sets-10", "Ticket - Resource sets (1 ticket, standby, revoked)" ], [ "ticket-rsc-sets-11", "Ticket - Resource sets (2 tickets, standby, granted)" ], [ "ticket-rsc-sets-12", "Ticket - Resource sets (2 tickets, standby, granted)" ], [ "ticket-rsc-sets-13", "Ticket - Resource sets (2 tickets, granted, standby)" ], [ "ticket-rsc-sets-14", "Ticket - Resource sets (2 tickets, standby, revoked)" ], [ "cluster-specific-params", "Cluster-specific instance attributes based on rules" ], [ "site-specific-params", "Site-specific instance attributes based on rules" ], ], [ [ "template-1", "Template - 1" ], [ "template-2", "Template - 2" ], [ "template-3", "Template - 3 (merge operations)" ], [ "template-coloc-1", "Template - Colocation 1" ], [ "template-coloc-2", "Template - Colocation 2" ], [ "template-coloc-3", "Template - Colocation 3" ], [ "template-order-1", "Template - Order 1" ], [ "template-order-2", "Template - Order 2" ], [ "template-order-3", "Template - Order 3" ], [ "template-ticket", "Template - Ticket" ], [ "template-rsc-sets-1", "Template - Resource Sets 1" ], [ "template-rsc-sets-2", "Template - Resource Sets 2" ], [ "template-rsc-sets-3", "Template - Resource Sets 3" ], [ "template-rsc-sets-4", "Template - Resource Sets 4" ], [ "template-clone-primitive", "Cloned primitive from template" ], [ "template-clone-group", "Cloned group from template" ], [ "location-sets-templates", "Resource sets and templates - Location" ], [ "tags-coloc-order-1", "Tags - Colocation and Order (Simple)" ], [ "tags-coloc-order-2", "Tags - Colocation and Order (Resource Sets with Templates)" ], [ "tags-location", "Tags - Location" ], [ "tags-ticket", "Tags - Ticket" ], ], [ [ "container-1", "Container - initial" ], [ "container-2", "Container - monitor failed" ], [ "container-3", "Container - stop failed" ], [ "container-4", "Container - reached migration-threshold" ], [ "container-group-1", "Container in group - initial" ], [ "container-group-2", "Container in group - monitor failed" ], [ "container-group-3", "Container in group - stop failed" ], [ "container-group-4", "Container in group - reached migration-threshold" ], [ "container-is-remote-node", "Place resource within container when container is remote-node" ], [ "bug-rh-1097457", "Kill user defined container/contents ordering" ], [ "bug-cl-5247", "Graph loop when recovering m/s resource in a container" ], [ "bundle-order-startup", "Bundle startup ordering" ], [ "bundle-order-partial-start", "Bundle startup ordering when some dependencies are already running" ], [ "bundle-order-partial-start-2", "Bundle startup ordering when some dependencies and the container are already running" ], [ "bundle-order-stop", "Bundle stop ordering" ], [ "bundle-order-partial-stop", "Bundle startup ordering when some dependencies are already stopped" ], [ "bundle-order-stop-on-remote", "Stop nested resource after bringing up the connection" ], [ "bundle-order-startup-clone", "Prevent startup because bundle isn't promoted" ], [ "bundle-order-startup-clone-2", "Bundle startup with clones" ], [ "bundle-order-stop-clone", "Stop bundle because clone is stopping" ], [ "bundle-nested-colocation", "Colocation of nested connection resources" ], [ "bundle-order-fencing", "Order pseudo bundle fencing after parent node fencing if both are happening" ], [ "bundle-probe-order-1", "order 1" ], [ "bundle-probe-order-2", "order 2" ], [ "bundle-probe-order-3", "order 3" ], [ "bundle-probe-remotes", "Ensure remotes get probed too" ], [ "bundle-replicas-change", "Change bundle from 1 replica to multiple" ], [ "nested-remote-recovery", "Recover bundle's container hosted on remote node" ], ], [ [ "whitebox-fail1", "Fail whitebox container rsc" ], [ "whitebox-fail2", "Fail cluster connection to guest node" ], [ "whitebox-fail3", "Failed containers should not run nested on remote nodes" ], [ "whitebox-start", "Start whitebox container with resources assigned to it" ], [ "whitebox-stop", "Stop whitebox container with resources assigned to it" ], [ "whitebox-move", "Move whitebox container with resources assigned to it" ], [ "whitebox-asymmetric", "Verify connection rsc opts-in based on container resource" ], [ "whitebox-ms-ordering", "Verify promote/demote can not occur before connection is established" ], [ "whitebox-ms-ordering-move", "Stop/Start cycle within a moving container" ], [ "whitebox-orphaned", "Properly shutdown orphaned whitebox container" ], [ "whitebox-orphan-ms", "Properly tear down orphan ms resources on remote-nodes" ], [ "whitebox-unexpectedly-running", "Recover container nodes the cluster did not start" ], [ "whitebox-migrate1", "Migrate both container and connection resource" ], [ "whitebox-imply-stop-on-fence", "imply stop action on container node rsc when host node is fenced" ], [ "whitebox-nested-group", "Verify guest remote-node works nested in a group" ], [ "guest-node-host-dies", "Verify guest node is recovered if host goes away" ], [ "guest-node-cleanup", "Order guest node connection recovery after container probe" ], [ "guest-host-not-fenceable", "Actions on guest node are unrunnable if host is unclean and cannot be fenced" ], ], [ [ "remote-startup-probes", "Baremetal remote-node startup probes" ], [ "remote-startup", "Startup a newly discovered remote-nodes with no status" ], [ "remote-fence-unclean", "Fence unclean baremetal remote-node" ], [ "remote-fence-unclean2", "Fence baremetal remote-node after cluster node fails and connection can not be recovered" ], [ "remote-fence-unclean-3", "Probe failed remote nodes (triggers fencing)" ], [ "remote-move", "Move remote-node connection resource" ], [ "remote-disable", "Disable a baremetal remote-node" ], [ "remote-probe-disable", "Probe then stop a baremetal remote-node" ], [ "remote-orphaned", "Properly shutdown orphaned connection resource" ], [ "remote-orphaned2", "verify we can handle orphaned remote connections with active resources on the remote" ], [ "remote-recover", "Recover connection resource after cluster-node fails" ], [ "remote-stale-node-entry", "Make sure we properly handle leftover remote-node entries in the node section" ], [ "remote-partial-migrate", "Make sure partial migrations are handled before ops on the remote node" ], [ "remote-partial-migrate2", "Make sure partial migration target is prefered for remote connection" ], [ "remote-recover-fail", "Make sure start failure causes fencing if rsc are active on remote" ], [ "remote-start-fail", "Make sure a start failure does not result in fencing if no active resources are on remote" ], [ "remote-unclean2", "Make monitor failure always results in fencing, even if no rsc are active on remote" ], [ "remote-fence-before-reconnect", "Fence before clearing recurring monitor failure" ], [ "remote-recovery", "Recover remote connections before attempting demotion" ], [ "remote-recover-connection", "Optimistically recovery of only the connection" ], [ "remote-recover-all", "Fencing when the connection has no home" ], [ "remote-recover-no-resources", "Fencing when the connection has no home and no active resources" ], [ "remote-recover-unknown", "Fencing when the connection has no home and the remote has no operation history" ], [ "remote-reconnect-delay", "Waiting for remote reconnect interval to expire" ], [ "remote-connection-unrecoverable", "Remote connection host must be fenced, with connection unrecoverable" ], [ "cancel-behind-moving-remote", "Route recurring monitor cancellations through original node of a moving remote connection" ], ], [ [ "resource-discovery", "Exercises resource-discovery location constraint option" ], [ "rsc-discovery-per-node", "Disable resource discovery per node" ], [ "shutdown-lock", "Ensure shutdown lock works properly" ], [ "shutdown-lock-expiration", "Ensure shutdown lock expiration works properly" ], ], [ [ "op-defaults", "Test op_defaults conditional expressions" ], [ "op-defaults-2", "Test op_defaults AND'ed conditional expressions" ], [ "op-defaults-3", "Test op_defaults precedence" ], [ "rsc-defaults", "Test rsc_defaults conditional expressions" ], [ "rsc-defaults-2", "Test rsc_defaults conditional expressions without type" ], ], [ [ "stop-all-resources", "Test stop-all-resources=true "], ], [ [ "ocf_degraded-remap-ocf_ok", "Test DEGRADED remapped to OK" ], [ "ocf_degraded_master-remap-ocf_ok", "Test DEGRADED_MASTER remapped to OK"], ], # @TODO: If pacemaker implements versioned attributes, uncomment these tests #[ # [ "versioned-resources", "Start resources with #ra-version rules" ], # [ "restart-versioned", "Restart resources on #ra-version change" ], # [ "reload-versioned", "Reload resources on #ra-version change" ], #], #[ # [ "versioned-operations-1", "Use #ra-version to configure operations of native resources" ], # [ "versioned-operations-2", "Use #ra-version to configure operations of stonith resources" ], # [ "versioned-operations-3", "Use #ra-version to configure operations of master/slave resources" ], # [ "versioned-operations-4", "Use #ra-version to configure operations of groups of the resources" ], #], ] TESTS_64BIT = [ [ [ "year-2038", "Check handling of timestamps beyond 2038-01-19 03:14:08 UTC" ], ], ] # Constants substituted in the build process class BuildVars(object): SBINDIR = "@sbindir@" BUILDDIR = "@abs_top_builddir@" CRM_SCHEMA_DIRECTORY = "@CRM_SCHEMA_DIRECTORY@" # These values must be kept in sync with include/crm/crm.h class CrmExit(object): OK = 0 ERROR = 1 NOT_INSTALLED = 5 NOINPUT = 66 def is_executable(path): """ Check whether a file at a given path is executable. """ try: return os.stat(path)[stat.ST_MODE] & stat.S_IXUSR except OSError: return False def diff(file1, file2, **kwargs): """ Call diff on two files """ return subprocess.call([ "diff", "-u", "-N", "--ignore-all-space", "--ignore-blank-lines", file1, file2 ], **kwargs) def sort_file(filename): """ Sort a file alphabetically """ with io.open(filename, "rt") as f: lines = sorted(f) with io.open(filename, "wt") as f: f.writelines(lines) def remove_files(filenames): """ Remove a list of files """ for filename in filenames: try: os.remove(filename) except OSError: pass def normalize(filename): """ Remove text from a file that isn't important for comparison """ if not hasattr(normalize, "patterns"): normalize.patterns = [ re.compile(r'crm_feature_set="[^"]*"'), re.compile(r'batch-limit="[0-9]*"') ] if os.path.isfile(filename): with io.open(filename, "rt") as f: lines = f.readlines() with io.open(filename, "wt") as f: for line in lines: for pattern in normalize.patterns: line = pattern.sub("", line) f.write(line) def cat(filename, dest=sys.stdout): """ Copy a file to a destination file descriptor """ with io.open(filename, "rt") as f: shutil.copyfileobj(f, dest) class CtsScheduler(object): """ Regression tests for Pacemaker's scheduler """ def _parse_args(self, argv): """ Parse command-line arguments """ parser = argparse.ArgumentParser(description=DESC) parser.add_argument('-V', '--verbose', action='count', help='Display any differences from expected output') parser.add_argument('--run', metavar='TEST', help=('Run only single specified test (any further ' 'arguments will be passed to crm_simulate)')) parser.add_argument('--update', action='store_true', help='Update expected results with actual results') parser.add_argument('-b', '--binary', metavar='PATH', help='Specify path to crm_simulate') parser.add_argument('-i', '--io-dir', metavar='PATH', help='Specify path to regression test data directory') parser.add_argument('-o', '--out-dir', metavar='PATH', help='Specify where intermediate and output files should go') parser.add_argument('-v', '--valgrind', action='store_true', help='Run all commands under valgrind') parser.add_argument('--valgrind-dhat', action='store_true', help='Run all commands under valgrind with heap analyzer') parser.add_argument('--valgrind-skip-output', action='store_true', help='If running under valgrind, do not display output') parser.add_argument('--testcmd-options', metavar='OPTIONS', default='', help='Additional options for command under test') # argparse can't handle "everything after --run TEST", so grab that self.single_test_args = [] narg = 0 for arg in argv: narg = narg + 1 if arg == '--run': (argv, self.single_test_args) = (argv[:narg+1], argv[narg+1:]) break self.args = parser.parse_args(argv[1:]) def _error(self, s): print(" * ERROR: %s" % s) def _failed(self, s): print(" * FAILED: %s" % s) def _get_valgrind_cmd(self): """ Return command arguments needed (or not) to run valgrind """ if self.args.valgrind: os.environ['G_SLICE'] = "always-malloc" return [ "valgrind", "-q", "--gen-suppressions=all", "--time-stamp=yes", "--trace-children=no", "--show-reachable=no", "--leak-check=full", "--num-callers=20", "--suppressions=%s/valgrind-pcmk.suppressions" % (self.test_home) ] if self.args.valgrind_dhat: os.environ['G_SLICE'] = "always-malloc" return [ "valgrind", "--tool=exp-dhat", "--time-stamp=yes", "--trace-children=no", "--show-top-n=100", "--num-callers=4" ] return [] def _get_simulator_cmd(self): """ Locate the simulation binary """ if self.args.binary is None: self.args.binary = BuildVars.BUILDDIR + "/tools/crm_simulate" if not is_executable(self.args.binary): self.args.binary = BuildVars.SBINDIR + "/crm_simulate" if not is_executable(self.args.binary): # @TODO it would be more pythonic to raise an exception self._error("Test binary " + self.args.binary + " not found") sys.exit(CrmExit.NOT_INSTALLED) return [ self.args.binary ] + shlex.split(self.args.testcmd_options) def set_schema_env(self): """ Ensure schema directory environment variable is set, if possible """ try: return os.environ['PCMK_schema_directory'] except KeyError: for d in [ os.path.join(BuildVars.BUILDDIR, "xml"), BuildVars.CRM_SCHEMA_DIRECTORY ]: if os.path.isdir(d): os.environ['PCMK_schema_directory'] = d return d return None def __init__(self, argv=sys.argv): self._parse_args(argv) # Where this executable lives self.test_home = os.path.dirname(os.path.realpath(argv[0])) # Where test data resides if self.args.io_dir is None: self.args.io_dir = os.path.join(self.test_home, "scheduler") # Where to store generated files if self.args.out_dir is None: self.args.out_dir = self.args.io_dir self.failed_filename = os.path.join(self.test_home, ".regression.failed.diff") else: self.failed_filename = os.path.join(self.args.out_dir, ".regression.failed.diff") os.environ['CIB_shadow_dir'] = self.args.out_dir self.failed_file = None # Single test mode (if requested) try: # User can give test base name or file name of a test input self.args.run = os.path.splitext(os.path.basename(self.args.run))[0] except (AttributeError, TypeError): pass # --run was not specified self.set_schema_env() # Arguments needed (or not) to run commands self.valgrind_args = self._get_valgrind_cmd() self.simulate_args = self._get_simulator_cmd() # Test counters self.num_failed = 0 self.num_tests = 0 def _compare_files(self, filename1, filename2): """ Add any file differences to failed results """ if diff(filename1, filename2, stdout=subprocess.DEVNULL) != 0: diff(filename1, filename2, stdout=self.failed_file, stderr=subprocess.DEVNULL) self.failed_file.write("\n"); return True return False def run_one(self, test_name, test_desc, test_args=[]): """ Run one scheduler test """ print(" Test %-25s %s" % ((test_name + ":"), test_desc)) did_fail = False self.num_tests = self.num_tests + 1 # Test inputs - input_filename = "%s/%s.xml" % (self.args.io_dir, test_name) - expected_filename = "%s/%s.exp" % (self.args.io_dir, test_name) - dot_expected_filename = "%s/%s.dot" % (self.args.io_dir, test_name) - scores_filename = "%s/%s.scores" % (self.args.io_dir, test_name) - summary_filename = "%s/%s.summary" % (self.args.io_dir, test_name) - stderr_expected_filename = "%s/%s.stderr" % (self.args.io_dir, test_name) + input_filename = "%s/xml/%s.xml" % (self.args.io_dir, test_name) + expected_filename = "%s/exp/%s.exp" % (self.args.io_dir, test_name) + dot_expected_filename = "%s/dot/%s.dot" % (self.args.io_dir, test_name) + scores_filename = "%s/scores/%s.scores" % (self.args.io_dir, test_name) + summary_filename = "%s/summary/%s.summary" % (self.args.io_dir, test_name) + stderr_expected_filename = "%s/stderr/%s.stderr" % (self.args.io_dir, test_name) # (Intermediate) test outputs output_filename = "%s/%s.out" % (self.args.out_dir, test_name) - dot_output_filename = "%s/%s.pe.dot" % (self.args.out_dir, test_name) - score_output_filename = "%s/%s.scores.pe" % (self.args.out_dir, test_name) - summary_output_filename = "%s/%s.summary.pe" % (self.args.out_dir, test_name) - stderr_output_filename = "%s/%s.stderr.pe" % (self.args.out_dir, test_name) + dot_output_filename = "%s/dot/%s.dot.pe" % (self.args.out_dir, test_name) + score_output_filename = "%s/scores/%s.scores.pe" % (self.args.out_dir, test_name) + summary_output_filename = "%s/summary/%s.summary.pe" % (self.args.out_dir, test_name) + stderr_output_filename = "%s/stderr/%s.stderr.pe" % (self.args.out_dir, test_name) valgrind_output_filename = "%s/%s.valgrind" % (self.args.out_dir, test_name) # Common arguments for running test test_cmd = [] if self.valgrind_args: test_cmd = self.valgrind_args + [ "--log-file=%s" % valgrind_output_filename ] test_cmd = test_cmd + self.simulate_args # @TODO It would be more pythonic to raise exceptions for errors, # then perhaps it would be nice to make a single-test class # Ensure necessary test inputs exist if not os.path.isfile(input_filename): self._error("No input") self.num_failed = self.num_failed + 1 return CrmExit.NOINPUT if not self.args.update and not os.path.isfile(expected_filename): self._error("no stored output") return CrmExit.NOINPUT # Run simulation to generate summary output if self.args.run: # Single test mode test_cmd_full = test_cmd + [ '-x', input_filename, '-S' ] + test_args print(" ".join(test_cmd_full)) else: # @TODO Why isn't test_args added here? test_cmd_full = test_cmd + [ '-x', input_filename, '-S' ] with io.open(summary_output_filename, "wt") as f: simulation = subprocess.Popen(test_cmd_full, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=os.environ) # This makes diff happy regardless of PCMK__COMPAT_2_0 sed = subprocess.Popen(["sed", "-e", "s/ocf::/ocf:/g"], stdin=simulation.stdout, stdout=f, stderr=subprocess.STDOUT) simulation.stdout.close() sed.communicate() if self.args.run: cat(summary_output_filename) # Re-run simulation to generate dot, graph, and scores test_cmd_full = test_cmd + [ '-x', input_filename, '-D', dot_output_filename, '-G', output_filename, '-sSQ' ] + test_args with io.open(stderr_output_filename, "wt") as f_stderr, \ io.open(score_output_filename, "wt") as f_score: rc = subprocess.call(test_cmd_full, stdout=f_score, stderr=f_stderr, env=os.environ) # Check for test command failure if rc != CrmExit.OK: self._failed("Test returned: %d" % rc) did_fail = True print(" ".join(test_cmd_full)) # Check for valgrind errors if self.valgrind_args and not self.args.valgrind_skip_output: if os.stat(valgrind_output_filename).st_size > 0: self._failed("Valgrind reported errors") did_fail = True cat(valgrind_output_filename) remove_files([ valgrind_output_filename ]) # Check for core dump if os.path.isfile("core"): self._failed("Core-file detected: core." + test_name) did_fail = True os.rename("core", "%s/core.%s" % (self.test_home, test_name)) # Check any stderr output if os.path.isfile(stderr_expected_filename): if self._compare_files(stderr_expected_filename, stderr_output_filename): self._failed("stderr changed") did_fail = True elif os.stat(stderr_output_filename).st_size > 0: self._failed("Output was written to stderr") did_fail = True cat(stderr_output_filename) remove_files([ stderr_output_filename ]) # Check whether output graph exists, and normalize it if (not os.path.isfile(output_filename) or os.stat(output_filename).st_size == 0): self._error("No graph produced") did_fail = True self.num_failed = self.num_failed + 1 remove_files([ output_filename ]) return CrmExit.ERROR normalize(output_filename) # Check whether dot output exists, and sort it if (not os.path.isfile(dot_output_filename) or os.stat(dot_output_filename).st_size == 0): self._error("No dot-file summary produced") did_fail = True self.num_failed = self.num_failed + 1 remove_files([ dot_output_filename, output_filename ]) return CrmExit.ERROR with io.open(dot_output_filename, "rt") as f: first_line = f.readline() # "digraph" line with opening brace lines = f.readlines() last_line = lines[-1] # closing brace del lines[-1] lines = sorted(set(lines)) # unique sort with io.open(dot_output_filename, "wt") as f: f.write(first_line) f.writelines(lines) f.write(last_line) # Check whether score output exists, and sort it if (not os.path.isfile(score_output_filename) or os.stat(score_output_filename).st_size == 0): self._error("No allocation scores produced") did_fail = True self.num_failed = self.num_failed + 1 remove_files([ score_output_filename, output_filename ]) return CrmExit.ERROR else: sort_file(score_output_filename) if self.args.update: shutil.copyfile(output_filename, expected_filename) shutil.copyfile(dot_output_filename, dot_expected_filename) shutil.copyfile(score_output_filename, scores_filename) shutil.copyfile(summary_output_filename, summary_filename) print(" Updated expected outputs") if self._compare_files(summary_filename, summary_output_filename): self._failed("summary changed") did_fail = True if self._compare_files(dot_expected_filename, dot_output_filename): self._failed("dot-file summary changed") did_fail = True else: remove_files([ dot_output_filename ]) if self._compare_files(expected_filename, output_filename): self._failed("xml-file changed") did_fail = True if self._compare_files(scores_filename, score_output_filename): self._failed("scores-file changed") did_fail = True remove_files([ output_filename, score_output_filename, summary_output_filename]) if did_fail: self.num_failed = self.num_failed + 1 return CrmExit.ERROR return CrmExit.OK def run_all(self): """ Run all defined tests """ if platform.architecture()[0] == "64bit": TESTS.extend(TESTS_64BIT) for group in TESTS: for test in group: try: args = test[2] except IndexError: args = [] self.run_one(test[0], test[1], args) print() def _print_summary(self): """ Print a summary of parameters for this test run """ print("Test home is:\t" + self.test_home) print("Test binary is:\t" + self.args.binary) if 'PCMK_schema_directory' in os.environ: print("Schema home is:\t" + os.environ['PCMK_schema_directory']) if self.valgrind_args != []: print("Activating memory testing with valgrind") print() def _test_results(self): if self.num_failed == 0: return CrmExit.OK if os.path.isfile(self.failed_filename) and os.stat(self.failed_filename).st_size != 0: if self.args.verbose: self._error("Results of %d failed tests (out of %d):" % (self.num_failed, self.num_tests)) cat(self.failed_filename) else: self._error("Results of %d failed tests (out of %d) are in %s" % (self.num_failed, self.num_tests, self.failed_filename)) self._error("Use -V to display them after running the tests") else: self._error("%d (of %d) tests failed (no diff results)" % (self.num_failed, self.num_tests)) if os.path.isfile(self.failed_filename): os.remove(self.failed_filename) return CrmExit.ERROR def run(self): """ Run test(s) as specified """ self._print_summary() # Zero out the error log self.failed_file = io.open(self.failed_filename, "wt") if self.args.run is None: print("Performing the following tests from " + self.args.io_dir) print() self.run_all() print() self.failed_file.close() rc = self._test_results() else: rc = self.run_one(self.args.run, "Single shot", self.single_test_args) self.failed_file.close() cat(self.failed_filename) return rc if __name__ == "__main__": sys.exit(CtsScheduler().run()) # vim: set filetype=python expandtab tabstop=4 softtabstop=4 shiftwidth=4 textwidth=120: diff --git a/cts/scheduler/Makefile.am b/cts/scheduler/Makefile.am new file mode 100644 index 0000000000..9074390a2c --- /dev/null +++ b/cts/scheduler/Makefile.am @@ -0,0 +1,18 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +pedir = $(datadir)/$(PACKAGE)/tests/scheduler + +list: + @for T in "$(srcdir)"/xml/*.xml; do \ + echo $$(basename $$T .xml); \ + done + +SUBDIRS = dot exp scores stderr summary xml diff --git a/cts/scheduler/1-a-then-bm-move-b.dot b/cts/scheduler/dot/1-a-then-bm-move-b.dot similarity index 100% rename from cts/scheduler/1-a-then-bm-move-b.dot rename to cts/scheduler/dot/1-a-then-bm-move-b.dot diff --git a/cts/scheduler/10-a-then-bm-b-move-a-clone.dot b/cts/scheduler/dot/10-a-then-bm-b-move-a-clone.dot similarity index 100% rename from cts/scheduler/10-a-then-bm-b-move-a-clone.dot rename to cts/scheduler/dot/10-a-then-bm-b-move-a-clone.dot diff --git a/cts/scheduler/11-a-then-bm-b-move-a-clone-starting.dot b/cts/scheduler/dot/11-a-then-bm-b-move-a-clone-starting.dot similarity index 100% rename from cts/scheduler/11-a-then-bm-b-move-a-clone-starting.dot rename to cts/scheduler/dot/11-a-then-bm-b-move-a-clone-starting.dot diff --git a/cts/scheduler/1360.dot b/cts/scheduler/dot/1360.dot similarity index 100% rename from cts/scheduler/1360.dot rename to cts/scheduler/dot/1360.dot diff --git a/cts/scheduler/1484.dot b/cts/scheduler/dot/1484.dot similarity index 100% rename from cts/scheduler/1484.dot rename to cts/scheduler/dot/1484.dot diff --git a/cts/scheduler/1494.dot b/cts/scheduler/dot/1494.dot similarity index 100% rename from cts/scheduler/1494.dot rename to cts/scheduler/dot/1494.dot diff --git a/cts/scheduler/2-am-then-b-move-a.dot b/cts/scheduler/dot/2-am-then-b-move-a.dot similarity index 100% rename from cts/scheduler/2-am-then-b-move-a.dot rename to cts/scheduler/dot/2-am-then-b-move-a.dot diff --git a/cts/scheduler/3-am-then-bm-both-migrate.dot b/cts/scheduler/dot/3-am-then-bm-both-migrate.dot similarity index 100% rename from cts/scheduler/3-am-then-bm-both-migrate.dot rename to cts/scheduler/dot/3-am-then-bm-both-migrate.dot diff --git a/cts/scheduler/4-am-then-bm-b-not-migratable.dot b/cts/scheduler/dot/4-am-then-bm-b-not-migratable.dot similarity index 100% rename from cts/scheduler/4-am-then-bm-b-not-migratable.dot rename to cts/scheduler/dot/4-am-then-bm-b-not-migratable.dot diff --git a/cts/scheduler/5-am-then-bm-a-not-migratable.dot b/cts/scheduler/dot/5-am-then-bm-a-not-migratable.dot similarity index 100% rename from cts/scheduler/5-am-then-bm-a-not-migratable.dot rename to cts/scheduler/dot/5-am-then-bm-a-not-migratable.dot diff --git a/cts/scheduler/594.dot b/cts/scheduler/dot/594.dot similarity index 100% rename from cts/scheduler/594.dot rename to cts/scheduler/dot/594.dot diff --git a/cts/scheduler/6-migrate-group.dot b/cts/scheduler/dot/6-migrate-group.dot similarity index 100% rename from cts/scheduler/6-migrate-group.dot rename to cts/scheduler/dot/6-migrate-group.dot diff --git a/cts/scheduler/662.dot b/cts/scheduler/dot/662.dot similarity index 100% rename from cts/scheduler/662.dot rename to cts/scheduler/dot/662.dot diff --git a/cts/scheduler/696.dot b/cts/scheduler/dot/696.dot similarity index 100% rename from cts/scheduler/696.dot rename to cts/scheduler/dot/696.dot diff --git a/cts/scheduler/7-migrate-group-one-unmigratable.dot b/cts/scheduler/dot/7-migrate-group-one-unmigratable.dot similarity index 100% rename from cts/scheduler/7-migrate-group-one-unmigratable.dot rename to cts/scheduler/dot/7-migrate-group-one-unmigratable.dot diff --git a/cts/scheduler/726.dot b/cts/scheduler/dot/726.dot similarity index 100% rename from cts/scheduler/726.dot rename to cts/scheduler/dot/726.dot diff --git a/cts/scheduler/735.dot b/cts/scheduler/dot/735.dot similarity index 100% rename from cts/scheduler/735.dot rename to cts/scheduler/dot/735.dot diff --git a/cts/scheduler/764.dot b/cts/scheduler/dot/764.dot similarity index 100% rename from cts/scheduler/764.dot rename to cts/scheduler/dot/764.dot diff --git a/cts/scheduler/797.dot b/cts/scheduler/dot/797.dot similarity index 100% rename from cts/scheduler/797.dot rename to cts/scheduler/dot/797.dot diff --git a/cts/scheduler/8-am-then-bm-a-migrating-b-stopping.dot b/cts/scheduler/dot/8-am-then-bm-a-migrating-b-stopping.dot similarity index 100% rename from cts/scheduler/8-am-then-bm-a-migrating-b-stopping.dot rename to cts/scheduler/dot/8-am-then-bm-a-migrating-b-stopping.dot diff --git a/cts/scheduler/829.dot b/cts/scheduler/dot/829.dot similarity index 100% rename from cts/scheduler/829.dot rename to cts/scheduler/dot/829.dot diff --git a/cts/scheduler/9-am-then-bm-b-migrating-a-stopping.dot b/cts/scheduler/dot/9-am-then-bm-b-migrating-a-stopping.dot similarity index 100% rename from cts/scheduler/9-am-then-bm-b-migrating-a-stopping.dot rename to cts/scheduler/dot/9-am-then-bm-b-migrating-a-stopping.dot diff --git a/cts/scheduler/994-2.dot b/cts/scheduler/dot/994-2.dot similarity index 100% rename from cts/scheduler/994-2.dot rename to cts/scheduler/dot/994-2.dot diff --git a/cts/scheduler/994.dot b/cts/scheduler/dot/994.dot similarity index 100% rename from cts/scheduler/994.dot rename to cts/scheduler/dot/994.dot diff --git a/cts/scheduler/dot/Makefile.am b/cts/scheduler/dot/Makefile.am new file mode 100644 index 0000000000..62dd075a5b --- /dev/null +++ b/cts/scheduler/dot/Makefile.am @@ -0,0 +1,12 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +dotdir = $(datadir)/$(PACKAGE)/tests/scheduler/dot +dist_dot_DATA = $(wildcard *.dot) diff --git a/cts/scheduler/a-demote-then-b-migrate.dot b/cts/scheduler/dot/a-demote-then-b-migrate.dot similarity index 100% rename from cts/scheduler/a-demote-then-b-migrate.dot rename to cts/scheduler/dot/a-demote-then-b-migrate.dot diff --git a/cts/scheduler/a-promote-then-b-migrate.dot b/cts/scheduler/dot/a-promote-then-b-migrate.dot similarity index 100% rename from cts/scheduler/a-promote-then-b-migrate.dot rename to cts/scheduler/dot/a-promote-then-b-migrate.dot diff --git a/cts/scheduler/anon-instance-pending.dot b/cts/scheduler/dot/anon-instance-pending.dot similarity index 100% rename from cts/scheduler/anon-instance-pending.dot rename to cts/scheduler/dot/anon-instance-pending.dot diff --git a/cts/scheduler/anti-colocation-master.dot b/cts/scheduler/dot/anti-colocation-master.dot similarity index 100% rename from cts/scheduler/anti-colocation-master.dot rename to cts/scheduler/dot/anti-colocation-master.dot diff --git a/cts/scheduler/anti-colocation-order.dot b/cts/scheduler/dot/anti-colocation-order.dot similarity index 100% rename from cts/scheduler/anti-colocation-order.dot rename to cts/scheduler/dot/anti-colocation-order.dot diff --git a/cts/scheduler/anti-colocation-slave.dot b/cts/scheduler/dot/anti-colocation-slave.dot similarity index 100% rename from cts/scheduler/anti-colocation-slave.dot rename to cts/scheduler/dot/anti-colocation-slave.dot diff --git a/cts/scheduler/asymmetric.dot b/cts/scheduler/dot/asymmetric.dot similarity index 100% rename from cts/scheduler/asymmetric.dot rename to cts/scheduler/dot/asymmetric.dot diff --git a/cts/scheduler/asymmetrical-order-move.dot b/cts/scheduler/dot/asymmetrical-order-move.dot similarity index 100% rename from cts/scheduler/asymmetrical-order-move.dot rename to cts/scheduler/dot/asymmetrical-order-move.dot diff --git a/cts/scheduler/asymmetrical-order-restart.dot b/cts/scheduler/dot/asymmetrical-order-restart.dot similarity index 100% rename from cts/scheduler/asymmetrical-order-restart.dot rename to cts/scheduler/dot/asymmetrical-order-restart.dot diff --git a/cts/scheduler/attrs1.dot b/cts/scheduler/dot/attrs1.dot similarity index 100% rename from cts/scheduler/attrs1.dot rename to cts/scheduler/dot/attrs1.dot diff --git a/cts/scheduler/attrs2.dot b/cts/scheduler/dot/attrs2.dot similarity index 100% rename from cts/scheduler/attrs2.dot rename to cts/scheduler/dot/attrs2.dot diff --git a/cts/scheduler/attrs3.dot b/cts/scheduler/dot/attrs3.dot similarity index 100% rename from cts/scheduler/attrs3.dot rename to cts/scheduler/dot/attrs3.dot diff --git a/cts/scheduler/attrs4.dot b/cts/scheduler/dot/attrs4.dot similarity index 100% rename from cts/scheduler/attrs4.dot rename to cts/scheduler/dot/attrs4.dot diff --git a/cts/scheduler/attrs5.dot b/cts/scheduler/dot/attrs5.dot similarity index 100% rename from cts/scheduler/attrs5.dot rename to cts/scheduler/dot/attrs5.dot diff --git a/cts/scheduler/attrs6.dot b/cts/scheduler/dot/attrs6.dot similarity index 100% rename from cts/scheduler/attrs6.dot rename to cts/scheduler/dot/attrs6.dot diff --git a/cts/scheduler/attrs7.dot b/cts/scheduler/dot/attrs7.dot similarity index 100% rename from cts/scheduler/attrs7.dot rename to cts/scheduler/dot/attrs7.dot diff --git a/cts/scheduler/attrs8.dot b/cts/scheduler/dot/attrs8.dot similarity index 100% rename from cts/scheduler/attrs8.dot rename to cts/scheduler/dot/attrs8.dot diff --git a/cts/scheduler/balanced.dot b/cts/scheduler/dot/balanced.dot similarity index 100% rename from cts/scheduler/balanced.dot rename to cts/scheduler/dot/balanced.dot diff --git a/cts/scheduler/base-score.dot b/cts/scheduler/dot/base-score.dot similarity index 100% rename from cts/scheduler/base-score.dot rename to cts/scheduler/dot/base-score.dot diff --git a/cts/scheduler/bnc-515172.dot b/cts/scheduler/dot/bnc-515172.dot similarity index 100% rename from cts/scheduler/bnc-515172.dot rename to cts/scheduler/dot/bnc-515172.dot diff --git a/cts/scheduler/bug-1572-1.dot b/cts/scheduler/dot/bug-1572-1.dot similarity index 100% rename from cts/scheduler/bug-1572-1.dot rename to cts/scheduler/dot/bug-1572-1.dot diff --git a/cts/scheduler/bug-1572-2.dot b/cts/scheduler/dot/bug-1572-2.dot similarity index 100% rename from cts/scheduler/bug-1572-2.dot rename to cts/scheduler/dot/bug-1572-2.dot diff --git a/cts/scheduler/bug-1573.dot b/cts/scheduler/dot/bug-1573.dot similarity index 100% rename from cts/scheduler/bug-1573.dot rename to cts/scheduler/dot/bug-1573.dot diff --git a/cts/scheduler/bug-1685.dot b/cts/scheduler/dot/bug-1685.dot similarity index 100% rename from cts/scheduler/bug-1685.dot rename to cts/scheduler/dot/bug-1685.dot diff --git a/cts/scheduler/bug-1718.dot b/cts/scheduler/dot/bug-1718.dot similarity index 100% rename from cts/scheduler/bug-1718.dot rename to cts/scheduler/dot/bug-1718.dot diff --git a/cts/scheduler/bug-1765.dot b/cts/scheduler/dot/bug-1765.dot similarity index 100% rename from cts/scheduler/bug-1765.dot rename to cts/scheduler/dot/bug-1765.dot diff --git a/cts/scheduler/bug-1820-1.dot b/cts/scheduler/dot/bug-1820-1.dot similarity index 100% rename from cts/scheduler/bug-1820-1.dot rename to cts/scheduler/dot/bug-1820-1.dot diff --git a/cts/scheduler/bug-1820.dot b/cts/scheduler/dot/bug-1820.dot similarity index 100% rename from cts/scheduler/bug-1820.dot rename to cts/scheduler/dot/bug-1820.dot diff --git a/cts/scheduler/bug-1822.dot b/cts/scheduler/dot/bug-1822.dot similarity index 100% rename from cts/scheduler/bug-1822.dot rename to cts/scheduler/dot/bug-1822.dot diff --git a/cts/scheduler/bug-5007-masterslave_colocation.dot b/cts/scheduler/dot/bug-5007-masterslave_colocation.dot similarity index 100% rename from cts/scheduler/bug-5007-masterslave_colocation.dot rename to cts/scheduler/dot/bug-5007-masterslave_colocation.dot diff --git a/cts/scheduler/bug-5014-A-start-B-start.dot b/cts/scheduler/dot/bug-5014-A-start-B-start.dot similarity index 100% rename from cts/scheduler/bug-5014-A-start-B-start.dot rename to cts/scheduler/dot/bug-5014-A-start-B-start.dot diff --git a/cts/scheduler/bug-5014-A-stop-B-started.dot b/cts/scheduler/dot/bug-5014-A-stop-B-started.dot similarity index 100% rename from cts/scheduler/bug-5014-A-stop-B-started.dot rename to cts/scheduler/dot/bug-5014-A-stop-B-started.dot diff --git a/cts/scheduler/bug-5014-A-stopped-B-stopped.dot b/cts/scheduler/dot/bug-5014-A-stopped-B-stopped.dot similarity index 100% rename from cts/scheduler/bug-5014-A-stopped-B-stopped.dot rename to cts/scheduler/dot/bug-5014-A-stopped-B-stopped.dot diff --git a/cts/scheduler/bug-5014-CLONE-A-start-B-start.dot b/cts/scheduler/dot/bug-5014-CLONE-A-start-B-start.dot similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-start-B-start.dot rename to cts/scheduler/dot/bug-5014-CLONE-A-start-B-start.dot diff --git a/cts/scheduler/bug-5014-CLONE-A-stop-B-started.dot b/cts/scheduler/dot/bug-5014-CLONE-A-stop-B-started.dot similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-stop-B-started.dot rename to cts/scheduler/dot/bug-5014-CLONE-A-stop-B-started.dot diff --git a/cts/scheduler/bug-5014-CthenAthenB-C-stopped.dot b/cts/scheduler/dot/bug-5014-CthenAthenB-C-stopped.dot similarity index 100% rename from cts/scheduler/bug-5014-CthenAthenB-C-stopped.dot rename to cts/scheduler/dot/bug-5014-CthenAthenB-C-stopped.dot diff --git a/cts/scheduler/bug-5014-GROUP-A-start-B-start.dot b/cts/scheduler/dot/bug-5014-GROUP-A-start-B-start.dot similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-start-B-start.dot rename to cts/scheduler/dot/bug-5014-GROUP-A-start-B-start.dot diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-started.dot b/cts/scheduler/dot/bug-5014-GROUP-A-stopped-B-started.dot similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-started.dot rename to cts/scheduler/dot/bug-5014-GROUP-A-stopped-B-started.dot diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.dot b/cts/scheduler/dot/bug-5014-GROUP-A-stopped-B-stopped.dot similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.dot rename to cts/scheduler/dot/bug-5014-GROUP-A-stopped-B-stopped.dot diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-false.dot b/cts/scheduler/dot/bug-5014-ordered-set-symmetrical-false.dot similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-false.dot rename to cts/scheduler/dot/bug-5014-ordered-set-symmetrical-false.dot diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-true.dot b/cts/scheduler/dot/bug-5014-ordered-set-symmetrical-true.dot similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-true.dot rename to cts/scheduler/dot/bug-5014-ordered-set-symmetrical-true.dot diff --git a/cts/scheduler/bug-5025-1.dot b/cts/scheduler/dot/bug-5025-1.dot similarity index 100% rename from cts/scheduler/bug-5025-1.dot rename to cts/scheduler/dot/bug-5025-1.dot diff --git a/cts/scheduler/bug-5025-2.dot b/cts/scheduler/dot/bug-5025-2.dot similarity index 100% rename from cts/scheduler/bug-5025-2.dot rename to cts/scheduler/dot/bug-5025-2.dot diff --git a/cts/scheduler/bug-5025-3.dot b/cts/scheduler/dot/bug-5025-3.dot similarity index 100% rename from cts/scheduler/bug-5025-3.dot rename to cts/scheduler/dot/bug-5025-3.dot diff --git a/cts/scheduler/bug-5025-4.dot b/cts/scheduler/dot/bug-5025-4.dot similarity index 100% rename from cts/scheduler/bug-5025-4.dot rename to cts/scheduler/dot/bug-5025-4.dot diff --git a/cts/scheduler/bug-5028-bottom.dot b/cts/scheduler/dot/bug-5028-bottom.dot similarity index 100% rename from cts/scheduler/bug-5028-bottom.dot rename to cts/scheduler/dot/bug-5028-bottom.dot diff --git a/cts/scheduler/bug-5028-detach.dot b/cts/scheduler/dot/bug-5028-detach.dot similarity index 100% rename from cts/scheduler/bug-5028-detach.dot rename to cts/scheduler/dot/bug-5028-detach.dot diff --git a/cts/scheduler/bug-5028.dot b/cts/scheduler/dot/bug-5028.dot similarity index 100% rename from cts/scheduler/bug-5028.dot rename to cts/scheduler/dot/bug-5028.dot diff --git a/cts/scheduler/bug-5038.dot b/cts/scheduler/dot/bug-5038.dot similarity index 100% rename from cts/scheduler/bug-5038.dot rename to cts/scheduler/dot/bug-5038.dot diff --git a/cts/scheduler/bug-5059.dot b/cts/scheduler/dot/bug-5059.dot similarity index 100% rename from cts/scheduler/bug-5059.dot rename to cts/scheduler/dot/bug-5059.dot diff --git a/cts/scheduler/bug-5069-op-disabled.dot b/cts/scheduler/dot/bug-5069-op-disabled.dot similarity index 100% rename from cts/scheduler/bug-5069-op-disabled.dot rename to cts/scheduler/dot/bug-5069-op-disabled.dot diff --git a/cts/scheduler/bug-5069-op-enabled.dot b/cts/scheduler/dot/bug-5069-op-enabled.dot similarity index 100% rename from cts/scheduler/bug-5069-op-enabled.dot rename to cts/scheduler/dot/bug-5069-op-enabled.dot diff --git a/cts/scheduler/bug-5140-require-all-false.dot b/cts/scheduler/dot/bug-5140-require-all-false.dot similarity index 100% rename from cts/scheduler/bug-5140-require-all-false.dot rename to cts/scheduler/dot/bug-5140-require-all-false.dot diff --git a/cts/scheduler/bug-5143-ms-shuffle.dot b/cts/scheduler/dot/bug-5143-ms-shuffle.dot similarity index 100% rename from cts/scheduler/bug-5143-ms-shuffle.dot rename to cts/scheduler/dot/bug-5143-ms-shuffle.dot diff --git a/cts/scheduler/bug-5186-partial-migrate.dot b/cts/scheduler/dot/bug-5186-partial-migrate.dot similarity index 100% rename from cts/scheduler/bug-5186-partial-migrate.dot rename to cts/scheduler/dot/bug-5186-partial-migrate.dot diff --git a/cts/scheduler/bug-cl-5168.dot b/cts/scheduler/dot/bug-cl-5168.dot similarity index 100% rename from cts/scheduler/bug-cl-5168.dot rename to cts/scheduler/dot/bug-cl-5168.dot diff --git a/cts/scheduler/bug-cl-5170.dot b/cts/scheduler/dot/bug-cl-5170.dot similarity index 100% rename from cts/scheduler/bug-cl-5170.dot rename to cts/scheduler/dot/bug-cl-5170.dot diff --git a/cts/scheduler/bug-cl-5212.dot b/cts/scheduler/dot/bug-cl-5212.dot similarity index 100% rename from cts/scheduler/bug-cl-5212.dot rename to cts/scheduler/dot/bug-cl-5212.dot diff --git a/cts/scheduler/bug-cl-5213.dot b/cts/scheduler/dot/bug-cl-5213.dot similarity index 100% rename from cts/scheduler/bug-cl-5213.dot rename to cts/scheduler/dot/bug-cl-5213.dot diff --git a/cts/scheduler/bug-cl-5219.dot b/cts/scheduler/dot/bug-cl-5219.dot similarity index 100% rename from cts/scheduler/bug-cl-5219.dot rename to cts/scheduler/dot/bug-cl-5219.dot diff --git a/cts/scheduler/bug-cl-5247.dot b/cts/scheduler/dot/bug-cl-5247.dot similarity index 100% rename from cts/scheduler/bug-cl-5247.dot rename to cts/scheduler/dot/bug-cl-5247.dot diff --git a/cts/scheduler/bug-lf-1852.dot b/cts/scheduler/dot/bug-lf-1852.dot similarity index 100% rename from cts/scheduler/bug-lf-1852.dot rename to cts/scheduler/dot/bug-lf-1852.dot diff --git a/cts/scheduler/bug-lf-1920.dot b/cts/scheduler/dot/bug-lf-1920.dot similarity index 100% rename from cts/scheduler/bug-lf-1920.dot rename to cts/scheduler/dot/bug-lf-1920.dot diff --git a/cts/scheduler/bug-lf-2106.dot b/cts/scheduler/dot/bug-lf-2106.dot similarity index 100% rename from cts/scheduler/bug-lf-2106.dot rename to cts/scheduler/dot/bug-lf-2106.dot diff --git a/cts/scheduler/bug-lf-2153.dot b/cts/scheduler/dot/bug-lf-2153.dot similarity index 100% rename from cts/scheduler/bug-lf-2153.dot rename to cts/scheduler/dot/bug-lf-2153.dot diff --git a/cts/scheduler/bug-lf-2160.dot b/cts/scheduler/dot/bug-lf-2160.dot similarity index 100% rename from cts/scheduler/bug-lf-2160.dot rename to cts/scheduler/dot/bug-lf-2160.dot diff --git a/cts/scheduler/bug-lf-2171.dot b/cts/scheduler/dot/bug-lf-2171.dot similarity index 100% rename from cts/scheduler/bug-lf-2171.dot rename to cts/scheduler/dot/bug-lf-2171.dot diff --git a/cts/scheduler/bug-lf-2213.dot b/cts/scheduler/dot/bug-lf-2213.dot similarity index 100% rename from cts/scheduler/bug-lf-2213.dot rename to cts/scheduler/dot/bug-lf-2213.dot diff --git a/cts/scheduler/bug-lf-2317.dot b/cts/scheduler/dot/bug-lf-2317.dot similarity index 100% rename from cts/scheduler/bug-lf-2317.dot rename to cts/scheduler/dot/bug-lf-2317.dot diff --git a/cts/scheduler/bug-lf-2358.dot b/cts/scheduler/dot/bug-lf-2358.dot similarity index 100% rename from cts/scheduler/bug-lf-2358.dot rename to cts/scheduler/dot/bug-lf-2358.dot diff --git a/cts/scheduler/bug-lf-2361.dot b/cts/scheduler/dot/bug-lf-2361.dot similarity index 100% rename from cts/scheduler/bug-lf-2361.dot rename to cts/scheduler/dot/bug-lf-2361.dot diff --git a/cts/scheduler/bug-lf-2422.dot b/cts/scheduler/dot/bug-lf-2422.dot similarity index 100% rename from cts/scheduler/bug-lf-2422.dot rename to cts/scheduler/dot/bug-lf-2422.dot diff --git a/cts/scheduler/bug-lf-2435.dot b/cts/scheduler/dot/bug-lf-2435.dot similarity index 100% rename from cts/scheduler/bug-lf-2435.dot rename to cts/scheduler/dot/bug-lf-2435.dot diff --git a/cts/scheduler/bug-lf-2445.dot b/cts/scheduler/dot/bug-lf-2445.dot similarity index 100% rename from cts/scheduler/bug-lf-2445.dot rename to cts/scheduler/dot/bug-lf-2445.dot diff --git a/cts/scheduler/bug-lf-2453.dot b/cts/scheduler/dot/bug-lf-2453.dot similarity index 100% rename from cts/scheduler/bug-lf-2453.dot rename to cts/scheduler/dot/bug-lf-2453.dot diff --git a/cts/scheduler/bug-lf-2474.dot b/cts/scheduler/dot/bug-lf-2474.dot similarity index 100% rename from cts/scheduler/bug-lf-2474.dot rename to cts/scheduler/dot/bug-lf-2474.dot diff --git a/cts/scheduler/bug-lf-2493.dot b/cts/scheduler/dot/bug-lf-2493.dot similarity index 100% rename from cts/scheduler/bug-lf-2493.dot rename to cts/scheduler/dot/bug-lf-2493.dot diff --git a/cts/scheduler/bug-lf-2508.dot b/cts/scheduler/dot/bug-lf-2508.dot similarity index 100% rename from cts/scheduler/bug-lf-2508.dot rename to cts/scheduler/dot/bug-lf-2508.dot diff --git a/cts/scheduler/bug-lf-2544.dot b/cts/scheduler/dot/bug-lf-2544.dot similarity index 100% rename from cts/scheduler/bug-lf-2544.dot rename to cts/scheduler/dot/bug-lf-2544.dot diff --git a/cts/scheduler/bug-lf-2551.dot b/cts/scheduler/dot/bug-lf-2551.dot similarity index 100% rename from cts/scheduler/bug-lf-2551.dot rename to cts/scheduler/dot/bug-lf-2551.dot diff --git a/cts/scheduler/bug-lf-2574.dot b/cts/scheduler/dot/bug-lf-2574.dot similarity index 100% rename from cts/scheduler/bug-lf-2574.dot rename to cts/scheduler/dot/bug-lf-2574.dot diff --git a/cts/scheduler/bug-lf-2581.dot b/cts/scheduler/dot/bug-lf-2581.dot similarity index 100% rename from cts/scheduler/bug-lf-2581.dot rename to cts/scheduler/dot/bug-lf-2581.dot diff --git a/cts/scheduler/bug-lf-2606.dot b/cts/scheduler/dot/bug-lf-2606.dot similarity index 100% rename from cts/scheduler/bug-lf-2606.dot rename to cts/scheduler/dot/bug-lf-2606.dot diff --git a/cts/scheduler/bug-lf-2613.dot b/cts/scheduler/dot/bug-lf-2613.dot similarity index 100% rename from cts/scheduler/bug-lf-2613.dot rename to cts/scheduler/dot/bug-lf-2613.dot diff --git a/cts/scheduler/bug-lf-2619.dot b/cts/scheduler/dot/bug-lf-2619.dot similarity index 100% rename from cts/scheduler/bug-lf-2619.dot rename to cts/scheduler/dot/bug-lf-2619.dot diff --git a/cts/scheduler/bug-n-385265-2.dot b/cts/scheduler/dot/bug-n-385265-2.dot similarity index 100% rename from cts/scheduler/bug-n-385265-2.dot rename to cts/scheduler/dot/bug-n-385265-2.dot diff --git a/cts/scheduler/bug-n-385265.dot b/cts/scheduler/dot/bug-n-385265.dot similarity index 100% rename from cts/scheduler/bug-n-385265.dot rename to cts/scheduler/dot/bug-n-385265.dot diff --git a/cts/scheduler/bug-n-387749.dot b/cts/scheduler/dot/bug-n-387749.dot similarity index 100% rename from cts/scheduler/bug-n-387749.dot rename to cts/scheduler/dot/bug-n-387749.dot diff --git a/cts/scheduler/bug-pm-11.dot b/cts/scheduler/dot/bug-pm-11.dot similarity index 100% rename from cts/scheduler/bug-pm-11.dot rename to cts/scheduler/dot/bug-pm-11.dot diff --git a/cts/scheduler/bug-pm-12.dot b/cts/scheduler/dot/bug-pm-12.dot similarity index 100% rename from cts/scheduler/bug-pm-12.dot rename to cts/scheduler/dot/bug-pm-12.dot diff --git a/cts/scheduler/bug-rh-1097457.dot b/cts/scheduler/dot/bug-rh-1097457.dot similarity index 100% rename from cts/scheduler/bug-rh-1097457.dot rename to cts/scheduler/dot/bug-rh-1097457.dot diff --git a/cts/scheduler/bug-rh-880249.dot b/cts/scheduler/dot/bug-rh-880249.dot similarity index 100% rename from cts/scheduler/bug-rh-880249.dot rename to cts/scheduler/dot/bug-rh-880249.dot diff --git a/cts/scheduler/bug-suse-707150.dot b/cts/scheduler/dot/bug-suse-707150.dot similarity index 100% rename from cts/scheduler/bug-suse-707150.dot rename to cts/scheduler/dot/bug-suse-707150.dot diff --git a/cts/scheduler/bundle-nested-colocation.dot b/cts/scheduler/dot/bundle-nested-colocation.dot similarity index 100% rename from cts/scheduler/bundle-nested-colocation.dot rename to cts/scheduler/dot/bundle-nested-colocation.dot diff --git a/cts/scheduler/bundle-order-fencing.dot b/cts/scheduler/dot/bundle-order-fencing.dot similarity index 100% rename from cts/scheduler/bundle-order-fencing.dot rename to cts/scheduler/dot/bundle-order-fencing.dot diff --git a/cts/scheduler/bundle-order-partial-start-2.dot b/cts/scheduler/dot/bundle-order-partial-start-2.dot similarity index 100% rename from cts/scheduler/bundle-order-partial-start-2.dot rename to cts/scheduler/dot/bundle-order-partial-start-2.dot diff --git a/cts/scheduler/bundle-order-partial-start.dot b/cts/scheduler/dot/bundle-order-partial-start.dot similarity index 100% rename from cts/scheduler/bundle-order-partial-start.dot rename to cts/scheduler/dot/bundle-order-partial-start.dot diff --git a/cts/scheduler/bundle-order-partial-stop.dot b/cts/scheduler/dot/bundle-order-partial-stop.dot similarity index 100% rename from cts/scheduler/bundle-order-partial-stop.dot rename to cts/scheduler/dot/bundle-order-partial-stop.dot diff --git a/cts/scheduler/bundle-order-partial.dot b/cts/scheduler/dot/bundle-order-partial.dot similarity index 100% rename from cts/scheduler/bundle-order-partial.dot rename to cts/scheduler/dot/bundle-order-partial.dot diff --git a/cts/scheduler/bundle-order-startup-clone-2.dot b/cts/scheduler/dot/bundle-order-startup-clone-2.dot similarity index 100% rename from cts/scheduler/bundle-order-startup-clone-2.dot rename to cts/scheduler/dot/bundle-order-startup-clone-2.dot diff --git a/cts/scheduler/bundle-order-startup-clone.dot b/cts/scheduler/dot/bundle-order-startup-clone.dot similarity index 100% rename from cts/scheduler/bundle-order-startup-clone.dot rename to cts/scheduler/dot/bundle-order-startup-clone.dot diff --git a/cts/scheduler/bundle-order-startup.dot b/cts/scheduler/dot/bundle-order-startup.dot similarity index 100% rename from cts/scheduler/bundle-order-startup.dot rename to cts/scheduler/dot/bundle-order-startup.dot diff --git a/cts/scheduler/bundle-order-stop-clone.dot b/cts/scheduler/dot/bundle-order-stop-clone.dot similarity index 100% rename from cts/scheduler/bundle-order-stop-clone.dot rename to cts/scheduler/dot/bundle-order-stop-clone.dot diff --git a/cts/scheduler/bundle-order-stop-on-remote.dot b/cts/scheduler/dot/bundle-order-stop-on-remote.dot similarity index 100% rename from cts/scheduler/bundle-order-stop-on-remote.dot rename to cts/scheduler/dot/bundle-order-stop-on-remote.dot diff --git a/cts/scheduler/bundle-order-stop.dot b/cts/scheduler/dot/bundle-order-stop.dot similarity index 100% rename from cts/scheduler/bundle-order-stop.dot rename to cts/scheduler/dot/bundle-order-stop.dot diff --git a/cts/scheduler/bundle-probe-order-1.dot b/cts/scheduler/dot/bundle-probe-order-1.dot similarity index 100% rename from cts/scheduler/bundle-probe-order-1.dot rename to cts/scheduler/dot/bundle-probe-order-1.dot diff --git a/cts/scheduler/bundle-probe-order-2.dot b/cts/scheduler/dot/bundle-probe-order-2.dot similarity index 100% rename from cts/scheduler/bundle-probe-order-2.dot rename to cts/scheduler/dot/bundle-probe-order-2.dot diff --git a/cts/scheduler/bundle-probe-order-3.dot b/cts/scheduler/dot/bundle-probe-order-3.dot similarity index 100% rename from cts/scheduler/bundle-probe-order-3.dot rename to cts/scheduler/dot/bundle-probe-order-3.dot diff --git a/cts/scheduler/bundle-probe-remotes.dot b/cts/scheduler/dot/bundle-probe-remotes.dot similarity index 100% rename from cts/scheduler/bundle-probe-remotes.dot rename to cts/scheduler/dot/bundle-probe-remotes.dot diff --git a/cts/scheduler/bundle-replicas-change.dot b/cts/scheduler/dot/bundle-replicas-change.dot similarity index 100% rename from cts/scheduler/bundle-replicas-change.dot rename to cts/scheduler/dot/bundle-replicas-change.dot diff --git a/cts/scheduler/cancel-behind-moving-remote.dot b/cts/scheduler/dot/cancel-behind-moving-remote.dot similarity index 100% rename from cts/scheduler/cancel-behind-moving-remote.dot rename to cts/scheduler/dot/cancel-behind-moving-remote.dot diff --git a/cts/scheduler/clone-anon-dup.dot b/cts/scheduler/dot/clone-anon-dup.dot similarity index 100% rename from cts/scheduler/clone-anon-dup.dot rename to cts/scheduler/dot/clone-anon-dup.dot diff --git a/cts/scheduler/clone-anon-failcount.dot b/cts/scheduler/dot/clone-anon-failcount.dot similarity index 100% rename from cts/scheduler/clone-anon-failcount.dot rename to cts/scheduler/dot/clone-anon-failcount.dot diff --git a/cts/scheduler/clone-anon-probe-1.dot b/cts/scheduler/dot/clone-anon-probe-1.dot similarity index 100% rename from cts/scheduler/clone-anon-probe-1.dot rename to cts/scheduler/dot/clone-anon-probe-1.dot diff --git a/cts/scheduler/clone-anon-probe-2.dot b/cts/scheduler/dot/clone-anon-probe-2.dot similarity index 100% rename from cts/scheduler/clone-anon-probe-2.dot rename to cts/scheduler/dot/clone-anon-probe-2.dot diff --git a/cts/scheduler/clone-colocate-instance-1.dot b/cts/scheduler/dot/clone-colocate-instance-1.dot similarity index 100% rename from cts/scheduler/clone-colocate-instance-1.dot rename to cts/scheduler/dot/clone-colocate-instance-1.dot diff --git a/cts/scheduler/clone-colocate-instance-2.dot b/cts/scheduler/dot/clone-colocate-instance-2.dot similarity index 100% rename from cts/scheduler/clone-colocate-instance-2.dot rename to cts/scheduler/dot/clone-colocate-instance-2.dot diff --git a/cts/scheduler/clone-fail-block-colocation.dot b/cts/scheduler/dot/clone-fail-block-colocation.dot similarity index 100% rename from cts/scheduler/clone-fail-block-colocation.dot rename to cts/scheduler/dot/clone-fail-block-colocation.dot diff --git a/cts/scheduler/clone-interleave-1.dot b/cts/scheduler/dot/clone-interleave-1.dot similarity index 100% rename from cts/scheduler/clone-interleave-1.dot rename to cts/scheduler/dot/clone-interleave-1.dot diff --git a/cts/scheduler/clone-interleave-2.dot b/cts/scheduler/dot/clone-interleave-2.dot similarity index 100% rename from cts/scheduler/clone-interleave-2.dot rename to cts/scheduler/dot/clone-interleave-2.dot diff --git a/cts/scheduler/clone-interleave-3.dot b/cts/scheduler/dot/clone-interleave-3.dot similarity index 100% rename from cts/scheduler/clone-interleave-3.dot rename to cts/scheduler/dot/clone-interleave-3.dot diff --git a/cts/scheduler/clone-max-zero.dot b/cts/scheduler/dot/clone-max-zero.dot similarity index 100% rename from cts/scheduler/clone-max-zero.dot rename to cts/scheduler/dot/clone-max-zero.dot diff --git a/cts/scheduler/clone-no-shuffle.dot b/cts/scheduler/dot/clone-no-shuffle.dot similarity index 100% rename from cts/scheduler/clone-no-shuffle.dot rename to cts/scheduler/dot/clone-no-shuffle.dot diff --git a/cts/scheduler/clone-order-16instances.dot b/cts/scheduler/dot/clone-order-16instances.dot similarity index 100% rename from cts/scheduler/clone-order-16instances.dot rename to cts/scheduler/dot/clone-order-16instances.dot diff --git a/cts/scheduler/clone-order-instance.dot b/cts/scheduler/dot/clone-order-instance.dot similarity index 100% rename from cts/scheduler/clone-order-instance.dot rename to cts/scheduler/dot/clone-order-instance.dot diff --git a/cts/scheduler/clone-order-primitive.dot b/cts/scheduler/dot/clone-order-primitive.dot similarity index 100% rename from cts/scheduler/clone-order-primitive.dot rename to cts/scheduler/dot/clone-order-primitive.dot diff --git a/cts/scheduler/clone-require-all-1.dot b/cts/scheduler/dot/clone-require-all-1.dot similarity index 100% rename from cts/scheduler/clone-require-all-1.dot rename to cts/scheduler/dot/clone-require-all-1.dot diff --git a/cts/scheduler/clone-require-all-2.dot b/cts/scheduler/dot/clone-require-all-2.dot similarity index 100% rename from cts/scheduler/clone-require-all-2.dot rename to cts/scheduler/dot/clone-require-all-2.dot diff --git a/cts/scheduler/clone-require-all-3.dot b/cts/scheduler/dot/clone-require-all-3.dot similarity index 100% rename from cts/scheduler/clone-require-all-3.dot rename to cts/scheduler/dot/clone-require-all-3.dot diff --git a/cts/scheduler/clone-require-all-4.dot b/cts/scheduler/dot/clone-require-all-4.dot similarity index 100% rename from cts/scheduler/clone-require-all-4.dot rename to cts/scheduler/dot/clone-require-all-4.dot diff --git a/cts/scheduler/clone-require-all-5.dot b/cts/scheduler/dot/clone-require-all-5.dot similarity index 100% rename from cts/scheduler/clone-require-all-5.dot rename to cts/scheduler/dot/clone-require-all-5.dot diff --git a/cts/scheduler/clone-require-all-6.dot b/cts/scheduler/dot/clone-require-all-6.dot similarity index 100% rename from cts/scheduler/clone-require-all-6.dot rename to cts/scheduler/dot/clone-require-all-6.dot diff --git a/cts/scheduler/clone-require-all-7.dot b/cts/scheduler/dot/clone-require-all-7.dot similarity index 100% rename from cts/scheduler/clone-require-all-7.dot rename to cts/scheduler/dot/clone-require-all-7.dot diff --git a/cts/scheduler/clone-require-all-no-interleave-1.dot b/cts/scheduler/dot/clone-require-all-no-interleave-1.dot similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-1.dot rename to cts/scheduler/dot/clone-require-all-no-interleave-1.dot diff --git a/cts/scheduler/clone-require-all-no-interleave-2.dot b/cts/scheduler/dot/clone-require-all-no-interleave-2.dot similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-2.dot rename to cts/scheduler/dot/clone-require-all-no-interleave-2.dot diff --git a/cts/scheduler/clone-require-all-no-interleave-3.dot b/cts/scheduler/dot/clone-require-all-no-interleave-3.dot similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-3.dot rename to cts/scheduler/dot/clone-require-all-no-interleave-3.dot diff --git a/cts/scheduler/clone-requires-quorum-recovery.dot b/cts/scheduler/dot/clone-requires-quorum-recovery.dot similarity index 100% rename from cts/scheduler/clone-requires-quorum-recovery.dot rename to cts/scheduler/dot/clone-requires-quorum-recovery.dot diff --git a/cts/scheduler/clone-requires-quorum.dot b/cts/scheduler/dot/clone-requires-quorum.dot similarity index 100% rename from cts/scheduler/clone-requires-quorum.dot rename to cts/scheduler/dot/clone-requires-quorum.dot diff --git a/cts/scheduler/clone_min_interleave_start_one.dot b/cts/scheduler/dot/clone_min_interleave_start_one.dot similarity index 100% rename from cts/scheduler/clone_min_interleave_start_one.dot rename to cts/scheduler/dot/clone_min_interleave_start_one.dot diff --git a/cts/scheduler/clone_min_interleave_start_two.dot b/cts/scheduler/dot/clone_min_interleave_start_two.dot similarity index 100% rename from cts/scheduler/clone_min_interleave_start_two.dot rename to cts/scheduler/dot/clone_min_interleave_start_two.dot diff --git a/cts/scheduler/clone_min_interleave_stop_one.dot b/cts/scheduler/dot/clone_min_interleave_stop_one.dot similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_one.dot rename to cts/scheduler/dot/clone_min_interleave_stop_one.dot diff --git a/cts/scheduler/clone_min_interleave_stop_two.dot b/cts/scheduler/dot/clone_min_interleave_stop_two.dot similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_two.dot rename to cts/scheduler/dot/clone_min_interleave_stop_two.dot diff --git a/cts/scheduler/clone_min_start_one.dot b/cts/scheduler/dot/clone_min_start_one.dot similarity index 100% rename from cts/scheduler/clone_min_start_one.dot rename to cts/scheduler/dot/clone_min_start_one.dot diff --git a/cts/scheduler/clone_min_start_two.dot b/cts/scheduler/dot/clone_min_start_two.dot similarity index 100% rename from cts/scheduler/clone_min_start_two.dot rename to cts/scheduler/dot/clone_min_start_two.dot diff --git a/cts/scheduler/clone_min_stop_all.dot b/cts/scheduler/dot/clone_min_stop_all.dot similarity index 100% rename from cts/scheduler/clone_min_stop_all.dot rename to cts/scheduler/dot/clone_min_stop_all.dot diff --git a/cts/scheduler/clone_min_stop_one.dot b/cts/scheduler/dot/clone_min_stop_one.dot similarity index 100% rename from cts/scheduler/clone_min_stop_one.dot rename to cts/scheduler/dot/clone_min_stop_one.dot diff --git a/cts/scheduler/clone_min_stop_two.dot b/cts/scheduler/dot/clone_min_stop_two.dot similarity index 100% rename from cts/scheduler/clone_min_stop_two.dot rename to cts/scheduler/dot/clone_min_stop_two.dot diff --git a/cts/scheduler/cloned-group-stop.dot b/cts/scheduler/dot/cloned-group-stop.dot similarity index 100% rename from cts/scheduler/cloned-group-stop.dot rename to cts/scheduler/dot/cloned-group-stop.dot diff --git a/cts/scheduler/cloned-group.dot b/cts/scheduler/dot/cloned-group.dot similarity index 100% rename from cts/scheduler/cloned-group.dot rename to cts/scheduler/dot/cloned-group.dot diff --git a/cts/scheduler/cloned_start_one.dot b/cts/scheduler/dot/cloned_start_one.dot similarity index 100% rename from cts/scheduler/cloned_start_one.dot rename to cts/scheduler/dot/cloned_start_one.dot diff --git a/cts/scheduler/cloned_start_two.dot b/cts/scheduler/dot/cloned_start_two.dot similarity index 100% rename from cts/scheduler/cloned_start_two.dot rename to cts/scheduler/dot/cloned_start_two.dot diff --git a/cts/scheduler/cloned_stop_one.dot b/cts/scheduler/dot/cloned_stop_one.dot similarity index 100% rename from cts/scheduler/cloned_stop_one.dot rename to cts/scheduler/dot/cloned_stop_one.dot diff --git a/cts/scheduler/cloned_stop_two.dot b/cts/scheduler/dot/cloned_stop_two.dot similarity index 100% rename from cts/scheduler/cloned_stop_two.dot rename to cts/scheduler/dot/cloned_stop_two.dot diff --git a/cts/scheduler/cluster-specific-params.dot b/cts/scheduler/dot/cluster-specific-params.dot similarity index 100% rename from cts/scheduler/cluster-specific-params.dot rename to cts/scheduler/dot/cluster-specific-params.dot diff --git a/cts/scheduler/colo_master_w_native.dot b/cts/scheduler/dot/colo_master_w_native.dot similarity index 100% rename from cts/scheduler/colo_master_w_native.dot rename to cts/scheduler/dot/colo_master_w_native.dot diff --git a/cts/scheduler/colo_slave_w_native.dot b/cts/scheduler/dot/colo_slave_w_native.dot similarity index 100% rename from cts/scheduler/colo_slave_w_native.dot rename to cts/scheduler/dot/colo_slave_w_native.dot diff --git a/cts/scheduler/coloc-attr.dot b/cts/scheduler/dot/coloc-attr.dot similarity index 100% rename from cts/scheduler/coloc-attr.dot rename to cts/scheduler/dot/coloc-attr.dot diff --git a/cts/scheduler/coloc-clone-stays-active.dot b/cts/scheduler/dot/coloc-clone-stays-active.dot similarity index 100% rename from cts/scheduler/coloc-clone-stays-active.dot rename to cts/scheduler/dot/coloc-clone-stays-active.dot diff --git a/cts/scheduler/coloc-dependee-should-move.dot b/cts/scheduler/dot/coloc-dependee-should-move.dot similarity index 100% rename from cts/scheduler/coloc-dependee-should-move.dot rename to cts/scheduler/dot/coloc-dependee-should-move.dot diff --git a/cts/scheduler/coloc-dependee-should-stay.dot b/cts/scheduler/dot/coloc-dependee-should-stay.dot similarity index 100% rename from cts/scheduler/coloc-dependee-should-stay.dot rename to cts/scheduler/dot/coloc-dependee-should-stay.dot diff --git a/cts/scheduler/coloc-group.dot b/cts/scheduler/dot/coloc-group.dot similarity index 100% rename from cts/scheduler/coloc-group.dot rename to cts/scheduler/dot/coloc-group.dot diff --git a/cts/scheduler/coloc-intra-set.dot b/cts/scheduler/dot/coloc-intra-set.dot similarity index 100% rename from cts/scheduler/coloc-intra-set.dot rename to cts/scheduler/dot/coloc-intra-set.dot diff --git a/cts/scheduler/coloc-list.dot b/cts/scheduler/dot/coloc-list.dot similarity index 100% rename from cts/scheduler/coloc-list.dot rename to cts/scheduler/dot/coloc-list.dot diff --git a/cts/scheduler/coloc-loop.dot b/cts/scheduler/dot/coloc-loop.dot similarity index 100% rename from cts/scheduler/coloc-loop.dot rename to cts/scheduler/dot/coloc-loop.dot diff --git a/cts/scheduler/coloc-many-one.dot b/cts/scheduler/dot/coloc-many-one.dot similarity index 100% rename from cts/scheduler/coloc-many-one.dot rename to cts/scheduler/dot/coloc-many-one.dot diff --git a/cts/scheduler/coloc-negative-group.dot b/cts/scheduler/dot/coloc-negative-group.dot similarity index 100% rename from cts/scheduler/coloc-negative-group.dot rename to cts/scheduler/dot/coloc-negative-group.dot diff --git a/cts/scheduler/coloc-slave-anti.dot b/cts/scheduler/dot/coloc-slave-anti.dot similarity index 100% rename from cts/scheduler/coloc-slave-anti.dot rename to cts/scheduler/dot/coloc-slave-anti.dot diff --git a/cts/scheduler/coloc_fp_logic.dot b/cts/scheduler/dot/coloc_fp_logic.dot similarity index 100% rename from cts/scheduler/coloc_fp_logic.dot rename to cts/scheduler/dot/coloc_fp_logic.dot diff --git a/cts/scheduler/colocate-primitive-with-clone.dot b/cts/scheduler/dot/colocate-primitive-with-clone.dot similarity index 100% rename from cts/scheduler/colocate-primitive-with-clone.dot rename to cts/scheduler/dot/colocate-primitive-with-clone.dot diff --git a/cts/scheduler/colocated-utilization-clone.dot b/cts/scheduler/dot/colocated-utilization-clone.dot similarity index 100% rename from cts/scheduler/colocated-utilization-clone.dot rename to cts/scheduler/dot/colocated-utilization-clone.dot diff --git a/cts/scheduler/colocated-utilization-group.dot b/cts/scheduler/dot/colocated-utilization-group.dot similarity index 100% rename from cts/scheduler/colocated-utilization-group.dot rename to cts/scheduler/dot/colocated-utilization-group.dot diff --git a/cts/scheduler/colocated-utilization-primitive-1.dot b/cts/scheduler/dot/colocated-utilization-primitive-1.dot similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-1.dot rename to cts/scheduler/dot/colocated-utilization-primitive-1.dot diff --git a/cts/scheduler/colocated-utilization-primitive-2.dot b/cts/scheduler/dot/colocated-utilization-primitive-2.dot similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-2.dot rename to cts/scheduler/dot/colocated-utilization-primitive-2.dot diff --git a/cts/scheduler/colocation-influence.dot b/cts/scheduler/dot/colocation-influence.dot similarity index 100% rename from cts/scheduler/colocation-influence.dot rename to cts/scheduler/dot/colocation-influence.dot diff --git a/cts/scheduler/colocation_constraint_stops_master.dot b/cts/scheduler/dot/colocation_constraint_stops_master.dot similarity index 100% rename from cts/scheduler/colocation_constraint_stops_master.dot rename to cts/scheduler/dot/colocation_constraint_stops_master.dot diff --git a/cts/scheduler/colocation_constraint_stops_slave.dot b/cts/scheduler/dot/colocation_constraint_stops_slave.dot similarity index 100% rename from cts/scheduler/colocation_constraint_stops_slave.dot rename to cts/scheduler/dot/colocation_constraint_stops_slave.dot diff --git a/cts/scheduler/comments.dot b/cts/scheduler/dot/comments.dot similarity index 100% rename from cts/scheduler/comments.dot rename to cts/scheduler/dot/comments.dot diff --git a/cts/scheduler/complex_enforce_colo.dot b/cts/scheduler/dot/complex_enforce_colo.dot similarity index 100% rename from cts/scheduler/complex_enforce_colo.dot rename to cts/scheduler/dot/complex_enforce_colo.dot diff --git a/cts/scheduler/concurrent-fencing.dot b/cts/scheduler/dot/concurrent-fencing.dot similarity index 100% rename from cts/scheduler/concurrent-fencing.dot rename to cts/scheduler/dot/concurrent-fencing.dot diff --git a/cts/scheduler/container-1.dot b/cts/scheduler/dot/container-1.dot similarity index 100% rename from cts/scheduler/container-1.dot rename to cts/scheduler/dot/container-1.dot diff --git a/cts/scheduler/container-2.dot b/cts/scheduler/dot/container-2.dot similarity index 100% rename from cts/scheduler/container-2.dot rename to cts/scheduler/dot/container-2.dot diff --git a/cts/scheduler/container-3.dot b/cts/scheduler/dot/container-3.dot similarity index 100% rename from cts/scheduler/container-3.dot rename to cts/scheduler/dot/container-3.dot diff --git a/cts/scheduler/container-4.dot b/cts/scheduler/dot/container-4.dot similarity index 100% rename from cts/scheduler/container-4.dot rename to cts/scheduler/dot/container-4.dot diff --git a/cts/scheduler/container-group-1.dot b/cts/scheduler/dot/container-group-1.dot similarity index 100% rename from cts/scheduler/container-group-1.dot rename to cts/scheduler/dot/container-group-1.dot diff --git a/cts/scheduler/container-group-2.dot b/cts/scheduler/dot/container-group-2.dot similarity index 100% rename from cts/scheduler/container-group-2.dot rename to cts/scheduler/dot/container-group-2.dot diff --git a/cts/scheduler/container-group-3.dot b/cts/scheduler/dot/container-group-3.dot similarity index 100% rename from cts/scheduler/container-group-3.dot rename to cts/scheduler/dot/container-group-3.dot diff --git a/cts/scheduler/container-group-4.dot b/cts/scheduler/dot/container-group-4.dot similarity index 100% rename from cts/scheduler/container-group-4.dot rename to cts/scheduler/dot/container-group-4.dot diff --git a/cts/scheduler/container-is-remote-node.dot b/cts/scheduler/dot/container-is-remote-node.dot similarity index 100% rename from cts/scheduler/container-is-remote-node.dot rename to cts/scheduler/dot/container-is-remote-node.dot diff --git a/cts/scheduler/date-1.dot b/cts/scheduler/dot/date-1.dot similarity index 100% rename from cts/scheduler/date-1.dot rename to cts/scheduler/dot/date-1.dot diff --git a/cts/scheduler/date-2.dot b/cts/scheduler/dot/date-2.dot similarity index 100% rename from cts/scheduler/date-2.dot rename to cts/scheduler/dot/date-2.dot diff --git a/cts/scheduler/date-3.dot b/cts/scheduler/dot/date-3.dot similarity index 100% rename from cts/scheduler/date-3.dot rename to cts/scheduler/dot/date-3.dot diff --git a/cts/scheduler/dc-fence-ordering.dot b/cts/scheduler/dot/dc-fence-ordering.dot similarity index 100% rename from cts/scheduler/dc-fence-ordering.dot rename to cts/scheduler/dot/dc-fence-ordering.dot diff --git a/cts/scheduler/enforce-colo1.dot b/cts/scheduler/dot/enforce-colo1.dot similarity index 100% rename from cts/scheduler/enforce-colo1.dot rename to cts/scheduler/dot/enforce-colo1.dot diff --git a/cts/scheduler/expire-non-blocked-failure.dot b/cts/scheduler/dot/expire-non-blocked-failure.dot similarity index 100% rename from cts/scheduler/expire-non-blocked-failure.dot rename to cts/scheduler/dot/expire-non-blocked-failure.dot diff --git a/cts/scheduler/failcount-block.dot b/cts/scheduler/dot/failcount-block.dot similarity index 100% rename from cts/scheduler/failcount-block.dot rename to cts/scheduler/dot/failcount-block.dot diff --git a/cts/scheduler/failcount.dot b/cts/scheduler/dot/failcount.dot similarity index 100% rename from cts/scheduler/failcount.dot rename to cts/scheduler/dot/failcount.dot diff --git a/cts/scheduler/failed-demote-recovery-master.dot b/cts/scheduler/dot/failed-demote-recovery-master.dot similarity index 100% rename from cts/scheduler/failed-demote-recovery-master.dot rename to cts/scheduler/dot/failed-demote-recovery-master.dot diff --git a/cts/scheduler/failed-demote-recovery.dot b/cts/scheduler/dot/failed-demote-recovery.dot similarity index 100% rename from cts/scheduler/failed-demote-recovery.dot rename to cts/scheduler/dot/failed-demote-recovery.dot diff --git a/cts/scheduler/force-anon-clone-max.dot b/cts/scheduler/dot/force-anon-clone-max.dot similarity index 100% rename from cts/scheduler/force-anon-clone-max.dot rename to cts/scheduler/dot/force-anon-clone-max.dot diff --git a/cts/scheduler/group-dependents.dot b/cts/scheduler/dot/group-dependents.dot similarity index 100% rename from cts/scheduler/group-dependents.dot rename to cts/scheduler/dot/group-dependents.dot diff --git a/cts/scheduler/group-fail.dot b/cts/scheduler/dot/group-fail.dot similarity index 100% rename from cts/scheduler/group-fail.dot rename to cts/scheduler/dot/group-fail.dot diff --git a/cts/scheduler/group-stop-ordering.dot b/cts/scheduler/dot/group-stop-ordering.dot similarity index 100% rename from cts/scheduler/group-stop-ordering.dot rename to cts/scheduler/dot/group-stop-ordering.dot diff --git a/cts/scheduler/group-unmanaged-stopped.dot b/cts/scheduler/dot/group-unmanaged-stopped.dot similarity index 100% rename from cts/scheduler/group-unmanaged-stopped.dot rename to cts/scheduler/dot/group-unmanaged-stopped.dot diff --git a/cts/scheduler/group-unmanaged.dot b/cts/scheduler/dot/group-unmanaged.dot similarity index 100% rename from cts/scheduler/group-unmanaged.dot rename to cts/scheduler/dot/group-unmanaged.dot diff --git a/cts/scheduler/group1.dot b/cts/scheduler/dot/group1.dot similarity index 100% rename from cts/scheduler/group1.dot rename to cts/scheduler/dot/group1.dot diff --git a/cts/scheduler/group10.dot b/cts/scheduler/dot/group10.dot similarity index 100% rename from cts/scheduler/group10.dot rename to cts/scheduler/dot/group10.dot diff --git a/cts/scheduler/group11.dot b/cts/scheduler/dot/group11.dot similarity index 100% rename from cts/scheduler/group11.dot rename to cts/scheduler/dot/group11.dot diff --git a/cts/scheduler/group13.dot b/cts/scheduler/dot/group13.dot similarity index 100% rename from cts/scheduler/group13.dot rename to cts/scheduler/dot/group13.dot diff --git a/cts/scheduler/group14.dot b/cts/scheduler/dot/group14.dot similarity index 100% rename from cts/scheduler/group14.dot rename to cts/scheduler/dot/group14.dot diff --git a/cts/scheduler/group15.dot b/cts/scheduler/dot/group15.dot similarity index 100% rename from cts/scheduler/group15.dot rename to cts/scheduler/dot/group15.dot diff --git a/cts/scheduler/group2.dot b/cts/scheduler/dot/group2.dot similarity index 100% rename from cts/scheduler/group2.dot rename to cts/scheduler/dot/group2.dot diff --git a/cts/scheduler/group3.dot b/cts/scheduler/dot/group3.dot similarity index 100% rename from cts/scheduler/group3.dot rename to cts/scheduler/dot/group3.dot diff --git a/cts/scheduler/group4.dot b/cts/scheduler/dot/group4.dot similarity index 100% rename from cts/scheduler/group4.dot rename to cts/scheduler/dot/group4.dot diff --git a/cts/scheduler/group5.dot b/cts/scheduler/dot/group5.dot similarity index 100% rename from cts/scheduler/group5.dot rename to cts/scheduler/dot/group5.dot diff --git a/cts/scheduler/group6.dot b/cts/scheduler/dot/group6.dot similarity index 100% rename from cts/scheduler/group6.dot rename to cts/scheduler/dot/group6.dot diff --git a/cts/scheduler/group7.dot b/cts/scheduler/dot/group7.dot similarity index 100% rename from cts/scheduler/group7.dot rename to cts/scheduler/dot/group7.dot diff --git a/cts/scheduler/group8.dot b/cts/scheduler/dot/group8.dot similarity index 100% rename from cts/scheduler/group8.dot rename to cts/scheduler/dot/group8.dot diff --git a/cts/scheduler/group9.dot b/cts/scheduler/dot/group9.dot similarity index 100% rename from cts/scheduler/group9.dot rename to cts/scheduler/dot/group9.dot diff --git a/cts/scheduler/guest-host-not-fenceable.dot b/cts/scheduler/dot/guest-host-not-fenceable.dot similarity index 100% rename from cts/scheduler/guest-host-not-fenceable.dot rename to cts/scheduler/dot/guest-host-not-fenceable.dot diff --git a/cts/scheduler/guest-node-cleanup.dot b/cts/scheduler/dot/guest-node-cleanup.dot similarity index 100% rename from cts/scheduler/guest-node-cleanup.dot rename to cts/scheduler/dot/guest-node-cleanup.dot diff --git a/cts/scheduler/guest-node-host-dies.dot b/cts/scheduler/dot/guest-node-host-dies.dot similarity index 100% rename from cts/scheduler/guest-node-host-dies.dot rename to cts/scheduler/dot/guest-node-host-dies.dot diff --git a/cts/scheduler/history-1.dot b/cts/scheduler/dot/history-1.dot similarity index 100% rename from cts/scheduler/history-1.dot rename to cts/scheduler/dot/history-1.dot diff --git a/cts/scheduler/honor_stonith_rsc_order1.dot b/cts/scheduler/dot/honor_stonith_rsc_order1.dot similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order1.dot rename to cts/scheduler/dot/honor_stonith_rsc_order1.dot diff --git a/cts/scheduler/honor_stonith_rsc_order2.dot b/cts/scheduler/dot/honor_stonith_rsc_order2.dot similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order2.dot rename to cts/scheduler/dot/honor_stonith_rsc_order2.dot diff --git a/cts/scheduler/honor_stonith_rsc_order3.dot b/cts/scheduler/dot/honor_stonith_rsc_order3.dot similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order3.dot rename to cts/scheduler/dot/honor_stonith_rsc_order3.dot diff --git a/cts/scheduler/honor_stonith_rsc_order4.dot b/cts/scheduler/dot/honor_stonith_rsc_order4.dot similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order4.dot rename to cts/scheduler/dot/honor_stonith_rsc_order4.dot diff --git a/cts/scheduler/ignore_stonith_rsc_order1.dot b/cts/scheduler/dot/ignore_stonith_rsc_order1.dot similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order1.dot rename to cts/scheduler/dot/ignore_stonith_rsc_order1.dot diff --git a/cts/scheduler/ignore_stonith_rsc_order2.dot b/cts/scheduler/dot/ignore_stonith_rsc_order2.dot similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order2.dot rename to cts/scheduler/dot/ignore_stonith_rsc_order2.dot diff --git a/cts/scheduler/ignore_stonith_rsc_order3.dot b/cts/scheduler/dot/ignore_stonith_rsc_order3.dot similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order3.dot rename to cts/scheduler/dot/ignore_stonith_rsc_order3.dot diff --git a/cts/scheduler/ignore_stonith_rsc_order4.dot b/cts/scheduler/dot/ignore_stonith_rsc_order4.dot similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order4.dot rename to cts/scheduler/dot/ignore_stonith_rsc_order4.dot diff --git a/cts/scheduler/inc0.dot b/cts/scheduler/dot/inc0.dot similarity index 100% rename from cts/scheduler/inc0.dot rename to cts/scheduler/dot/inc0.dot diff --git a/cts/scheduler/inc1.dot b/cts/scheduler/dot/inc1.dot similarity index 100% rename from cts/scheduler/inc1.dot rename to cts/scheduler/dot/inc1.dot diff --git a/cts/scheduler/inc10.dot b/cts/scheduler/dot/inc10.dot similarity index 100% rename from cts/scheduler/inc10.dot rename to cts/scheduler/dot/inc10.dot diff --git a/cts/scheduler/inc11.dot b/cts/scheduler/dot/inc11.dot similarity index 100% rename from cts/scheduler/inc11.dot rename to cts/scheduler/dot/inc11.dot diff --git a/cts/scheduler/inc12.dot b/cts/scheduler/dot/inc12.dot similarity index 100% rename from cts/scheduler/inc12.dot rename to cts/scheduler/dot/inc12.dot diff --git a/cts/scheduler/inc2.dot b/cts/scheduler/dot/inc2.dot similarity index 100% rename from cts/scheduler/inc2.dot rename to cts/scheduler/dot/inc2.dot diff --git a/cts/scheduler/inc3.dot b/cts/scheduler/dot/inc3.dot similarity index 100% rename from cts/scheduler/inc3.dot rename to cts/scheduler/dot/inc3.dot diff --git a/cts/scheduler/inc4.dot b/cts/scheduler/dot/inc4.dot similarity index 100% rename from cts/scheduler/inc4.dot rename to cts/scheduler/dot/inc4.dot diff --git a/cts/scheduler/inc5.dot b/cts/scheduler/dot/inc5.dot similarity index 100% rename from cts/scheduler/inc5.dot rename to cts/scheduler/dot/inc5.dot diff --git a/cts/scheduler/inc6.dot b/cts/scheduler/dot/inc6.dot similarity index 100% rename from cts/scheduler/inc6.dot rename to cts/scheduler/dot/inc6.dot diff --git a/cts/scheduler/inc7.dot b/cts/scheduler/dot/inc7.dot similarity index 100% rename from cts/scheduler/inc7.dot rename to cts/scheduler/dot/inc7.dot diff --git a/cts/scheduler/inc8.dot b/cts/scheduler/dot/inc8.dot similarity index 100% rename from cts/scheduler/inc8.dot rename to cts/scheduler/dot/inc8.dot diff --git a/cts/scheduler/inc9.dot b/cts/scheduler/dot/inc9.dot similarity index 100% rename from cts/scheduler/inc9.dot rename to cts/scheduler/dot/inc9.dot diff --git a/cts/scheduler/interleave-0.dot b/cts/scheduler/dot/interleave-0.dot similarity index 100% rename from cts/scheduler/interleave-0.dot rename to cts/scheduler/dot/interleave-0.dot diff --git a/cts/scheduler/interleave-1.dot b/cts/scheduler/dot/interleave-1.dot similarity index 100% rename from cts/scheduler/interleave-1.dot rename to cts/scheduler/dot/interleave-1.dot diff --git a/cts/scheduler/interleave-2.dot b/cts/scheduler/dot/interleave-2.dot similarity index 100% rename from cts/scheduler/interleave-2.dot rename to cts/scheduler/dot/interleave-2.dot diff --git a/cts/scheduler/interleave-3.dot b/cts/scheduler/dot/interleave-3.dot similarity index 100% rename from cts/scheduler/interleave-3.dot rename to cts/scheduler/dot/interleave-3.dot diff --git a/cts/scheduler/interleave-pseudo-stop.dot b/cts/scheduler/dot/interleave-pseudo-stop.dot similarity index 100% rename from cts/scheduler/interleave-pseudo-stop.dot rename to cts/scheduler/dot/interleave-pseudo-stop.dot diff --git a/cts/scheduler/interleave-restart.dot b/cts/scheduler/dot/interleave-restart.dot similarity index 100% rename from cts/scheduler/interleave-restart.dot rename to cts/scheduler/dot/interleave-restart.dot diff --git a/cts/scheduler/interleave-stop.dot b/cts/scheduler/dot/interleave-stop.dot similarity index 100% rename from cts/scheduler/interleave-stop.dot rename to cts/scheduler/dot/interleave-stop.dot diff --git a/cts/scheduler/intervals.dot b/cts/scheduler/dot/intervals.dot similarity index 100% rename from cts/scheduler/intervals.dot rename to cts/scheduler/dot/intervals.dot diff --git a/cts/scheduler/load-stopped-loop-2.dot b/cts/scheduler/dot/load-stopped-loop-2.dot similarity index 100% rename from cts/scheduler/load-stopped-loop-2.dot rename to cts/scheduler/dot/load-stopped-loop-2.dot diff --git a/cts/scheduler/load-stopped-loop.dot b/cts/scheduler/dot/load-stopped-loop.dot similarity index 100% rename from cts/scheduler/load-stopped-loop.dot rename to cts/scheduler/dot/load-stopped-loop.dot diff --git a/cts/scheduler/location-date-rules-1.dot b/cts/scheduler/dot/location-date-rules-1.dot similarity index 100% rename from cts/scheduler/location-date-rules-1.dot rename to cts/scheduler/dot/location-date-rules-1.dot diff --git a/cts/scheduler/location-date-rules-2.dot b/cts/scheduler/dot/location-date-rules-2.dot similarity index 100% rename from cts/scheduler/location-date-rules-2.dot rename to cts/scheduler/dot/location-date-rules-2.dot diff --git a/cts/scheduler/location-sets-templates.dot b/cts/scheduler/dot/location-sets-templates.dot similarity index 100% rename from cts/scheduler/location-sets-templates.dot rename to cts/scheduler/dot/location-sets-templates.dot diff --git a/cts/scheduler/managed-0.dot b/cts/scheduler/dot/managed-0.dot similarity index 100% rename from cts/scheduler/managed-0.dot rename to cts/scheduler/dot/managed-0.dot diff --git a/cts/scheduler/managed-1.dot b/cts/scheduler/dot/managed-1.dot similarity index 100% rename from cts/scheduler/managed-1.dot rename to cts/scheduler/dot/managed-1.dot diff --git a/cts/scheduler/managed-2.dot b/cts/scheduler/dot/managed-2.dot similarity index 100% rename from cts/scheduler/managed-2.dot rename to cts/scheduler/dot/managed-2.dot diff --git a/cts/scheduler/master-0.dot b/cts/scheduler/dot/master-0.dot similarity index 100% rename from cts/scheduler/master-0.dot rename to cts/scheduler/dot/master-0.dot diff --git a/cts/scheduler/master-1.dot b/cts/scheduler/dot/master-1.dot similarity index 100% rename from cts/scheduler/master-1.dot rename to cts/scheduler/dot/master-1.dot diff --git a/cts/scheduler/master-10.dot b/cts/scheduler/dot/master-10.dot similarity index 100% rename from cts/scheduler/master-10.dot rename to cts/scheduler/dot/master-10.dot diff --git a/cts/scheduler/master-11.dot b/cts/scheduler/dot/master-11.dot similarity index 100% rename from cts/scheduler/master-11.dot rename to cts/scheduler/dot/master-11.dot diff --git a/cts/scheduler/master-12.dot b/cts/scheduler/dot/master-12.dot similarity index 100% rename from cts/scheduler/master-12.dot rename to cts/scheduler/dot/master-12.dot diff --git a/cts/scheduler/master-13.dot b/cts/scheduler/dot/master-13.dot similarity index 100% rename from cts/scheduler/master-13.dot rename to cts/scheduler/dot/master-13.dot diff --git a/cts/scheduler/master-2.dot b/cts/scheduler/dot/master-2.dot similarity index 100% rename from cts/scheduler/master-2.dot rename to cts/scheduler/dot/master-2.dot diff --git a/cts/scheduler/master-3.dot b/cts/scheduler/dot/master-3.dot similarity index 100% rename from cts/scheduler/master-3.dot rename to cts/scheduler/dot/master-3.dot diff --git a/cts/scheduler/master-4.dot b/cts/scheduler/dot/master-4.dot similarity index 100% rename from cts/scheduler/master-4.dot rename to cts/scheduler/dot/master-4.dot diff --git a/cts/scheduler/master-5.dot b/cts/scheduler/dot/master-5.dot similarity index 100% rename from cts/scheduler/master-5.dot rename to cts/scheduler/dot/master-5.dot diff --git a/cts/scheduler/master-6.dot b/cts/scheduler/dot/master-6.dot similarity index 100% rename from cts/scheduler/master-6.dot rename to cts/scheduler/dot/master-6.dot diff --git a/cts/scheduler/master-7.dot b/cts/scheduler/dot/master-7.dot similarity index 100% rename from cts/scheduler/master-7.dot rename to cts/scheduler/dot/master-7.dot diff --git a/cts/scheduler/master-8.dot b/cts/scheduler/dot/master-8.dot similarity index 100% rename from cts/scheduler/master-8.dot rename to cts/scheduler/dot/master-8.dot diff --git a/cts/scheduler/master-9.dot b/cts/scheduler/dot/master-9.dot similarity index 100% rename from cts/scheduler/master-9.dot rename to cts/scheduler/dot/master-9.dot diff --git a/cts/scheduler/master-allow-start.dot b/cts/scheduler/dot/master-allow-start.dot similarity index 100% rename from cts/scheduler/master-allow-start.dot rename to cts/scheduler/dot/master-allow-start.dot diff --git a/cts/scheduler/master-asymmetrical-order.dot b/cts/scheduler/dot/master-asymmetrical-order.dot similarity index 100% rename from cts/scheduler/master-asymmetrical-order.dot rename to cts/scheduler/dot/master-asymmetrical-order.dot diff --git a/cts/scheduler/master-colocation.dot b/cts/scheduler/dot/master-colocation.dot similarity index 100% rename from cts/scheduler/master-colocation.dot rename to cts/scheduler/dot/master-colocation.dot diff --git a/cts/scheduler/master-demote-2.dot b/cts/scheduler/dot/master-demote-2.dot similarity index 100% rename from cts/scheduler/master-demote-2.dot rename to cts/scheduler/dot/master-demote-2.dot diff --git a/cts/scheduler/master-demote-block.dot b/cts/scheduler/dot/master-demote-block.dot similarity index 100% rename from cts/scheduler/master-demote-block.dot rename to cts/scheduler/dot/master-demote-block.dot diff --git a/cts/scheduler/master-demote.dot b/cts/scheduler/dot/master-demote.dot similarity index 100% rename from cts/scheduler/master-demote.dot rename to cts/scheduler/dot/master-demote.dot diff --git a/cts/scheduler/master-depend.dot b/cts/scheduler/dot/master-depend.dot similarity index 100% rename from cts/scheduler/master-depend.dot rename to cts/scheduler/dot/master-depend.dot diff --git a/cts/scheduler/master-dependent-ban.dot b/cts/scheduler/dot/master-dependent-ban.dot similarity index 100% rename from cts/scheduler/master-dependent-ban.dot rename to cts/scheduler/dot/master-dependent-ban.dot diff --git a/cts/scheduler/master-failed-demote-2.dot b/cts/scheduler/dot/master-failed-demote-2.dot similarity index 100% rename from cts/scheduler/master-failed-demote-2.dot rename to cts/scheduler/dot/master-failed-demote-2.dot diff --git a/cts/scheduler/master-failed-demote.dot b/cts/scheduler/dot/master-failed-demote.dot similarity index 100% rename from cts/scheduler/master-failed-demote.dot rename to cts/scheduler/dot/master-failed-demote.dot diff --git a/cts/scheduler/master-group.dot b/cts/scheduler/dot/master-group.dot similarity index 100% rename from cts/scheduler/master-group.dot rename to cts/scheduler/dot/master-group.dot diff --git a/cts/scheduler/master-move.dot b/cts/scheduler/dot/master-move.dot similarity index 100% rename from cts/scheduler/master-move.dot rename to cts/scheduler/dot/master-move.dot diff --git a/cts/scheduler/master-notify.dot b/cts/scheduler/dot/master-notify.dot similarity index 100% rename from cts/scheduler/master-notify.dot rename to cts/scheduler/dot/master-notify.dot diff --git a/cts/scheduler/master-ordering.dot b/cts/scheduler/dot/master-ordering.dot similarity index 100% rename from cts/scheduler/master-ordering.dot rename to cts/scheduler/dot/master-ordering.dot diff --git a/cts/scheduler/master-partially-demoted-group.dot b/cts/scheduler/dot/master-partially-demoted-group.dot similarity index 100% rename from cts/scheduler/master-partially-demoted-group.dot rename to cts/scheduler/dot/master-partially-demoted-group.dot diff --git a/cts/scheduler/master-probed-score.dot b/cts/scheduler/dot/master-probed-score.dot similarity index 100% rename from cts/scheduler/master-probed-score.dot rename to cts/scheduler/dot/master-probed-score.dot diff --git a/cts/scheduler/master-promotion-constraint.dot b/cts/scheduler/dot/master-promotion-constraint.dot similarity index 100% rename from cts/scheduler/master-promotion-constraint.dot rename to cts/scheduler/dot/master-promotion-constraint.dot diff --git a/cts/scheduler/master-pseudo.dot b/cts/scheduler/dot/master-pseudo.dot similarity index 100% rename from cts/scheduler/master-pseudo.dot rename to cts/scheduler/dot/master-pseudo.dot diff --git a/cts/scheduler/master-reattach.dot b/cts/scheduler/dot/master-reattach.dot similarity index 100% rename from cts/scheduler/master-reattach.dot rename to cts/scheduler/dot/master-reattach.dot diff --git a/cts/scheduler/master-role.dot b/cts/scheduler/dot/master-role.dot similarity index 100% rename from cts/scheduler/master-role.dot rename to cts/scheduler/dot/master-role.dot diff --git a/cts/scheduler/master-score-startup.dot b/cts/scheduler/dot/master-score-startup.dot similarity index 100% rename from cts/scheduler/master-score-startup.dot rename to cts/scheduler/dot/master-score-startup.dot diff --git a/cts/scheduler/master-stop.dot b/cts/scheduler/dot/master-stop.dot similarity index 100% rename from cts/scheduler/master-stop.dot rename to cts/scheduler/dot/master-stop.dot diff --git a/cts/scheduler/master-unmanaged-monitor.dot b/cts/scheduler/dot/master-unmanaged-monitor.dot similarity index 100% rename from cts/scheduler/master-unmanaged-monitor.dot rename to cts/scheduler/dot/master-unmanaged-monitor.dot diff --git a/cts/scheduler/master_monitor_restart.dot b/cts/scheduler/dot/master_monitor_restart.dot similarity index 100% rename from cts/scheduler/master_monitor_restart.dot rename to cts/scheduler/dot/master_monitor_restart.dot diff --git a/cts/scheduler/migrate-1.dot b/cts/scheduler/dot/migrate-1.dot similarity index 100% rename from cts/scheduler/migrate-1.dot rename to cts/scheduler/dot/migrate-1.dot diff --git a/cts/scheduler/migrate-2.dot b/cts/scheduler/dot/migrate-2.dot similarity index 100% rename from cts/scheduler/migrate-2.dot rename to cts/scheduler/dot/migrate-2.dot diff --git a/cts/scheduler/migrate-3.dot b/cts/scheduler/dot/migrate-3.dot similarity index 100% rename from cts/scheduler/migrate-3.dot rename to cts/scheduler/dot/migrate-3.dot diff --git a/cts/scheduler/migrate-4.dot b/cts/scheduler/dot/migrate-4.dot similarity index 100% rename from cts/scheduler/migrate-4.dot rename to cts/scheduler/dot/migrate-4.dot diff --git a/cts/scheduler/migrate-5.dot b/cts/scheduler/dot/migrate-5.dot similarity index 100% rename from cts/scheduler/migrate-5.dot rename to cts/scheduler/dot/migrate-5.dot diff --git a/cts/scheduler/migrate-begin.dot b/cts/scheduler/dot/migrate-begin.dot similarity index 100% rename from cts/scheduler/migrate-begin.dot rename to cts/scheduler/dot/migrate-begin.dot diff --git a/cts/scheduler/migrate-both-vms.dot b/cts/scheduler/dot/migrate-both-vms.dot similarity index 100% rename from cts/scheduler/migrate-both-vms.dot rename to cts/scheduler/dot/migrate-both-vms.dot diff --git a/cts/scheduler/migrate-fail-2.dot b/cts/scheduler/dot/migrate-fail-2.dot similarity index 100% rename from cts/scheduler/migrate-fail-2.dot rename to cts/scheduler/dot/migrate-fail-2.dot diff --git a/cts/scheduler/migrate-fail-3.dot b/cts/scheduler/dot/migrate-fail-3.dot similarity index 100% rename from cts/scheduler/migrate-fail-3.dot rename to cts/scheduler/dot/migrate-fail-3.dot diff --git a/cts/scheduler/migrate-fail-4.dot b/cts/scheduler/dot/migrate-fail-4.dot similarity index 100% rename from cts/scheduler/migrate-fail-4.dot rename to cts/scheduler/dot/migrate-fail-4.dot diff --git a/cts/scheduler/migrate-fail-5.dot b/cts/scheduler/dot/migrate-fail-5.dot similarity index 100% rename from cts/scheduler/migrate-fail-5.dot rename to cts/scheduler/dot/migrate-fail-5.dot diff --git a/cts/scheduler/migrate-fail-6.dot b/cts/scheduler/dot/migrate-fail-6.dot similarity index 100% rename from cts/scheduler/migrate-fail-6.dot rename to cts/scheduler/dot/migrate-fail-6.dot diff --git a/cts/scheduler/migrate-fail-7.dot b/cts/scheduler/dot/migrate-fail-7.dot similarity index 100% rename from cts/scheduler/migrate-fail-7.dot rename to cts/scheduler/dot/migrate-fail-7.dot diff --git a/cts/scheduler/migrate-fail-8.dot b/cts/scheduler/dot/migrate-fail-8.dot similarity index 100% rename from cts/scheduler/migrate-fail-8.dot rename to cts/scheduler/dot/migrate-fail-8.dot diff --git a/cts/scheduler/migrate-fail-9.dot b/cts/scheduler/dot/migrate-fail-9.dot similarity index 100% rename from cts/scheduler/migrate-fail-9.dot rename to cts/scheduler/dot/migrate-fail-9.dot diff --git a/cts/scheduler/migrate-fencing.dot b/cts/scheduler/dot/migrate-fencing.dot similarity index 100% rename from cts/scheduler/migrate-fencing.dot rename to cts/scheduler/dot/migrate-fencing.dot diff --git a/cts/scheduler/migrate-partial-1.dot b/cts/scheduler/dot/migrate-partial-1.dot similarity index 100% rename from cts/scheduler/migrate-partial-1.dot rename to cts/scheduler/dot/migrate-partial-1.dot diff --git a/cts/scheduler/migrate-partial-2.dot b/cts/scheduler/dot/migrate-partial-2.dot similarity index 100% rename from cts/scheduler/migrate-partial-2.dot rename to cts/scheduler/dot/migrate-partial-2.dot diff --git a/cts/scheduler/migrate-partial-3.dot b/cts/scheduler/dot/migrate-partial-3.dot similarity index 100% rename from cts/scheduler/migrate-partial-3.dot rename to cts/scheduler/dot/migrate-partial-3.dot diff --git a/cts/scheduler/migrate-partial-4.dot b/cts/scheduler/dot/migrate-partial-4.dot similarity index 100% rename from cts/scheduler/migrate-partial-4.dot rename to cts/scheduler/dot/migrate-partial-4.dot diff --git a/cts/scheduler/migrate-shutdown.dot b/cts/scheduler/dot/migrate-shutdown.dot similarity index 100% rename from cts/scheduler/migrate-shutdown.dot rename to cts/scheduler/dot/migrate-shutdown.dot diff --git a/cts/scheduler/migrate-start-complex.dot b/cts/scheduler/dot/migrate-start-complex.dot similarity index 100% rename from cts/scheduler/migrate-start-complex.dot rename to cts/scheduler/dot/migrate-start-complex.dot diff --git a/cts/scheduler/migrate-start.dot b/cts/scheduler/dot/migrate-start.dot similarity index 100% rename from cts/scheduler/migrate-start.dot rename to cts/scheduler/dot/migrate-start.dot diff --git a/cts/scheduler/migrate-stop-complex.dot b/cts/scheduler/dot/migrate-stop-complex.dot similarity index 100% rename from cts/scheduler/migrate-stop-complex.dot rename to cts/scheduler/dot/migrate-stop-complex.dot diff --git a/cts/scheduler/migrate-stop-start-complex.dot b/cts/scheduler/dot/migrate-stop-start-complex.dot similarity index 100% rename from cts/scheduler/migrate-stop-start-complex.dot rename to cts/scheduler/dot/migrate-stop-start-complex.dot diff --git a/cts/scheduler/migrate-stop.dot b/cts/scheduler/dot/migrate-stop.dot similarity index 100% rename from cts/scheduler/migrate-stop.dot rename to cts/scheduler/dot/migrate-stop.dot diff --git a/cts/scheduler/migrate-stop_start.dot b/cts/scheduler/dot/migrate-stop_start.dot similarity index 100% rename from cts/scheduler/migrate-stop_start.dot rename to cts/scheduler/dot/migrate-stop_start.dot diff --git a/cts/scheduler/migrate-success.dot b/cts/scheduler/dot/migrate-success.dot similarity index 100% rename from cts/scheduler/migrate-success.dot rename to cts/scheduler/dot/migrate-success.dot diff --git a/cts/scheduler/migrate-versioned.dot b/cts/scheduler/dot/migrate-versioned.dot similarity index 100% rename from cts/scheduler/migrate-versioned.dot rename to cts/scheduler/dot/migrate-versioned.dot diff --git a/cts/scheduler/migration-behind-migrating-remote.dot b/cts/scheduler/dot/migration-behind-migrating-remote.dot similarity index 100% rename from cts/scheduler/migration-behind-migrating-remote.dot rename to cts/scheduler/dot/migration-behind-migrating-remote.dot diff --git a/cts/scheduler/migration-ping-pong.dot b/cts/scheduler/dot/migration-ping-pong.dot similarity index 100% rename from cts/scheduler/migration-ping-pong.dot rename to cts/scheduler/dot/migration-ping-pong.dot diff --git a/cts/scheduler/minimal.dot b/cts/scheduler/dot/minimal.dot similarity index 100% rename from cts/scheduler/minimal.dot rename to cts/scheduler/dot/minimal.dot diff --git a/cts/scheduler/mon-rsc-1.dot b/cts/scheduler/dot/mon-rsc-1.dot similarity index 100% rename from cts/scheduler/mon-rsc-1.dot rename to cts/scheduler/dot/mon-rsc-1.dot diff --git a/cts/scheduler/mon-rsc-2.dot b/cts/scheduler/dot/mon-rsc-2.dot similarity index 100% rename from cts/scheduler/mon-rsc-2.dot rename to cts/scheduler/dot/mon-rsc-2.dot diff --git a/cts/scheduler/mon-rsc-3.dot b/cts/scheduler/dot/mon-rsc-3.dot similarity index 100% rename from cts/scheduler/mon-rsc-3.dot rename to cts/scheduler/dot/mon-rsc-3.dot diff --git a/cts/scheduler/mon-rsc-4.dot b/cts/scheduler/dot/mon-rsc-4.dot similarity index 100% rename from cts/scheduler/mon-rsc-4.dot rename to cts/scheduler/dot/mon-rsc-4.dot diff --git a/cts/scheduler/monitor-onfail-restart.dot b/cts/scheduler/dot/monitor-onfail-restart.dot similarity index 100% rename from cts/scheduler/monitor-onfail-restart.dot rename to cts/scheduler/dot/monitor-onfail-restart.dot diff --git a/cts/scheduler/monitor-onfail-stop.dot b/cts/scheduler/dot/monitor-onfail-stop.dot similarity index 100% rename from cts/scheduler/monitor-onfail-stop.dot rename to cts/scheduler/dot/monitor-onfail-stop.dot diff --git a/cts/scheduler/monitor-recovery.dot b/cts/scheduler/dot/monitor-recovery.dot similarity index 100% rename from cts/scheduler/monitor-recovery.dot rename to cts/scheduler/dot/monitor-recovery.dot diff --git a/cts/scheduler/multi1.dot b/cts/scheduler/dot/multi1.dot similarity index 100% rename from cts/scheduler/multi1.dot rename to cts/scheduler/dot/multi1.dot diff --git a/cts/scheduler/multiple-active-block-group.dot b/cts/scheduler/dot/multiple-active-block-group.dot similarity index 100% rename from cts/scheduler/multiple-active-block-group.dot rename to cts/scheduler/dot/multiple-active-block-group.dot diff --git a/cts/scheduler/multiple-monitor-one-failed.dot b/cts/scheduler/dot/multiple-monitor-one-failed.dot similarity index 100% rename from cts/scheduler/multiple-monitor-one-failed.dot rename to cts/scheduler/dot/multiple-monitor-one-failed.dot diff --git a/cts/scheduler/multiply-active-stonith.dot b/cts/scheduler/dot/multiply-active-stonith.dot similarity index 100% rename from cts/scheduler/multiply-active-stonith.dot rename to cts/scheduler/dot/multiply-active-stonith.dot diff --git a/cts/scheduler/nested-remote-recovery.dot b/cts/scheduler/dot/nested-remote-recovery.dot similarity index 100% rename from cts/scheduler/nested-remote-recovery.dot rename to cts/scheduler/dot/nested-remote-recovery.dot diff --git a/cts/scheduler/no-promote-on-unrunnable-guest.dot b/cts/scheduler/dot/no-promote-on-unrunnable-guest.dot similarity index 100% rename from cts/scheduler/no-promote-on-unrunnable-guest.dot rename to cts/scheduler/dot/no-promote-on-unrunnable-guest.dot diff --git a/cts/scheduler/no_quorum_demote.dot b/cts/scheduler/dot/no_quorum_demote.dot similarity index 100% rename from cts/scheduler/no_quorum_demote.dot rename to cts/scheduler/dot/no_quorum_demote.dot diff --git a/cts/scheduler/node-maintenance-1.dot b/cts/scheduler/dot/node-maintenance-1.dot similarity index 100% rename from cts/scheduler/node-maintenance-1.dot rename to cts/scheduler/dot/node-maintenance-1.dot diff --git a/cts/scheduler/node-maintenance-2.dot b/cts/scheduler/dot/node-maintenance-2.dot similarity index 100% rename from cts/scheduler/node-maintenance-2.dot rename to cts/scheduler/dot/node-maintenance-2.dot diff --git a/cts/scheduler/not-installed-agent.dot b/cts/scheduler/dot/not-installed-agent.dot similarity index 100% rename from cts/scheduler/not-installed-agent.dot rename to cts/scheduler/dot/not-installed-agent.dot diff --git a/cts/scheduler/not-installed-tools.dot b/cts/scheduler/dot/not-installed-tools.dot similarity index 100% rename from cts/scheduler/not-installed-tools.dot rename to cts/scheduler/dot/not-installed-tools.dot diff --git a/cts/scheduler/not-reschedule-unneeded-monitor.dot b/cts/scheduler/dot/not-reschedule-unneeded-monitor.dot similarity index 100% rename from cts/scheduler/not-reschedule-unneeded-monitor.dot rename to cts/scheduler/dot/not-reschedule-unneeded-monitor.dot diff --git a/cts/scheduler/notifs-for-unrunnable.dot b/cts/scheduler/dot/notifs-for-unrunnable.dot similarity index 100% rename from cts/scheduler/notifs-for-unrunnable.dot rename to cts/scheduler/dot/notifs-for-unrunnable.dot diff --git a/cts/scheduler/notify-0.dot b/cts/scheduler/dot/notify-0.dot similarity index 100% rename from cts/scheduler/notify-0.dot rename to cts/scheduler/dot/notify-0.dot diff --git a/cts/scheduler/notify-1.dot b/cts/scheduler/dot/notify-1.dot similarity index 100% rename from cts/scheduler/notify-1.dot rename to cts/scheduler/dot/notify-1.dot diff --git a/cts/scheduler/notify-2.dot b/cts/scheduler/dot/notify-2.dot similarity index 100% rename from cts/scheduler/notify-2.dot rename to cts/scheduler/dot/notify-2.dot diff --git a/cts/scheduler/notify-3.dot b/cts/scheduler/dot/notify-3.dot similarity index 100% rename from cts/scheduler/notify-3.dot rename to cts/scheduler/dot/notify-3.dot diff --git a/cts/scheduler/notify-behind-stopping-remote.dot b/cts/scheduler/dot/notify-behind-stopping-remote.dot similarity index 100% rename from cts/scheduler/notify-behind-stopping-remote.dot rename to cts/scheduler/dot/notify-behind-stopping-remote.dot diff --git a/cts/scheduler/novell-239079.dot b/cts/scheduler/dot/novell-239079.dot similarity index 100% rename from cts/scheduler/novell-239079.dot rename to cts/scheduler/dot/novell-239079.dot diff --git a/cts/scheduler/novell-239082.dot b/cts/scheduler/dot/novell-239082.dot similarity index 100% rename from cts/scheduler/novell-239082.dot rename to cts/scheduler/dot/novell-239082.dot diff --git a/cts/scheduler/novell-239087.dot b/cts/scheduler/dot/novell-239087.dot similarity index 100% rename from cts/scheduler/novell-239087.dot rename to cts/scheduler/dot/novell-239087.dot diff --git a/cts/scheduler/novell-251689.dot b/cts/scheduler/dot/novell-251689.dot similarity index 100% rename from cts/scheduler/novell-251689.dot rename to cts/scheduler/dot/novell-251689.dot diff --git a/cts/scheduler/novell-252693-2.dot b/cts/scheduler/dot/novell-252693-2.dot similarity index 100% rename from cts/scheduler/novell-252693-2.dot rename to cts/scheduler/dot/novell-252693-2.dot diff --git a/cts/scheduler/novell-252693-3.dot b/cts/scheduler/dot/novell-252693-3.dot similarity index 100% rename from cts/scheduler/novell-252693-3.dot rename to cts/scheduler/dot/novell-252693-3.dot diff --git a/cts/scheduler/novell-252693.dot b/cts/scheduler/dot/novell-252693.dot similarity index 100% rename from cts/scheduler/novell-252693.dot rename to cts/scheduler/dot/novell-252693.dot diff --git a/cts/scheduler/nvpair-date-rules-1.dot b/cts/scheduler/dot/nvpair-date-rules-1.dot similarity index 100% rename from cts/scheduler/nvpair-date-rules-1.dot rename to cts/scheduler/dot/nvpair-date-rules-1.dot diff --git a/cts/scheduler/nvpair-id-ref.dot b/cts/scheduler/dot/nvpair-id-ref.dot similarity index 100% rename from cts/scheduler/nvpair-id-ref.dot rename to cts/scheduler/dot/nvpair-id-ref.dot diff --git a/cts/scheduler/obsolete-lrm-resource.dot b/cts/scheduler/dot/obsolete-lrm-resource.dot similarity index 100% rename from cts/scheduler/obsolete-lrm-resource.dot rename to cts/scheduler/dot/obsolete-lrm-resource.dot diff --git a/cts/scheduler/ocf_degraded-remap-ocf_ok.dot b/cts/scheduler/dot/ocf_degraded-remap-ocf_ok.dot similarity index 100% rename from cts/scheduler/ocf_degraded-remap-ocf_ok.dot rename to cts/scheduler/dot/ocf_degraded-remap-ocf_ok.dot diff --git a/cts/scheduler/ocf_degraded_master-remap-ocf_ok.dot b/cts/scheduler/dot/ocf_degraded_master-remap-ocf_ok.dot similarity index 100% rename from cts/scheduler/ocf_degraded_master-remap-ocf_ok.dot rename to cts/scheduler/dot/ocf_degraded_master-remap-ocf_ok.dot diff --git a/cts/scheduler/on-fail-ignore.dot b/cts/scheduler/dot/on-fail-ignore.dot similarity index 100% rename from cts/scheduler/on-fail-ignore.dot rename to cts/scheduler/dot/on-fail-ignore.dot diff --git a/cts/scheduler/on_fail_demote1.dot b/cts/scheduler/dot/on_fail_demote1.dot similarity index 100% rename from cts/scheduler/on_fail_demote1.dot rename to cts/scheduler/dot/on_fail_demote1.dot diff --git a/cts/scheduler/on_fail_demote2.dot b/cts/scheduler/dot/on_fail_demote2.dot similarity index 100% rename from cts/scheduler/on_fail_demote2.dot rename to cts/scheduler/dot/on_fail_demote2.dot diff --git a/cts/scheduler/on_fail_demote3.dot b/cts/scheduler/dot/on_fail_demote3.dot similarity index 100% rename from cts/scheduler/on_fail_demote3.dot rename to cts/scheduler/dot/on_fail_demote3.dot diff --git a/cts/scheduler/on_fail_demote4.dot b/cts/scheduler/dot/on_fail_demote4.dot similarity index 100% rename from cts/scheduler/on_fail_demote4.dot rename to cts/scheduler/dot/on_fail_demote4.dot diff --git a/cts/scheduler/one-or-more-0.dot b/cts/scheduler/dot/one-or-more-0.dot similarity index 100% rename from cts/scheduler/one-or-more-0.dot rename to cts/scheduler/dot/one-or-more-0.dot diff --git a/cts/scheduler/one-or-more-1.dot b/cts/scheduler/dot/one-or-more-1.dot similarity index 100% rename from cts/scheduler/one-or-more-1.dot rename to cts/scheduler/dot/one-or-more-1.dot diff --git a/cts/scheduler/one-or-more-2.dot b/cts/scheduler/dot/one-or-more-2.dot similarity index 100% rename from cts/scheduler/one-or-more-2.dot rename to cts/scheduler/dot/one-or-more-2.dot diff --git a/cts/scheduler/one-or-more-3.dot b/cts/scheduler/dot/one-or-more-3.dot similarity index 100% rename from cts/scheduler/one-or-more-3.dot rename to cts/scheduler/dot/one-or-more-3.dot diff --git a/cts/scheduler/one-or-more-4.dot b/cts/scheduler/dot/one-or-more-4.dot similarity index 100% rename from cts/scheduler/one-or-more-4.dot rename to cts/scheduler/dot/one-or-more-4.dot diff --git a/cts/scheduler/one-or-more-5.dot b/cts/scheduler/dot/one-or-more-5.dot similarity index 100% rename from cts/scheduler/one-or-more-5.dot rename to cts/scheduler/dot/one-or-more-5.dot diff --git a/cts/scheduler/one-or-more-6.dot b/cts/scheduler/dot/one-or-more-6.dot similarity index 100% rename from cts/scheduler/one-or-more-6.dot rename to cts/scheduler/dot/one-or-more-6.dot diff --git a/cts/scheduler/one-or-more-7.dot b/cts/scheduler/dot/one-or-more-7.dot similarity index 100% rename from cts/scheduler/one-or-more-7.dot rename to cts/scheduler/dot/one-or-more-7.dot diff --git a/cts/scheduler/one-or-more-unrunnable-instances.dot b/cts/scheduler/dot/one-or-more-unrunnable-instances.dot similarity index 100% rename from cts/scheduler/one-or-more-unrunnable-instances.dot rename to cts/scheduler/dot/one-or-more-unrunnable-instances.dot diff --git a/cts/scheduler/op-defaults-2.dot b/cts/scheduler/dot/op-defaults-2.dot similarity index 100% rename from cts/scheduler/op-defaults-2.dot rename to cts/scheduler/dot/op-defaults-2.dot diff --git a/cts/scheduler/op-defaults-3.dot b/cts/scheduler/dot/op-defaults-3.dot similarity index 100% rename from cts/scheduler/op-defaults-3.dot rename to cts/scheduler/dot/op-defaults-3.dot diff --git a/cts/scheduler/op-defaults.dot b/cts/scheduler/dot/op-defaults.dot similarity index 100% rename from cts/scheduler/op-defaults.dot rename to cts/scheduler/dot/op-defaults.dot diff --git a/cts/scheduler/order-clone.dot b/cts/scheduler/dot/order-clone.dot similarity index 100% rename from cts/scheduler/order-clone.dot rename to cts/scheduler/dot/order-clone.dot diff --git a/cts/scheduler/order-expired-failure.dot b/cts/scheduler/dot/order-expired-failure.dot similarity index 100% rename from cts/scheduler/order-expired-failure.dot rename to cts/scheduler/dot/order-expired-failure.dot diff --git a/cts/scheduler/order-first-probes.dot b/cts/scheduler/dot/order-first-probes.dot similarity index 100% rename from cts/scheduler/order-first-probes.dot rename to cts/scheduler/dot/order-first-probes.dot diff --git a/cts/scheduler/order-mandatory.dot b/cts/scheduler/dot/order-mandatory.dot similarity index 100% rename from cts/scheduler/order-mandatory.dot rename to cts/scheduler/dot/order-mandatory.dot diff --git a/cts/scheduler/order-optional-keyword.dot b/cts/scheduler/dot/order-optional-keyword.dot similarity index 100% rename from cts/scheduler/order-optional-keyword.dot rename to cts/scheduler/dot/order-optional-keyword.dot diff --git a/cts/scheduler/order-optional.dot b/cts/scheduler/dot/order-optional.dot similarity index 100% rename from cts/scheduler/order-optional.dot rename to cts/scheduler/dot/order-optional.dot diff --git a/cts/scheduler/order-required.dot b/cts/scheduler/dot/order-required.dot similarity index 100% rename from cts/scheduler/order-required.dot rename to cts/scheduler/dot/order-required.dot diff --git a/cts/scheduler/order-serialize-set.dot b/cts/scheduler/dot/order-serialize-set.dot similarity index 100% rename from cts/scheduler/order-serialize-set.dot rename to cts/scheduler/dot/order-serialize-set.dot diff --git a/cts/scheduler/order-serialize.dot b/cts/scheduler/dot/order-serialize.dot similarity index 100% rename from cts/scheduler/order-serialize.dot rename to cts/scheduler/dot/order-serialize.dot diff --git a/cts/scheduler/order-sets.dot b/cts/scheduler/dot/order-sets.dot similarity index 100% rename from cts/scheduler/order-sets.dot rename to cts/scheduler/dot/order-sets.dot diff --git a/cts/scheduler/order-wrong-kind.dot b/cts/scheduler/dot/order-wrong-kind.dot similarity index 100% rename from cts/scheduler/order-wrong-kind.dot rename to cts/scheduler/dot/order-wrong-kind.dot diff --git a/cts/scheduler/order1.dot b/cts/scheduler/dot/order1.dot similarity index 100% rename from cts/scheduler/order1.dot rename to cts/scheduler/dot/order1.dot diff --git a/cts/scheduler/order2.dot b/cts/scheduler/dot/order2.dot similarity index 100% rename from cts/scheduler/order2.dot rename to cts/scheduler/dot/order2.dot diff --git a/cts/scheduler/order3.dot b/cts/scheduler/dot/order3.dot similarity index 100% rename from cts/scheduler/order3.dot rename to cts/scheduler/dot/order3.dot diff --git a/cts/scheduler/order4.dot b/cts/scheduler/dot/order4.dot similarity index 100% rename from cts/scheduler/order4.dot rename to cts/scheduler/dot/order4.dot diff --git a/cts/scheduler/order5.dot b/cts/scheduler/dot/order5.dot similarity index 100% rename from cts/scheduler/order5.dot rename to cts/scheduler/dot/order5.dot diff --git a/cts/scheduler/order6.dot b/cts/scheduler/dot/order6.dot similarity index 100% rename from cts/scheduler/order6.dot rename to cts/scheduler/dot/order6.dot diff --git a/cts/scheduler/order7.dot b/cts/scheduler/dot/order7.dot similarity index 100% rename from cts/scheduler/order7.dot rename to cts/scheduler/dot/order7.dot diff --git a/cts/scheduler/order_constraint_stops_master.dot b/cts/scheduler/dot/order_constraint_stops_master.dot similarity index 100% rename from cts/scheduler/order_constraint_stops_master.dot rename to cts/scheduler/dot/order_constraint_stops_master.dot diff --git a/cts/scheduler/order_constraint_stops_slave.dot b/cts/scheduler/dot/order_constraint_stops_slave.dot similarity index 100% rename from cts/scheduler/order_constraint_stops_slave.dot rename to cts/scheduler/dot/order_constraint_stops_slave.dot diff --git a/cts/scheduler/ordered-set-basic-startup.dot b/cts/scheduler/dot/ordered-set-basic-startup.dot similarity index 100% rename from cts/scheduler/ordered-set-basic-startup.dot rename to cts/scheduler/dot/ordered-set-basic-startup.dot diff --git a/cts/scheduler/ordered-set-natural.dot b/cts/scheduler/dot/ordered-set-natural.dot similarity index 100% rename from cts/scheduler/ordered-set-natural.dot rename to cts/scheduler/dot/ordered-set-natural.dot diff --git a/cts/scheduler/origin.dot b/cts/scheduler/dot/origin.dot similarity index 100% rename from cts/scheduler/origin.dot rename to cts/scheduler/dot/origin.dot diff --git a/cts/scheduler/orphan-0.dot b/cts/scheduler/dot/orphan-0.dot similarity index 100% rename from cts/scheduler/orphan-0.dot rename to cts/scheduler/dot/orphan-0.dot diff --git a/cts/scheduler/orphan-1.dot b/cts/scheduler/dot/orphan-1.dot similarity index 100% rename from cts/scheduler/orphan-1.dot rename to cts/scheduler/dot/orphan-1.dot diff --git a/cts/scheduler/orphan-2.dot b/cts/scheduler/dot/orphan-2.dot similarity index 100% rename from cts/scheduler/orphan-2.dot rename to cts/scheduler/dot/orphan-2.dot diff --git a/cts/scheduler/params-0.dot b/cts/scheduler/dot/params-0.dot similarity index 100% rename from cts/scheduler/params-0.dot rename to cts/scheduler/dot/params-0.dot diff --git a/cts/scheduler/params-1.dot b/cts/scheduler/dot/params-1.dot similarity index 100% rename from cts/scheduler/params-1.dot rename to cts/scheduler/dot/params-1.dot diff --git a/cts/scheduler/params-2.dot b/cts/scheduler/dot/params-2.dot similarity index 100% rename from cts/scheduler/params-2.dot rename to cts/scheduler/dot/params-2.dot diff --git a/cts/scheduler/params-3.dot b/cts/scheduler/dot/params-3.dot similarity index 100% rename from cts/scheduler/params-3.dot rename to cts/scheduler/dot/params-3.dot diff --git a/cts/scheduler/params-4.dot b/cts/scheduler/dot/params-4.dot similarity index 100% rename from cts/scheduler/params-4.dot rename to cts/scheduler/dot/params-4.dot diff --git a/cts/scheduler/params-5.dot b/cts/scheduler/dot/params-5.dot similarity index 100% rename from cts/scheduler/params-5.dot rename to cts/scheduler/dot/params-5.dot diff --git a/cts/scheduler/params-6.dot b/cts/scheduler/dot/params-6.dot similarity index 100% rename from cts/scheduler/params-6.dot rename to cts/scheduler/dot/params-6.dot diff --git a/cts/scheduler/per-node-attrs.dot b/cts/scheduler/dot/per-node-attrs.dot similarity index 100% rename from cts/scheduler/per-node-attrs.dot rename to cts/scheduler/dot/per-node-attrs.dot diff --git a/cts/scheduler/per-op-failcount.dot b/cts/scheduler/dot/per-op-failcount.dot similarity index 100% rename from cts/scheduler/per-op-failcount.dot rename to cts/scheduler/dot/per-op-failcount.dot diff --git a/cts/scheduler/placement-capacity.dot b/cts/scheduler/dot/placement-capacity.dot similarity index 100% rename from cts/scheduler/placement-capacity.dot rename to cts/scheduler/dot/placement-capacity.dot diff --git a/cts/scheduler/placement-location.dot b/cts/scheduler/dot/placement-location.dot similarity index 100% rename from cts/scheduler/placement-location.dot rename to cts/scheduler/dot/placement-location.dot diff --git a/cts/scheduler/placement-priority.dot b/cts/scheduler/dot/placement-priority.dot similarity index 100% rename from cts/scheduler/placement-priority.dot rename to cts/scheduler/dot/placement-priority.dot diff --git a/cts/scheduler/placement-stickiness.dot b/cts/scheduler/dot/placement-stickiness.dot similarity index 100% rename from cts/scheduler/placement-stickiness.dot rename to cts/scheduler/dot/placement-stickiness.dot diff --git a/cts/scheduler/priority-fencing-delay.dot b/cts/scheduler/dot/priority-fencing-delay.dot similarity index 100% rename from cts/scheduler/priority-fencing-delay.dot rename to cts/scheduler/dot/priority-fencing-delay.dot diff --git a/cts/scheduler/probe-0.dot b/cts/scheduler/dot/probe-0.dot similarity index 100% rename from cts/scheduler/probe-0.dot rename to cts/scheduler/dot/probe-0.dot diff --git a/cts/scheduler/probe-1.dot b/cts/scheduler/dot/probe-1.dot similarity index 100% rename from cts/scheduler/probe-1.dot rename to cts/scheduler/dot/probe-1.dot diff --git a/cts/scheduler/probe-2.dot b/cts/scheduler/dot/probe-2.dot similarity index 100% rename from cts/scheduler/probe-2.dot rename to cts/scheduler/dot/probe-2.dot diff --git a/cts/scheduler/probe-3.dot b/cts/scheduler/dot/probe-3.dot similarity index 100% rename from cts/scheduler/probe-3.dot rename to cts/scheduler/dot/probe-3.dot diff --git a/cts/scheduler/probe-4.dot b/cts/scheduler/dot/probe-4.dot similarity index 100% rename from cts/scheduler/probe-4.dot rename to cts/scheduler/dot/probe-4.dot diff --git a/cts/scheduler/probe-timeout.dot b/cts/scheduler/dot/probe-timeout.dot similarity index 100% rename from cts/scheduler/probe-timeout.dot rename to cts/scheduler/dot/probe-timeout.dot diff --git a/cts/scheduler/quorum-1.dot b/cts/scheduler/dot/quorum-1.dot similarity index 100% rename from cts/scheduler/quorum-1.dot rename to cts/scheduler/dot/quorum-1.dot diff --git a/cts/scheduler/quorum-2.dot b/cts/scheduler/dot/quorum-2.dot similarity index 100% rename from cts/scheduler/quorum-2.dot rename to cts/scheduler/dot/quorum-2.dot diff --git a/cts/scheduler/quorum-3.dot b/cts/scheduler/dot/quorum-3.dot similarity index 100% rename from cts/scheduler/quorum-3.dot rename to cts/scheduler/dot/quorum-3.dot diff --git a/cts/scheduler/quorum-4.dot b/cts/scheduler/dot/quorum-4.dot similarity index 100% rename from cts/scheduler/quorum-4.dot rename to cts/scheduler/dot/quorum-4.dot diff --git a/cts/scheduler/quorum-5.dot b/cts/scheduler/dot/quorum-5.dot similarity index 100% rename from cts/scheduler/quorum-5.dot rename to cts/scheduler/dot/quorum-5.dot diff --git a/cts/scheduler/quorum-6.dot b/cts/scheduler/dot/quorum-6.dot similarity index 100% rename from cts/scheduler/quorum-6.dot rename to cts/scheduler/dot/quorum-6.dot diff --git a/cts/scheduler/rebalance-unique-clones.dot b/cts/scheduler/dot/rebalance-unique-clones.dot similarity index 100% rename from cts/scheduler/rebalance-unique-clones.dot rename to cts/scheduler/dot/rebalance-unique-clones.dot diff --git a/cts/scheduler/rec-node-1.dot b/cts/scheduler/dot/rec-node-1.dot similarity index 100% rename from cts/scheduler/rec-node-1.dot rename to cts/scheduler/dot/rec-node-1.dot diff --git a/cts/scheduler/rec-node-10.dot b/cts/scheduler/dot/rec-node-10.dot similarity index 100% rename from cts/scheduler/rec-node-10.dot rename to cts/scheduler/dot/rec-node-10.dot diff --git a/cts/scheduler/rec-node-11.dot b/cts/scheduler/dot/rec-node-11.dot similarity index 100% rename from cts/scheduler/rec-node-11.dot rename to cts/scheduler/dot/rec-node-11.dot diff --git a/cts/scheduler/rec-node-12.dot b/cts/scheduler/dot/rec-node-12.dot similarity index 100% rename from cts/scheduler/rec-node-12.dot rename to cts/scheduler/dot/rec-node-12.dot diff --git a/cts/scheduler/rec-node-13.dot b/cts/scheduler/dot/rec-node-13.dot similarity index 100% rename from cts/scheduler/rec-node-13.dot rename to cts/scheduler/dot/rec-node-13.dot diff --git a/cts/scheduler/rec-node-14.dot b/cts/scheduler/dot/rec-node-14.dot similarity index 100% rename from cts/scheduler/rec-node-14.dot rename to cts/scheduler/dot/rec-node-14.dot diff --git a/cts/scheduler/rec-node-15.dot b/cts/scheduler/dot/rec-node-15.dot similarity index 100% rename from cts/scheduler/rec-node-15.dot rename to cts/scheduler/dot/rec-node-15.dot diff --git a/cts/scheduler/rec-node-2.dot b/cts/scheduler/dot/rec-node-2.dot similarity index 100% rename from cts/scheduler/rec-node-2.dot rename to cts/scheduler/dot/rec-node-2.dot diff --git a/cts/scheduler/rec-node-3.dot b/cts/scheduler/dot/rec-node-3.dot similarity index 100% rename from cts/scheduler/rec-node-3.dot rename to cts/scheduler/dot/rec-node-3.dot diff --git a/cts/scheduler/rec-node-4.dot b/cts/scheduler/dot/rec-node-4.dot similarity index 100% rename from cts/scheduler/rec-node-4.dot rename to cts/scheduler/dot/rec-node-4.dot diff --git a/cts/scheduler/rec-node-5.dot b/cts/scheduler/dot/rec-node-5.dot similarity index 100% rename from cts/scheduler/rec-node-5.dot rename to cts/scheduler/dot/rec-node-5.dot diff --git a/cts/scheduler/rec-node-6.dot b/cts/scheduler/dot/rec-node-6.dot similarity index 100% rename from cts/scheduler/rec-node-6.dot rename to cts/scheduler/dot/rec-node-6.dot diff --git a/cts/scheduler/rec-node-7.dot b/cts/scheduler/dot/rec-node-7.dot similarity index 100% rename from cts/scheduler/rec-node-7.dot rename to cts/scheduler/dot/rec-node-7.dot diff --git a/cts/scheduler/rec-node-8.dot b/cts/scheduler/dot/rec-node-8.dot similarity index 100% rename from cts/scheduler/rec-node-8.dot rename to cts/scheduler/dot/rec-node-8.dot diff --git a/cts/scheduler/rec-node-9.dot b/cts/scheduler/dot/rec-node-9.dot similarity index 100% rename from cts/scheduler/rec-node-9.dot rename to cts/scheduler/dot/rec-node-9.dot diff --git a/cts/scheduler/rec-rsc-0.dot b/cts/scheduler/dot/rec-rsc-0.dot similarity index 100% rename from cts/scheduler/rec-rsc-0.dot rename to cts/scheduler/dot/rec-rsc-0.dot diff --git a/cts/scheduler/rec-rsc-1.dot b/cts/scheduler/dot/rec-rsc-1.dot similarity index 100% rename from cts/scheduler/rec-rsc-1.dot rename to cts/scheduler/dot/rec-rsc-1.dot diff --git a/cts/scheduler/rec-rsc-2.dot b/cts/scheduler/dot/rec-rsc-2.dot similarity index 100% rename from cts/scheduler/rec-rsc-2.dot rename to cts/scheduler/dot/rec-rsc-2.dot diff --git a/cts/scheduler/rec-rsc-3.dot b/cts/scheduler/dot/rec-rsc-3.dot similarity index 100% rename from cts/scheduler/rec-rsc-3.dot rename to cts/scheduler/dot/rec-rsc-3.dot diff --git a/cts/scheduler/rec-rsc-4.dot b/cts/scheduler/dot/rec-rsc-4.dot similarity index 100% rename from cts/scheduler/rec-rsc-4.dot rename to cts/scheduler/dot/rec-rsc-4.dot diff --git a/cts/scheduler/rec-rsc-5.dot b/cts/scheduler/dot/rec-rsc-5.dot similarity index 100% rename from cts/scheduler/rec-rsc-5.dot rename to cts/scheduler/dot/rec-rsc-5.dot diff --git a/cts/scheduler/rec-rsc-6.dot b/cts/scheduler/dot/rec-rsc-6.dot similarity index 100% rename from cts/scheduler/rec-rsc-6.dot rename to cts/scheduler/dot/rec-rsc-6.dot diff --git a/cts/scheduler/rec-rsc-7.dot b/cts/scheduler/dot/rec-rsc-7.dot similarity index 100% rename from cts/scheduler/rec-rsc-7.dot rename to cts/scheduler/dot/rec-rsc-7.dot diff --git a/cts/scheduler/rec-rsc-8.dot b/cts/scheduler/dot/rec-rsc-8.dot similarity index 100% rename from cts/scheduler/rec-rsc-8.dot rename to cts/scheduler/dot/rec-rsc-8.dot diff --git a/cts/scheduler/rec-rsc-9.dot b/cts/scheduler/dot/rec-rsc-9.dot similarity index 100% rename from cts/scheduler/rec-rsc-9.dot rename to cts/scheduler/dot/rec-rsc-9.dot diff --git a/cts/scheduler/reload-becomes-restart.dot b/cts/scheduler/dot/reload-becomes-restart.dot similarity index 100% rename from cts/scheduler/reload-becomes-restart.dot rename to cts/scheduler/dot/reload-becomes-restart.dot diff --git a/cts/scheduler/reload-versioned.dot b/cts/scheduler/dot/reload-versioned.dot similarity index 100% rename from cts/scheduler/reload-versioned.dot rename to cts/scheduler/dot/reload-versioned.dot diff --git a/cts/scheduler/remote-connection-shutdown.dot b/cts/scheduler/dot/remote-connection-shutdown.dot similarity index 100% rename from cts/scheduler/remote-connection-shutdown.dot rename to cts/scheduler/dot/remote-connection-shutdown.dot diff --git a/cts/scheduler/remote-connection-unrecoverable.dot b/cts/scheduler/dot/remote-connection-unrecoverable.dot similarity index 100% rename from cts/scheduler/remote-connection-unrecoverable.dot rename to cts/scheduler/dot/remote-connection-unrecoverable.dot diff --git a/cts/scheduler/remote-disable.dot b/cts/scheduler/dot/remote-disable.dot similarity index 100% rename from cts/scheduler/remote-disable.dot rename to cts/scheduler/dot/remote-disable.dot diff --git a/cts/scheduler/remote-fence-before-reconnect.dot b/cts/scheduler/dot/remote-fence-before-reconnect.dot similarity index 100% rename from cts/scheduler/remote-fence-before-reconnect.dot rename to cts/scheduler/dot/remote-fence-before-reconnect.dot diff --git a/cts/scheduler/remote-fence-unclean-3.dot b/cts/scheduler/dot/remote-fence-unclean-3.dot similarity index 100% rename from cts/scheduler/remote-fence-unclean-3.dot rename to cts/scheduler/dot/remote-fence-unclean-3.dot diff --git a/cts/scheduler/remote-fence-unclean.dot b/cts/scheduler/dot/remote-fence-unclean.dot similarity index 100% rename from cts/scheduler/remote-fence-unclean.dot rename to cts/scheduler/dot/remote-fence-unclean.dot diff --git a/cts/scheduler/remote-fence-unclean2.dot b/cts/scheduler/dot/remote-fence-unclean2.dot similarity index 100% rename from cts/scheduler/remote-fence-unclean2.dot rename to cts/scheduler/dot/remote-fence-unclean2.dot diff --git a/cts/scheduler/remote-move.dot b/cts/scheduler/dot/remote-move.dot similarity index 100% rename from cts/scheduler/remote-move.dot rename to cts/scheduler/dot/remote-move.dot diff --git a/cts/scheduler/remote-orphaned.dot b/cts/scheduler/dot/remote-orphaned.dot similarity index 100% rename from cts/scheduler/remote-orphaned.dot rename to cts/scheduler/dot/remote-orphaned.dot diff --git a/cts/scheduler/remote-orphaned2.dot b/cts/scheduler/dot/remote-orphaned2.dot similarity index 100% rename from cts/scheduler/remote-orphaned2.dot rename to cts/scheduler/dot/remote-orphaned2.dot diff --git a/cts/scheduler/remote-partial-migrate.dot b/cts/scheduler/dot/remote-partial-migrate.dot similarity index 100% rename from cts/scheduler/remote-partial-migrate.dot rename to cts/scheduler/dot/remote-partial-migrate.dot diff --git a/cts/scheduler/remote-partial-migrate2.dot b/cts/scheduler/dot/remote-partial-migrate2.dot similarity index 100% rename from cts/scheduler/remote-partial-migrate2.dot rename to cts/scheduler/dot/remote-partial-migrate2.dot diff --git a/cts/scheduler/remote-probe-disable.dot b/cts/scheduler/dot/remote-probe-disable.dot similarity index 100% rename from cts/scheduler/remote-probe-disable.dot rename to cts/scheduler/dot/remote-probe-disable.dot diff --git a/cts/scheduler/remote-reconnect-delay.dot b/cts/scheduler/dot/remote-reconnect-delay.dot similarity index 100% rename from cts/scheduler/remote-reconnect-delay.dot rename to cts/scheduler/dot/remote-reconnect-delay.dot diff --git a/cts/scheduler/remote-recover-all.dot b/cts/scheduler/dot/remote-recover-all.dot similarity index 100% rename from cts/scheduler/remote-recover-all.dot rename to cts/scheduler/dot/remote-recover-all.dot diff --git a/cts/scheduler/remote-recover-connection.dot b/cts/scheduler/dot/remote-recover-connection.dot similarity index 100% rename from cts/scheduler/remote-recover-connection.dot rename to cts/scheduler/dot/remote-recover-connection.dot diff --git a/cts/scheduler/remote-recover-fail.dot b/cts/scheduler/dot/remote-recover-fail.dot similarity index 100% rename from cts/scheduler/remote-recover-fail.dot rename to cts/scheduler/dot/remote-recover-fail.dot diff --git a/cts/scheduler/remote-recover-no-resources.dot b/cts/scheduler/dot/remote-recover-no-resources.dot similarity index 100% rename from cts/scheduler/remote-recover-no-resources.dot rename to cts/scheduler/dot/remote-recover-no-resources.dot diff --git a/cts/scheduler/remote-recover-unknown.dot b/cts/scheduler/dot/remote-recover-unknown.dot similarity index 100% rename from cts/scheduler/remote-recover-unknown.dot rename to cts/scheduler/dot/remote-recover-unknown.dot diff --git a/cts/scheduler/remote-recover.dot b/cts/scheduler/dot/remote-recover.dot similarity index 100% rename from cts/scheduler/remote-recover.dot rename to cts/scheduler/dot/remote-recover.dot diff --git a/cts/scheduler/remote-recovery.dot b/cts/scheduler/dot/remote-recovery.dot similarity index 100% rename from cts/scheduler/remote-recovery.dot rename to cts/scheduler/dot/remote-recovery.dot diff --git a/cts/scheduler/remote-stale-node-entry.dot b/cts/scheduler/dot/remote-stale-node-entry.dot similarity index 100% rename from cts/scheduler/remote-stale-node-entry.dot rename to cts/scheduler/dot/remote-stale-node-entry.dot diff --git a/cts/scheduler/remote-start-fail.dot b/cts/scheduler/dot/remote-start-fail.dot similarity index 100% rename from cts/scheduler/remote-start-fail.dot rename to cts/scheduler/dot/remote-start-fail.dot diff --git a/cts/scheduler/remote-startup-probes.dot b/cts/scheduler/dot/remote-startup-probes.dot similarity index 100% rename from cts/scheduler/remote-startup-probes.dot rename to cts/scheduler/dot/remote-startup-probes.dot diff --git a/cts/scheduler/remote-startup.dot b/cts/scheduler/dot/remote-startup.dot similarity index 100% rename from cts/scheduler/remote-startup.dot rename to cts/scheduler/dot/remote-startup.dot diff --git a/cts/scheduler/remote-unclean2.dot b/cts/scheduler/dot/remote-unclean2.dot similarity index 100% rename from cts/scheduler/remote-unclean2.dot rename to cts/scheduler/dot/remote-unclean2.dot diff --git a/cts/scheduler/reprobe-target_rc.dot b/cts/scheduler/dot/reprobe-target_rc.dot similarity index 100% rename from cts/scheduler/reprobe-target_rc.dot rename to cts/scheduler/dot/reprobe-target_rc.dot diff --git a/cts/scheduler/resource-discovery.dot b/cts/scheduler/dot/resource-discovery.dot similarity index 100% rename from cts/scheduler/resource-discovery.dot rename to cts/scheduler/dot/resource-discovery.dot diff --git a/cts/scheduler/restart-versioned.dot b/cts/scheduler/dot/restart-versioned.dot similarity index 100% rename from cts/scheduler/restart-versioned.dot rename to cts/scheduler/dot/restart-versioned.dot diff --git a/cts/scheduler/route-remote-notify.dot b/cts/scheduler/dot/route-remote-notify.dot similarity index 100% rename from cts/scheduler/route-remote-notify.dot rename to cts/scheduler/dot/route-remote-notify.dot diff --git a/cts/scheduler/rsc-defaults-2.dot b/cts/scheduler/dot/rsc-defaults-2.dot similarity index 100% rename from cts/scheduler/rsc-defaults-2.dot rename to cts/scheduler/dot/rsc-defaults-2.dot diff --git a/cts/scheduler/rsc-defaults.dot b/cts/scheduler/dot/rsc-defaults.dot similarity index 100% rename from cts/scheduler/rsc-defaults.dot rename to cts/scheduler/dot/rsc-defaults.dot diff --git a/cts/scheduler/rsc-discovery-per-node.dot b/cts/scheduler/dot/rsc-discovery-per-node.dot similarity index 100% rename from cts/scheduler/rsc-discovery-per-node.dot rename to cts/scheduler/dot/rsc-discovery-per-node.dot diff --git a/cts/scheduler/rsc-maintenance.dot b/cts/scheduler/dot/rsc-maintenance.dot similarity index 100% rename from cts/scheduler/rsc-maintenance.dot rename to cts/scheduler/dot/rsc-maintenance.dot diff --git a/cts/scheduler/rsc-sets-clone-1.dot b/cts/scheduler/dot/rsc-sets-clone-1.dot similarity index 100% rename from cts/scheduler/rsc-sets-clone-1.dot rename to cts/scheduler/dot/rsc-sets-clone-1.dot diff --git a/cts/scheduler/rsc-sets-clone.dot b/cts/scheduler/dot/rsc-sets-clone.dot similarity index 100% rename from cts/scheduler/rsc-sets-clone.dot rename to cts/scheduler/dot/rsc-sets-clone.dot diff --git a/cts/scheduler/rsc-sets-master.dot b/cts/scheduler/dot/rsc-sets-master.dot similarity index 100% rename from cts/scheduler/rsc-sets-master.dot rename to cts/scheduler/dot/rsc-sets-master.dot diff --git a/cts/scheduler/rsc-sets-seq-false.dot b/cts/scheduler/dot/rsc-sets-seq-false.dot similarity index 100% rename from cts/scheduler/rsc-sets-seq-false.dot rename to cts/scheduler/dot/rsc-sets-seq-false.dot diff --git a/cts/scheduler/rsc-sets-seq-true.dot b/cts/scheduler/dot/rsc-sets-seq-true.dot similarity index 100% rename from cts/scheduler/rsc-sets-seq-true.dot rename to cts/scheduler/dot/rsc-sets-seq-true.dot diff --git a/cts/scheduler/rsc_dep1.dot b/cts/scheduler/dot/rsc_dep1.dot similarity index 100% rename from cts/scheduler/rsc_dep1.dot rename to cts/scheduler/dot/rsc_dep1.dot diff --git a/cts/scheduler/rsc_dep10.dot b/cts/scheduler/dot/rsc_dep10.dot similarity index 100% rename from cts/scheduler/rsc_dep10.dot rename to cts/scheduler/dot/rsc_dep10.dot diff --git a/cts/scheduler/rsc_dep2.dot b/cts/scheduler/dot/rsc_dep2.dot similarity index 100% rename from cts/scheduler/rsc_dep2.dot rename to cts/scheduler/dot/rsc_dep2.dot diff --git a/cts/scheduler/rsc_dep3.dot b/cts/scheduler/dot/rsc_dep3.dot similarity index 100% rename from cts/scheduler/rsc_dep3.dot rename to cts/scheduler/dot/rsc_dep3.dot diff --git a/cts/scheduler/rsc_dep4.dot b/cts/scheduler/dot/rsc_dep4.dot similarity index 100% rename from cts/scheduler/rsc_dep4.dot rename to cts/scheduler/dot/rsc_dep4.dot diff --git a/cts/scheduler/rsc_dep5.dot b/cts/scheduler/dot/rsc_dep5.dot similarity index 100% rename from cts/scheduler/rsc_dep5.dot rename to cts/scheduler/dot/rsc_dep5.dot diff --git a/cts/scheduler/rsc_dep7.dot b/cts/scheduler/dot/rsc_dep7.dot similarity index 100% rename from cts/scheduler/rsc_dep7.dot rename to cts/scheduler/dot/rsc_dep7.dot diff --git a/cts/scheduler/rsc_dep8.dot b/cts/scheduler/dot/rsc_dep8.dot similarity index 100% rename from cts/scheduler/rsc_dep8.dot rename to cts/scheduler/dot/rsc_dep8.dot diff --git a/cts/scheduler/rule-dbl-as-auto-number-match.dot b/cts/scheduler/dot/rule-dbl-as-auto-number-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-match.dot rename to cts/scheduler/dot/rule-dbl-as-auto-number-match.dot diff --git a/cts/scheduler/rule-dbl-as-auto-number-no-match.dot b/cts/scheduler/dot/rule-dbl-as-auto-number-no-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-no-match.dot rename to cts/scheduler/dot/rule-dbl-as-auto-number-no-match.dot diff --git a/cts/scheduler/rule-dbl-as-integer-match.dot b/cts/scheduler/dot/rule-dbl-as-integer-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-match.dot rename to cts/scheduler/dot/rule-dbl-as-integer-match.dot diff --git a/cts/scheduler/rule-dbl-as-integer-no-match.dot b/cts/scheduler/dot/rule-dbl-as-integer-no-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-no-match.dot rename to cts/scheduler/dot/rule-dbl-as-integer-no-match.dot diff --git a/cts/scheduler/rule-dbl-as-number-match.dot b/cts/scheduler/dot/rule-dbl-as-number-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-as-number-match.dot rename to cts/scheduler/dot/rule-dbl-as-number-match.dot diff --git a/cts/scheduler/rule-dbl-as-number-no-match.dot b/cts/scheduler/dot/rule-dbl-as-number-no-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-as-number-no-match.dot rename to cts/scheduler/dot/rule-dbl-as-number-no-match.dot diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-match.dot b/cts/scheduler/dot/rule-dbl-parse-fail-default-str-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-match.dot rename to cts/scheduler/dot/rule-dbl-parse-fail-default-str-match.dot diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-no-match.dot b/cts/scheduler/dot/rule-dbl-parse-fail-default-str-no-match.dot similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-no-match.dot rename to cts/scheduler/dot/rule-dbl-parse-fail-default-str-no-match.dot diff --git a/cts/scheduler/rule-int-as-auto-integer-match.dot b/cts/scheduler/dot/rule-int-as-auto-integer-match.dot similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-match.dot rename to cts/scheduler/dot/rule-int-as-auto-integer-match.dot diff --git a/cts/scheduler/rule-int-as-auto-integer-no-match.dot b/cts/scheduler/dot/rule-int-as-auto-integer-no-match.dot similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-no-match.dot rename to cts/scheduler/dot/rule-int-as-auto-integer-no-match.dot diff --git a/cts/scheduler/rule-int-as-integer-match.dot b/cts/scheduler/dot/rule-int-as-integer-match.dot similarity index 100% rename from cts/scheduler/rule-int-as-integer-match.dot rename to cts/scheduler/dot/rule-int-as-integer-match.dot diff --git a/cts/scheduler/rule-int-as-integer-no-match.dot b/cts/scheduler/dot/rule-int-as-integer-no-match.dot similarity index 100% rename from cts/scheduler/rule-int-as-integer-no-match.dot rename to cts/scheduler/dot/rule-int-as-integer-no-match.dot diff --git a/cts/scheduler/rule-int-as-number-match.dot b/cts/scheduler/dot/rule-int-as-number-match.dot similarity index 100% rename from cts/scheduler/rule-int-as-number-match.dot rename to cts/scheduler/dot/rule-int-as-number-match.dot diff --git a/cts/scheduler/rule-int-as-number-no-match.dot b/cts/scheduler/dot/rule-int-as-number-no-match.dot similarity index 100% rename from cts/scheduler/rule-int-as-number-no-match.dot rename to cts/scheduler/dot/rule-int-as-number-no-match.dot diff --git a/cts/scheduler/rule-int-parse-fail-default-str-match.dot b/cts/scheduler/dot/rule-int-parse-fail-default-str-match.dot similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-match.dot rename to cts/scheduler/dot/rule-int-parse-fail-default-str-match.dot diff --git a/cts/scheduler/rule-int-parse-fail-default-str-no-match.dot b/cts/scheduler/dot/rule-int-parse-fail-default-str-no-match.dot similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-no-match.dot rename to cts/scheduler/dot/rule-int-parse-fail-default-str-no-match.dot diff --git a/cts/scheduler/shutdown-lock-expiration.dot b/cts/scheduler/dot/shutdown-lock-expiration.dot similarity index 100% rename from cts/scheduler/shutdown-lock-expiration.dot rename to cts/scheduler/dot/shutdown-lock-expiration.dot diff --git a/cts/scheduler/shutdown-lock.dot b/cts/scheduler/dot/shutdown-lock.dot similarity index 100% rename from cts/scheduler/shutdown-lock.dot rename to cts/scheduler/dot/shutdown-lock.dot diff --git a/cts/scheduler/shutdown-maintenance-node.dot b/cts/scheduler/dot/shutdown-maintenance-node.dot similarity index 100% rename from cts/scheduler/shutdown-maintenance-node.dot rename to cts/scheduler/dot/shutdown-maintenance-node.dot diff --git a/cts/scheduler/simple1.dot b/cts/scheduler/dot/simple1.dot similarity index 100% rename from cts/scheduler/simple1.dot rename to cts/scheduler/dot/simple1.dot diff --git a/cts/scheduler/simple11.dot b/cts/scheduler/dot/simple11.dot similarity index 100% rename from cts/scheduler/simple11.dot rename to cts/scheduler/dot/simple11.dot diff --git a/cts/scheduler/simple12.dot b/cts/scheduler/dot/simple12.dot similarity index 100% rename from cts/scheduler/simple12.dot rename to cts/scheduler/dot/simple12.dot diff --git a/cts/scheduler/simple2.dot b/cts/scheduler/dot/simple2.dot similarity index 100% rename from cts/scheduler/simple2.dot rename to cts/scheduler/dot/simple2.dot diff --git a/cts/scheduler/simple3.dot b/cts/scheduler/dot/simple3.dot similarity index 100% rename from cts/scheduler/simple3.dot rename to cts/scheduler/dot/simple3.dot diff --git a/cts/scheduler/simple4.dot b/cts/scheduler/dot/simple4.dot similarity index 100% rename from cts/scheduler/simple4.dot rename to cts/scheduler/dot/simple4.dot diff --git a/cts/scheduler/simple6.dot b/cts/scheduler/dot/simple6.dot similarity index 100% rename from cts/scheduler/simple6.dot rename to cts/scheduler/dot/simple6.dot diff --git a/cts/scheduler/simple7.dot b/cts/scheduler/dot/simple7.dot similarity index 100% rename from cts/scheduler/simple7.dot rename to cts/scheduler/dot/simple7.dot diff --git a/cts/scheduler/simple8.dot b/cts/scheduler/dot/simple8.dot similarity index 100% rename from cts/scheduler/simple8.dot rename to cts/scheduler/dot/simple8.dot diff --git a/cts/scheduler/site-specific-params.dot b/cts/scheduler/dot/site-specific-params.dot similarity index 100% rename from cts/scheduler/site-specific-params.dot rename to cts/scheduler/dot/site-specific-params.dot diff --git a/cts/scheduler/standby.dot b/cts/scheduler/dot/standby.dot similarity index 100% rename from cts/scheduler/standby.dot rename to cts/scheduler/dot/standby.dot diff --git a/cts/scheduler/start-then-stop-with-unfence.dot b/cts/scheduler/dot/start-then-stop-with-unfence.dot similarity index 100% rename from cts/scheduler/start-then-stop-with-unfence.dot rename to cts/scheduler/dot/start-then-stop-with-unfence.dot diff --git a/cts/scheduler/stonith-0.dot b/cts/scheduler/dot/stonith-0.dot similarity index 100% rename from cts/scheduler/stonith-0.dot rename to cts/scheduler/dot/stonith-0.dot diff --git a/cts/scheduler/stonith-1.dot b/cts/scheduler/dot/stonith-1.dot similarity index 100% rename from cts/scheduler/stonith-1.dot rename to cts/scheduler/dot/stonith-1.dot diff --git a/cts/scheduler/stonith-2.dot b/cts/scheduler/dot/stonith-2.dot similarity index 100% rename from cts/scheduler/stonith-2.dot rename to cts/scheduler/dot/stonith-2.dot diff --git a/cts/scheduler/stonith-3.dot b/cts/scheduler/dot/stonith-3.dot similarity index 100% rename from cts/scheduler/stonith-3.dot rename to cts/scheduler/dot/stonith-3.dot diff --git a/cts/scheduler/stonith-4.dot b/cts/scheduler/dot/stonith-4.dot similarity index 100% rename from cts/scheduler/stonith-4.dot rename to cts/scheduler/dot/stonith-4.dot diff --git a/cts/scheduler/stop-all-resources.dot b/cts/scheduler/dot/stop-all-resources.dot similarity index 100% rename from cts/scheduler/stop-all-resources.dot rename to cts/scheduler/dot/stop-all-resources.dot diff --git a/cts/scheduler/stop-failure-no-fencing.dot b/cts/scheduler/dot/stop-failure-no-fencing.dot similarity index 100% rename from cts/scheduler/stop-failure-no-fencing.dot rename to cts/scheduler/dot/stop-failure-no-fencing.dot diff --git a/cts/scheduler/stop-failure-no-quorum.dot b/cts/scheduler/dot/stop-failure-no-quorum.dot similarity index 100% rename from cts/scheduler/stop-failure-no-quorum.dot rename to cts/scheduler/dot/stop-failure-no-quorum.dot diff --git a/cts/scheduler/stop-failure-with-fencing.dot b/cts/scheduler/dot/stop-failure-with-fencing.dot similarity index 100% rename from cts/scheduler/stop-failure-with-fencing.dot rename to cts/scheduler/dot/stop-failure-with-fencing.dot diff --git a/cts/scheduler/stopped-monitor-00.dot b/cts/scheduler/dot/stopped-monitor-00.dot similarity index 100% rename from cts/scheduler/stopped-monitor-00.dot rename to cts/scheduler/dot/stopped-monitor-00.dot diff --git a/cts/scheduler/stopped-monitor-01.dot b/cts/scheduler/dot/stopped-monitor-01.dot similarity index 100% rename from cts/scheduler/stopped-monitor-01.dot rename to cts/scheduler/dot/stopped-monitor-01.dot diff --git a/cts/scheduler/stopped-monitor-02.dot b/cts/scheduler/dot/stopped-monitor-02.dot similarity index 100% rename from cts/scheduler/stopped-monitor-02.dot rename to cts/scheduler/dot/stopped-monitor-02.dot diff --git a/cts/scheduler/stopped-monitor-03.dot b/cts/scheduler/dot/stopped-monitor-03.dot similarity index 100% rename from cts/scheduler/stopped-monitor-03.dot rename to cts/scheduler/dot/stopped-monitor-03.dot diff --git a/cts/scheduler/stopped-monitor-04.dot b/cts/scheduler/dot/stopped-monitor-04.dot similarity index 100% rename from cts/scheduler/stopped-monitor-04.dot rename to cts/scheduler/dot/stopped-monitor-04.dot diff --git a/cts/scheduler/stopped-monitor-05.dot b/cts/scheduler/dot/stopped-monitor-05.dot similarity index 100% rename from cts/scheduler/stopped-monitor-05.dot rename to cts/scheduler/dot/stopped-monitor-05.dot diff --git a/cts/scheduler/stopped-monitor-06.dot b/cts/scheduler/dot/stopped-monitor-06.dot similarity index 100% rename from cts/scheduler/stopped-monitor-06.dot rename to cts/scheduler/dot/stopped-monitor-06.dot diff --git a/cts/scheduler/stopped-monitor-07.dot b/cts/scheduler/dot/stopped-monitor-07.dot similarity index 100% rename from cts/scheduler/stopped-monitor-07.dot rename to cts/scheduler/dot/stopped-monitor-07.dot diff --git a/cts/scheduler/stopped-monitor-08.dot b/cts/scheduler/dot/stopped-monitor-08.dot similarity index 100% rename from cts/scheduler/stopped-monitor-08.dot rename to cts/scheduler/dot/stopped-monitor-08.dot diff --git a/cts/scheduler/stopped-monitor-09.dot b/cts/scheduler/dot/stopped-monitor-09.dot similarity index 100% rename from cts/scheduler/stopped-monitor-09.dot rename to cts/scheduler/dot/stopped-monitor-09.dot diff --git a/cts/scheduler/stopped-monitor-10.dot b/cts/scheduler/dot/stopped-monitor-10.dot similarity index 100% rename from cts/scheduler/stopped-monitor-10.dot rename to cts/scheduler/dot/stopped-monitor-10.dot diff --git a/cts/scheduler/stopped-monitor-11.dot b/cts/scheduler/dot/stopped-monitor-11.dot similarity index 100% rename from cts/scheduler/stopped-monitor-11.dot rename to cts/scheduler/dot/stopped-monitor-11.dot diff --git a/cts/scheduler/stopped-monitor-12.dot b/cts/scheduler/dot/stopped-monitor-12.dot similarity index 100% rename from cts/scheduler/stopped-monitor-12.dot rename to cts/scheduler/dot/stopped-monitor-12.dot diff --git a/cts/scheduler/stopped-monitor-20.dot b/cts/scheduler/dot/stopped-monitor-20.dot similarity index 100% rename from cts/scheduler/stopped-monitor-20.dot rename to cts/scheduler/dot/stopped-monitor-20.dot diff --git a/cts/scheduler/stopped-monitor-21.dot b/cts/scheduler/dot/stopped-monitor-21.dot similarity index 100% rename from cts/scheduler/stopped-monitor-21.dot rename to cts/scheduler/dot/stopped-monitor-21.dot diff --git a/cts/scheduler/stopped-monitor-22.dot b/cts/scheduler/dot/stopped-monitor-22.dot similarity index 100% rename from cts/scheduler/stopped-monitor-22.dot rename to cts/scheduler/dot/stopped-monitor-22.dot diff --git a/cts/scheduler/stopped-monitor-23.dot b/cts/scheduler/dot/stopped-monitor-23.dot similarity index 100% rename from cts/scheduler/stopped-monitor-23.dot rename to cts/scheduler/dot/stopped-monitor-23.dot diff --git a/cts/scheduler/stopped-monitor-24.dot b/cts/scheduler/dot/stopped-monitor-24.dot similarity index 100% rename from cts/scheduler/stopped-monitor-24.dot rename to cts/scheduler/dot/stopped-monitor-24.dot diff --git a/cts/scheduler/stopped-monitor-25.dot b/cts/scheduler/dot/stopped-monitor-25.dot similarity index 100% rename from cts/scheduler/stopped-monitor-25.dot rename to cts/scheduler/dot/stopped-monitor-25.dot diff --git a/cts/scheduler/stopped-monitor-26.dot b/cts/scheduler/dot/stopped-monitor-26.dot similarity index 100% rename from cts/scheduler/stopped-monitor-26.dot rename to cts/scheduler/dot/stopped-monitor-26.dot diff --git a/cts/scheduler/stopped-monitor-27.dot b/cts/scheduler/dot/stopped-monitor-27.dot similarity index 100% rename from cts/scheduler/stopped-monitor-27.dot rename to cts/scheduler/dot/stopped-monitor-27.dot diff --git a/cts/scheduler/stopped-monitor-30.dot b/cts/scheduler/dot/stopped-monitor-30.dot similarity index 100% rename from cts/scheduler/stopped-monitor-30.dot rename to cts/scheduler/dot/stopped-monitor-30.dot diff --git a/cts/scheduler/stopped-monitor-31.dot b/cts/scheduler/dot/stopped-monitor-31.dot similarity index 100% rename from cts/scheduler/stopped-monitor-31.dot rename to cts/scheduler/dot/stopped-monitor-31.dot diff --git a/cts/scheduler/suicide-needed-inquorate.dot b/cts/scheduler/dot/suicide-needed-inquorate.dot similarity index 100% rename from cts/scheduler/suicide-needed-inquorate.dot rename to cts/scheduler/dot/suicide-needed-inquorate.dot diff --git a/cts/scheduler/suicide-not-needed-initial-quorum.dot b/cts/scheduler/dot/suicide-not-needed-initial-quorum.dot similarity index 100% rename from cts/scheduler/suicide-not-needed-initial-quorum.dot rename to cts/scheduler/dot/suicide-not-needed-initial-quorum.dot diff --git a/cts/scheduler/suicide-not-needed-never-quorate.dot b/cts/scheduler/dot/suicide-not-needed-never-quorate.dot similarity index 100% rename from cts/scheduler/suicide-not-needed-never-quorate.dot rename to cts/scheduler/dot/suicide-not-needed-never-quorate.dot diff --git a/cts/scheduler/suicide-not-needed-quorate.dot b/cts/scheduler/dot/suicide-not-needed-quorate.dot similarity index 100% rename from cts/scheduler/suicide-not-needed-quorate.dot rename to cts/scheduler/dot/suicide-not-needed-quorate.dot diff --git a/cts/scheduler/systemhealth1.dot b/cts/scheduler/dot/systemhealth1.dot similarity index 100% rename from cts/scheduler/systemhealth1.dot rename to cts/scheduler/dot/systemhealth1.dot diff --git a/cts/scheduler/systemhealth2.dot b/cts/scheduler/dot/systemhealth2.dot similarity index 100% rename from cts/scheduler/systemhealth2.dot rename to cts/scheduler/dot/systemhealth2.dot diff --git a/cts/scheduler/systemhealth3.dot b/cts/scheduler/dot/systemhealth3.dot similarity index 100% rename from cts/scheduler/systemhealth3.dot rename to cts/scheduler/dot/systemhealth3.dot diff --git a/cts/scheduler/systemhealthm1.dot b/cts/scheduler/dot/systemhealthm1.dot similarity index 100% rename from cts/scheduler/systemhealthm1.dot rename to cts/scheduler/dot/systemhealthm1.dot diff --git a/cts/scheduler/systemhealthm2.dot b/cts/scheduler/dot/systemhealthm2.dot similarity index 100% rename from cts/scheduler/systemhealthm2.dot rename to cts/scheduler/dot/systemhealthm2.dot diff --git a/cts/scheduler/systemhealthm3.dot b/cts/scheduler/dot/systemhealthm3.dot similarity index 100% rename from cts/scheduler/systemhealthm3.dot rename to cts/scheduler/dot/systemhealthm3.dot diff --git a/cts/scheduler/systemhealthn1.dot b/cts/scheduler/dot/systemhealthn1.dot similarity index 100% rename from cts/scheduler/systemhealthn1.dot rename to cts/scheduler/dot/systemhealthn1.dot diff --git a/cts/scheduler/systemhealthn2.dot b/cts/scheduler/dot/systemhealthn2.dot similarity index 100% rename from cts/scheduler/systemhealthn2.dot rename to cts/scheduler/dot/systemhealthn2.dot diff --git a/cts/scheduler/systemhealthn3.dot b/cts/scheduler/dot/systemhealthn3.dot similarity index 100% rename from cts/scheduler/systemhealthn3.dot rename to cts/scheduler/dot/systemhealthn3.dot diff --git a/cts/scheduler/systemhealtho1.dot b/cts/scheduler/dot/systemhealtho1.dot similarity index 100% rename from cts/scheduler/systemhealtho1.dot rename to cts/scheduler/dot/systemhealtho1.dot diff --git a/cts/scheduler/systemhealtho2.dot b/cts/scheduler/dot/systemhealtho2.dot similarity index 100% rename from cts/scheduler/systemhealtho2.dot rename to cts/scheduler/dot/systemhealtho2.dot diff --git a/cts/scheduler/systemhealtho3.dot b/cts/scheduler/dot/systemhealtho3.dot similarity index 100% rename from cts/scheduler/systemhealtho3.dot rename to cts/scheduler/dot/systemhealtho3.dot diff --git a/cts/scheduler/systemhealthp1.dot b/cts/scheduler/dot/systemhealthp1.dot similarity index 100% rename from cts/scheduler/systemhealthp1.dot rename to cts/scheduler/dot/systemhealthp1.dot diff --git a/cts/scheduler/systemhealthp2.dot b/cts/scheduler/dot/systemhealthp2.dot similarity index 100% rename from cts/scheduler/systemhealthp2.dot rename to cts/scheduler/dot/systemhealthp2.dot diff --git a/cts/scheduler/systemhealthp3.dot b/cts/scheduler/dot/systemhealthp3.dot similarity index 100% rename from cts/scheduler/systemhealthp3.dot rename to cts/scheduler/dot/systemhealthp3.dot diff --git a/cts/scheduler/tags-coloc-order-1.dot b/cts/scheduler/dot/tags-coloc-order-1.dot similarity index 100% rename from cts/scheduler/tags-coloc-order-1.dot rename to cts/scheduler/dot/tags-coloc-order-1.dot diff --git a/cts/scheduler/tags-coloc-order-2.dot b/cts/scheduler/dot/tags-coloc-order-2.dot similarity index 100% rename from cts/scheduler/tags-coloc-order-2.dot rename to cts/scheduler/dot/tags-coloc-order-2.dot diff --git a/cts/scheduler/tags-location.dot b/cts/scheduler/dot/tags-location.dot similarity index 100% rename from cts/scheduler/tags-location.dot rename to cts/scheduler/dot/tags-location.dot diff --git a/cts/scheduler/tags-ticket.dot b/cts/scheduler/dot/tags-ticket.dot similarity index 100% rename from cts/scheduler/tags-ticket.dot rename to cts/scheduler/dot/tags-ticket.dot diff --git a/cts/scheduler/target-0.dot b/cts/scheduler/dot/target-0.dot similarity index 100% rename from cts/scheduler/target-0.dot rename to cts/scheduler/dot/target-0.dot diff --git a/cts/scheduler/target-1.dot b/cts/scheduler/dot/target-1.dot similarity index 100% rename from cts/scheduler/target-1.dot rename to cts/scheduler/dot/target-1.dot diff --git a/cts/scheduler/target-2.dot b/cts/scheduler/dot/target-2.dot similarity index 100% rename from cts/scheduler/target-2.dot rename to cts/scheduler/dot/target-2.dot diff --git a/cts/scheduler/template-1.dot b/cts/scheduler/dot/template-1.dot similarity index 100% rename from cts/scheduler/template-1.dot rename to cts/scheduler/dot/template-1.dot diff --git a/cts/scheduler/template-2.dot b/cts/scheduler/dot/template-2.dot similarity index 100% rename from cts/scheduler/template-2.dot rename to cts/scheduler/dot/template-2.dot diff --git a/cts/scheduler/template-3.dot b/cts/scheduler/dot/template-3.dot similarity index 100% rename from cts/scheduler/template-3.dot rename to cts/scheduler/dot/template-3.dot diff --git a/cts/scheduler/template-clone-group.dot b/cts/scheduler/dot/template-clone-group.dot similarity index 100% rename from cts/scheduler/template-clone-group.dot rename to cts/scheduler/dot/template-clone-group.dot diff --git a/cts/scheduler/template-clone-primitive.dot b/cts/scheduler/dot/template-clone-primitive.dot similarity index 100% rename from cts/scheduler/template-clone-primitive.dot rename to cts/scheduler/dot/template-clone-primitive.dot diff --git a/cts/scheduler/template-coloc-1.dot b/cts/scheduler/dot/template-coloc-1.dot similarity index 100% rename from cts/scheduler/template-coloc-1.dot rename to cts/scheduler/dot/template-coloc-1.dot diff --git a/cts/scheduler/template-coloc-2.dot b/cts/scheduler/dot/template-coloc-2.dot similarity index 100% rename from cts/scheduler/template-coloc-2.dot rename to cts/scheduler/dot/template-coloc-2.dot diff --git a/cts/scheduler/template-coloc-3.dot b/cts/scheduler/dot/template-coloc-3.dot similarity index 100% rename from cts/scheduler/template-coloc-3.dot rename to cts/scheduler/dot/template-coloc-3.dot diff --git a/cts/scheduler/template-order-1.dot b/cts/scheduler/dot/template-order-1.dot similarity index 100% rename from cts/scheduler/template-order-1.dot rename to cts/scheduler/dot/template-order-1.dot diff --git a/cts/scheduler/template-order-2.dot b/cts/scheduler/dot/template-order-2.dot similarity index 100% rename from cts/scheduler/template-order-2.dot rename to cts/scheduler/dot/template-order-2.dot diff --git a/cts/scheduler/template-order-3.dot b/cts/scheduler/dot/template-order-3.dot similarity index 100% rename from cts/scheduler/template-order-3.dot rename to cts/scheduler/dot/template-order-3.dot diff --git a/cts/scheduler/template-rsc-sets-1.dot b/cts/scheduler/dot/template-rsc-sets-1.dot similarity index 100% rename from cts/scheduler/template-rsc-sets-1.dot rename to cts/scheduler/dot/template-rsc-sets-1.dot diff --git a/cts/scheduler/template-rsc-sets-2.dot b/cts/scheduler/dot/template-rsc-sets-2.dot similarity index 100% rename from cts/scheduler/template-rsc-sets-2.dot rename to cts/scheduler/dot/template-rsc-sets-2.dot diff --git a/cts/scheduler/template-rsc-sets-3.dot b/cts/scheduler/dot/template-rsc-sets-3.dot similarity index 100% rename from cts/scheduler/template-rsc-sets-3.dot rename to cts/scheduler/dot/template-rsc-sets-3.dot diff --git a/cts/scheduler/template-rsc-sets-4.dot b/cts/scheduler/dot/template-rsc-sets-4.dot similarity index 100% rename from cts/scheduler/template-rsc-sets-4.dot rename to cts/scheduler/dot/template-rsc-sets-4.dot diff --git a/cts/scheduler/template-ticket.dot b/cts/scheduler/dot/template-ticket.dot similarity index 100% rename from cts/scheduler/template-ticket.dot rename to cts/scheduler/dot/template-ticket.dot diff --git a/cts/scheduler/ticket-clone-1.dot b/cts/scheduler/dot/ticket-clone-1.dot similarity index 100% rename from cts/scheduler/ticket-clone-1.dot rename to cts/scheduler/dot/ticket-clone-1.dot diff --git a/cts/scheduler/ticket-clone-10.dot b/cts/scheduler/dot/ticket-clone-10.dot similarity index 100% rename from cts/scheduler/ticket-clone-10.dot rename to cts/scheduler/dot/ticket-clone-10.dot diff --git a/cts/scheduler/ticket-clone-11.dot b/cts/scheduler/dot/ticket-clone-11.dot similarity index 100% rename from cts/scheduler/ticket-clone-11.dot rename to cts/scheduler/dot/ticket-clone-11.dot diff --git a/cts/scheduler/ticket-clone-12.dot b/cts/scheduler/dot/ticket-clone-12.dot similarity index 100% rename from cts/scheduler/ticket-clone-12.dot rename to cts/scheduler/dot/ticket-clone-12.dot diff --git a/cts/scheduler/ticket-clone-13.dot b/cts/scheduler/dot/ticket-clone-13.dot similarity index 100% rename from cts/scheduler/ticket-clone-13.dot rename to cts/scheduler/dot/ticket-clone-13.dot diff --git a/cts/scheduler/ticket-clone-14.dot b/cts/scheduler/dot/ticket-clone-14.dot similarity index 100% rename from cts/scheduler/ticket-clone-14.dot rename to cts/scheduler/dot/ticket-clone-14.dot diff --git a/cts/scheduler/ticket-clone-15.dot b/cts/scheduler/dot/ticket-clone-15.dot similarity index 100% rename from cts/scheduler/ticket-clone-15.dot rename to cts/scheduler/dot/ticket-clone-15.dot diff --git a/cts/scheduler/ticket-clone-16.dot b/cts/scheduler/dot/ticket-clone-16.dot similarity index 100% rename from cts/scheduler/ticket-clone-16.dot rename to cts/scheduler/dot/ticket-clone-16.dot diff --git a/cts/scheduler/ticket-clone-17.dot b/cts/scheduler/dot/ticket-clone-17.dot similarity index 100% rename from cts/scheduler/ticket-clone-17.dot rename to cts/scheduler/dot/ticket-clone-17.dot diff --git a/cts/scheduler/ticket-clone-18.dot b/cts/scheduler/dot/ticket-clone-18.dot similarity index 100% rename from cts/scheduler/ticket-clone-18.dot rename to cts/scheduler/dot/ticket-clone-18.dot diff --git a/cts/scheduler/ticket-clone-19.dot b/cts/scheduler/dot/ticket-clone-19.dot similarity index 100% rename from cts/scheduler/ticket-clone-19.dot rename to cts/scheduler/dot/ticket-clone-19.dot diff --git a/cts/scheduler/ticket-clone-2.dot b/cts/scheduler/dot/ticket-clone-2.dot similarity index 100% rename from cts/scheduler/ticket-clone-2.dot rename to cts/scheduler/dot/ticket-clone-2.dot diff --git a/cts/scheduler/ticket-clone-20.dot b/cts/scheduler/dot/ticket-clone-20.dot similarity index 100% rename from cts/scheduler/ticket-clone-20.dot rename to cts/scheduler/dot/ticket-clone-20.dot diff --git a/cts/scheduler/ticket-clone-21.dot b/cts/scheduler/dot/ticket-clone-21.dot similarity index 100% rename from cts/scheduler/ticket-clone-21.dot rename to cts/scheduler/dot/ticket-clone-21.dot diff --git a/cts/scheduler/ticket-clone-22.dot b/cts/scheduler/dot/ticket-clone-22.dot similarity index 100% rename from cts/scheduler/ticket-clone-22.dot rename to cts/scheduler/dot/ticket-clone-22.dot diff --git a/cts/scheduler/ticket-clone-23.dot b/cts/scheduler/dot/ticket-clone-23.dot similarity index 100% rename from cts/scheduler/ticket-clone-23.dot rename to cts/scheduler/dot/ticket-clone-23.dot diff --git a/cts/scheduler/ticket-clone-24.dot b/cts/scheduler/dot/ticket-clone-24.dot similarity index 100% rename from cts/scheduler/ticket-clone-24.dot rename to cts/scheduler/dot/ticket-clone-24.dot diff --git a/cts/scheduler/ticket-clone-3.dot b/cts/scheduler/dot/ticket-clone-3.dot similarity index 100% rename from cts/scheduler/ticket-clone-3.dot rename to cts/scheduler/dot/ticket-clone-3.dot diff --git a/cts/scheduler/ticket-clone-4.dot b/cts/scheduler/dot/ticket-clone-4.dot similarity index 100% rename from cts/scheduler/ticket-clone-4.dot rename to cts/scheduler/dot/ticket-clone-4.dot diff --git a/cts/scheduler/ticket-clone-5.dot b/cts/scheduler/dot/ticket-clone-5.dot similarity index 100% rename from cts/scheduler/ticket-clone-5.dot rename to cts/scheduler/dot/ticket-clone-5.dot diff --git a/cts/scheduler/ticket-clone-6.dot b/cts/scheduler/dot/ticket-clone-6.dot similarity index 100% rename from cts/scheduler/ticket-clone-6.dot rename to cts/scheduler/dot/ticket-clone-6.dot diff --git a/cts/scheduler/ticket-clone-7.dot b/cts/scheduler/dot/ticket-clone-7.dot similarity index 100% rename from cts/scheduler/ticket-clone-7.dot rename to cts/scheduler/dot/ticket-clone-7.dot diff --git a/cts/scheduler/ticket-clone-8.dot b/cts/scheduler/dot/ticket-clone-8.dot similarity index 100% rename from cts/scheduler/ticket-clone-8.dot rename to cts/scheduler/dot/ticket-clone-8.dot diff --git a/cts/scheduler/ticket-clone-9.dot b/cts/scheduler/dot/ticket-clone-9.dot similarity index 100% rename from cts/scheduler/ticket-clone-9.dot rename to cts/scheduler/dot/ticket-clone-9.dot diff --git a/cts/scheduler/ticket-group-1.dot b/cts/scheduler/dot/ticket-group-1.dot similarity index 100% rename from cts/scheduler/ticket-group-1.dot rename to cts/scheduler/dot/ticket-group-1.dot diff --git a/cts/scheduler/ticket-group-10.dot b/cts/scheduler/dot/ticket-group-10.dot similarity index 100% rename from cts/scheduler/ticket-group-10.dot rename to cts/scheduler/dot/ticket-group-10.dot diff --git a/cts/scheduler/ticket-group-11.dot b/cts/scheduler/dot/ticket-group-11.dot similarity index 100% rename from cts/scheduler/ticket-group-11.dot rename to cts/scheduler/dot/ticket-group-11.dot diff --git a/cts/scheduler/ticket-group-12.dot b/cts/scheduler/dot/ticket-group-12.dot similarity index 100% rename from cts/scheduler/ticket-group-12.dot rename to cts/scheduler/dot/ticket-group-12.dot diff --git a/cts/scheduler/ticket-group-13.dot b/cts/scheduler/dot/ticket-group-13.dot similarity index 100% rename from cts/scheduler/ticket-group-13.dot rename to cts/scheduler/dot/ticket-group-13.dot diff --git a/cts/scheduler/ticket-group-14.dot b/cts/scheduler/dot/ticket-group-14.dot similarity index 100% rename from cts/scheduler/ticket-group-14.dot rename to cts/scheduler/dot/ticket-group-14.dot diff --git a/cts/scheduler/ticket-group-15.dot b/cts/scheduler/dot/ticket-group-15.dot similarity index 100% rename from cts/scheduler/ticket-group-15.dot rename to cts/scheduler/dot/ticket-group-15.dot diff --git a/cts/scheduler/ticket-group-16.dot b/cts/scheduler/dot/ticket-group-16.dot similarity index 100% rename from cts/scheduler/ticket-group-16.dot rename to cts/scheduler/dot/ticket-group-16.dot diff --git a/cts/scheduler/ticket-group-17.dot b/cts/scheduler/dot/ticket-group-17.dot similarity index 100% rename from cts/scheduler/ticket-group-17.dot rename to cts/scheduler/dot/ticket-group-17.dot diff --git a/cts/scheduler/ticket-group-18.dot b/cts/scheduler/dot/ticket-group-18.dot similarity index 100% rename from cts/scheduler/ticket-group-18.dot rename to cts/scheduler/dot/ticket-group-18.dot diff --git a/cts/scheduler/ticket-group-19.dot b/cts/scheduler/dot/ticket-group-19.dot similarity index 100% rename from cts/scheduler/ticket-group-19.dot rename to cts/scheduler/dot/ticket-group-19.dot diff --git a/cts/scheduler/ticket-group-2.dot b/cts/scheduler/dot/ticket-group-2.dot similarity index 100% rename from cts/scheduler/ticket-group-2.dot rename to cts/scheduler/dot/ticket-group-2.dot diff --git a/cts/scheduler/ticket-group-20.dot b/cts/scheduler/dot/ticket-group-20.dot similarity index 100% rename from cts/scheduler/ticket-group-20.dot rename to cts/scheduler/dot/ticket-group-20.dot diff --git a/cts/scheduler/ticket-group-21.dot b/cts/scheduler/dot/ticket-group-21.dot similarity index 100% rename from cts/scheduler/ticket-group-21.dot rename to cts/scheduler/dot/ticket-group-21.dot diff --git a/cts/scheduler/ticket-group-22.dot b/cts/scheduler/dot/ticket-group-22.dot similarity index 100% rename from cts/scheduler/ticket-group-22.dot rename to cts/scheduler/dot/ticket-group-22.dot diff --git a/cts/scheduler/ticket-group-23.dot b/cts/scheduler/dot/ticket-group-23.dot similarity index 100% rename from cts/scheduler/ticket-group-23.dot rename to cts/scheduler/dot/ticket-group-23.dot diff --git a/cts/scheduler/ticket-group-24.dot b/cts/scheduler/dot/ticket-group-24.dot similarity index 100% rename from cts/scheduler/ticket-group-24.dot rename to cts/scheduler/dot/ticket-group-24.dot diff --git a/cts/scheduler/ticket-group-3.dot b/cts/scheduler/dot/ticket-group-3.dot similarity index 100% rename from cts/scheduler/ticket-group-3.dot rename to cts/scheduler/dot/ticket-group-3.dot diff --git a/cts/scheduler/ticket-group-4.dot b/cts/scheduler/dot/ticket-group-4.dot similarity index 100% rename from cts/scheduler/ticket-group-4.dot rename to cts/scheduler/dot/ticket-group-4.dot diff --git a/cts/scheduler/ticket-group-5.dot b/cts/scheduler/dot/ticket-group-5.dot similarity index 100% rename from cts/scheduler/ticket-group-5.dot rename to cts/scheduler/dot/ticket-group-5.dot diff --git a/cts/scheduler/ticket-group-6.dot b/cts/scheduler/dot/ticket-group-6.dot similarity index 100% rename from cts/scheduler/ticket-group-6.dot rename to cts/scheduler/dot/ticket-group-6.dot diff --git a/cts/scheduler/ticket-group-7.dot b/cts/scheduler/dot/ticket-group-7.dot similarity index 100% rename from cts/scheduler/ticket-group-7.dot rename to cts/scheduler/dot/ticket-group-7.dot diff --git a/cts/scheduler/ticket-group-8.dot b/cts/scheduler/dot/ticket-group-8.dot similarity index 100% rename from cts/scheduler/ticket-group-8.dot rename to cts/scheduler/dot/ticket-group-8.dot diff --git a/cts/scheduler/ticket-group-9.dot b/cts/scheduler/dot/ticket-group-9.dot similarity index 100% rename from cts/scheduler/ticket-group-9.dot rename to cts/scheduler/dot/ticket-group-9.dot diff --git a/cts/scheduler/ticket-master-1.dot b/cts/scheduler/dot/ticket-master-1.dot similarity index 100% rename from cts/scheduler/ticket-master-1.dot rename to cts/scheduler/dot/ticket-master-1.dot diff --git a/cts/scheduler/ticket-master-10.dot b/cts/scheduler/dot/ticket-master-10.dot similarity index 100% rename from cts/scheduler/ticket-master-10.dot rename to cts/scheduler/dot/ticket-master-10.dot diff --git a/cts/scheduler/ticket-master-11.dot b/cts/scheduler/dot/ticket-master-11.dot similarity index 100% rename from cts/scheduler/ticket-master-11.dot rename to cts/scheduler/dot/ticket-master-11.dot diff --git a/cts/scheduler/ticket-master-12.dot b/cts/scheduler/dot/ticket-master-12.dot similarity index 100% rename from cts/scheduler/ticket-master-12.dot rename to cts/scheduler/dot/ticket-master-12.dot diff --git a/cts/scheduler/ticket-master-13.dot b/cts/scheduler/dot/ticket-master-13.dot similarity index 100% rename from cts/scheduler/ticket-master-13.dot rename to cts/scheduler/dot/ticket-master-13.dot diff --git a/cts/scheduler/ticket-master-14.dot b/cts/scheduler/dot/ticket-master-14.dot similarity index 100% rename from cts/scheduler/ticket-master-14.dot rename to cts/scheduler/dot/ticket-master-14.dot diff --git a/cts/scheduler/ticket-master-15.dot b/cts/scheduler/dot/ticket-master-15.dot similarity index 100% rename from cts/scheduler/ticket-master-15.dot rename to cts/scheduler/dot/ticket-master-15.dot diff --git a/cts/scheduler/ticket-master-16.dot b/cts/scheduler/dot/ticket-master-16.dot similarity index 100% rename from cts/scheduler/ticket-master-16.dot rename to cts/scheduler/dot/ticket-master-16.dot diff --git a/cts/scheduler/ticket-master-17.dot b/cts/scheduler/dot/ticket-master-17.dot similarity index 100% rename from cts/scheduler/ticket-master-17.dot rename to cts/scheduler/dot/ticket-master-17.dot diff --git a/cts/scheduler/ticket-master-18.dot b/cts/scheduler/dot/ticket-master-18.dot similarity index 100% rename from cts/scheduler/ticket-master-18.dot rename to cts/scheduler/dot/ticket-master-18.dot diff --git a/cts/scheduler/ticket-master-19.dot b/cts/scheduler/dot/ticket-master-19.dot similarity index 100% rename from cts/scheduler/ticket-master-19.dot rename to cts/scheduler/dot/ticket-master-19.dot diff --git a/cts/scheduler/ticket-master-2.dot b/cts/scheduler/dot/ticket-master-2.dot similarity index 100% rename from cts/scheduler/ticket-master-2.dot rename to cts/scheduler/dot/ticket-master-2.dot diff --git a/cts/scheduler/ticket-master-20.dot b/cts/scheduler/dot/ticket-master-20.dot similarity index 100% rename from cts/scheduler/ticket-master-20.dot rename to cts/scheduler/dot/ticket-master-20.dot diff --git a/cts/scheduler/ticket-master-21.dot b/cts/scheduler/dot/ticket-master-21.dot similarity index 100% rename from cts/scheduler/ticket-master-21.dot rename to cts/scheduler/dot/ticket-master-21.dot diff --git a/cts/scheduler/ticket-master-22.dot b/cts/scheduler/dot/ticket-master-22.dot similarity index 100% rename from cts/scheduler/ticket-master-22.dot rename to cts/scheduler/dot/ticket-master-22.dot diff --git a/cts/scheduler/ticket-master-23.dot b/cts/scheduler/dot/ticket-master-23.dot similarity index 100% rename from cts/scheduler/ticket-master-23.dot rename to cts/scheduler/dot/ticket-master-23.dot diff --git a/cts/scheduler/ticket-master-24.dot b/cts/scheduler/dot/ticket-master-24.dot similarity index 100% rename from cts/scheduler/ticket-master-24.dot rename to cts/scheduler/dot/ticket-master-24.dot diff --git a/cts/scheduler/ticket-master-3.dot b/cts/scheduler/dot/ticket-master-3.dot similarity index 100% rename from cts/scheduler/ticket-master-3.dot rename to cts/scheduler/dot/ticket-master-3.dot diff --git a/cts/scheduler/ticket-master-4.dot b/cts/scheduler/dot/ticket-master-4.dot similarity index 100% rename from cts/scheduler/ticket-master-4.dot rename to cts/scheduler/dot/ticket-master-4.dot diff --git a/cts/scheduler/ticket-master-5.dot b/cts/scheduler/dot/ticket-master-5.dot similarity index 100% rename from cts/scheduler/ticket-master-5.dot rename to cts/scheduler/dot/ticket-master-5.dot diff --git a/cts/scheduler/ticket-master-6.dot b/cts/scheduler/dot/ticket-master-6.dot similarity index 100% rename from cts/scheduler/ticket-master-6.dot rename to cts/scheduler/dot/ticket-master-6.dot diff --git a/cts/scheduler/ticket-master-7.dot b/cts/scheduler/dot/ticket-master-7.dot similarity index 100% rename from cts/scheduler/ticket-master-7.dot rename to cts/scheduler/dot/ticket-master-7.dot diff --git a/cts/scheduler/ticket-master-8.dot b/cts/scheduler/dot/ticket-master-8.dot similarity index 100% rename from cts/scheduler/ticket-master-8.dot rename to cts/scheduler/dot/ticket-master-8.dot diff --git a/cts/scheduler/ticket-master-9.dot b/cts/scheduler/dot/ticket-master-9.dot similarity index 100% rename from cts/scheduler/ticket-master-9.dot rename to cts/scheduler/dot/ticket-master-9.dot diff --git a/cts/scheduler/ticket-primitive-1.dot b/cts/scheduler/dot/ticket-primitive-1.dot similarity index 100% rename from cts/scheduler/ticket-primitive-1.dot rename to cts/scheduler/dot/ticket-primitive-1.dot diff --git a/cts/scheduler/ticket-primitive-10.dot b/cts/scheduler/dot/ticket-primitive-10.dot similarity index 100% rename from cts/scheduler/ticket-primitive-10.dot rename to cts/scheduler/dot/ticket-primitive-10.dot diff --git a/cts/scheduler/ticket-primitive-11.dot b/cts/scheduler/dot/ticket-primitive-11.dot similarity index 100% rename from cts/scheduler/ticket-primitive-11.dot rename to cts/scheduler/dot/ticket-primitive-11.dot diff --git a/cts/scheduler/ticket-primitive-12.dot b/cts/scheduler/dot/ticket-primitive-12.dot similarity index 100% rename from cts/scheduler/ticket-primitive-12.dot rename to cts/scheduler/dot/ticket-primitive-12.dot diff --git a/cts/scheduler/ticket-primitive-13.dot b/cts/scheduler/dot/ticket-primitive-13.dot similarity index 100% rename from cts/scheduler/ticket-primitive-13.dot rename to cts/scheduler/dot/ticket-primitive-13.dot diff --git a/cts/scheduler/ticket-primitive-14.dot b/cts/scheduler/dot/ticket-primitive-14.dot similarity index 100% rename from cts/scheduler/ticket-primitive-14.dot rename to cts/scheduler/dot/ticket-primitive-14.dot diff --git a/cts/scheduler/ticket-primitive-15.dot b/cts/scheduler/dot/ticket-primitive-15.dot similarity index 100% rename from cts/scheduler/ticket-primitive-15.dot rename to cts/scheduler/dot/ticket-primitive-15.dot diff --git a/cts/scheduler/ticket-primitive-16.dot b/cts/scheduler/dot/ticket-primitive-16.dot similarity index 100% rename from cts/scheduler/ticket-primitive-16.dot rename to cts/scheduler/dot/ticket-primitive-16.dot diff --git a/cts/scheduler/ticket-primitive-17.dot b/cts/scheduler/dot/ticket-primitive-17.dot similarity index 100% rename from cts/scheduler/ticket-primitive-17.dot rename to cts/scheduler/dot/ticket-primitive-17.dot diff --git a/cts/scheduler/ticket-primitive-18.dot b/cts/scheduler/dot/ticket-primitive-18.dot similarity index 100% rename from cts/scheduler/ticket-primitive-18.dot rename to cts/scheduler/dot/ticket-primitive-18.dot diff --git a/cts/scheduler/ticket-primitive-19.dot b/cts/scheduler/dot/ticket-primitive-19.dot similarity index 100% rename from cts/scheduler/ticket-primitive-19.dot rename to cts/scheduler/dot/ticket-primitive-19.dot diff --git a/cts/scheduler/ticket-primitive-2.dot b/cts/scheduler/dot/ticket-primitive-2.dot similarity index 100% rename from cts/scheduler/ticket-primitive-2.dot rename to cts/scheduler/dot/ticket-primitive-2.dot diff --git a/cts/scheduler/ticket-primitive-20.dot b/cts/scheduler/dot/ticket-primitive-20.dot similarity index 100% rename from cts/scheduler/ticket-primitive-20.dot rename to cts/scheduler/dot/ticket-primitive-20.dot diff --git a/cts/scheduler/ticket-primitive-21.dot b/cts/scheduler/dot/ticket-primitive-21.dot similarity index 100% rename from cts/scheduler/ticket-primitive-21.dot rename to cts/scheduler/dot/ticket-primitive-21.dot diff --git a/cts/scheduler/ticket-primitive-22.dot b/cts/scheduler/dot/ticket-primitive-22.dot similarity index 100% rename from cts/scheduler/ticket-primitive-22.dot rename to cts/scheduler/dot/ticket-primitive-22.dot diff --git a/cts/scheduler/ticket-primitive-23.dot b/cts/scheduler/dot/ticket-primitive-23.dot similarity index 100% rename from cts/scheduler/ticket-primitive-23.dot rename to cts/scheduler/dot/ticket-primitive-23.dot diff --git a/cts/scheduler/ticket-primitive-24.dot b/cts/scheduler/dot/ticket-primitive-24.dot similarity index 100% rename from cts/scheduler/ticket-primitive-24.dot rename to cts/scheduler/dot/ticket-primitive-24.dot diff --git a/cts/scheduler/ticket-primitive-3.dot b/cts/scheduler/dot/ticket-primitive-3.dot similarity index 100% rename from cts/scheduler/ticket-primitive-3.dot rename to cts/scheduler/dot/ticket-primitive-3.dot diff --git a/cts/scheduler/ticket-primitive-4.dot b/cts/scheduler/dot/ticket-primitive-4.dot similarity index 100% rename from cts/scheduler/ticket-primitive-4.dot rename to cts/scheduler/dot/ticket-primitive-4.dot diff --git a/cts/scheduler/ticket-primitive-5.dot b/cts/scheduler/dot/ticket-primitive-5.dot similarity index 100% rename from cts/scheduler/ticket-primitive-5.dot rename to cts/scheduler/dot/ticket-primitive-5.dot diff --git a/cts/scheduler/ticket-primitive-6.dot b/cts/scheduler/dot/ticket-primitive-6.dot similarity index 100% rename from cts/scheduler/ticket-primitive-6.dot rename to cts/scheduler/dot/ticket-primitive-6.dot diff --git a/cts/scheduler/ticket-primitive-7.dot b/cts/scheduler/dot/ticket-primitive-7.dot similarity index 100% rename from cts/scheduler/ticket-primitive-7.dot rename to cts/scheduler/dot/ticket-primitive-7.dot diff --git a/cts/scheduler/ticket-primitive-8.dot b/cts/scheduler/dot/ticket-primitive-8.dot similarity index 100% rename from cts/scheduler/ticket-primitive-8.dot rename to cts/scheduler/dot/ticket-primitive-8.dot diff --git a/cts/scheduler/ticket-primitive-9.dot b/cts/scheduler/dot/ticket-primitive-9.dot similarity index 100% rename from cts/scheduler/ticket-primitive-9.dot rename to cts/scheduler/dot/ticket-primitive-9.dot diff --git a/cts/scheduler/ticket-rsc-sets-1.dot b/cts/scheduler/dot/ticket-rsc-sets-1.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-1.dot rename to cts/scheduler/dot/ticket-rsc-sets-1.dot diff --git a/cts/scheduler/ticket-rsc-sets-10.dot b/cts/scheduler/dot/ticket-rsc-sets-10.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-10.dot rename to cts/scheduler/dot/ticket-rsc-sets-10.dot diff --git a/cts/scheduler/ticket-rsc-sets-11.dot b/cts/scheduler/dot/ticket-rsc-sets-11.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-11.dot rename to cts/scheduler/dot/ticket-rsc-sets-11.dot diff --git a/cts/scheduler/ticket-rsc-sets-12.dot b/cts/scheduler/dot/ticket-rsc-sets-12.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-12.dot rename to cts/scheduler/dot/ticket-rsc-sets-12.dot diff --git a/cts/scheduler/ticket-rsc-sets-13.dot b/cts/scheduler/dot/ticket-rsc-sets-13.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-13.dot rename to cts/scheduler/dot/ticket-rsc-sets-13.dot diff --git a/cts/scheduler/ticket-rsc-sets-14.dot b/cts/scheduler/dot/ticket-rsc-sets-14.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-14.dot rename to cts/scheduler/dot/ticket-rsc-sets-14.dot diff --git a/cts/scheduler/ticket-rsc-sets-2.dot b/cts/scheduler/dot/ticket-rsc-sets-2.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-2.dot rename to cts/scheduler/dot/ticket-rsc-sets-2.dot diff --git a/cts/scheduler/ticket-rsc-sets-3.dot b/cts/scheduler/dot/ticket-rsc-sets-3.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-3.dot rename to cts/scheduler/dot/ticket-rsc-sets-3.dot diff --git a/cts/scheduler/ticket-rsc-sets-4.dot b/cts/scheduler/dot/ticket-rsc-sets-4.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-4.dot rename to cts/scheduler/dot/ticket-rsc-sets-4.dot diff --git a/cts/scheduler/ticket-rsc-sets-5.dot b/cts/scheduler/dot/ticket-rsc-sets-5.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-5.dot rename to cts/scheduler/dot/ticket-rsc-sets-5.dot diff --git a/cts/scheduler/ticket-rsc-sets-6.dot b/cts/scheduler/dot/ticket-rsc-sets-6.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-6.dot rename to cts/scheduler/dot/ticket-rsc-sets-6.dot diff --git a/cts/scheduler/ticket-rsc-sets-7.dot b/cts/scheduler/dot/ticket-rsc-sets-7.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-7.dot rename to cts/scheduler/dot/ticket-rsc-sets-7.dot diff --git a/cts/scheduler/ticket-rsc-sets-8.dot b/cts/scheduler/dot/ticket-rsc-sets-8.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-8.dot rename to cts/scheduler/dot/ticket-rsc-sets-8.dot diff --git a/cts/scheduler/ticket-rsc-sets-9.dot b/cts/scheduler/dot/ticket-rsc-sets-9.dot similarity index 100% rename from cts/scheduler/ticket-rsc-sets-9.dot rename to cts/scheduler/dot/ticket-rsc-sets-9.dot diff --git a/cts/scheduler/unfence-definition.dot b/cts/scheduler/dot/unfence-definition.dot similarity index 100% rename from cts/scheduler/unfence-definition.dot rename to cts/scheduler/dot/unfence-definition.dot diff --git a/cts/scheduler/unfence-device.dot b/cts/scheduler/dot/unfence-device.dot similarity index 100% rename from cts/scheduler/unfence-device.dot rename to cts/scheduler/dot/unfence-device.dot diff --git a/cts/scheduler/unfence-parameters.dot b/cts/scheduler/dot/unfence-parameters.dot similarity index 100% rename from cts/scheduler/unfence-parameters.dot rename to cts/scheduler/dot/unfence-parameters.dot diff --git a/cts/scheduler/unfence-startup.dot b/cts/scheduler/dot/unfence-startup.dot similarity index 100% rename from cts/scheduler/unfence-startup.dot rename to cts/scheduler/dot/unfence-startup.dot diff --git a/cts/scheduler/unmanaged-block-restart.dot b/cts/scheduler/dot/unmanaged-block-restart.dot similarity index 100% rename from cts/scheduler/unmanaged-block-restart.dot rename to cts/scheduler/dot/unmanaged-block-restart.dot diff --git a/cts/scheduler/unmanaged-master.dot b/cts/scheduler/dot/unmanaged-master.dot similarity index 100% rename from cts/scheduler/unmanaged-master.dot rename to cts/scheduler/dot/unmanaged-master.dot diff --git a/cts/scheduler/unmanaged-stop-1.dot b/cts/scheduler/dot/unmanaged-stop-1.dot similarity index 100% rename from cts/scheduler/unmanaged-stop-1.dot rename to cts/scheduler/dot/unmanaged-stop-1.dot diff --git a/cts/scheduler/unmanaged-stop-2.dot b/cts/scheduler/dot/unmanaged-stop-2.dot similarity index 100% rename from cts/scheduler/unmanaged-stop-2.dot rename to cts/scheduler/dot/unmanaged-stop-2.dot diff --git a/cts/scheduler/unmanaged-stop-3.dot b/cts/scheduler/dot/unmanaged-stop-3.dot similarity index 100% rename from cts/scheduler/unmanaged-stop-3.dot rename to cts/scheduler/dot/unmanaged-stop-3.dot diff --git a/cts/scheduler/unmanaged-stop-4.dot b/cts/scheduler/dot/unmanaged-stop-4.dot similarity index 100% rename from cts/scheduler/unmanaged-stop-4.dot rename to cts/scheduler/dot/unmanaged-stop-4.dot diff --git a/cts/scheduler/unrunnable-1.dot b/cts/scheduler/dot/unrunnable-1.dot similarity index 100% rename from cts/scheduler/unrunnable-1.dot rename to cts/scheduler/dot/unrunnable-1.dot diff --git a/cts/scheduler/unrunnable-2.dot b/cts/scheduler/dot/unrunnable-2.dot similarity index 100% rename from cts/scheduler/unrunnable-2.dot rename to cts/scheduler/dot/unrunnable-2.dot diff --git a/cts/scheduler/use-after-free-merge.dot b/cts/scheduler/dot/use-after-free-merge.dot similarity index 100% rename from cts/scheduler/use-after-free-merge.dot rename to cts/scheduler/dot/use-after-free-merge.dot diff --git a/cts/scheduler/utilization-check-allowed-nodes.dot b/cts/scheduler/dot/utilization-check-allowed-nodes.dot similarity index 100% rename from cts/scheduler/utilization-check-allowed-nodes.dot rename to cts/scheduler/dot/utilization-check-allowed-nodes.dot diff --git a/cts/scheduler/utilization-order1.dot b/cts/scheduler/dot/utilization-order1.dot similarity index 100% rename from cts/scheduler/utilization-order1.dot rename to cts/scheduler/dot/utilization-order1.dot diff --git a/cts/scheduler/utilization-order2.dot b/cts/scheduler/dot/utilization-order2.dot similarity index 100% rename from cts/scheduler/utilization-order2.dot rename to cts/scheduler/dot/utilization-order2.dot diff --git a/cts/scheduler/utilization-order3.dot b/cts/scheduler/dot/utilization-order3.dot similarity index 100% rename from cts/scheduler/utilization-order3.dot rename to cts/scheduler/dot/utilization-order3.dot diff --git a/cts/scheduler/utilization-order4.dot b/cts/scheduler/dot/utilization-order4.dot similarity index 100% rename from cts/scheduler/utilization-order4.dot rename to cts/scheduler/dot/utilization-order4.dot diff --git a/cts/scheduler/utilization-shuffle.dot b/cts/scheduler/dot/utilization-shuffle.dot similarity index 100% rename from cts/scheduler/utilization-shuffle.dot rename to cts/scheduler/dot/utilization-shuffle.dot diff --git a/cts/scheduler/utilization.dot b/cts/scheduler/dot/utilization.dot similarity index 100% rename from cts/scheduler/utilization.dot rename to cts/scheduler/dot/utilization.dot diff --git a/cts/scheduler/value-source.dot b/cts/scheduler/dot/value-source.dot similarity index 100% rename from cts/scheduler/value-source.dot rename to cts/scheduler/dot/value-source.dot diff --git a/cts/scheduler/versioned-operations-1.dot b/cts/scheduler/dot/versioned-operations-1.dot similarity index 100% rename from cts/scheduler/versioned-operations-1.dot rename to cts/scheduler/dot/versioned-operations-1.dot diff --git a/cts/scheduler/versioned-operations-2.dot b/cts/scheduler/dot/versioned-operations-2.dot similarity index 100% rename from cts/scheduler/versioned-operations-2.dot rename to cts/scheduler/dot/versioned-operations-2.dot diff --git a/cts/scheduler/versioned-operations-3.dot b/cts/scheduler/dot/versioned-operations-3.dot similarity index 100% rename from cts/scheduler/versioned-operations-3.dot rename to cts/scheduler/dot/versioned-operations-3.dot diff --git a/cts/scheduler/versioned-operations-4.dot b/cts/scheduler/dot/versioned-operations-4.dot similarity index 100% rename from cts/scheduler/versioned-operations-4.dot rename to cts/scheduler/dot/versioned-operations-4.dot diff --git a/cts/scheduler/versioned-resources.dot b/cts/scheduler/dot/versioned-resources.dot similarity index 100% rename from cts/scheduler/versioned-resources.dot rename to cts/scheduler/dot/versioned-resources.dot diff --git a/cts/scheduler/whitebox-asymmetric.dot b/cts/scheduler/dot/whitebox-asymmetric.dot similarity index 100% rename from cts/scheduler/whitebox-asymmetric.dot rename to cts/scheduler/dot/whitebox-asymmetric.dot diff --git a/cts/scheduler/whitebox-fail1.dot b/cts/scheduler/dot/whitebox-fail1.dot similarity index 100% rename from cts/scheduler/whitebox-fail1.dot rename to cts/scheduler/dot/whitebox-fail1.dot diff --git a/cts/scheduler/whitebox-fail2.dot b/cts/scheduler/dot/whitebox-fail2.dot similarity index 100% rename from cts/scheduler/whitebox-fail2.dot rename to cts/scheduler/dot/whitebox-fail2.dot diff --git a/cts/scheduler/whitebox-fail3.dot b/cts/scheduler/dot/whitebox-fail3.dot similarity index 100% rename from cts/scheduler/whitebox-fail3.dot rename to cts/scheduler/dot/whitebox-fail3.dot diff --git a/cts/scheduler/whitebox-imply-stop-on-fence.dot b/cts/scheduler/dot/whitebox-imply-stop-on-fence.dot similarity index 100% rename from cts/scheduler/whitebox-imply-stop-on-fence.dot rename to cts/scheduler/dot/whitebox-imply-stop-on-fence.dot diff --git a/cts/scheduler/whitebox-migrate1.dot b/cts/scheduler/dot/whitebox-migrate1.dot similarity index 100% rename from cts/scheduler/whitebox-migrate1.dot rename to cts/scheduler/dot/whitebox-migrate1.dot diff --git a/cts/scheduler/whitebox-move.dot b/cts/scheduler/dot/whitebox-move.dot similarity index 100% rename from cts/scheduler/whitebox-move.dot rename to cts/scheduler/dot/whitebox-move.dot diff --git a/cts/scheduler/whitebox-ms-ordering-move.dot b/cts/scheduler/dot/whitebox-ms-ordering-move.dot similarity index 100% rename from cts/scheduler/whitebox-ms-ordering-move.dot rename to cts/scheduler/dot/whitebox-ms-ordering-move.dot diff --git a/cts/scheduler/whitebox-ms-ordering.dot b/cts/scheduler/dot/whitebox-ms-ordering.dot similarity index 100% rename from cts/scheduler/whitebox-ms-ordering.dot rename to cts/scheduler/dot/whitebox-ms-ordering.dot diff --git a/cts/scheduler/whitebox-nested-group.dot b/cts/scheduler/dot/whitebox-nested-group.dot similarity index 100% rename from cts/scheduler/whitebox-nested-group.dot rename to cts/scheduler/dot/whitebox-nested-group.dot diff --git a/cts/scheduler/whitebox-orphan-ms.dot b/cts/scheduler/dot/whitebox-orphan-ms.dot similarity index 100% rename from cts/scheduler/whitebox-orphan-ms.dot rename to cts/scheduler/dot/whitebox-orphan-ms.dot diff --git a/cts/scheduler/whitebox-orphaned.dot b/cts/scheduler/dot/whitebox-orphaned.dot similarity index 100% rename from cts/scheduler/whitebox-orphaned.dot rename to cts/scheduler/dot/whitebox-orphaned.dot diff --git a/cts/scheduler/whitebox-start.dot b/cts/scheduler/dot/whitebox-start.dot similarity index 100% rename from cts/scheduler/whitebox-start.dot rename to cts/scheduler/dot/whitebox-start.dot diff --git a/cts/scheduler/whitebox-stop.dot b/cts/scheduler/dot/whitebox-stop.dot similarity index 100% rename from cts/scheduler/whitebox-stop.dot rename to cts/scheduler/dot/whitebox-stop.dot diff --git a/cts/scheduler/whitebox-unexpectedly-running.dot b/cts/scheduler/dot/whitebox-unexpectedly-running.dot similarity index 100% rename from cts/scheduler/whitebox-unexpectedly-running.dot rename to cts/scheduler/dot/whitebox-unexpectedly-running.dot diff --git a/cts/scheduler/year-2038.dot b/cts/scheduler/dot/year-2038.dot similarity index 100% rename from cts/scheduler/year-2038.dot rename to cts/scheduler/dot/year-2038.dot diff --git a/cts/scheduler/1-a-then-bm-move-b.exp b/cts/scheduler/exp/1-a-then-bm-move-b.exp similarity index 100% rename from cts/scheduler/1-a-then-bm-move-b.exp rename to cts/scheduler/exp/1-a-then-bm-move-b.exp diff --git a/cts/scheduler/10-a-then-bm-b-move-a-clone.exp b/cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp similarity index 100% rename from cts/scheduler/10-a-then-bm-b-move-a-clone.exp rename to cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp diff --git a/cts/scheduler/11-a-then-bm-b-move-a-clone-starting.exp b/cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp similarity index 100% rename from cts/scheduler/11-a-then-bm-b-move-a-clone-starting.exp rename to cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp diff --git a/cts/scheduler/1360.exp b/cts/scheduler/exp/1360.exp similarity index 100% rename from cts/scheduler/1360.exp rename to cts/scheduler/exp/1360.exp diff --git a/cts/scheduler/1484.exp b/cts/scheduler/exp/1484.exp similarity index 100% rename from cts/scheduler/1484.exp rename to cts/scheduler/exp/1484.exp diff --git a/cts/scheduler/1494.exp b/cts/scheduler/exp/1494.exp similarity index 100% rename from cts/scheduler/1494.exp rename to cts/scheduler/exp/1494.exp diff --git a/cts/scheduler/2-am-then-b-move-a.exp b/cts/scheduler/exp/2-am-then-b-move-a.exp similarity index 100% rename from cts/scheduler/2-am-then-b-move-a.exp rename to cts/scheduler/exp/2-am-then-b-move-a.exp diff --git a/cts/scheduler/3-am-then-bm-both-migrate.exp b/cts/scheduler/exp/3-am-then-bm-both-migrate.exp similarity index 100% rename from cts/scheduler/3-am-then-bm-both-migrate.exp rename to cts/scheduler/exp/3-am-then-bm-both-migrate.exp diff --git a/cts/scheduler/4-am-then-bm-b-not-migratable.exp b/cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp similarity index 100% rename from cts/scheduler/4-am-then-bm-b-not-migratable.exp rename to cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp diff --git a/cts/scheduler/5-am-then-bm-a-not-migratable.exp b/cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp similarity index 100% rename from cts/scheduler/5-am-then-bm-a-not-migratable.exp rename to cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp diff --git a/cts/scheduler/594.exp b/cts/scheduler/exp/594.exp similarity index 100% rename from cts/scheduler/594.exp rename to cts/scheduler/exp/594.exp diff --git a/cts/scheduler/6-migrate-group.exp b/cts/scheduler/exp/6-migrate-group.exp similarity index 100% rename from cts/scheduler/6-migrate-group.exp rename to cts/scheduler/exp/6-migrate-group.exp diff --git a/cts/scheduler/662.exp b/cts/scheduler/exp/662.exp similarity index 100% rename from cts/scheduler/662.exp rename to cts/scheduler/exp/662.exp diff --git a/cts/scheduler/696.exp b/cts/scheduler/exp/696.exp similarity index 100% rename from cts/scheduler/696.exp rename to cts/scheduler/exp/696.exp diff --git a/cts/scheduler/7-migrate-group-one-unmigratable.exp b/cts/scheduler/exp/7-migrate-group-one-unmigratable.exp similarity index 100% rename from cts/scheduler/7-migrate-group-one-unmigratable.exp rename to cts/scheduler/exp/7-migrate-group-one-unmigratable.exp diff --git a/cts/scheduler/726.exp b/cts/scheduler/exp/726.exp similarity index 100% rename from cts/scheduler/726.exp rename to cts/scheduler/exp/726.exp diff --git a/cts/scheduler/735.exp b/cts/scheduler/exp/735.exp similarity index 100% rename from cts/scheduler/735.exp rename to cts/scheduler/exp/735.exp diff --git a/cts/scheduler/764.exp b/cts/scheduler/exp/764.exp similarity index 100% rename from cts/scheduler/764.exp rename to cts/scheduler/exp/764.exp diff --git a/cts/scheduler/797.exp b/cts/scheduler/exp/797.exp similarity index 100% rename from cts/scheduler/797.exp rename to cts/scheduler/exp/797.exp diff --git a/cts/scheduler/8-am-then-bm-a-migrating-b-stopping.exp b/cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp similarity index 100% rename from cts/scheduler/8-am-then-bm-a-migrating-b-stopping.exp rename to cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp diff --git a/cts/scheduler/829.exp b/cts/scheduler/exp/829.exp similarity index 100% rename from cts/scheduler/829.exp rename to cts/scheduler/exp/829.exp diff --git a/cts/scheduler/9-am-then-bm-b-migrating-a-stopping.exp b/cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp similarity index 100% rename from cts/scheduler/9-am-then-bm-b-migrating-a-stopping.exp rename to cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp diff --git a/cts/scheduler/994-2.exp b/cts/scheduler/exp/994-2.exp similarity index 100% rename from cts/scheduler/994-2.exp rename to cts/scheduler/exp/994-2.exp diff --git a/cts/scheduler/994.exp b/cts/scheduler/exp/994.exp similarity index 100% rename from cts/scheduler/994.exp rename to cts/scheduler/exp/994.exp diff --git a/cts/scheduler/exp/Makefile.am b/cts/scheduler/exp/Makefile.am new file mode 100644 index 0000000000..bfa19060a0 --- /dev/null +++ b/cts/scheduler/exp/Makefile.am @@ -0,0 +1,12 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +expdir = $(datadir)/$(PACKAGE)/tests/scheduler/exp +dist_exp_DATA = $(wildcard *.exp) diff --git a/cts/scheduler/a-demote-then-b-migrate.exp b/cts/scheduler/exp/a-demote-then-b-migrate.exp similarity index 100% rename from cts/scheduler/a-demote-then-b-migrate.exp rename to cts/scheduler/exp/a-demote-then-b-migrate.exp diff --git a/cts/scheduler/a-promote-then-b-migrate.exp b/cts/scheduler/exp/a-promote-then-b-migrate.exp similarity index 100% rename from cts/scheduler/a-promote-then-b-migrate.exp rename to cts/scheduler/exp/a-promote-then-b-migrate.exp diff --git a/cts/scheduler/anon-instance-pending.exp b/cts/scheduler/exp/anon-instance-pending.exp similarity index 100% rename from cts/scheduler/anon-instance-pending.exp rename to cts/scheduler/exp/anon-instance-pending.exp diff --git a/cts/scheduler/anti-colocation-master.exp b/cts/scheduler/exp/anti-colocation-master.exp similarity index 100% rename from cts/scheduler/anti-colocation-master.exp rename to cts/scheduler/exp/anti-colocation-master.exp diff --git a/cts/scheduler/anti-colocation-order.exp b/cts/scheduler/exp/anti-colocation-order.exp similarity index 100% rename from cts/scheduler/anti-colocation-order.exp rename to cts/scheduler/exp/anti-colocation-order.exp diff --git a/cts/scheduler/anti-colocation-slave.exp b/cts/scheduler/exp/anti-colocation-slave.exp similarity index 100% rename from cts/scheduler/anti-colocation-slave.exp rename to cts/scheduler/exp/anti-colocation-slave.exp diff --git a/cts/scheduler/asymmetric.exp b/cts/scheduler/exp/asymmetric.exp similarity index 100% rename from cts/scheduler/asymmetric.exp rename to cts/scheduler/exp/asymmetric.exp diff --git a/cts/scheduler/asymmetrical-order-move.exp b/cts/scheduler/exp/asymmetrical-order-move.exp similarity index 100% rename from cts/scheduler/asymmetrical-order-move.exp rename to cts/scheduler/exp/asymmetrical-order-move.exp diff --git a/cts/scheduler/asymmetrical-order-restart.exp b/cts/scheduler/exp/asymmetrical-order-restart.exp similarity index 100% rename from cts/scheduler/asymmetrical-order-restart.exp rename to cts/scheduler/exp/asymmetrical-order-restart.exp diff --git a/cts/scheduler/attrs1.exp b/cts/scheduler/exp/attrs1.exp similarity index 100% rename from cts/scheduler/attrs1.exp rename to cts/scheduler/exp/attrs1.exp diff --git a/cts/scheduler/attrs2.exp b/cts/scheduler/exp/attrs2.exp similarity index 100% rename from cts/scheduler/attrs2.exp rename to cts/scheduler/exp/attrs2.exp diff --git a/cts/scheduler/attrs3.exp b/cts/scheduler/exp/attrs3.exp similarity index 100% rename from cts/scheduler/attrs3.exp rename to cts/scheduler/exp/attrs3.exp diff --git a/cts/scheduler/attrs4.exp b/cts/scheduler/exp/attrs4.exp similarity index 100% rename from cts/scheduler/attrs4.exp rename to cts/scheduler/exp/attrs4.exp diff --git a/cts/scheduler/attrs5.exp b/cts/scheduler/exp/attrs5.exp similarity index 100% rename from cts/scheduler/attrs5.exp rename to cts/scheduler/exp/attrs5.exp diff --git a/cts/scheduler/attrs6.exp b/cts/scheduler/exp/attrs6.exp similarity index 100% rename from cts/scheduler/attrs6.exp rename to cts/scheduler/exp/attrs6.exp diff --git a/cts/scheduler/attrs7.exp b/cts/scheduler/exp/attrs7.exp similarity index 100% rename from cts/scheduler/attrs7.exp rename to cts/scheduler/exp/attrs7.exp diff --git a/cts/scheduler/attrs8.exp b/cts/scheduler/exp/attrs8.exp similarity index 100% rename from cts/scheduler/attrs8.exp rename to cts/scheduler/exp/attrs8.exp diff --git a/cts/scheduler/balanced.exp b/cts/scheduler/exp/balanced.exp similarity index 100% rename from cts/scheduler/balanced.exp rename to cts/scheduler/exp/balanced.exp diff --git a/cts/scheduler/base-score.exp b/cts/scheduler/exp/base-score.exp similarity index 100% rename from cts/scheduler/base-score.exp rename to cts/scheduler/exp/base-score.exp diff --git a/cts/scheduler/bnc-515172.exp b/cts/scheduler/exp/bnc-515172.exp similarity index 100% rename from cts/scheduler/bnc-515172.exp rename to cts/scheduler/exp/bnc-515172.exp diff --git a/cts/scheduler/bug-1572-1.exp b/cts/scheduler/exp/bug-1572-1.exp similarity index 100% rename from cts/scheduler/bug-1572-1.exp rename to cts/scheduler/exp/bug-1572-1.exp diff --git a/cts/scheduler/bug-1572-2.exp b/cts/scheduler/exp/bug-1572-2.exp similarity index 100% rename from cts/scheduler/bug-1572-2.exp rename to cts/scheduler/exp/bug-1572-2.exp diff --git a/cts/scheduler/bug-1573.exp b/cts/scheduler/exp/bug-1573.exp similarity index 100% rename from cts/scheduler/bug-1573.exp rename to cts/scheduler/exp/bug-1573.exp diff --git a/cts/scheduler/bug-1685.exp b/cts/scheduler/exp/bug-1685.exp similarity index 100% rename from cts/scheduler/bug-1685.exp rename to cts/scheduler/exp/bug-1685.exp diff --git a/cts/scheduler/bug-1718.exp b/cts/scheduler/exp/bug-1718.exp similarity index 100% rename from cts/scheduler/bug-1718.exp rename to cts/scheduler/exp/bug-1718.exp diff --git a/cts/scheduler/bug-1765.exp b/cts/scheduler/exp/bug-1765.exp similarity index 100% rename from cts/scheduler/bug-1765.exp rename to cts/scheduler/exp/bug-1765.exp diff --git a/cts/scheduler/bug-1820-1.exp b/cts/scheduler/exp/bug-1820-1.exp similarity index 100% rename from cts/scheduler/bug-1820-1.exp rename to cts/scheduler/exp/bug-1820-1.exp diff --git a/cts/scheduler/bug-1820.exp b/cts/scheduler/exp/bug-1820.exp similarity index 100% rename from cts/scheduler/bug-1820.exp rename to cts/scheduler/exp/bug-1820.exp diff --git a/cts/scheduler/bug-1822.exp b/cts/scheduler/exp/bug-1822.exp similarity index 100% rename from cts/scheduler/bug-1822.exp rename to cts/scheduler/exp/bug-1822.exp diff --git a/cts/scheduler/bug-5007-masterslave_colocation.exp b/cts/scheduler/exp/bug-5007-masterslave_colocation.exp similarity index 100% rename from cts/scheduler/bug-5007-masterslave_colocation.exp rename to cts/scheduler/exp/bug-5007-masterslave_colocation.exp diff --git a/cts/scheduler/bug-5014-A-start-B-start.exp b/cts/scheduler/exp/bug-5014-A-start-B-start.exp similarity index 100% rename from cts/scheduler/bug-5014-A-start-B-start.exp rename to cts/scheduler/exp/bug-5014-A-start-B-start.exp diff --git a/cts/scheduler/bug-5014-A-stop-B-started.exp b/cts/scheduler/exp/bug-5014-A-stop-B-started.exp similarity index 100% rename from cts/scheduler/bug-5014-A-stop-B-started.exp rename to cts/scheduler/exp/bug-5014-A-stop-B-started.exp diff --git a/cts/scheduler/bug-5014-A-stopped-B-stopped.exp b/cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp similarity index 100% rename from cts/scheduler/bug-5014-A-stopped-B-stopped.exp rename to cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp diff --git a/cts/scheduler/bug-5014-CLONE-A-start-B-start.exp b/cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-start-B-start.exp rename to cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp diff --git a/cts/scheduler/bug-5014-CLONE-A-stop-B-started.exp b/cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-stop-B-started.exp rename to cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp diff --git a/cts/scheduler/bug-5014-CthenAthenB-C-stopped.exp b/cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp similarity index 100% rename from cts/scheduler/bug-5014-CthenAthenB-C-stopped.exp rename to cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp diff --git a/cts/scheduler/bug-5014-GROUP-A-start-B-start.exp b/cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-start-B-start.exp rename to cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-started.exp b/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-started.exp rename to cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.exp b/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.exp rename to cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-false.exp b/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-false.exp rename to cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-true.exp b/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-true.exp rename to cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp diff --git a/cts/scheduler/bug-5025-1.exp b/cts/scheduler/exp/bug-5025-1.exp similarity index 100% rename from cts/scheduler/bug-5025-1.exp rename to cts/scheduler/exp/bug-5025-1.exp diff --git a/cts/scheduler/bug-5025-2.exp b/cts/scheduler/exp/bug-5025-2.exp similarity index 100% rename from cts/scheduler/bug-5025-2.exp rename to cts/scheduler/exp/bug-5025-2.exp diff --git a/cts/scheduler/bug-5025-3.exp b/cts/scheduler/exp/bug-5025-3.exp similarity index 100% rename from cts/scheduler/bug-5025-3.exp rename to cts/scheduler/exp/bug-5025-3.exp diff --git a/cts/scheduler/bug-5025-4.exp b/cts/scheduler/exp/bug-5025-4.exp similarity index 100% rename from cts/scheduler/bug-5025-4.exp rename to cts/scheduler/exp/bug-5025-4.exp diff --git a/cts/scheduler/bug-5028-bottom.exp b/cts/scheduler/exp/bug-5028-bottom.exp similarity index 100% rename from cts/scheduler/bug-5028-bottom.exp rename to cts/scheduler/exp/bug-5028-bottom.exp diff --git a/cts/scheduler/bug-5028-detach.exp b/cts/scheduler/exp/bug-5028-detach.exp similarity index 100% rename from cts/scheduler/bug-5028-detach.exp rename to cts/scheduler/exp/bug-5028-detach.exp diff --git a/cts/scheduler/bug-5028.exp b/cts/scheduler/exp/bug-5028.exp similarity index 100% rename from cts/scheduler/bug-5028.exp rename to cts/scheduler/exp/bug-5028.exp diff --git a/cts/scheduler/bug-5038.exp b/cts/scheduler/exp/bug-5038.exp similarity index 100% rename from cts/scheduler/bug-5038.exp rename to cts/scheduler/exp/bug-5038.exp diff --git a/cts/scheduler/bug-5059.exp b/cts/scheduler/exp/bug-5059.exp similarity index 100% rename from cts/scheduler/bug-5059.exp rename to cts/scheduler/exp/bug-5059.exp diff --git a/cts/scheduler/bug-5069-op-disabled.exp b/cts/scheduler/exp/bug-5069-op-disabled.exp similarity index 100% rename from cts/scheduler/bug-5069-op-disabled.exp rename to cts/scheduler/exp/bug-5069-op-disabled.exp diff --git a/cts/scheduler/bug-5069-op-enabled.exp b/cts/scheduler/exp/bug-5069-op-enabled.exp similarity index 100% rename from cts/scheduler/bug-5069-op-enabled.exp rename to cts/scheduler/exp/bug-5069-op-enabled.exp diff --git a/cts/scheduler/bug-5140-require-all-false.exp b/cts/scheduler/exp/bug-5140-require-all-false.exp similarity index 100% rename from cts/scheduler/bug-5140-require-all-false.exp rename to cts/scheduler/exp/bug-5140-require-all-false.exp diff --git a/cts/scheduler/bug-5143-ms-shuffle.exp b/cts/scheduler/exp/bug-5143-ms-shuffle.exp similarity index 100% rename from cts/scheduler/bug-5143-ms-shuffle.exp rename to cts/scheduler/exp/bug-5143-ms-shuffle.exp diff --git a/cts/scheduler/bug-5186-partial-migrate.exp b/cts/scheduler/exp/bug-5186-partial-migrate.exp similarity index 100% rename from cts/scheduler/bug-5186-partial-migrate.exp rename to cts/scheduler/exp/bug-5186-partial-migrate.exp diff --git a/cts/scheduler/bug-cl-5168.exp b/cts/scheduler/exp/bug-cl-5168.exp similarity index 100% rename from cts/scheduler/bug-cl-5168.exp rename to cts/scheduler/exp/bug-cl-5168.exp diff --git a/cts/scheduler/bug-cl-5170.exp b/cts/scheduler/exp/bug-cl-5170.exp similarity index 100% rename from cts/scheduler/bug-cl-5170.exp rename to cts/scheduler/exp/bug-cl-5170.exp diff --git a/cts/scheduler/bug-cl-5212.exp b/cts/scheduler/exp/bug-cl-5212.exp similarity index 100% rename from cts/scheduler/bug-cl-5212.exp rename to cts/scheduler/exp/bug-cl-5212.exp diff --git a/cts/scheduler/bug-cl-5213.exp b/cts/scheduler/exp/bug-cl-5213.exp similarity index 100% rename from cts/scheduler/bug-cl-5213.exp rename to cts/scheduler/exp/bug-cl-5213.exp diff --git a/cts/scheduler/bug-cl-5219.exp b/cts/scheduler/exp/bug-cl-5219.exp similarity index 100% rename from cts/scheduler/bug-cl-5219.exp rename to cts/scheduler/exp/bug-cl-5219.exp diff --git a/cts/scheduler/bug-cl-5247.exp b/cts/scheduler/exp/bug-cl-5247.exp similarity index 100% rename from cts/scheduler/bug-cl-5247.exp rename to cts/scheduler/exp/bug-cl-5247.exp diff --git a/cts/scheduler/bug-lf-1852.exp b/cts/scheduler/exp/bug-lf-1852.exp similarity index 100% rename from cts/scheduler/bug-lf-1852.exp rename to cts/scheduler/exp/bug-lf-1852.exp diff --git a/cts/scheduler/bug-lf-1920.exp b/cts/scheduler/exp/bug-lf-1920.exp similarity index 100% rename from cts/scheduler/bug-lf-1920.exp rename to cts/scheduler/exp/bug-lf-1920.exp diff --git a/cts/scheduler/bug-lf-2106.exp b/cts/scheduler/exp/bug-lf-2106.exp similarity index 100% rename from cts/scheduler/bug-lf-2106.exp rename to cts/scheduler/exp/bug-lf-2106.exp diff --git a/cts/scheduler/bug-lf-2153.exp b/cts/scheduler/exp/bug-lf-2153.exp similarity index 100% rename from cts/scheduler/bug-lf-2153.exp rename to cts/scheduler/exp/bug-lf-2153.exp diff --git a/cts/scheduler/bug-lf-2160.exp b/cts/scheduler/exp/bug-lf-2160.exp similarity index 100% rename from cts/scheduler/bug-lf-2160.exp rename to cts/scheduler/exp/bug-lf-2160.exp diff --git a/cts/scheduler/bug-lf-2171.exp b/cts/scheduler/exp/bug-lf-2171.exp similarity index 100% rename from cts/scheduler/bug-lf-2171.exp rename to cts/scheduler/exp/bug-lf-2171.exp diff --git a/cts/scheduler/bug-lf-2213.exp b/cts/scheduler/exp/bug-lf-2213.exp similarity index 100% rename from cts/scheduler/bug-lf-2213.exp rename to cts/scheduler/exp/bug-lf-2213.exp diff --git a/cts/scheduler/bug-lf-2317.exp b/cts/scheduler/exp/bug-lf-2317.exp similarity index 100% rename from cts/scheduler/bug-lf-2317.exp rename to cts/scheduler/exp/bug-lf-2317.exp diff --git a/cts/scheduler/bug-lf-2358.exp b/cts/scheduler/exp/bug-lf-2358.exp similarity index 100% rename from cts/scheduler/bug-lf-2358.exp rename to cts/scheduler/exp/bug-lf-2358.exp diff --git a/cts/scheduler/bug-lf-2361.exp b/cts/scheduler/exp/bug-lf-2361.exp similarity index 100% rename from cts/scheduler/bug-lf-2361.exp rename to cts/scheduler/exp/bug-lf-2361.exp diff --git a/cts/scheduler/bug-lf-2422.exp b/cts/scheduler/exp/bug-lf-2422.exp similarity index 100% rename from cts/scheduler/bug-lf-2422.exp rename to cts/scheduler/exp/bug-lf-2422.exp diff --git a/cts/scheduler/bug-lf-2435.exp b/cts/scheduler/exp/bug-lf-2435.exp similarity index 100% rename from cts/scheduler/bug-lf-2435.exp rename to cts/scheduler/exp/bug-lf-2435.exp diff --git a/cts/scheduler/bug-lf-2445.exp b/cts/scheduler/exp/bug-lf-2445.exp similarity index 100% rename from cts/scheduler/bug-lf-2445.exp rename to cts/scheduler/exp/bug-lf-2445.exp diff --git a/cts/scheduler/bug-lf-2453.exp b/cts/scheduler/exp/bug-lf-2453.exp similarity index 100% rename from cts/scheduler/bug-lf-2453.exp rename to cts/scheduler/exp/bug-lf-2453.exp diff --git a/cts/scheduler/bug-lf-2474.exp b/cts/scheduler/exp/bug-lf-2474.exp similarity index 100% rename from cts/scheduler/bug-lf-2474.exp rename to cts/scheduler/exp/bug-lf-2474.exp diff --git a/cts/scheduler/bug-lf-2493.exp b/cts/scheduler/exp/bug-lf-2493.exp similarity index 100% rename from cts/scheduler/bug-lf-2493.exp rename to cts/scheduler/exp/bug-lf-2493.exp diff --git a/cts/scheduler/bug-lf-2508.exp b/cts/scheduler/exp/bug-lf-2508.exp similarity index 100% rename from cts/scheduler/bug-lf-2508.exp rename to cts/scheduler/exp/bug-lf-2508.exp diff --git a/cts/scheduler/bug-lf-2544.exp b/cts/scheduler/exp/bug-lf-2544.exp similarity index 100% rename from cts/scheduler/bug-lf-2544.exp rename to cts/scheduler/exp/bug-lf-2544.exp diff --git a/cts/scheduler/bug-lf-2551.exp b/cts/scheduler/exp/bug-lf-2551.exp similarity index 100% rename from cts/scheduler/bug-lf-2551.exp rename to cts/scheduler/exp/bug-lf-2551.exp diff --git a/cts/scheduler/bug-lf-2574.exp b/cts/scheduler/exp/bug-lf-2574.exp similarity index 100% rename from cts/scheduler/bug-lf-2574.exp rename to cts/scheduler/exp/bug-lf-2574.exp diff --git a/cts/scheduler/bug-lf-2581.exp b/cts/scheduler/exp/bug-lf-2581.exp similarity index 100% rename from cts/scheduler/bug-lf-2581.exp rename to cts/scheduler/exp/bug-lf-2581.exp diff --git a/cts/scheduler/bug-lf-2606.exp b/cts/scheduler/exp/bug-lf-2606.exp similarity index 100% rename from cts/scheduler/bug-lf-2606.exp rename to cts/scheduler/exp/bug-lf-2606.exp diff --git a/cts/scheduler/bug-lf-2613.exp b/cts/scheduler/exp/bug-lf-2613.exp similarity index 100% rename from cts/scheduler/bug-lf-2613.exp rename to cts/scheduler/exp/bug-lf-2613.exp diff --git a/cts/scheduler/bug-lf-2619.exp b/cts/scheduler/exp/bug-lf-2619.exp similarity index 100% rename from cts/scheduler/bug-lf-2619.exp rename to cts/scheduler/exp/bug-lf-2619.exp diff --git a/cts/scheduler/bug-n-385265-2.exp b/cts/scheduler/exp/bug-n-385265-2.exp similarity index 100% rename from cts/scheduler/bug-n-385265-2.exp rename to cts/scheduler/exp/bug-n-385265-2.exp diff --git a/cts/scheduler/bug-n-385265.exp b/cts/scheduler/exp/bug-n-385265.exp similarity index 100% rename from cts/scheduler/bug-n-385265.exp rename to cts/scheduler/exp/bug-n-385265.exp diff --git a/cts/scheduler/bug-n-387749.exp b/cts/scheduler/exp/bug-n-387749.exp similarity index 100% rename from cts/scheduler/bug-n-387749.exp rename to cts/scheduler/exp/bug-n-387749.exp diff --git a/cts/scheduler/bug-pm-11.exp b/cts/scheduler/exp/bug-pm-11.exp similarity index 100% rename from cts/scheduler/bug-pm-11.exp rename to cts/scheduler/exp/bug-pm-11.exp diff --git a/cts/scheduler/bug-pm-12.exp b/cts/scheduler/exp/bug-pm-12.exp similarity index 100% rename from cts/scheduler/bug-pm-12.exp rename to cts/scheduler/exp/bug-pm-12.exp diff --git a/cts/scheduler/bug-rh-1097457.exp b/cts/scheduler/exp/bug-rh-1097457.exp similarity index 100% rename from cts/scheduler/bug-rh-1097457.exp rename to cts/scheduler/exp/bug-rh-1097457.exp diff --git a/cts/scheduler/bug-rh-880249.exp b/cts/scheduler/exp/bug-rh-880249.exp similarity index 100% rename from cts/scheduler/bug-rh-880249.exp rename to cts/scheduler/exp/bug-rh-880249.exp diff --git a/cts/scheduler/bug-suse-707150.exp b/cts/scheduler/exp/bug-suse-707150.exp similarity index 100% rename from cts/scheduler/bug-suse-707150.exp rename to cts/scheduler/exp/bug-suse-707150.exp diff --git a/cts/scheduler/bundle-nested-colocation.exp b/cts/scheduler/exp/bundle-nested-colocation.exp similarity index 100% rename from cts/scheduler/bundle-nested-colocation.exp rename to cts/scheduler/exp/bundle-nested-colocation.exp diff --git a/cts/scheduler/bundle-order-fencing.exp b/cts/scheduler/exp/bundle-order-fencing.exp similarity index 100% rename from cts/scheduler/bundle-order-fencing.exp rename to cts/scheduler/exp/bundle-order-fencing.exp diff --git a/cts/scheduler/bundle-order-partial-start-2.exp b/cts/scheduler/exp/bundle-order-partial-start-2.exp similarity index 100% rename from cts/scheduler/bundle-order-partial-start-2.exp rename to cts/scheduler/exp/bundle-order-partial-start-2.exp diff --git a/cts/scheduler/bundle-order-partial-start.exp b/cts/scheduler/exp/bundle-order-partial-start.exp similarity index 100% rename from cts/scheduler/bundle-order-partial-start.exp rename to cts/scheduler/exp/bundle-order-partial-start.exp diff --git a/cts/scheduler/bundle-order-partial-stop.exp b/cts/scheduler/exp/bundle-order-partial-stop.exp similarity index 100% rename from cts/scheduler/bundle-order-partial-stop.exp rename to cts/scheduler/exp/bundle-order-partial-stop.exp diff --git a/cts/scheduler/bundle-order-partial.exp b/cts/scheduler/exp/bundle-order-partial.exp similarity index 100% rename from cts/scheduler/bundle-order-partial.exp rename to cts/scheduler/exp/bundle-order-partial.exp diff --git a/cts/scheduler/bundle-order-startup-clone-2.exp b/cts/scheduler/exp/bundle-order-startup-clone-2.exp similarity index 100% rename from cts/scheduler/bundle-order-startup-clone-2.exp rename to cts/scheduler/exp/bundle-order-startup-clone-2.exp diff --git a/cts/scheduler/bundle-order-startup-clone.exp b/cts/scheduler/exp/bundle-order-startup-clone.exp similarity index 100% rename from cts/scheduler/bundle-order-startup-clone.exp rename to cts/scheduler/exp/bundle-order-startup-clone.exp diff --git a/cts/scheduler/bundle-order-startup.exp b/cts/scheduler/exp/bundle-order-startup.exp similarity index 100% rename from cts/scheduler/bundle-order-startup.exp rename to cts/scheduler/exp/bundle-order-startup.exp diff --git a/cts/scheduler/bundle-order-stop-clone.exp b/cts/scheduler/exp/bundle-order-stop-clone.exp similarity index 100% rename from cts/scheduler/bundle-order-stop-clone.exp rename to cts/scheduler/exp/bundle-order-stop-clone.exp diff --git a/cts/scheduler/bundle-order-stop-on-remote.exp b/cts/scheduler/exp/bundle-order-stop-on-remote.exp similarity index 100% rename from cts/scheduler/bundle-order-stop-on-remote.exp rename to cts/scheduler/exp/bundle-order-stop-on-remote.exp diff --git a/cts/scheduler/bundle-order-stop.exp b/cts/scheduler/exp/bundle-order-stop.exp similarity index 100% rename from cts/scheduler/bundle-order-stop.exp rename to cts/scheduler/exp/bundle-order-stop.exp diff --git a/cts/scheduler/bundle-probe-order-1.exp b/cts/scheduler/exp/bundle-probe-order-1.exp similarity index 100% rename from cts/scheduler/bundle-probe-order-1.exp rename to cts/scheduler/exp/bundle-probe-order-1.exp diff --git a/cts/scheduler/bundle-probe-order-2.exp b/cts/scheduler/exp/bundle-probe-order-2.exp similarity index 100% rename from cts/scheduler/bundle-probe-order-2.exp rename to cts/scheduler/exp/bundle-probe-order-2.exp diff --git a/cts/scheduler/bundle-probe-order-3.exp b/cts/scheduler/exp/bundle-probe-order-3.exp similarity index 100% rename from cts/scheduler/bundle-probe-order-3.exp rename to cts/scheduler/exp/bundle-probe-order-3.exp diff --git a/cts/scheduler/bundle-probe-remotes.exp b/cts/scheduler/exp/bundle-probe-remotes.exp similarity index 100% rename from cts/scheduler/bundle-probe-remotes.exp rename to cts/scheduler/exp/bundle-probe-remotes.exp diff --git a/cts/scheduler/bundle-replicas-change.exp b/cts/scheduler/exp/bundle-replicas-change.exp similarity index 100% rename from cts/scheduler/bundle-replicas-change.exp rename to cts/scheduler/exp/bundle-replicas-change.exp diff --git a/cts/scheduler/cancel-behind-moving-remote.exp b/cts/scheduler/exp/cancel-behind-moving-remote.exp similarity index 100% rename from cts/scheduler/cancel-behind-moving-remote.exp rename to cts/scheduler/exp/cancel-behind-moving-remote.exp diff --git a/cts/scheduler/clone-anon-dup.exp b/cts/scheduler/exp/clone-anon-dup.exp similarity index 100% rename from cts/scheduler/clone-anon-dup.exp rename to cts/scheduler/exp/clone-anon-dup.exp diff --git a/cts/scheduler/clone-anon-failcount.exp b/cts/scheduler/exp/clone-anon-failcount.exp similarity index 100% rename from cts/scheduler/clone-anon-failcount.exp rename to cts/scheduler/exp/clone-anon-failcount.exp diff --git a/cts/scheduler/clone-anon-probe-1.exp b/cts/scheduler/exp/clone-anon-probe-1.exp similarity index 100% rename from cts/scheduler/clone-anon-probe-1.exp rename to cts/scheduler/exp/clone-anon-probe-1.exp diff --git a/cts/scheduler/clone-anon-probe-2.exp b/cts/scheduler/exp/clone-anon-probe-2.exp similarity index 100% rename from cts/scheduler/clone-anon-probe-2.exp rename to cts/scheduler/exp/clone-anon-probe-2.exp diff --git a/cts/scheduler/clone-colocate-instance-1.exp b/cts/scheduler/exp/clone-colocate-instance-1.exp similarity index 100% rename from cts/scheduler/clone-colocate-instance-1.exp rename to cts/scheduler/exp/clone-colocate-instance-1.exp diff --git a/cts/scheduler/clone-colocate-instance-2.exp b/cts/scheduler/exp/clone-colocate-instance-2.exp similarity index 100% rename from cts/scheduler/clone-colocate-instance-2.exp rename to cts/scheduler/exp/clone-colocate-instance-2.exp diff --git a/cts/scheduler/clone-fail-block-colocation.exp b/cts/scheduler/exp/clone-fail-block-colocation.exp similarity index 100% rename from cts/scheduler/clone-fail-block-colocation.exp rename to cts/scheduler/exp/clone-fail-block-colocation.exp diff --git a/cts/scheduler/clone-interleave-1.exp b/cts/scheduler/exp/clone-interleave-1.exp similarity index 100% rename from cts/scheduler/clone-interleave-1.exp rename to cts/scheduler/exp/clone-interleave-1.exp diff --git a/cts/scheduler/clone-interleave-2.exp b/cts/scheduler/exp/clone-interleave-2.exp similarity index 100% rename from cts/scheduler/clone-interleave-2.exp rename to cts/scheduler/exp/clone-interleave-2.exp diff --git a/cts/scheduler/clone-interleave-3.exp b/cts/scheduler/exp/clone-interleave-3.exp similarity index 100% rename from cts/scheduler/clone-interleave-3.exp rename to cts/scheduler/exp/clone-interleave-3.exp diff --git a/cts/scheduler/clone-max-zero.exp b/cts/scheduler/exp/clone-max-zero.exp similarity index 100% rename from cts/scheduler/clone-max-zero.exp rename to cts/scheduler/exp/clone-max-zero.exp diff --git a/cts/scheduler/clone-no-shuffle.exp b/cts/scheduler/exp/clone-no-shuffle.exp similarity index 100% rename from cts/scheduler/clone-no-shuffle.exp rename to cts/scheduler/exp/clone-no-shuffle.exp diff --git a/cts/scheduler/clone-order-16instances.exp b/cts/scheduler/exp/clone-order-16instances.exp similarity index 100% rename from cts/scheduler/clone-order-16instances.exp rename to cts/scheduler/exp/clone-order-16instances.exp diff --git a/cts/scheduler/clone-order-instance.exp b/cts/scheduler/exp/clone-order-instance.exp similarity index 100% rename from cts/scheduler/clone-order-instance.exp rename to cts/scheduler/exp/clone-order-instance.exp diff --git a/cts/scheduler/clone-order-primitive.exp b/cts/scheduler/exp/clone-order-primitive.exp similarity index 100% rename from cts/scheduler/clone-order-primitive.exp rename to cts/scheduler/exp/clone-order-primitive.exp diff --git a/cts/scheduler/clone-require-all-1.exp b/cts/scheduler/exp/clone-require-all-1.exp similarity index 100% rename from cts/scheduler/clone-require-all-1.exp rename to cts/scheduler/exp/clone-require-all-1.exp diff --git a/cts/scheduler/clone-require-all-2.exp b/cts/scheduler/exp/clone-require-all-2.exp similarity index 100% rename from cts/scheduler/clone-require-all-2.exp rename to cts/scheduler/exp/clone-require-all-2.exp diff --git a/cts/scheduler/clone-require-all-3.exp b/cts/scheduler/exp/clone-require-all-3.exp similarity index 100% rename from cts/scheduler/clone-require-all-3.exp rename to cts/scheduler/exp/clone-require-all-3.exp diff --git a/cts/scheduler/clone-require-all-4.exp b/cts/scheduler/exp/clone-require-all-4.exp similarity index 100% rename from cts/scheduler/clone-require-all-4.exp rename to cts/scheduler/exp/clone-require-all-4.exp diff --git a/cts/scheduler/clone-require-all-5.exp b/cts/scheduler/exp/clone-require-all-5.exp similarity index 100% rename from cts/scheduler/clone-require-all-5.exp rename to cts/scheduler/exp/clone-require-all-5.exp diff --git a/cts/scheduler/clone-require-all-6.exp b/cts/scheduler/exp/clone-require-all-6.exp similarity index 100% rename from cts/scheduler/clone-require-all-6.exp rename to cts/scheduler/exp/clone-require-all-6.exp diff --git a/cts/scheduler/clone-require-all-7.exp b/cts/scheduler/exp/clone-require-all-7.exp similarity index 100% rename from cts/scheduler/clone-require-all-7.exp rename to cts/scheduler/exp/clone-require-all-7.exp diff --git a/cts/scheduler/clone-require-all-no-interleave-1.exp b/cts/scheduler/exp/clone-require-all-no-interleave-1.exp similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-1.exp rename to cts/scheduler/exp/clone-require-all-no-interleave-1.exp diff --git a/cts/scheduler/clone-require-all-no-interleave-2.exp b/cts/scheduler/exp/clone-require-all-no-interleave-2.exp similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-2.exp rename to cts/scheduler/exp/clone-require-all-no-interleave-2.exp diff --git a/cts/scheduler/clone-require-all-no-interleave-3.exp b/cts/scheduler/exp/clone-require-all-no-interleave-3.exp similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-3.exp rename to cts/scheduler/exp/clone-require-all-no-interleave-3.exp diff --git a/cts/scheduler/clone-requires-quorum-recovery.exp b/cts/scheduler/exp/clone-requires-quorum-recovery.exp similarity index 100% rename from cts/scheduler/clone-requires-quorum-recovery.exp rename to cts/scheduler/exp/clone-requires-quorum-recovery.exp diff --git a/cts/scheduler/clone-requires-quorum.exp b/cts/scheduler/exp/clone-requires-quorum.exp similarity index 100% rename from cts/scheduler/clone-requires-quorum.exp rename to cts/scheduler/exp/clone-requires-quorum.exp diff --git a/cts/scheduler/clone_min_interleave_start_one.exp b/cts/scheduler/exp/clone_min_interleave_start_one.exp similarity index 100% rename from cts/scheduler/clone_min_interleave_start_one.exp rename to cts/scheduler/exp/clone_min_interleave_start_one.exp diff --git a/cts/scheduler/clone_min_interleave_start_two.exp b/cts/scheduler/exp/clone_min_interleave_start_two.exp similarity index 100% rename from cts/scheduler/clone_min_interleave_start_two.exp rename to cts/scheduler/exp/clone_min_interleave_start_two.exp diff --git a/cts/scheduler/clone_min_interleave_stop_one.exp b/cts/scheduler/exp/clone_min_interleave_stop_one.exp similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_one.exp rename to cts/scheduler/exp/clone_min_interleave_stop_one.exp diff --git a/cts/scheduler/clone_min_interleave_stop_two.exp b/cts/scheduler/exp/clone_min_interleave_stop_two.exp similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_two.exp rename to cts/scheduler/exp/clone_min_interleave_stop_two.exp diff --git a/cts/scheduler/clone_min_start_one.exp b/cts/scheduler/exp/clone_min_start_one.exp similarity index 100% rename from cts/scheduler/clone_min_start_one.exp rename to cts/scheduler/exp/clone_min_start_one.exp diff --git a/cts/scheduler/clone_min_start_two.exp b/cts/scheduler/exp/clone_min_start_two.exp similarity index 100% rename from cts/scheduler/clone_min_start_two.exp rename to cts/scheduler/exp/clone_min_start_two.exp diff --git a/cts/scheduler/clone_min_stop_all.exp b/cts/scheduler/exp/clone_min_stop_all.exp similarity index 100% rename from cts/scheduler/clone_min_stop_all.exp rename to cts/scheduler/exp/clone_min_stop_all.exp diff --git a/cts/scheduler/clone_min_stop_one.exp b/cts/scheduler/exp/clone_min_stop_one.exp similarity index 100% rename from cts/scheduler/clone_min_stop_one.exp rename to cts/scheduler/exp/clone_min_stop_one.exp diff --git a/cts/scheduler/clone_min_stop_two.exp b/cts/scheduler/exp/clone_min_stop_two.exp similarity index 100% rename from cts/scheduler/clone_min_stop_two.exp rename to cts/scheduler/exp/clone_min_stop_two.exp diff --git a/cts/scheduler/cloned-group-stop.exp b/cts/scheduler/exp/cloned-group-stop.exp similarity index 100% rename from cts/scheduler/cloned-group-stop.exp rename to cts/scheduler/exp/cloned-group-stop.exp diff --git a/cts/scheduler/cloned-group.exp b/cts/scheduler/exp/cloned-group.exp similarity index 100% rename from cts/scheduler/cloned-group.exp rename to cts/scheduler/exp/cloned-group.exp diff --git a/cts/scheduler/cloned_start_one.exp b/cts/scheduler/exp/cloned_start_one.exp similarity index 100% rename from cts/scheduler/cloned_start_one.exp rename to cts/scheduler/exp/cloned_start_one.exp diff --git a/cts/scheduler/cloned_start_two.exp b/cts/scheduler/exp/cloned_start_two.exp similarity index 100% rename from cts/scheduler/cloned_start_two.exp rename to cts/scheduler/exp/cloned_start_two.exp diff --git a/cts/scheduler/cloned_stop_one.exp b/cts/scheduler/exp/cloned_stop_one.exp similarity index 100% rename from cts/scheduler/cloned_stop_one.exp rename to cts/scheduler/exp/cloned_stop_one.exp diff --git a/cts/scheduler/cloned_stop_two.exp b/cts/scheduler/exp/cloned_stop_two.exp similarity index 100% rename from cts/scheduler/cloned_stop_two.exp rename to cts/scheduler/exp/cloned_stop_two.exp diff --git a/cts/scheduler/cluster-specific-params.exp b/cts/scheduler/exp/cluster-specific-params.exp similarity index 100% rename from cts/scheduler/cluster-specific-params.exp rename to cts/scheduler/exp/cluster-specific-params.exp diff --git a/cts/scheduler/colo_master_w_native.exp b/cts/scheduler/exp/colo_master_w_native.exp similarity index 100% rename from cts/scheduler/colo_master_w_native.exp rename to cts/scheduler/exp/colo_master_w_native.exp diff --git a/cts/scheduler/colo_slave_w_native.exp b/cts/scheduler/exp/colo_slave_w_native.exp similarity index 100% rename from cts/scheduler/colo_slave_w_native.exp rename to cts/scheduler/exp/colo_slave_w_native.exp diff --git a/cts/scheduler/coloc-attr.exp b/cts/scheduler/exp/coloc-attr.exp similarity index 100% rename from cts/scheduler/coloc-attr.exp rename to cts/scheduler/exp/coloc-attr.exp diff --git a/cts/scheduler/coloc-clone-stays-active.exp b/cts/scheduler/exp/coloc-clone-stays-active.exp similarity index 100% rename from cts/scheduler/coloc-clone-stays-active.exp rename to cts/scheduler/exp/coloc-clone-stays-active.exp diff --git a/cts/scheduler/coloc-dependee-should-move.exp b/cts/scheduler/exp/coloc-dependee-should-move.exp similarity index 100% rename from cts/scheduler/coloc-dependee-should-move.exp rename to cts/scheduler/exp/coloc-dependee-should-move.exp diff --git a/cts/scheduler/coloc-dependee-should-stay.exp b/cts/scheduler/exp/coloc-dependee-should-stay.exp similarity index 100% rename from cts/scheduler/coloc-dependee-should-stay.exp rename to cts/scheduler/exp/coloc-dependee-should-stay.exp diff --git a/cts/scheduler/coloc-group.exp b/cts/scheduler/exp/coloc-group.exp similarity index 100% rename from cts/scheduler/coloc-group.exp rename to cts/scheduler/exp/coloc-group.exp diff --git a/cts/scheduler/coloc-intra-set.exp b/cts/scheduler/exp/coloc-intra-set.exp similarity index 100% rename from cts/scheduler/coloc-intra-set.exp rename to cts/scheduler/exp/coloc-intra-set.exp diff --git a/cts/scheduler/coloc-list.exp b/cts/scheduler/exp/coloc-list.exp similarity index 100% rename from cts/scheduler/coloc-list.exp rename to cts/scheduler/exp/coloc-list.exp diff --git a/cts/scheduler/coloc-loop.exp b/cts/scheduler/exp/coloc-loop.exp similarity index 100% rename from cts/scheduler/coloc-loop.exp rename to cts/scheduler/exp/coloc-loop.exp diff --git a/cts/scheduler/coloc-many-one.exp b/cts/scheduler/exp/coloc-many-one.exp similarity index 100% rename from cts/scheduler/coloc-many-one.exp rename to cts/scheduler/exp/coloc-many-one.exp diff --git a/cts/scheduler/coloc-negative-group.exp b/cts/scheduler/exp/coloc-negative-group.exp similarity index 100% rename from cts/scheduler/coloc-negative-group.exp rename to cts/scheduler/exp/coloc-negative-group.exp diff --git a/cts/scheduler/coloc-slave-anti.exp b/cts/scheduler/exp/coloc-slave-anti.exp similarity index 100% rename from cts/scheduler/coloc-slave-anti.exp rename to cts/scheduler/exp/coloc-slave-anti.exp diff --git a/cts/scheduler/coloc_fp_logic.exp b/cts/scheduler/exp/coloc_fp_logic.exp similarity index 100% rename from cts/scheduler/coloc_fp_logic.exp rename to cts/scheduler/exp/coloc_fp_logic.exp diff --git a/cts/scheduler/colocate-primitive-with-clone.exp b/cts/scheduler/exp/colocate-primitive-with-clone.exp similarity index 100% rename from cts/scheduler/colocate-primitive-with-clone.exp rename to cts/scheduler/exp/colocate-primitive-with-clone.exp diff --git a/cts/scheduler/colocated-utilization-clone.exp b/cts/scheduler/exp/colocated-utilization-clone.exp similarity index 100% rename from cts/scheduler/colocated-utilization-clone.exp rename to cts/scheduler/exp/colocated-utilization-clone.exp diff --git a/cts/scheduler/colocated-utilization-group.exp b/cts/scheduler/exp/colocated-utilization-group.exp similarity index 100% rename from cts/scheduler/colocated-utilization-group.exp rename to cts/scheduler/exp/colocated-utilization-group.exp diff --git a/cts/scheduler/colocated-utilization-primitive-1.exp b/cts/scheduler/exp/colocated-utilization-primitive-1.exp similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-1.exp rename to cts/scheduler/exp/colocated-utilization-primitive-1.exp diff --git a/cts/scheduler/colocated-utilization-primitive-2.exp b/cts/scheduler/exp/colocated-utilization-primitive-2.exp similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-2.exp rename to cts/scheduler/exp/colocated-utilization-primitive-2.exp diff --git a/cts/scheduler/colocation-influence.exp b/cts/scheduler/exp/colocation-influence.exp similarity index 100% rename from cts/scheduler/colocation-influence.exp rename to cts/scheduler/exp/colocation-influence.exp diff --git a/cts/scheduler/colocation_constraint_stops_master.exp b/cts/scheduler/exp/colocation_constraint_stops_master.exp similarity index 100% rename from cts/scheduler/colocation_constraint_stops_master.exp rename to cts/scheduler/exp/colocation_constraint_stops_master.exp diff --git a/cts/scheduler/colocation_constraint_stops_slave.exp b/cts/scheduler/exp/colocation_constraint_stops_slave.exp similarity index 100% rename from cts/scheduler/colocation_constraint_stops_slave.exp rename to cts/scheduler/exp/colocation_constraint_stops_slave.exp diff --git a/cts/scheduler/comments.exp b/cts/scheduler/exp/comments.exp similarity index 100% rename from cts/scheduler/comments.exp rename to cts/scheduler/exp/comments.exp diff --git a/cts/scheduler/complex_enforce_colo.exp b/cts/scheduler/exp/complex_enforce_colo.exp similarity index 100% rename from cts/scheduler/complex_enforce_colo.exp rename to cts/scheduler/exp/complex_enforce_colo.exp diff --git a/cts/scheduler/concurrent-fencing.exp b/cts/scheduler/exp/concurrent-fencing.exp similarity index 100% rename from cts/scheduler/concurrent-fencing.exp rename to cts/scheduler/exp/concurrent-fencing.exp diff --git a/cts/scheduler/container-1.exp b/cts/scheduler/exp/container-1.exp similarity index 100% rename from cts/scheduler/container-1.exp rename to cts/scheduler/exp/container-1.exp diff --git a/cts/scheduler/container-2.exp b/cts/scheduler/exp/container-2.exp similarity index 100% rename from cts/scheduler/container-2.exp rename to cts/scheduler/exp/container-2.exp diff --git a/cts/scheduler/container-3.exp b/cts/scheduler/exp/container-3.exp similarity index 100% rename from cts/scheduler/container-3.exp rename to cts/scheduler/exp/container-3.exp diff --git a/cts/scheduler/container-4.exp b/cts/scheduler/exp/container-4.exp similarity index 100% rename from cts/scheduler/container-4.exp rename to cts/scheduler/exp/container-4.exp diff --git a/cts/scheduler/container-group-1.exp b/cts/scheduler/exp/container-group-1.exp similarity index 100% rename from cts/scheduler/container-group-1.exp rename to cts/scheduler/exp/container-group-1.exp diff --git a/cts/scheduler/container-group-2.exp b/cts/scheduler/exp/container-group-2.exp similarity index 100% rename from cts/scheduler/container-group-2.exp rename to cts/scheduler/exp/container-group-2.exp diff --git a/cts/scheduler/container-group-3.exp b/cts/scheduler/exp/container-group-3.exp similarity index 100% rename from cts/scheduler/container-group-3.exp rename to cts/scheduler/exp/container-group-3.exp diff --git a/cts/scheduler/container-group-4.exp b/cts/scheduler/exp/container-group-4.exp similarity index 100% rename from cts/scheduler/container-group-4.exp rename to cts/scheduler/exp/container-group-4.exp diff --git a/cts/scheduler/container-is-remote-node.exp b/cts/scheduler/exp/container-is-remote-node.exp similarity index 100% rename from cts/scheduler/container-is-remote-node.exp rename to cts/scheduler/exp/container-is-remote-node.exp diff --git a/cts/scheduler/date-1.exp b/cts/scheduler/exp/date-1.exp similarity index 100% rename from cts/scheduler/date-1.exp rename to cts/scheduler/exp/date-1.exp diff --git a/cts/scheduler/date-2.exp b/cts/scheduler/exp/date-2.exp similarity index 100% rename from cts/scheduler/date-2.exp rename to cts/scheduler/exp/date-2.exp diff --git a/cts/scheduler/date-3.exp b/cts/scheduler/exp/date-3.exp similarity index 100% rename from cts/scheduler/date-3.exp rename to cts/scheduler/exp/date-3.exp diff --git a/cts/scheduler/dc-fence-ordering.exp b/cts/scheduler/exp/dc-fence-ordering.exp similarity index 100% rename from cts/scheduler/dc-fence-ordering.exp rename to cts/scheduler/exp/dc-fence-ordering.exp diff --git a/cts/scheduler/enforce-colo1.exp b/cts/scheduler/exp/enforce-colo1.exp similarity index 100% rename from cts/scheduler/enforce-colo1.exp rename to cts/scheduler/exp/enforce-colo1.exp diff --git a/cts/scheduler/expire-non-blocked-failure.exp b/cts/scheduler/exp/expire-non-blocked-failure.exp similarity index 100% rename from cts/scheduler/expire-non-blocked-failure.exp rename to cts/scheduler/exp/expire-non-blocked-failure.exp diff --git a/cts/scheduler/failcount-block.exp b/cts/scheduler/exp/failcount-block.exp similarity index 100% rename from cts/scheduler/failcount-block.exp rename to cts/scheduler/exp/failcount-block.exp diff --git a/cts/scheduler/failcount.exp b/cts/scheduler/exp/failcount.exp similarity index 100% rename from cts/scheduler/failcount.exp rename to cts/scheduler/exp/failcount.exp diff --git a/cts/scheduler/failed-demote-recovery-master.exp b/cts/scheduler/exp/failed-demote-recovery-master.exp similarity index 100% rename from cts/scheduler/failed-demote-recovery-master.exp rename to cts/scheduler/exp/failed-demote-recovery-master.exp diff --git a/cts/scheduler/failed-demote-recovery.exp b/cts/scheduler/exp/failed-demote-recovery.exp similarity index 100% rename from cts/scheduler/failed-demote-recovery.exp rename to cts/scheduler/exp/failed-demote-recovery.exp diff --git a/cts/scheduler/force-anon-clone-max.exp b/cts/scheduler/exp/force-anon-clone-max.exp similarity index 100% rename from cts/scheduler/force-anon-clone-max.exp rename to cts/scheduler/exp/force-anon-clone-max.exp diff --git a/cts/scheduler/group-dependents.exp b/cts/scheduler/exp/group-dependents.exp similarity index 100% rename from cts/scheduler/group-dependents.exp rename to cts/scheduler/exp/group-dependents.exp diff --git a/cts/scheduler/group-fail.exp b/cts/scheduler/exp/group-fail.exp similarity index 100% rename from cts/scheduler/group-fail.exp rename to cts/scheduler/exp/group-fail.exp diff --git a/cts/scheduler/group-stop-ordering.exp b/cts/scheduler/exp/group-stop-ordering.exp similarity index 100% rename from cts/scheduler/group-stop-ordering.exp rename to cts/scheduler/exp/group-stop-ordering.exp diff --git a/cts/scheduler/group-unmanaged-stopped.exp b/cts/scheduler/exp/group-unmanaged-stopped.exp similarity index 100% rename from cts/scheduler/group-unmanaged-stopped.exp rename to cts/scheduler/exp/group-unmanaged-stopped.exp diff --git a/cts/scheduler/group-unmanaged.exp b/cts/scheduler/exp/group-unmanaged.exp similarity index 100% rename from cts/scheduler/group-unmanaged.exp rename to cts/scheduler/exp/group-unmanaged.exp diff --git a/cts/scheduler/group1.exp b/cts/scheduler/exp/group1.exp similarity index 100% rename from cts/scheduler/group1.exp rename to cts/scheduler/exp/group1.exp diff --git a/cts/scheduler/group10.exp b/cts/scheduler/exp/group10.exp similarity index 100% rename from cts/scheduler/group10.exp rename to cts/scheduler/exp/group10.exp diff --git a/cts/scheduler/group11.exp b/cts/scheduler/exp/group11.exp similarity index 100% rename from cts/scheduler/group11.exp rename to cts/scheduler/exp/group11.exp diff --git a/cts/scheduler/group13.exp b/cts/scheduler/exp/group13.exp similarity index 100% rename from cts/scheduler/group13.exp rename to cts/scheduler/exp/group13.exp diff --git a/cts/scheduler/group14.exp b/cts/scheduler/exp/group14.exp similarity index 100% rename from cts/scheduler/group14.exp rename to cts/scheduler/exp/group14.exp diff --git a/cts/scheduler/group15.exp b/cts/scheduler/exp/group15.exp similarity index 100% rename from cts/scheduler/group15.exp rename to cts/scheduler/exp/group15.exp diff --git a/cts/scheduler/group2.exp b/cts/scheduler/exp/group2.exp similarity index 100% rename from cts/scheduler/group2.exp rename to cts/scheduler/exp/group2.exp diff --git a/cts/scheduler/group3.exp b/cts/scheduler/exp/group3.exp similarity index 100% rename from cts/scheduler/group3.exp rename to cts/scheduler/exp/group3.exp diff --git a/cts/scheduler/group4.exp b/cts/scheduler/exp/group4.exp similarity index 100% rename from cts/scheduler/group4.exp rename to cts/scheduler/exp/group4.exp diff --git a/cts/scheduler/group5.exp b/cts/scheduler/exp/group5.exp similarity index 100% rename from cts/scheduler/group5.exp rename to cts/scheduler/exp/group5.exp diff --git a/cts/scheduler/group6.exp b/cts/scheduler/exp/group6.exp similarity index 100% rename from cts/scheduler/group6.exp rename to cts/scheduler/exp/group6.exp diff --git a/cts/scheduler/group7.exp b/cts/scheduler/exp/group7.exp similarity index 100% rename from cts/scheduler/group7.exp rename to cts/scheduler/exp/group7.exp diff --git a/cts/scheduler/group8.exp b/cts/scheduler/exp/group8.exp similarity index 100% rename from cts/scheduler/group8.exp rename to cts/scheduler/exp/group8.exp diff --git a/cts/scheduler/group9.exp b/cts/scheduler/exp/group9.exp similarity index 100% rename from cts/scheduler/group9.exp rename to cts/scheduler/exp/group9.exp diff --git a/cts/scheduler/guest-host-not-fenceable.exp b/cts/scheduler/exp/guest-host-not-fenceable.exp similarity index 100% rename from cts/scheduler/guest-host-not-fenceable.exp rename to cts/scheduler/exp/guest-host-not-fenceable.exp diff --git a/cts/scheduler/guest-node-cleanup.exp b/cts/scheduler/exp/guest-node-cleanup.exp similarity index 100% rename from cts/scheduler/guest-node-cleanup.exp rename to cts/scheduler/exp/guest-node-cleanup.exp diff --git a/cts/scheduler/guest-node-host-dies.exp b/cts/scheduler/exp/guest-node-host-dies.exp similarity index 100% rename from cts/scheduler/guest-node-host-dies.exp rename to cts/scheduler/exp/guest-node-host-dies.exp diff --git a/cts/scheduler/history-1.exp b/cts/scheduler/exp/history-1.exp similarity index 100% rename from cts/scheduler/history-1.exp rename to cts/scheduler/exp/history-1.exp diff --git a/cts/scheduler/honor_stonith_rsc_order1.exp b/cts/scheduler/exp/honor_stonith_rsc_order1.exp similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order1.exp rename to cts/scheduler/exp/honor_stonith_rsc_order1.exp diff --git a/cts/scheduler/honor_stonith_rsc_order2.exp b/cts/scheduler/exp/honor_stonith_rsc_order2.exp similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order2.exp rename to cts/scheduler/exp/honor_stonith_rsc_order2.exp diff --git a/cts/scheduler/honor_stonith_rsc_order3.exp b/cts/scheduler/exp/honor_stonith_rsc_order3.exp similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order3.exp rename to cts/scheduler/exp/honor_stonith_rsc_order3.exp diff --git a/cts/scheduler/honor_stonith_rsc_order4.exp b/cts/scheduler/exp/honor_stonith_rsc_order4.exp similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order4.exp rename to cts/scheduler/exp/honor_stonith_rsc_order4.exp diff --git a/cts/scheduler/ignore_stonith_rsc_order1.exp b/cts/scheduler/exp/ignore_stonith_rsc_order1.exp similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order1.exp rename to cts/scheduler/exp/ignore_stonith_rsc_order1.exp diff --git a/cts/scheduler/ignore_stonith_rsc_order2.exp b/cts/scheduler/exp/ignore_stonith_rsc_order2.exp similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order2.exp rename to cts/scheduler/exp/ignore_stonith_rsc_order2.exp diff --git a/cts/scheduler/ignore_stonith_rsc_order3.exp b/cts/scheduler/exp/ignore_stonith_rsc_order3.exp similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order3.exp rename to cts/scheduler/exp/ignore_stonith_rsc_order3.exp diff --git a/cts/scheduler/ignore_stonith_rsc_order4.exp b/cts/scheduler/exp/ignore_stonith_rsc_order4.exp similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order4.exp rename to cts/scheduler/exp/ignore_stonith_rsc_order4.exp diff --git a/cts/scheduler/inc0.exp b/cts/scheduler/exp/inc0.exp similarity index 100% rename from cts/scheduler/inc0.exp rename to cts/scheduler/exp/inc0.exp diff --git a/cts/scheduler/inc1.exp b/cts/scheduler/exp/inc1.exp similarity index 100% rename from cts/scheduler/inc1.exp rename to cts/scheduler/exp/inc1.exp diff --git a/cts/scheduler/inc10.exp b/cts/scheduler/exp/inc10.exp similarity index 100% rename from cts/scheduler/inc10.exp rename to cts/scheduler/exp/inc10.exp diff --git a/cts/scheduler/inc11.exp b/cts/scheduler/exp/inc11.exp similarity index 100% rename from cts/scheduler/inc11.exp rename to cts/scheduler/exp/inc11.exp diff --git a/cts/scheduler/inc12.exp b/cts/scheduler/exp/inc12.exp similarity index 100% rename from cts/scheduler/inc12.exp rename to cts/scheduler/exp/inc12.exp diff --git a/cts/scheduler/inc2.exp b/cts/scheduler/exp/inc2.exp similarity index 100% rename from cts/scheduler/inc2.exp rename to cts/scheduler/exp/inc2.exp diff --git a/cts/scheduler/inc3.exp b/cts/scheduler/exp/inc3.exp similarity index 100% rename from cts/scheduler/inc3.exp rename to cts/scheduler/exp/inc3.exp diff --git a/cts/scheduler/inc4.exp b/cts/scheduler/exp/inc4.exp similarity index 100% rename from cts/scheduler/inc4.exp rename to cts/scheduler/exp/inc4.exp diff --git a/cts/scheduler/inc5.exp b/cts/scheduler/exp/inc5.exp similarity index 100% rename from cts/scheduler/inc5.exp rename to cts/scheduler/exp/inc5.exp diff --git a/cts/scheduler/inc6.exp b/cts/scheduler/exp/inc6.exp similarity index 100% rename from cts/scheduler/inc6.exp rename to cts/scheduler/exp/inc6.exp diff --git a/cts/scheduler/inc7.exp b/cts/scheduler/exp/inc7.exp similarity index 100% rename from cts/scheduler/inc7.exp rename to cts/scheduler/exp/inc7.exp diff --git a/cts/scheduler/inc8.exp b/cts/scheduler/exp/inc8.exp similarity index 100% rename from cts/scheduler/inc8.exp rename to cts/scheduler/exp/inc8.exp diff --git a/cts/scheduler/inc9.exp b/cts/scheduler/exp/inc9.exp similarity index 100% rename from cts/scheduler/inc9.exp rename to cts/scheduler/exp/inc9.exp diff --git a/cts/scheduler/interleave-0.exp b/cts/scheduler/exp/interleave-0.exp similarity index 100% rename from cts/scheduler/interleave-0.exp rename to cts/scheduler/exp/interleave-0.exp diff --git a/cts/scheduler/interleave-1.exp b/cts/scheduler/exp/interleave-1.exp similarity index 100% rename from cts/scheduler/interleave-1.exp rename to cts/scheduler/exp/interleave-1.exp diff --git a/cts/scheduler/interleave-2.exp b/cts/scheduler/exp/interleave-2.exp similarity index 100% rename from cts/scheduler/interleave-2.exp rename to cts/scheduler/exp/interleave-2.exp diff --git a/cts/scheduler/interleave-3.exp b/cts/scheduler/exp/interleave-3.exp similarity index 100% rename from cts/scheduler/interleave-3.exp rename to cts/scheduler/exp/interleave-3.exp diff --git a/cts/scheduler/interleave-pseudo-stop.exp b/cts/scheduler/exp/interleave-pseudo-stop.exp similarity index 100% rename from cts/scheduler/interleave-pseudo-stop.exp rename to cts/scheduler/exp/interleave-pseudo-stop.exp diff --git a/cts/scheduler/interleave-restart.exp b/cts/scheduler/exp/interleave-restart.exp similarity index 100% rename from cts/scheduler/interleave-restart.exp rename to cts/scheduler/exp/interleave-restart.exp diff --git a/cts/scheduler/interleave-stop.exp b/cts/scheduler/exp/interleave-stop.exp similarity index 100% rename from cts/scheduler/interleave-stop.exp rename to cts/scheduler/exp/interleave-stop.exp diff --git a/cts/scheduler/intervals.exp b/cts/scheduler/exp/intervals.exp similarity index 100% rename from cts/scheduler/intervals.exp rename to cts/scheduler/exp/intervals.exp diff --git a/cts/scheduler/load-stopped-loop-2.exp b/cts/scheduler/exp/load-stopped-loop-2.exp similarity index 100% rename from cts/scheduler/load-stopped-loop-2.exp rename to cts/scheduler/exp/load-stopped-loop-2.exp diff --git a/cts/scheduler/load-stopped-loop.exp b/cts/scheduler/exp/load-stopped-loop.exp similarity index 100% rename from cts/scheduler/load-stopped-loop.exp rename to cts/scheduler/exp/load-stopped-loop.exp diff --git a/cts/scheduler/location-date-rules-1.exp b/cts/scheduler/exp/location-date-rules-1.exp similarity index 100% rename from cts/scheduler/location-date-rules-1.exp rename to cts/scheduler/exp/location-date-rules-1.exp diff --git a/cts/scheduler/location-date-rules-2.exp b/cts/scheduler/exp/location-date-rules-2.exp similarity index 100% rename from cts/scheduler/location-date-rules-2.exp rename to cts/scheduler/exp/location-date-rules-2.exp diff --git a/cts/scheduler/location-sets-templates.exp b/cts/scheduler/exp/location-sets-templates.exp similarity index 100% rename from cts/scheduler/location-sets-templates.exp rename to cts/scheduler/exp/location-sets-templates.exp diff --git a/cts/scheduler/managed-0.exp b/cts/scheduler/exp/managed-0.exp similarity index 100% rename from cts/scheduler/managed-0.exp rename to cts/scheduler/exp/managed-0.exp diff --git a/cts/scheduler/managed-1.exp b/cts/scheduler/exp/managed-1.exp similarity index 100% rename from cts/scheduler/managed-1.exp rename to cts/scheduler/exp/managed-1.exp diff --git a/cts/scheduler/managed-2.exp b/cts/scheduler/exp/managed-2.exp similarity index 100% rename from cts/scheduler/managed-2.exp rename to cts/scheduler/exp/managed-2.exp diff --git a/cts/scheduler/master-0.exp b/cts/scheduler/exp/master-0.exp similarity index 100% rename from cts/scheduler/master-0.exp rename to cts/scheduler/exp/master-0.exp diff --git a/cts/scheduler/master-1.exp b/cts/scheduler/exp/master-1.exp similarity index 100% rename from cts/scheduler/master-1.exp rename to cts/scheduler/exp/master-1.exp diff --git a/cts/scheduler/master-10.exp b/cts/scheduler/exp/master-10.exp similarity index 100% rename from cts/scheduler/master-10.exp rename to cts/scheduler/exp/master-10.exp diff --git a/cts/scheduler/master-11.exp b/cts/scheduler/exp/master-11.exp similarity index 100% rename from cts/scheduler/master-11.exp rename to cts/scheduler/exp/master-11.exp diff --git a/cts/scheduler/master-12.exp b/cts/scheduler/exp/master-12.exp similarity index 100% rename from cts/scheduler/master-12.exp rename to cts/scheduler/exp/master-12.exp diff --git a/cts/scheduler/master-13.exp b/cts/scheduler/exp/master-13.exp similarity index 100% rename from cts/scheduler/master-13.exp rename to cts/scheduler/exp/master-13.exp diff --git a/cts/scheduler/master-2.exp b/cts/scheduler/exp/master-2.exp similarity index 100% rename from cts/scheduler/master-2.exp rename to cts/scheduler/exp/master-2.exp diff --git a/cts/scheduler/master-3.exp b/cts/scheduler/exp/master-3.exp similarity index 100% rename from cts/scheduler/master-3.exp rename to cts/scheduler/exp/master-3.exp diff --git a/cts/scheduler/master-4.exp b/cts/scheduler/exp/master-4.exp similarity index 100% rename from cts/scheduler/master-4.exp rename to cts/scheduler/exp/master-4.exp diff --git a/cts/scheduler/master-5.exp b/cts/scheduler/exp/master-5.exp similarity index 100% rename from cts/scheduler/master-5.exp rename to cts/scheduler/exp/master-5.exp diff --git a/cts/scheduler/master-6.exp b/cts/scheduler/exp/master-6.exp similarity index 100% rename from cts/scheduler/master-6.exp rename to cts/scheduler/exp/master-6.exp diff --git a/cts/scheduler/master-7.exp b/cts/scheduler/exp/master-7.exp similarity index 100% rename from cts/scheduler/master-7.exp rename to cts/scheduler/exp/master-7.exp diff --git a/cts/scheduler/master-8.exp b/cts/scheduler/exp/master-8.exp similarity index 100% rename from cts/scheduler/master-8.exp rename to cts/scheduler/exp/master-8.exp diff --git a/cts/scheduler/master-9.exp b/cts/scheduler/exp/master-9.exp similarity index 100% rename from cts/scheduler/master-9.exp rename to cts/scheduler/exp/master-9.exp diff --git a/cts/scheduler/master-allow-start.exp b/cts/scheduler/exp/master-allow-start.exp similarity index 100% rename from cts/scheduler/master-allow-start.exp rename to cts/scheduler/exp/master-allow-start.exp diff --git a/cts/scheduler/master-asymmetrical-order.exp b/cts/scheduler/exp/master-asymmetrical-order.exp similarity index 100% rename from cts/scheduler/master-asymmetrical-order.exp rename to cts/scheduler/exp/master-asymmetrical-order.exp diff --git a/cts/scheduler/master-colocation.exp b/cts/scheduler/exp/master-colocation.exp similarity index 100% rename from cts/scheduler/master-colocation.exp rename to cts/scheduler/exp/master-colocation.exp diff --git a/cts/scheduler/master-demote-2.exp b/cts/scheduler/exp/master-demote-2.exp similarity index 100% rename from cts/scheduler/master-demote-2.exp rename to cts/scheduler/exp/master-demote-2.exp diff --git a/cts/scheduler/master-demote-block.exp b/cts/scheduler/exp/master-demote-block.exp similarity index 100% rename from cts/scheduler/master-demote-block.exp rename to cts/scheduler/exp/master-demote-block.exp diff --git a/cts/scheduler/master-demote.exp b/cts/scheduler/exp/master-demote.exp similarity index 100% rename from cts/scheduler/master-demote.exp rename to cts/scheduler/exp/master-demote.exp diff --git a/cts/scheduler/master-depend.exp b/cts/scheduler/exp/master-depend.exp similarity index 100% rename from cts/scheduler/master-depend.exp rename to cts/scheduler/exp/master-depend.exp diff --git a/cts/scheduler/master-dependent-ban.exp b/cts/scheduler/exp/master-dependent-ban.exp similarity index 100% rename from cts/scheduler/master-dependent-ban.exp rename to cts/scheduler/exp/master-dependent-ban.exp diff --git a/cts/scheduler/master-failed-demote-2.exp b/cts/scheduler/exp/master-failed-demote-2.exp similarity index 100% rename from cts/scheduler/master-failed-demote-2.exp rename to cts/scheduler/exp/master-failed-demote-2.exp diff --git a/cts/scheduler/master-failed-demote.exp b/cts/scheduler/exp/master-failed-demote.exp similarity index 100% rename from cts/scheduler/master-failed-demote.exp rename to cts/scheduler/exp/master-failed-demote.exp diff --git a/cts/scheduler/master-group.exp b/cts/scheduler/exp/master-group.exp similarity index 100% rename from cts/scheduler/master-group.exp rename to cts/scheduler/exp/master-group.exp diff --git a/cts/scheduler/master-move.exp b/cts/scheduler/exp/master-move.exp similarity index 100% rename from cts/scheduler/master-move.exp rename to cts/scheduler/exp/master-move.exp diff --git a/cts/scheduler/master-notify.exp b/cts/scheduler/exp/master-notify.exp similarity index 100% rename from cts/scheduler/master-notify.exp rename to cts/scheduler/exp/master-notify.exp diff --git a/cts/scheduler/master-ordering.exp b/cts/scheduler/exp/master-ordering.exp similarity index 100% rename from cts/scheduler/master-ordering.exp rename to cts/scheduler/exp/master-ordering.exp diff --git a/cts/scheduler/master-partially-demoted-group.exp b/cts/scheduler/exp/master-partially-demoted-group.exp similarity index 100% rename from cts/scheduler/master-partially-demoted-group.exp rename to cts/scheduler/exp/master-partially-demoted-group.exp diff --git a/cts/scheduler/master-probed-score.exp b/cts/scheduler/exp/master-probed-score.exp similarity index 100% rename from cts/scheduler/master-probed-score.exp rename to cts/scheduler/exp/master-probed-score.exp diff --git a/cts/scheduler/master-promotion-constraint.exp b/cts/scheduler/exp/master-promotion-constraint.exp similarity index 100% rename from cts/scheduler/master-promotion-constraint.exp rename to cts/scheduler/exp/master-promotion-constraint.exp diff --git a/cts/scheduler/master-pseudo.exp b/cts/scheduler/exp/master-pseudo.exp similarity index 100% rename from cts/scheduler/master-pseudo.exp rename to cts/scheduler/exp/master-pseudo.exp diff --git a/cts/scheduler/master-reattach.exp b/cts/scheduler/exp/master-reattach.exp similarity index 100% rename from cts/scheduler/master-reattach.exp rename to cts/scheduler/exp/master-reattach.exp diff --git a/cts/scheduler/master-role.exp b/cts/scheduler/exp/master-role.exp similarity index 100% rename from cts/scheduler/master-role.exp rename to cts/scheduler/exp/master-role.exp diff --git a/cts/scheduler/master-score-startup.exp b/cts/scheduler/exp/master-score-startup.exp similarity index 100% rename from cts/scheduler/master-score-startup.exp rename to cts/scheduler/exp/master-score-startup.exp diff --git a/cts/scheduler/master-stop.exp b/cts/scheduler/exp/master-stop.exp similarity index 100% rename from cts/scheduler/master-stop.exp rename to cts/scheduler/exp/master-stop.exp diff --git a/cts/scheduler/master-unmanaged-monitor.exp b/cts/scheduler/exp/master-unmanaged-monitor.exp similarity index 100% rename from cts/scheduler/master-unmanaged-monitor.exp rename to cts/scheduler/exp/master-unmanaged-monitor.exp diff --git a/cts/scheduler/master_monitor_restart.exp b/cts/scheduler/exp/master_monitor_restart.exp similarity index 100% rename from cts/scheduler/master_monitor_restart.exp rename to cts/scheduler/exp/master_monitor_restart.exp diff --git a/cts/scheduler/migrate-1.exp b/cts/scheduler/exp/migrate-1.exp similarity index 100% rename from cts/scheduler/migrate-1.exp rename to cts/scheduler/exp/migrate-1.exp diff --git a/cts/scheduler/migrate-2.exp b/cts/scheduler/exp/migrate-2.exp similarity index 100% rename from cts/scheduler/migrate-2.exp rename to cts/scheduler/exp/migrate-2.exp diff --git a/cts/scheduler/migrate-3.exp b/cts/scheduler/exp/migrate-3.exp similarity index 100% rename from cts/scheduler/migrate-3.exp rename to cts/scheduler/exp/migrate-3.exp diff --git a/cts/scheduler/migrate-4.exp b/cts/scheduler/exp/migrate-4.exp similarity index 100% rename from cts/scheduler/migrate-4.exp rename to cts/scheduler/exp/migrate-4.exp diff --git a/cts/scheduler/migrate-5.exp b/cts/scheduler/exp/migrate-5.exp similarity index 100% rename from cts/scheduler/migrate-5.exp rename to cts/scheduler/exp/migrate-5.exp diff --git a/cts/scheduler/migrate-begin.exp b/cts/scheduler/exp/migrate-begin.exp similarity index 100% rename from cts/scheduler/migrate-begin.exp rename to cts/scheduler/exp/migrate-begin.exp diff --git a/cts/scheduler/migrate-both-vms.exp b/cts/scheduler/exp/migrate-both-vms.exp similarity index 100% rename from cts/scheduler/migrate-both-vms.exp rename to cts/scheduler/exp/migrate-both-vms.exp diff --git a/cts/scheduler/migrate-fail-2.exp b/cts/scheduler/exp/migrate-fail-2.exp similarity index 100% rename from cts/scheduler/migrate-fail-2.exp rename to cts/scheduler/exp/migrate-fail-2.exp diff --git a/cts/scheduler/migrate-fail-3.exp b/cts/scheduler/exp/migrate-fail-3.exp similarity index 100% rename from cts/scheduler/migrate-fail-3.exp rename to cts/scheduler/exp/migrate-fail-3.exp diff --git a/cts/scheduler/migrate-fail-4.exp b/cts/scheduler/exp/migrate-fail-4.exp similarity index 100% rename from cts/scheduler/migrate-fail-4.exp rename to cts/scheduler/exp/migrate-fail-4.exp diff --git a/cts/scheduler/migrate-fail-5.exp b/cts/scheduler/exp/migrate-fail-5.exp similarity index 100% rename from cts/scheduler/migrate-fail-5.exp rename to cts/scheduler/exp/migrate-fail-5.exp diff --git a/cts/scheduler/migrate-fail-6.exp b/cts/scheduler/exp/migrate-fail-6.exp similarity index 100% rename from cts/scheduler/migrate-fail-6.exp rename to cts/scheduler/exp/migrate-fail-6.exp diff --git a/cts/scheduler/migrate-fail-7.exp b/cts/scheduler/exp/migrate-fail-7.exp similarity index 100% rename from cts/scheduler/migrate-fail-7.exp rename to cts/scheduler/exp/migrate-fail-7.exp diff --git a/cts/scheduler/migrate-fail-8.exp b/cts/scheduler/exp/migrate-fail-8.exp similarity index 100% rename from cts/scheduler/migrate-fail-8.exp rename to cts/scheduler/exp/migrate-fail-8.exp diff --git a/cts/scheduler/migrate-fail-9.exp b/cts/scheduler/exp/migrate-fail-9.exp similarity index 100% rename from cts/scheduler/migrate-fail-9.exp rename to cts/scheduler/exp/migrate-fail-9.exp diff --git a/cts/scheduler/migrate-fencing.exp b/cts/scheduler/exp/migrate-fencing.exp similarity index 100% rename from cts/scheduler/migrate-fencing.exp rename to cts/scheduler/exp/migrate-fencing.exp diff --git a/cts/scheduler/migrate-partial-1.exp b/cts/scheduler/exp/migrate-partial-1.exp similarity index 100% rename from cts/scheduler/migrate-partial-1.exp rename to cts/scheduler/exp/migrate-partial-1.exp diff --git a/cts/scheduler/migrate-partial-2.exp b/cts/scheduler/exp/migrate-partial-2.exp similarity index 100% rename from cts/scheduler/migrate-partial-2.exp rename to cts/scheduler/exp/migrate-partial-2.exp diff --git a/cts/scheduler/migrate-partial-3.exp b/cts/scheduler/exp/migrate-partial-3.exp similarity index 100% rename from cts/scheduler/migrate-partial-3.exp rename to cts/scheduler/exp/migrate-partial-3.exp diff --git a/cts/scheduler/migrate-partial-4.exp b/cts/scheduler/exp/migrate-partial-4.exp similarity index 100% rename from cts/scheduler/migrate-partial-4.exp rename to cts/scheduler/exp/migrate-partial-4.exp diff --git a/cts/scheduler/migrate-shutdown.exp b/cts/scheduler/exp/migrate-shutdown.exp similarity index 100% rename from cts/scheduler/migrate-shutdown.exp rename to cts/scheduler/exp/migrate-shutdown.exp diff --git a/cts/scheduler/migrate-start-complex.exp b/cts/scheduler/exp/migrate-start-complex.exp similarity index 100% rename from cts/scheduler/migrate-start-complex.exp rename to cts/scheduler/exp/migrate-start-complex.exp diff --git a/cts/scheduler/migrate-start.exp b/cts/scheduler/exp/migrate-start.exp similarity index 100% rename from cts/scheduler/migrate-start.exp rename to cts/scheduler/exp/migrate-start.exp diff --git a/cts/scheduler/migrate-stop-complex.exp b/cts/scheduler/exp/migrate-stop-complex.exp similarity index 100% rename from cts/scheduler/migrate-stop-complex.exp rename to cts/scheduler/exp/migrate-stop-complex.exp diff --git a/cts/scheduler/migrate-stop-start-complex.exp b/cts/scheduler/exp/migrate-stop-start-complex.exp similarity index 100% rename from cts/scheduler/migrate-stop-start-complex.exp rename to cts/scheduler/exp/migrate-stop-start-complex.exp diff --git a/cts/scheduler/migrate-stop.exp b/cts/scheduler/exp/migrate-stop.exp similarity index 100% rename from cts/scheduler/migrate-stop.exp rename to cts/scheduler/exp/migrate-stop.exp diff --git a/cts/scheduler/migrate-stop_start.exp b/cts/scheduler/exp/migrate-stop_start.exp similarity index 100% rename from cts/scheduler/migrate-stop_start.exp rename to cts/scheduler/exp/migrate-stop_start.exp diff --git a/cts/scheduler/migrate-success.exp b/cts/scheduler/exp/migrate-success.exp similarity index 100% rename from cts/scheduler/migrate-success.exp rename to cts/scheduler/exp/migrate-success.exp diff --git a/cts/scheduler/migrate-versioned.exp b/cts/scheduler/exp/migrate-versioned.exp similarity index 100% rename from cts/scheduler/migrate-versioned.exp rename to cts/scheduler/exp/migrate-versioned.exp diff --git a/cts/scheduler/migration-behind-migrating-remote.exp b/cts/scheduler/exp/migration-behind-migrating-remote.exp similarity index 100% rename from cts/scheduler/migration-behind-migrating-remote.exp rename to cts/scheduler/exp/migration-behind-migrating-remote.exp diff --git a/cts/scheduler/migration-ping-pong.exp b/cts/scheduler/exp/migration-ping-pong.exp similarity index 100% rename from cts/scheduler/migration-ping-pong.exp rename to cts/scheduler/exp/migration-ping-pong.exp diff --git a/cts/scheduler/minimal.exp b/cts/scheduler/exp/minimal.exp similarity index 100% rename from cts/scheduler/minimal.exp rename to cts/scheduler/exp/minimal.exp diff --git a/cts/scheduler/mon-rsc-1.exp b/cts/scheduler/exp/mon-rsc-1.exp similarity index 100% rename from cts/scheduler/mon-rsc-1.exp rename to cts/scheduler/exp/mon-rsc-1.exp diff --git a/cts/scheduler/mon-rsc-2.exp b/cts/scheduler/exp/mon-rsc-2.exp similarity index 100% rename from cts/scheduler/mon-rsc-2.exp rename to cts/scheduler/exp/mon-rsc-2.exp diff --git a/cts/scheduler/mon-rsc-3.exp b/cts/scheduler/exp/mon-rsc-3.exp similarity index 100% rename from cts/scheduler/mon-rsc-3.exp rename to cts/scheduler/exp/mon-rsc-3.exp diff --git a/cts/scheduler/mon-rsc-4.exp b/cts/scheduler/exp/mon-rsc-4.exp similarity index 100% rename from cts/scheduler/mon-rsc-4.exp rename to cts/scheduler/exp/mon-rsc-4.exp diff --git a/cts/scheduler/monitor-onfail-restart.exp b/cts/scheduler/exp/monitor-onfail-restart.exp similarity index 100% rename from cts/scheduler/monitor-onfail-restart.exp rename to cts/scheduler/exp/monitor-onfail-restart.exp diff --git a/cts/scheduler/monitor-onfail-stop.exp b/cts/scheduler/exp/monitor-onfail-stop.exp similarity index 100% rename from cts/scheduler/monitor-onfail-stop.exp rename to cts/scheduler/exp/monitor-onfail-stop.exp diff --git a/cts/scheduler/monitor-recovery.exp b/cts/scheduler/exp/monitor-recovery.exp similarity index 100% rename from cts/scheduler/monitor-recovery.exp rename to cts/scheduler/exp/monitor-recovery.exp diff --git a/cts/scheduler/multi1.exp b/cts/scheduler/exp/multi1.exp similarity index 100% rename from cts/scheduler/multi1.exp rename to cts/scheduler/exp/multi1.exp diff --git a/cts/scheduler/multiple-active-block-group.exp b/cts/scheduler/exp/multiple-active-block-group.exp similarity index 100% rename from cts/scheduler/multiple-active-block-group.exp rename to cts/scheduler/exp/multiple-active-block-group.exp diff --git a/cts/scheduler/multiple-monitor-one-failed.exp b/cts/scheduler/exp/multiple-monitor-one-failed.exp similarity index 100% rename from cts/scheduler/multiple-monitor-one-failed.exp rename to cts/scheduler/exp/multiple-monitor-one-failed.exp diff --git a/cts/scheduler/multiply-active-stonith.exp b/cts/scheduler/exp/multiply-active-stonith.exp similarity index 100% rename from cts/scheduler/multiply-active-stonith.exp rename to cts/scheduler/exp/multiply-active-stonith.exp diff --git a/cts/scheduler/nested-remote-recovery.exp b/cts/scheduler/exp/nested-remote-recovery.exp similarity index 100% rename from cts/scheduler/nested-remote-recovery.exp rename to cts/scheduler/exp/nested-remote-recovery.exp diff --git a/cts/scheduler/no-promote-on-unrunnable-guest.exp b/cts/scheduler/exp/no-promote-on-unrunnable-guest.exp similarity index 100% rename from cts/scheduler/no-promote-on-unrunnable-guest.exp rename to cts/scheduler/exp/no-promote-on-unrunnable-guest.exp diff --git a/cts/scheduler/no_quorum_demote.exp b/cts/scheduler/exp/no_quorum_demote.exp similarity index 100% rename from cts/scheduler/no_quorum_demote.exp rename to cts/scheduler/exp/no_quorum_demote.exp diff --git a/cts/scheduler/node-maintenance-1.exp b/cts/scheduler/exp/node-maintenance-1.exp similarity index 100% rename from cts/scheduler/node-maintenance-1.exp rename to cts/scheduler/exp/node-maintenance-1.exp diff --git a/cts/scheduler/node-maintenance-2.exp b/cts/scheduler/exp/node-maintenance-2.exp similarity index 100% rename from cts/scheduler/node-maintenance-2.exp rename to cts/scheduler/exp/node-maintenance-2.exp diff --git a/cts/scheduler/not-installed-agent.exp b/cts/scheduler/exp/not-installed-agent.exp similarity index 100% rename from cts/scheduler/not-installed-agent.exp rename to cts/scheduler/exp/not-installed-agent.exp diff --git a/cts/scheduler/not-installed-tools.exp b/cts/scheduler/exp/not-installed-tools.exp similarity index 100% rename from cts/scheduler/not-installed-tools.exp rename to cts/scheduler/exp/not-installed-tools.exp diff --git a/cts/scheduler/not-reschedule-unneeded-monitor.exp b/cts/scheduler/exp/not-reschedule-unneeded-monitor.exp similarity index 100% rename from cts/scheduler/not-reschedule-unneeded-monitor.exp rename to cts/scheduler/exp/not-reschedule-unneeded-monitor.exp diff --git a/cts/scheduler/notifs-for-unrunnable.exp b/cts/scheduler/exp/notifs-for-unrunnable.exp similarity index 100% rename from cts/scheduler/notifs-for-unrunnable.exp rename to cts/scheduler/exp/notifs-for-unrunnable.exp diff --git a/cts/scheduler/notify-0.exp b/cts/scheduler/exp/notify-0.exp similarity index 100% rename from cts/scheduler/notify-0.exp rename to cts/scheduler/exp/notify-0.exp diff --git a/cts/scheduler/notify-1.exp b/cts/scheduler/exp/notify-1.exp similarity index 100% rename from cts/scheduler/notify-1.exp rename to cts/scheduler/exp/notify-1.exp diff --git a/cts/scheduler/notify-2.exp b/cts/scheduler/exp/notify-2.exp similarity index 100% rename from cts/scheduler/notify-2.exp rename to cts/scheduler/exp/notify-2.exp diff --git a/cts/scheduler/notify-3.exp b/cts/scheduler/exp/notify-3.exp similarity index 100% rename from cts/scheduler/notify-3.exp rename to cts/scheduler/exp/notify-3.exp diff --git a/cts/scheduler/notify-behind-stopping-remote.exp b/cts/scheduler/exp/notify-behind-stopping-remote.exp similarity index 100% rename from cts/scheduler/notify-behind-stopping-remote.exp rename to cts/scheduler/exp/notify-behind-stopping-remote.exp diff --git a/cts/scheduler/novell-239079.exp b/cts/scheduler/exp/novell-239079.exp similarity index 100% rename from cts/scheduler/novell-239079.exp rename to cts/scheduler/exp/novell-239079.exp diff --git a/cts/scheduler/novell-239082.exp b/cts/scheduler/exp/novell-239082.exp similarity index 100% rename from cts/scheduler/novell-239082.exp rename to cts/scheduler/exp/novell-239082.exp diff --git a/cts/scheduler/novell-239087.exp b/cts/scheduler/exp/novell-239087.exp similarity index 100% rename from cts/scheduler/novell-239087.exp rename to cts/scheduler/exp/novell-239087.exp diff --git a/cts/scheduler/novell-251689.exp b/cts/scheduler/exp/novell-251689.exp similarity index 100% rename from cts/scheduler/novell-251689.exp rename to cts/scheduler/exp/novell-251689.exp diff --git a/cts/scheduler/novell-252693-2.exp b/cts/scheduler/exp/novell-252693-2.exp similarity index 100% rename from cts/scheduler/novell-252693-2.exp rename to cts/scheduler/exp/novell-252693-2.exp diff --git a/cts/scheduler/novell-252693-3.exp b/cts/scheduler/exp/novell-252693-3.exp similarity index 100% rename from cts/scheduler/novell-252693-3.exp rename to cts/scheduler/exp/novell-252693-3.exp diff --git a/cts/scheduler/novell-252693.exp b/cts/scheduler/exp/novell-252693.exp similarity index 100% rename from cts/scheduler/novell-252693.exp rename to cts/scheduler/exp/novell-252693.exp diff --git a/cts/scheduler/nvpair-date-rules-1.exp b/cts/scheduler/exp/nvpair-date-rules-1.exp similarity index 100% rename from cts/scheduler/nvpair-date-rules-1.exp rename to cts/scheduler/exp/nvpair-date-rules-1.exp diff --git a/cts/scheduler/nvpair-id-ref.exp b/cts/scheduler/exp/nvpair-id-ref.exp similarity index 100% rename from cts/scheduler/nvpair-id-ref.exp rename to cts/scheduler/exp/nvpair-id-ref.exp diff --git a/cts/scheduler/obsolete-lrm-resource.exp b/cts/scheduler/exp/obsolete-lrm-resource.exp similarity index 100% rename from cts/scheduler/obsolete-lrm-resource.exp rename to cts/scheduler/exp/obsolete-lrm-resource.exp diff --git a/cts/scheduler/ocf_degraded-remap-ocf_ok.exp b/cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp similarity index 100% rename from cts/scheduler/ocf_degraded-remap-ocf_ok.exp rename to cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp diff --git a/cts/scheduler/ocf_degraded_master-remap-ocf_ok.exp b/cts/scheduler/exp/ocf_degraded_master-remap-ocf_ok.exp similarity index 100% rename from cts/scheduler/ocf_degraded_master-remap-ocf_ok.exp rename to cts/scheduler/exp/ocf_degraded_master-remap-ocf_ok.exp diff --git a/cts/scheduler/on-fail-ignore.exp b/cts/scheduler/exp/on-fail-ignore.exp similarity index 100% rename from cts/scheduler/on-fail-ignore.exp rename to cts/scheduler/exp/on-fail-ignore.exp diff --git a/cts/scheduler/on_fail_demote1.exp b/cts/scheduler/exp/on_fail_demote1.exp similarity index 100% rename from cts/scheduler/on_fail_demote1.exp rename to cts/scheduler/exp/on_fail_demote1.exp diff --git a/cts/scheduler/on_fail_demote2.exp b/cts/scheduler/exp/on_fail_demote2.exp similarity index 100% rename from cts/scheduler/on_fail_demote2.exp rename to cts/scheduler/exp/on_fail_demote2.exp diff --git a/cts/scheduler/on_fail_demote3.exp b/cts/scheduler/exp/on_fail_demote3.exp similarity index 100% rename from cts/scheduler/on_fail_demote3.exp rename to cts/scheduler/exp/on_fail_demote3.exp diff --git a/cts/scheduler/on_fail_demote4.exp b/cts/scheduler/exp/on_fail_demote4.exp similarity index 100% rename from cts/scheduler/on_fail_demote4.exp rename to cts/scheduler/exp/on_fail_demote4.exp diff --git a/cts/scheduler/one-or-more-0.exp b/cts/scheduler/exp/one-or-more-0.exp similarity index 100% rename from cts/scheduler/one-or-more-0.exp rename to cts/scheduler/exp/one-or-more-0.exp diff --git a/cts/scheduler/one-or-more-1.exp b/cts/scheduler/exp/one-or-more-1.exp similarity index 100% rename from cts/scheduler/one-or-more-1.exp rename to cts/scheduler/exp/one-or-more-1.exp diff --git a/cts/scheduler/one-or-more-2.exp b/cts/scheduler/exp/one-or-more-2.exp similarity index 100% rename from cts/scheduler/one-or-more-2.exp rename to cts/scheduler/exp/one-or-more-2.exp diff --git a/cts/scheduler/one-or-more-3.exp b/cts/scheduler/exp/one-or-more-3.exp similarity index 100% rename from cts/scheduler/one-or-more-3.exp rename to cts/scheduler/exp/one-or-more-3.exp diff --git a/cts/scheduler/one-or-more-4.exp b/cts/scheduler/exp/one-or-more-4.exp similarity index 100% rename from cts/scheduler/one-or-more-4.exp rename to cts/scheduler/exp/one-or-more-4.exp diff --git a/cts/scheduler/one-or-more-5.exp b/cts/scheduler/exp/one-or-more-5.exp similarity index 100% rename from cts/scheduler/one-or-more-5.exp rename to cts/scheduler/exp/one-or-more-5.exp diff --git a/cts/scheduler/one-or-more-6.exp b/cts/scheduler/exp/one-or-more-6.exp similarity index 100% rename from cts/scheduler/one-or-more-6.exp rename to cts/scheduler/exp/one-or-more-6.exp diff --git a/cts/scheduler/one-or-more-7.exp b/cts/scheduler/exp/one-or-more-7.exp similarity index 100% rename from cts/scheduler/one-or-more-7.exp rename to cts/scheduler/exp/one-or-more-7.exp diff --git a/cts/scheduler/one-or-more-unrunnable-instances.exp b/cts/scheduler/exp/one-or-more-unrunnable-instances.exp similarity index 100% rename from cts/scheduler/one-or-more-unrunnable-instances.exp rename to cts/scheduler/exp/one-or-more-unrunnable-instances.exp diff --git a/cts/scheduler/op-defaults-2.exp b/cts/scheduler/exp/op-defaults-2.exp similarity index 100% rename from cts/scheduler/op-defaults-2.exp rename to cts/scheduler/exp/op-defaults-2.exp diff --git a/cts/scheduler/op-defaults-3.exp b/cts/scheduler/exp/op-defaults-3.exp similarity index 100% rename from cts/scheduler/op-defaults-3.exp rename to cts/scheduler/exp/op-defaults-3.exp diff --git a/cts/scheduler/op-defaults.exp b/cts/scheduler/exp/op-defaults.exp similarity index 100% rename from cts/scheduler/op-defaults.exp rename to cts/scheduler/exp/op-defaults.exp diff --git a/cts/scheduler/order-clone.exp b/cts/scheduler/exp/order-clone.exp similarity index 100% rename from cts/scheduler/order-clone.exp rename to cts/scheduler/exp/order-clone.exp diff --git a/cts/scheduler/order-expired-failure.exp b/cts/scheduler/exp/order-expired-failure.exp similarity index 100% rename from cts/scheduler/order-expired-failure.exp rename to cts/scheduler/exp/order-expired-failure.exp diff --git a/cts/scheduler/order-first-probes.exp b/cts/scheduler/exp/order-first-probes.exp similarity index 100% rename from cts/scheduler/order-first-probes.exp rename to cts/scheduler/exp/order-first-probes.exp diff --git a/cts/scheduler/order-mandatory.exp b/cts/scheduler/exp/order-mandatory.exp similarity index 100% rename from cts/scheduler/order-mandatory.exp rename to cts/scheduler/exp/order-mandatory.exp diff --git a/cts/scheduler/order-optional-keyword.exp b/cts/scheduler/exp/order-optional-keyword.exp similarity index 100% rename from cts/scheduler/order-optional-keyword.exp rename to cts/scheduler/exp/order-optional-keyword.exp diff --git a/cts/scheduler/order-optional.exp b/cts/scheduler/exp/order-optional.exp similarity index 100% rename from cts/scheduler/order-optional.exp rename to cts/scheduler/exp/order-optional.exp diff --git a/cts/scheduler/order-required.exp b/cts/scheduler/exp/order-required.exp similarity index 100% rename from cts/scheduler/order-required.exp rename to cts/scheduler/exp/order-required.exp diff --git a/cts/scheduler/order-serialize-set.exp b/cts/scheduler/exp/order-serialize-set.exp similarity index 100% rename from cts/scheduler/order-serialize-set.exp rename to cts/scheduler/exp/order-serialize-set.exp diff --git a/cts/scheduler/order-serialize.exp b/cts/scheduler/exp/order-serialize.exp similarity index 100% rename from cts/scheduler/order-serialize.exp rename to cts/scheduler/exp/order-serialize.exp diff --git a/cts/scheduler/order-sets.exp b/cts/scheduler/exp/order-sets.exp similarity index 100% rename from cts/scheduler/order-sets.exp rename to cts/scheduler/exp/order-sets.exp diff --git a/cts/scheduler/order-wrong-kind.exp b/cts/scheduler/exp/order-wrong-kind.exp similarity index 100% rename from cts/scheduler/order-wrong-kind.exp rename to cts/scheduler/exp/order-wrong-kind.exp diff --git a/cts/scheduler/order1.exp b/cts/scheduler/exp/order1.exp similarity index 100% rename from cts/scheduler/order1.exp rename to cts/scheduler/exp/order1.exp diff --git a/cts/scheduler/order2.exp b/cts/scheduler/exp/order2.exp similarity index 100% rename from cts/scheduler/order2.exp rename to cts/scheduler/exp/order2.exp diff --git a/cts/scheduler/order3.exp b/cts/scheduler/exp/order3.exp similarity index 100% rename from cts/scheduler/order3.exp rename to cts/scheduler/exp/order3.exp diff --git a/cts/scheduler/order4.exp b/cts/scheduler/exp/order4.exp similarity index 100% rename from cts/scheduler/order4.exp rename to cts/scheduler/exp/order4.exp diff --git a/cts/scheduler/order5.exp b/cts/scheduler/exp/order5.exp similarity index 100% rename from cts/scheduler/order5.exp rename to cts/scheduler/exp/order5.exp diff --git a/cts/scheduler/order6.exp b/cts/scheduler/exp/order6.exp similarity index 100% rename from cts/scheduler/order6.exp rename to cts/scheduler/exp/order6.exp diff --git a/cts/scheduler/order7.exp b/cts/scheduler/exp/order7.exp similarity index 100% rename from cts/scheduler/order7.exp rename to cts/scheduler/exp/order7.exp diff --git a/cts/scheduler/order_constraint_stops_master.exp b/cts/scheduler/exp/order_constraint_stops_master.exp similarity index 100% rename from cts/scheduler/order_constraint_stops_master.exp rename to cts/scheduler/exp/order_constraint_stops_master.exp diff --git a/cts/scheduler/order_constraint_stops_slave.exp b/cts/scheduler/exp/order_constraint_stops_slave.exp similarity index 100% rename from cts/scheduler/order_constraint_stops_slave.exp rename to cts/scheduler/exp/order_constraint_stops_slave.exp diff --git a/cts/scheduler/ordered-set-basic-startup.exp b/cts/scheduler/exp/ordered-set-basic-startup.exp similarity index 100% rename from cts/scheduler/ordered-set-basic-startup.exp rename to cts/scheduler/exp/ordered-set-basic-startup.exp diff --git a/cts/scheduler/ordered-set-natural.exp b/cts/scheduler/exp/ordered-set-natural.exp similarity index 100% rename from cts/scheduler/ordered-set-natural.exp rename to cts/scheduler/exp/ordered-set-natural.exp diff --git a/cts/scheduler/origin.exp b/cts/scheduler/exp/origin.exp similarity index 100% rename from cts/scheduler/origin.exp rename to cts/scheduler/exp/origin.exp diff --git a/cts/scheduler/orphan-0.exp b/cts/scheduler/exp/orphan-0.exp similarity index 100% rename from cts/scheduler/orphan-0.exp rename to cts/scheduler/exp/orphan-0.exp diff --git a/cts/scheduler/orphan-1.exp b/cts/scheduler/exp/orphan-1.exp similarity index 100% rename from cts/scheduler/orphan-1.exp rename to cts/scheduler/exp/orphan-1.exp diff --git a/cts/scheduler/orphan-2.exp b/cts/scheduler/exp/orphan-2.exp similarity index 100% rename from cts/scheduler/orphan-2.exp rename to cts/scheduler/exp/orphan-2.exp diff --git a/cts/scheduler/params-0.exp b/cts/scheduler/exp/params-0.exp similarity index 100% rename from cts/scheduler/params-0.exp rename to cts/scheduler/exp/params-0.exp diff --git a/cts/scheduler/params-1.exp b/cts/scheduler/exp/params-1.exp similarity index 100% rename from cts/scheduler/params-1.exp rename to cts/scheduler/exp/params-1.exp diff --git a/cts/scheduler/params-2.exp b/cts/scheduler/exp/params-2.exp similarity index 100% rename from cts/scheduler/params-2.exp rename to cts/scheduler/exp/params-2.exp diff --git a/cts/scheduler/params-3.exp b/cts/scheduler/exp/params-3.exp similarity index 100% rename from cts/scheduler/params-3.exp rename to cts/scheduler/exp/params-3.exp diff --git a/cts/scheduler/params-4.exp b/cts/scheduler/exp/params-4.exp similarity index 100% rename from cts/scheduler/params-4.exp rename to cts/scheduler/exp/params-4.exp diff --git a/cts/scheduler/params-5.exp b/cts/scheduler/exp/params-5.exp similarity index 100% rename from cts/scheduler/params-5.exp rename to cts/scheduler/exp/params-5.exp diff --git a/cts/scheduler/params-6.exp b/cts/scheduler/exp/params-6.exp similarity index 100% rename from cts/scheduler/params-6.exp rename to cts/scheduler/exp/params-6.exp diff --git a/cts/scheduler/per-node-attrs.exp b/cts/scheduler/exp/per-node-attrs.exp similarity index 100% rename from cts/scheduler/per-node-attrs.exp rename to cts/scheduler/exp/per-node-attrs.exp diff --git a/cts/scheduler/per-op-failcount.exp b/cts/scheduler/exp/per-op-failcount.exp similarity index 100% rename from cts/scheduler/per-op-failcount.exp rename to cts/scheduler/exp/per-op-failcount.exp diff --git a/cts/scheduler/placement-capacity.exp b/cts/scheduler/exp/placement-capacity.exp similarity index 100% rename from cts/scheduler/placement-capacity.exp rename to cts/scheduler/exp/placement-capacity.exp diff --git a/cts/scheduler/placement-location.exp b/cts/scheduler/exp/placement-location.exp similarity index 100% rename from cts/scheduler/placement-location.exp rename to cts/scheduler/exp/placement-location.exp diff --git a/cts/scheduler/placement-priority.exp b/cts/scheduler/exp/placement-priority.exp similarity index 100% rename from cts/scheduler/placement-priority.exp rename to cts/scheduler/exp/placement-priority.exp diff --git a/cts/scheduler/placement-stickiness.exp b/cts/scheduler/exp/placement-stickiness.exp similarity index 100% rename from cts/scheduler/placement-stickiness.exp rename to cts/scheduler/exp/placement-stickiness.exp diff --git a/cts/scheduler/priority-fencing-delay.exp b/cts/scheduler/exp/priority-fencing-delay.exp similarity index 100% rename from cts/scheduler/priority-fencing-delay.exp rename to cts/scheduler/exp/priority-fencing-delay.exp diff --git a/cts/scheduler/probe-0.exp b/cts/scheduler/exp/probe-0.exp similarity index 100% rename from cts/scheduler/probe-0.exp rename to cts/scheduler/exp/probe-0.exp diff --git a/cts/scheduler/probe-1.exp b/cts/scheduler/exp/probe-1.exp similarity index 100% rename from cts/scheduler/probe-1.exp rename to cts/scheduler/exp/probe-1.exp diff --git a/cts/scheduler/probe-2.exp b/cts/scheduler/exp/probe-2.exp similarity index 100% rename from cts/scheduler/probe-2.exp rename to cts/scheduler/exp/probe-2.exp diff --git a/cts/scheduler/probe-3.exp b/cts/scheduler/exp/probe-3.exp similarity index 100% rename from cts/scheduler/probe-3.exp rename to cts/scheduler/exp/probe-3.exp diff --git a/cts/scheduler/probe-4.exp b/cts/scheduler/exp/probe-4.exp similarity index 100% rename from cts/scheduler/probe-4.exp rename to cts/scheduler/exp/probe-4.exp diff --git a/cts/scheduler/probe-timeout.exp b/cts/scheduler/exp/probe-timeout.exp similarity index 100% rename from cts/scheduler/probe-timeout.exp rename to cts/scheduler/exp/probe-timeout.exp diff --git a/cts/scheduler/quorum-1.exp b/cts/scheduler/exp/quorum-1.exp similarity index 100% rename from cts/scheduler/quorum-1.exp rename to cts/scheduler/exp/quorum-1.exp diff --git a/cts/scheduler/quorum-2.exp b/cts/scheduler/exp/quorum-2.exp similarity index 100% rename from cts/scheduler/quorum-2.exp rename to cts/scheduler/exp/quorum-2.exp diff --git a/cts/scheduler/quorum-3.exp b/cts/scheduler/exp/quorum-3.exp similarity index 100% rename from cts/scheduler/quorum-3.exp rename to cts/scheduler/exp/quorum-3.exp diff --git a/cts/scheduler/quorum-4.exp b/cts/scheduler/exp/quorum-4.exp similarity index 100% rename from cts/scheduler/quorum-4.exp rename to cts/scheduler/exp/quorum-4.exp diff --git a/cts/scheduler/quorum-5.exp b/cts/scheduler/exp/quorum-5.exp similarity index 100% rename from cts/scheduler/quorum-5.exp rename to cts/scheduler/exp/quorum-5.exp diff --git a/cts/scheduler/quorum-6.exp b/cts/scheduler/exp/quorum-6.exp similarity index 100% rename from cts/scheduler/quorum-6.exp rename to cts/scheduler/exp/quorum-6.exp diff --git a/cts/scheduler/rebalance-unique-clones.exp b/cts/scheduler/exp/rebalance-unique-clones.exp similarity index 100% rename from cts/scheduler/rebalance-unique-clones.exp rename to cts/scheduler/exp/rebalance-unique-clones.exp diff --git a/cts/scheduler/rec-node-1.exp b/cts/scheduler/exp/rec-node-1.exp similarity index 100% rename from cts/scheduler/rec-node-1.exp rename to cts/scheduler/exp/rec-node-1.exp diff --git a/cts/scheduler/rec-node-10.exp b/cts/scheduler/exp/rec-node-10.exp similarity index 100% rename from cts/scheduler/rec-node-10.exp rename to cts/scheduler/exp/rec-node-10.exp diff --git a/cts/scheduler/rec-node-11.exp b/cts/scheduler/exp/rec-node-11.exp similarity index 100% rename from cts/scheduler/rec-node-11.exp rename to cts/scheduler/exp/rec-node-11.exp diff --git a/cts/scheduler/rec-node-12.exp b/cts/scheduler/exp/rec-node-12.exp similarity index 100% rename from cts/scheduler/rec-node-12.exp rename to cts/scheduler/exp/rec-node-12.exp diff --git a/cts/scheduler/rec-node-13.exp b/cts/scheduler/exp/rec-node-13.exp similarity index 100% rename from cts/scheduler/rec-node-13.exp rename to cts/scheduler/exp/rec-node-13.exp diff --git a/cts/scheduler/rec-node-14.exp b/cts/scheduler/exp/rec-node-14.exp similarity index 100% rename from cts/scheduler/rec-node-14.exp rename to cts/scheduler/exp/rec-node-14.exp diff --git a/cts/scheduler/rec-node-15.exp b/cts/scheduler/exp/rec-node-15.exp similarity index 100% rename from cts/scheduler/rec-node-15.exp rename to cts/scheduler/exp/rec-node-15.exp diff --git a/cts/scheduler/rec-node-2.exp b/cts/scheduler/exp/rec-node-2.exp similarity index 100% rename from cts/scheduler/rec-node-2.exp rename to cts/scheduler/exp/rec-node-2.exp diff --git a/cts/scheduler/rec-node-3.exp b/cts/scheduler/exp/rec-node-3.exp similarity index 100% rename from cts/scheduler/rec-node-3.exp rename to cts/scheduler/exp/rec-node-3.exp diff --git a/cts/scheduler/rec-node-4.exp b/cts/scheduler/exp/rec-node-4.exp similarity index 100% rename from cts/scheduler/rec-node-4.exp rename to cts/scheduler/exp/rec-node-4.exp diff --git a/cts/scheduler/rec-node-5.exp b/cts/scheduler/exp/rec-node-5.exp similarity index 100% rename from cts/scheduler/rec-node-5.exp rename to cts/scheduler/exp/rec-node-5.exp diff --git a/cts/scheduler/rec-node-6.exp b/cts/scheduler/exp/rec-node-6.exp similarity index 100% rename from cts/scheduler/rec-node-6.exp rename to cts/scheduler/exp/rec-node-6.exp diff --git a/cts/scheduler/rec-node-7.exp b/cts/scheduler/exp/rec-node-7.exp similarity index 100% rename from cts/scheduler/rec-node-7.exp rename to cts/scheduler/exp/rec-node-7.exp diff --git a/cts/scheduler/rec-node-8.exp b/cts/scheduler/exp/rec-node-8.exp similarity index 100% rename from cts/scheduler/rec-node-8.exp rename to cts/scheduler/exp/rec-node-8.exp diff --git a/cts/scheduler/rec-node-9.exp b/cts/scheduler/exp/rec-node-9.exp similarity index 100% rename from cts/scheduler/rec-node-9.exp rename to cts/scheduler/exp/rec-node-9.exp diff --git a/cts/scheduler/rec-rsc-0.exp b/cts/scheduler/exp/rec-rsc-0.exp similarity index 100% rename from cts/scheduler/rec-rsc-0.exp rename to cts/scheduler/exp/rec-rsc-0.exp diff --git a/cts/scheduler/rec-rsc-1.exp b/cts/scheduler/exp/rec-rsc-1.exp similarity index 100% rename from cts/scheduler/rec-rsc-1.exp rename to cts/scheduler/exp/rec-rsc-1.exp diff --git a/cts/scheduler/rec-rsc-2.exp b/cts/scheduler/exp/rec-rsc-2.exp similarity index 100% rename from cts/scheduler/rec-rsc-2.exp rename to cts/scheduler/exp/rec-rsc-2.exp diff --git a/cts/scheduler/rec-rsc-3.exp b/cts/scheduler/exp/rec-rsc-3.exp similarity index 100% rename from cts/scheduler/rec-rsc-3.exp rename to cts/scheduler/exp/rec-rsc-3.exp diff --git a/cts/scheduler/rec-rsc-4.exp b/cts/scheduler/exp/rec-rsc-4.exp similarity index 100% rename from cts/scheduler/rec-rsc-4.exp rename to cts/scheduler/exp/rec-rsc-4.exp diff --git a/cts/scheduler/rec-rsc-5.exp b/cts/scheduler/exp/rec-rsc-5.exp similarity index 100% rename from cts/scheduler/rec-rsc-5.exp rename to cts/scheduler/exp/rec-rsc-5.exp diff --git a/cts/scheduler/rec-rsc-6.exp b/cts/scheduler/exp/rec-rsc-6.exp similarity index 100% rename from cts/scheduler/rec-rsc-6.exp rename to cts/scheduler/exp/rec-rsc-6.exp diff --git a/cts/scheduler/rec-rsc-7.exp b/cts/scheduler/exp/rec-rsc-7.exp similarity index 100% rename from cts/scheduler/rec-rsc-7.exp rename to cts/scheduler/exp/rec-rsc-7.exp diff --git a/cts/scheduler/rec-rsc-8.exp b/cts/scheduler/exp/rec-rsc-8.exp similarity index 100% rename from cts/scheduler/rec-rsc-8.exp rename to cts/scheduler/exp/rec-rsc-8.exp diff --git a/cts/scheduler/rec-rsc-9.exp b/cts/scheduler/exp/rec-rsc-9.exp similarity index 100% rename from cts/scheduler/rec-rsc-9.exp rename to cts/scheduler/exp/rec-rsc-9.exp diff --git a/cts/scheduler/reload-becomes-restart.exp b/cts/scheduler/exp/reload-becomes-restart.exp similarity index 100% rename from cts/scheduler/reload-becomes-restart.exp rename to cts/scheduler/exp/reload-becomes-restart.exp diff --git a/cts/scheduler/reload-versioned.exp b/cts/scheduler/exp/reload-versioned.exp similarity index 100% rename from cts/scheduler/reload-versioned.exp rename to cts/scheduler/exp/reload-versioned.exp diff --git a/cts/scheduler/remote-connection-shutdown.exp b/cts/scheduler/exp/remote-connection-shutdown.exp similarity index 100% rename from cts/scheduler/remote-connection-shutdown.exp rename to cts/scheduler/exp/remote-connection-shutdown.exp diff --git a/cts/scheduler/remote-connection-unrecoverable.exp b/cts/scheduler/exp/remote-connection-unrecoverable.exp similarity index 100% rename from cts/scheduler/remote-connection-unrecoverable.exp rename to cts/scheduler/exp/remote-connection-unrecoverable.exp diff --git a/cts/scheduler/remote-disable.exp b/cts/scheduler/exp/remote-disable.exp similarity index 100% rename from cts/scheduler/remote-disable.exp rename to cts/scheduler/exp/remote-disable.exp diff --git a/cts/scheduler/remote-fence-before-reconnect.exp b/cts/scheduler/exp/remote-fence-before-reconnect.exp similarity index 100% rename from cts/scheduler/remote-fence-before-reconnect.exp rename to cts/scheduler/exp/remote-fence-before-reconnect.exp diff --git a/cts/scheduler/remote-fence-unclean-3.exp b/cts/scheduler/exp/remote-fence-unclean-3.exp similarity index 100% rename from cts/scheduler/remote-fence-unclean-3.exp rename to cts/scheduler/exp/remote-fence-unclean-3.exp diff --git a/cts/scheduler/remote-fence-unclean.exp b/cts/scheduler/exp/remote-fence-unclean.exp similarity index 100% rename from cts/scheduler/remote-fence-unclean.exp rename to cts/scheduler/exp/remote-fence-unclean.exp diff --git a/cts/scheduler/remote-fence-unclean2.exp b/cts/scheduler/exp/remote-fence-unclean2.exp similarity index 100% rename from cts/scheduler/remote-fence-unclean2.exp rename to cts/scheduler/exp/remote-fence-unclean2.exp diff --git a/cts/scheduler/remote-move.exp b/cts/scheduler/exp/remote-move.exp similarity index 100% rename from cts/scheduler/remote-move.exp rename to cts/scheduler/exp/remote-move.exp diff --git a/cts/scheduler/remote-orphaned.exp b/cts/scheduler/exp/remote-orphaned.exp similarity index 100% rename from cts/scheduler/remote-orphaned.exp rename to cts/scheduler/exp/remote-orphaned.exp diff --git a/cts/scheduler/remote-orphaned2.exp b/cts/scheduler/exp/remote-orphaned2.exp similarity index 100% rename from cts/scheduler/remote-orphaned2.exp rename to cts/scheduler/exp/remote-orphaned2.exp diff --git a/cts/scheduler/remote-partial-migrate.exp b/cts/scheduler/exp/remote-partial-migrate.exp similarity index 100% rename from cts/scheduler/remote-partial-migrate.exp rename to cts/scheduler/exp/remote-partial-migrate.exp diff --git a/cts/scheduler/remote-partial-migrate2.exp b/cts/scheduler/exp/remote-partial-migrate2.exp similarity index 100% rename from cts/scheduler/remote-partial-migrate2.exp rename to cts/scheduler/exp/remote-partial-migrate2.exp diff --git a/cts/scheduler/remote-probe-disable.exp b/cts/scheduler/exp/remote-probe-disable.exp similarity index 100% rename from cts/scheduler/remote-probe-disable.exp rename to cts/scheduler/exp/remote-probe-disable.exp diff --git a/cts/scheduler/remote-reconnect-delay.exp b/cts/scheduler/exp/remote-reconnect-delay.exp similarity index 100% rename from cts/scheduler/remote-reconnect-delay.exp rename to cts/scheduler/exp/remote-reconnect-delay.exp diff --git a/cts/scheduler/remote-recover-all.exp b/cts/scheduler/exp/remote-recover-all.exp similarity index 100% rename from cts/scheduler/remote-recover-all.exp rename to cts/scheduler/exp/remote-recover-all.exp diff --git a/cts/scheduler/remote-recover-connection.exp b/cts/scheduler/exp/remote-recover-connection.exp similarity index 100% rename from cts/scheduler/remote-recover-connection.exp rename to cts/scheduler/exp/remote-recover-connection.exp diff --git a/cts/scheduler/remote-recover-fail.exp b/cts/scheduler/exp/remote-recover-fail.exp similarity index 100% rename from cts/scheduler/remote-recover-fail.exp rename to cts/scheduler/exp/remote-recover-fail.exp diff --git a/cts/scheduler/remote-recover-no-resources.exp b/cts/scheduler/exp/remote-recover-no-resources.exp similarity index 100% rename from cts/scheduler/remote-recover-no-resources.exp rename to cts/scheduler/exp/remote-recover-no-resources.exp diff --git a/cts/scheduler/remote-recover-unknown.exp b/cts/scheduler/exp/remote-recover-unknown.exp similarity index 100% rename from cts/scheduler/remote-recover-unknown.exp rename to cts/scheduler/exp/remote-recover-unknown.exp diff --git a/cts/scheduler/remote-recover.exp b/cts/scheduler/exp/remote-recover.exp similarity index 100% rename from cts/scheduler/remote-recover.exp rename to cts/scheduler/exp/remote-recover.exp diff --git a/cts/scheduler/remote-recovery.exp b/cts/scheduler/exp/remote-recovery.exp similarity index 100% rename from cts/scheduler/remote-recovery.exp rename to cts/scheduler/exp/remote-recovery.exp diff --git a/cts/scheduler/remote-stale-node-entry.exp b/cts/scheduler/exp/remote-stale-node-entry.exp similarity index 100% rename from cts/scheduler/remote-stale-node-entry.exp rename to cts/scheduler/exp/remote-stale-node-entry.exp diff --git a/cts/scheduler/remote-start-fail.exp b/cts/scheduler/exp/remote-start-fail.exp similarity index 100% rename from cts/scheduler/remote-start-fail.exp rename to cts/scheduler/exp/remote-start-fail.exp diff --git a/cts/scheduler/remote-startup-probes.exp b/cts/scheduler/exp/remote-startup-probes.exp similarity index 100% rename from cts/scheduler/remote-startup-probes.exp rename to cts/scheduler/exp/remote-startup-probes.exp diff --git a/cts/scheduler/remote-startup.exp b/cts/scheduler/exp/remote-startup.exp similarity index 100% rename from cts/scheduler/remote-startup.exp rename to cts/scheduler/exp/remote-startup.exp diff --git a/cts/scheduler/remote-unclean2.exp b/cts/scheduler/exp/remote-unclean2.exp similarity index 100% rename from cts/scheduler/remote-unclean2.exp rename to cts/scheduler/exp/remote-unclean2.exp diff --git a/cts/scheduler/reprobe-target_rc.exp b/cts/scheduler/exp/reprobe-target_rc.exp similarity index 100% rename from cts/scheduler/reprobe-target_rc.exp rename to cts/scheduler/exp/reprobe-target_rc.exp diff --git a/cts/scheduler/resource-discovery.exp b/cts/scheduler/exp/resource-discovery.exp similarity index 100% rename from cts/scheduler/resource-discovery.exp rename to cts/scheduler/exp/resource-discovery.exp diff --git a/cts/scheduler/restart-versioned.exp b/cts/scheduler/exp/restart-versioned.exp similarity index 100% rename from cts/scheduler/restart-versioned.exp rename to cts/scheduler/exp/restart-versioned.exp diff --git a/cts/scheduler/route-remote-notify.exp b/cts/scheduler/exp/route-remote-notify.exp similarity index 100% rename from cts/scheduler/route-remote-notify.exp rename to cts/scheduler/exp/route-remote-notify.exp diff --git a/cts/scheduler/rsc-defaults-2.exp b/cts/scheduler/exp/rsc-defaults-2.exp similarity index 100% rename from cts/scheduler/rsc-defaults-2.exp rename to cts/scheduler/exp/rsc-defaults-2.exp diff --git a/cts/scheduler/rsc-defaults.exp b/cts/scheduler/exp/rsc-defaults.exp similarity index 100% rename from cts/scheduler/rsc-defaults.exp rename to cts/scheduler/exp/rsc-defaults.exp diff --git a/cts/scheduler/rsc-discovery-per-node.exp b/cts/scheduler/exp/rsc-discovery-per-node.exp similarity index 100% rename from cts/scheduler/rsc-discovery-per-node.exp rename to cts/scheduler/exp/rsc-discovery-per-node.exp diff --git a/cts/scheduler/rsc-maintenance.exp b/cts/scheduler/exp/rsc-maintenance.exp similarity index 100% rename from cts/scheduler/rsc-maintenance.exp rename to cts/scheduler/exp/rsc-maintenance.exp diff --git a/cts/scheduler/rsc-sets-clone-1.exp b/cts/scheduler/exp/rsc-sets-clone-1.exp similarity index 100% rename from cts/scheduler/rsc-sets-clone-1.exp rename to cts/scheduler/exp/rsc-sets-clone-1.exp diff --git a/cts/scheduler/rsc-sets-clone.exp b/cts/scheduler/exp/rsc-sets-clone.exp similarity index 100% rename from cts/scheduler/rsc-sets-clone.exp rename to cts/scheduler/exp/rsc-sets-clone.exp diff --git a/cts/scheduler/rsc-sets-master.exp b/cts/scheduler/exp/rsc-sets-master.exp similarity index 100% rename from cts/scheduler/rsc-sets-master.exp rename to cts/scheduler/exp/rsc-sets-master.exp diff --git a/cts/scheduler/rsc-sets-seq-false.exp b/cts/scheduler/exp/rsc-sets-seq-false.exp similarity index 100% rename from cts/scheduler/rsc-sets-seq-false.exp rename to cts/scheduler/exp/rsc-sets-seq-false.exp diff --git a/cts/scheduler/rsc-sets-seq-true.exp b/cts/scheduler/exp/rsc-sets-seq-true.exp similarity index 100% rename from cts/scheduler/rsc-sets-seq-true.exp rename to cts/scheduler/exp/rsc-sets-seq-true.exp diff --git a/cts/scheduler/rsc_dep1.exp b/cts/scheduler/exp/rsc_dep1.exp similarity index 100% rename from cts/scheduler/rsc_dep1.exp rename to cts/scheduler/exp/rsc_dep1.exp diff --git a/cts/scheduler/rsc_dep10.exp b/cts/scheduler/exp/rsc_dep10.exp similarity index 100% rename from cts/scheduler/rsc_dep10.exp rename to cts/scheduler/exp/rsc_dep10.exp diff --git a/cts/scheduler/rsc_dep2.exp b/cts/scheduler/exp/rsc_dep2.exp similarity index 100% rename from cts/scheduler/rsc_dep2.exp rename to cts/scheduler/exp/rsc_dep2.exp diff --git a/cts/scheduler/rsc_dep3.exp b/cts/scheduler/exp/rsc_dep3.exp similarity index 100% rename from cts/scheduler/rsc_dep3.exp rename to cts/scheduler/exp/rsc_dep3.exp diff --git a/cts/scheduler/rsc_dep4.exp b/cts/scheduler/exp/rsc_dep4.exp similarity index 100% rename from cts/scheduler/rsc_dep4.exp rename to cts/scheduler/exp/rsc_dep4.exp diff --git a/cts/scheduler/rsc_dep5.exp b/cts/scheduler/exp/rsc_dep5.exp similarity index 100% rename from cts/scheduler/rsc_dep5.exp rename to cts/scheduler/exp/rsc_dep5.exp diff --git a/cts/scheduler/rsc_dep7.exp b/cts/scheduler/exp/rsc_dep7.exp similarity index 100% rename from cts/scheduler/rsc_dep7.exp rename to cts/scheduler/exp/rsc_dep7.exp diff --git a/cts/scheduler/rsc_dep8.exp b/cts/scheduler/exp/rsc_dep8.exp similarity index 100% rename from cts/scheduler/rsc_dep8.exp rename to cts/scheduler/exp/rsc_dep8.exp diff --git a/cts/scheduler/rule-dbl-as-auto-number-match.exp b/cts/scheduler/exp/rule-dbl-as-auto-number-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-match.exp rename to cts/scheduler/exp/rule-dbl-as-auto-number-match.exp diff --git a/cts/scheduler/rule-dbl-as-auto-number-no-match.exp b/cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-no-match.exp rename to cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp diff --git a/cts/scheduler/rule-dbl-as-integer-match.exp b/cts/scheduler/exp/rule-dbl-as-integer-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-match.exp rename to cts/scheduler/exp/rule-dbl-as-integer-match.exp diff --git a/cts/scheduler/rule-dbl-as-integer-no-match.exp b/cts/scheduler/exp/rule-dbl-as-integer-no-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-no-match.exp rename to cts/scheduler/exp/rule-dbl-as-integer-no-match.exp diff --git a/cts/scheduler/rule-dbl-as-number-match.exp b/cts/scheduler/exp/rule-dbl-as-number-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-as-number-match.exp rename to cts/scheduler/exp/rule-dbl-as-number-match.exp diff --git a/cts/scheduler/rule-dbl-as-number-no-match.exp b/cts/scheduler/exp/rule-dbl-as-number-no-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-as-number-no-match.exp rename to cts/scheduler/exp/rule-dbl-as-number-no-match.exp diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-match.exp b/cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-match.exp rename to cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-no-match.exp b/cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-no-match.exp rename to cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp diff --git a/cts/scheduler/rule-int-as-auto-integer-match.exp b/cts/scheduler/exp/rule-int-as-auto-integer-match.exp similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-match.exp rename to cts/scheduler/exp/rule-int-as-auto-integer-match.exp diff --git a/cts/scheduler/rule-int-as-auto-integer-no-match.exp b/cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-no-match.exp rename to cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp diff --git a/cts/scheduler/rule-int-as-integer-match.exp b/cts/scheduler/exp/rule-int-as-integer-match.exp similarity index 100% rename from cts/scheduler/rule-int-as-integer-match.exp rename to cts/scheduler/exp/rule-int-as-integer-match.exp diff --git a/cts/scheduler/rule-int-as-integer-no-match.exp b/cts/scheduler/exp/rule-int-as-integer-no-match.exp similarity index 100% rename from cts/scheduler/rule-int-as-integer-no-match.exp rename to cts/scheduler/exp/rule-int-as-integer-no-match.exp diff --git a/cts/scheduler/rule-int-as-number-match.exp b/cts/scheduler/exp/rule-int-as-number-match.exp similarity index 100% rename from cts/scheduler/rule-int-as-number-match.exp rename to cts/scheduler/exp/rule-int-as-number-match.exp diff --git a/cts/scheduler/rule-int-as-number-no-match.exp b/cts/scheduler/exp/rule-int-as-number-no-match.exp similarity index 100% rename from cts/scheduler/rule-int-as-number-no-match.exp rename to cts/scheduler/exp/rule-int-as-number-no-match.exp diff --git a/cts/scheduler/rule-int-parse-fail-default-str-match.exp b/cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-match.exp rename to cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp diff --git a/cts/scheduler/rule-int-parse-fail-default-str-no-match.exp b/cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-no-match.exp rename to cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp diff --git a/cts/scheduler/shutdown-lock-expiration.exp b/cts/scheduler/exp/shutdown-lock-expiration.exp similarity index 100% rename from cts/scheduler/shutdown-lock-expiration.exp rename to cts/scheduler/exp/shutdown-lock-expiration.exp diff --git a/cts/scheduler/shutdown-lock.exp b/cts/scheduler/exp/shutdown-lock.exp similarity index 100% rename from cts/scheduler/shutdown-lock.exp rename to cts/scheduler/exp/shutdown-lock.exp diff --git a/cts/scheduler/shutdown-maintenance-node.exp b/cts/scheduler/exp/shutdown-maintenance-node.exp similarity index 100% rename from cts/scheduler/shutdown-maintenance-node.exp rename to cts/scheduler/exp/shutdown-maintenance-node.exp diff --git a/cts/scheduler/simple1.exp b/cts/scheduler/exp/simple1.exp similarity index 100% rename from cts/scheduler/simple1.exp rename to cts/scheduler/exp/simple1.exp diff --git a/cts/scheduler/simple11.exp b/cts/scheduler/exp/simple11.exp similarity index 100% rename from cts/scheduler/simple11.exp rename to cts/scheduler/exp/simple11.exp diff --git a/cts/scheduler/simple12.exp b/cts/scheduler/exp/simple12.exp similarity index 100% rename from cts/scheduler/simple12.exp rename to cts/scheduler/exp/simple12.exp diff --git a/cts/scheduler/simple2.exp b/cts/scheduler/exp/simple2.exp similarity index 100% rename from cts/scheduler/simple2.exp rename to cts/scheduler/exp/simple2.exp diff --git a/cts/scheduler/simple3.exp b/cts/scheduler/exp/simple3.exp similarity index 100% rename from cts/scheduler/simple3.exp rename to cts/scheduler/exp/simple3.exp diff --git a/cts/scheduler/simple4.exp b/cts/scheduler/exp/simple4.exp similarity index 100% rename from cts/scheduler/simple4.exp rename to cts/scheduler/exp/simple4.exp diff --git a/cts/scheduler/simple6.exp b/cts/scheduler/exp/simple6.exp similarity index 100% rename from cts/scheduler/simple6.exp rename to cts/scheduler/exp/simple6.exp diff --git a/cts/scheduler/simple7.exp b/cts/scheduler/exp/simple7.exp similarity index 100% rename from cts/scheduler/simple7.exp rename to cts/scheduler/exp/simple7.exp diff --git a/cts/scheduler/simple8.exp b/cts/scheduler/exp/simple8.exp similarity index 100% rename from cts/scheduler/simple8.exp rename to cts/scheduler/exp/simple8.exp diff --git a/cts/scheduler/site-specific-params.exp b/cts/scheduler/exp/site-specific-params.exp similarity index 100% rename from cts/scheduler/site-specific-params.exp rename to cts/scheduler/exp/site-specific-params.exp diff --git a/cts/scheduler/standby.exp b/cts/scheduler/exp/standby.exp similarity index 100% rename from cts/scheduler/standby.exp rename to cts/scheduler/exp/standby.exp diff --git a/cts/scheduler/start-then-stop-with-unfence.exp b/cts/scheduler/exp/start-then-stop-with-unfence.exp similarity index 100% rename from cts/scheduler/start-then-stop-with-unfence.exp rename to cts/scheduler/exp/start-then-stop-with-unfence.exp diff --git a/cts/scheduler/stonith-0.exp b/cts/scheduler/exp/stonith-0.exp similarity index 100% rename from cts/scheduler/stonith-0.exp rename to cts/scheduler/exp/stonith-0.exp diff --git a/cts/scheduler/stonith-1.exp b/cts/scheduler/exp/stonith-1.exp similarity index 100% rename from cts/scheduler/stonith-1.exp rename to cts/scheduler/exp/stonith-1.exp diff --git a/cts/scheduler/stonith-2.exp b/cts/scheduler/exp/stonith-2.exp similarity index 100% rename from cts/scheduler/stonith-2.exp rename to cts/scheduler/exp/stonith-2.exp diff --git a/cts/scheduler/stonith-3.exp b/cts/scheduler/exp/stonith-3.exp similarity index 100% rename from cts/scheduler/stonith-3.exp rename to cts/scheduler/exp/stonith-3.exp diff --git a/cts/scheduler/stonith-4.exp b/cts/scheduler/exp/stonith-4.exp similarity index 100% rename from cts/scheduler/stonith-4.exp rename to cts/scheduler/exp/stonith-4.exp diff --git a/cts/scheduler/stop-all-resources.exp b/cts/scheduler/exp/stop-all-resources.exp similarity index 100% rename from cts/scheduler/stop-all-resources.exp rename to cts/scheduler/exp/stop-all-resources.exp diff --git a/cts/scheduler/stop-failure-no-fencing.exp b/cts/scheduler/exp/stop-failure-no-fencing.exp similarity index 100% rename from cts/scheduler/stop-failure-no-fencing.exp rename to cts/scheduler/exp/stop-failure-no-fencing.exp diff --git a/cts/scheduler/stop-failure-no-quorum.exp b/cts/scheduler/exp/stop-failure-no-quorum.exp similarity index 100% rename from cts/scheduler/stop-failure-no-quorum.exp rename to cts/scheduler/exp/stop-failure-no-quorum.exp diff --git a/cts/scheduler/stop-failure-with-fencing.exp b/cts/scheduler/exp/stop-failure-with-fencing.exp similarity index 100% rename from cts/scheduler/stop-failure-with-fencing.exp rename to cts/scheduler/exp/stop-failure-with-fencing.exp diff --git a/cts/scheduler/stopped-monitor-00.exp b/cts/scheduler/exp/stopped-monitor-00.exp similarity index 100% rename from cts/scheduler/stopped-monitor-00.exp rename to cts/scheduler/exp/stopped-monitor-00.exp diff --git a/cts/scheduler/stopped-monitor-01.exp b/cts/scheduler/exp/stopped-monitor-01.exp similarity index 100% rename from cts/scheduler/stopped-monitor-01.exp rename to cts/scheduler/exp/stopped-monitor-01.exp diff --git a/cts/scheduler/stopped-monitor-02.exp b/cts/scheduler/exp/stopped-monitor-02.exp similarity index 100% rename from cts/scheduler/stopped-monitor-02.exp rename to cts/scheduler/exp/stopped-monitor-02.exp diff --git a/cts/scheduler/stopped-monitor-03.exp b/cts/scheduler/exp/stopped-monitor-03.exp similarity index 100% rename from cts/scheduler/stopped-monitor-03.exp rename to cts/scheduler/exp/stopped-monitor-03.exp diff --git a/cts/scheduler/stopped-monitor-04.exp b/cts/scheduler/exp/stopped-monitor-04.exp similarity index 100% rename from cts/scheduler/stopped-monitor-04.exp rename to cts/scheduler/exp/stopped-monitor-04.exp diff --git a/cts/scheduler/stopped-monitor-05.exp b/cts/scheduler/exp/stopped-monitor-05.exp similarity index 100% rename from cts/scheduler/stopped-monitor-05.exp rename to cts/scheduler/exp/stopped-monitor-05.exp diff --git a/cts/scheduler/stopped-monitor-06.exp b/cts/scheduler/exp/stopped-monitor-06.exp similarity index 100% rename from cts/scheduler/stopped-monitor-06.exp rename to cts/scheduler/exp/stopped-monitor-06.exp diff --git a/cts/scheduler/stopped-monitor-07.exp b/cts/scheduler/exp/stopped-monitor-07.exp similarity index 100% rename from cts/scheduler/stopped-monitor-07.exp rename to cts/scheduler/exp/stopped-monitor-07.exp diff --git a/cts/scheduler/stopped-monitor-08.exp b/cts/scheduler/exp/stopped-monitor-08.exp similarity index 100% rename from cts/scheduler/stopped-monitor-08.exp rename to cts/scheduler/exp/stopped-monitor-08.exp diff --git a/cts/scheduler/stopped-monitor-09.exp b/cts/scheduler/exp/stopped-monitor-09.exp similarity index 100% rename from cts/scheduler/stopped-monitor-09.exp rename to cts/scheduler/exp/stopped-monitor-09.exp diff --git a/cts/scheduler/stopped-monitor-10.exp b/cts/scheduler/exp/stopped-monitor-10.exp similarity index 100% rename from cts/scheduler/stopped-monitor-10.exp rename to cts/scheduler/exp/stopped-monitor-10.exp diff --git a/cts/scheduler/stopped-monitor-11.exp b/cts/scheduler/exp/stopped-monitor-11.exp similarity index 100% rename from cts/scheduler/stopped-monitor-11.exp rename to cts/scheduler/exp/stopped-monitor-11.exp diff --git a/cts/scheduler/stopped-monitor-12.exp b/cts/scheduler/exp/stopped-monitor-12.exp similarity index 100% rename from cts/scheduler/stopped-monitor-12.exp rename to cts/scheduler/exp/stopped-monitor-12.exp diff --git a/cts/scheduler/stopped-monitor-20.exp b/cts/scheduler/exp/stopped-monitor-20.exp similarity index 100% rename from cts/scheduler/stopped-monitor-20.exp rename to cts/scheduler/exp/stopped-monitor-20.exp diff --git a/cts/scheduler/stopped-monitor-21.exp b/cts/scheduler/exp/stopped-monitor-21.exp similarity index 100% rename from cts/scheduler/stopped-monitor-21.exp rename to cts/scheduler/exp/stopped-monitor-21.exp diff --git a/cts/scheduler/stopped-monitor-22.exp b/cts/scheduler/exp/stopped-monitor-22.exp similarity index 100% rename from cts/scheduler/stopped-monitor-22.exp rename to cts/scheduler/exp/stopped-monitor-22.exp diff --git a/cts/scheduler/stopped-monitor-23.exp b/cts/scheduler/exp/stopped-monitor-23.exp similarity index 100% rename from cts/scheduler/stopped-monitor-23.exp rename to cts/scheduler/exp/stopped-monitor-23.exp diff --git a/cts/scheduler/stopped-monitor-24.exp b/cts/scheduler/exp/stopped-monitor-24.exp similarity index 100% rename from cts/scheduler/stopped-monitor-24.exp rename to cts/scheduler/exp/stopped-monitor-24.exp diff --git a/cts/scheduler/stopped-monitor-25.exp b/cts/scheduler/exp/stopped-monitor-25.exp similarity index 100% rename from cts/scheduler/stopped-monitor-25.exp rename to cts/scheduler/exp/stopped-monitor-25.exp diff --git a/cts/scheduler/stopped-monitor-26.exp b/cts/scheduler/exp/stopped-monitor-26.exp similarity index 100% rename from cts/scheduler/stopped-monitor-26.exp rename to cts/scheduler/exp/stopped-monitor-26.exp diff --git a/cts/scheduler/stopped-monitor-27.exp b/cts/scheduler/exp/stopped-monitor-27.exp similarity index 100% rename from cts/scheduler/stopped-monitor-27.exp rename to cts/scheduler/exp/stopped-monitor-27.exp diff --git a/cts/scheduler/stopped-monitor-30.exp b/cts/scheduler/exp/stopped-monitor-30.exp similarity index 100% rename from cts/scheduler/stopped-monitor-30.exp rename to cts/scheduler/exp/stopped-monitor-30.exp diff --git a/cts/scheduler/stopped-monitor-31.exp b/cts/scheduler/exp/stopped-monitor-31.exp similarity index 100% rename from cts/scheduler/stopped-monitor-31.exp rename to cts/scheduler/exp/stopped-monitor-31.exp diff --git a/cts/scheduler/suicide-needed-inquorate.exp b/cts/scheduler/exp/suicide-needed-inquorate.exp similarity index 100% rename from cts/scheduler/suicide-needed-inquorate.exp rename to cts/scheduler/exp/suicide-needed-inquorate.exp diff --git a/cts/scheduler/suicide-not-needed-initial-quorum.exp b/cts/scheduler/exp/suicide-not-needed-initial-quorum.exp similarity index 100% rename from cts/scheduler/suicide-not-needed-initial-quorum.exp rename to cts/scheduler/exp/suicide-not-needed-initial-quorum.exp diff --git a/cts/scheduler/suicide-not-needed-never-quorate.exp b/cts/scheduler/exp/suicide-not-needed-never-quorate.exp similarity index 100% rename from cts/scheduler/suicide-not-needed-never-quorate.exp rename to cts/scheduler/exp/suicide-not-needed-never-quorate.exp diff --git a/cts/scheduler/suicide-not-needed-quorate.exp b/cts/scheduler/exp/suicide-not-needed-quorate.exp similarity index 100% rename from cts/scheduler/suicide-not-needed-quorate.exp rename to cts/scheduler/exp/suicide-not-needed-quorate.exp diff --git a/cts/scheduler/systemhealth1.exp b/cts/scheduler/exp/systemhealth1.exp similarity index 100% rename from cts/scheduler/systemhealth1.exp rename to cts/scheduler/exp/systemhealth1.exp diff --git a/cts/scheduler/systemhealth2.exp b/cts/scheduler/exp/systemhealth2.exp similarity index 100% rename from cts/scheduler/systemhealth2.exp rename to cts/scheduler/exp/systemhealth2.exp diff --git a/cts/scheduler/systemhealth3.exp b/cts/scheduler/exp/systemhealth3.exp similarity index 100% rename from cts/scheduler/systemhealth3.exp rename to cts/scheduler/exp/systemhealth3.exp diff --git a/cts/scheduler/systemhealthm1.exp b/cts/scheduler/exp/systemhealthm1.exp similarity index 100% rename from cts/scheduler/systemhealthm1.exp rename to cts/scheduler/exp/systemhealthm1.exp diff --git a/cts/scheduler/systemhealthm2.exp b/cts/scheduler/exp/systemhealthm2.exp similarity index 100% rename from cts/scheduler/systemhealthm2.exp rename to cts/scheduler/exp/systemhealthm2.exp diff --git a/cts/scheduler/systemhealthm3.exp b/cts/scheduler/exp/systemhealthm3.exp similarity index 100% rename from cts/scheduler/systemhealthm3.exp rename to cts/scheduler/exp/systemhealthm3.exp diff --git a/cts/scheduler/systemhealthn1.exp b/cts/scheduler/exp/systemhealthn1.exp similarity index 100% rename from cts/scheduler/systemhealthn1.exp rename to cts/scheduler/exp/systemhealthn1.exp diff --git a/cts/scheduler/systemhealthn2.exp b/cts/scheduler/exp/systemhealthn2.exp similarity index 100% rename from cts/scheduler/systemhealthn2.exp rename to cts/scheduler/exp/systemhealthn2.exp diff --git a/cts/scheduler/systemhealthn3.exp b/cts/scheduler/exp/systemhealthn3.exp similarity index 100% rename from cts/scheduler/systemhealthn3.exp rename to cts/scheduler/exp/systemhealthn3.exp diff --git a/cts/scheduler/systemhealtho1.exp b/cts/scheduler/exp/systemhealtho1.exp similarity index 100% rename from cts/scheduler/systemhealtho1.exp rename to cts/scheduler/exp/systemhealtho1.exp diff --git a/cts/scheduler/systemhealtho2.exp b/cts/scheduler/exp/systemhealtho2.exp similarity index 100% rename from cts/scheduler/systemhealtho2.exp rename to cts/scheduler/exp/systemhealtho2.exp diff --git a/cts/scheduler/systemhealtho3.exp b/cts/scheduler/exp/systemhealtho3.exp similarity index 100% rename from cts/scheduler/systemhealtho3.exp rename to cts/scheduler/exp/systemhealtho3.exp diff --git a/cts/scheduler/systemhealthp1.exp b/cts/scheduler/exp/systemhealthp1.exp similarity index 100% rename from cts/scheduler/systemhealthp1.exp rename to cts/scheduler/exp/systemhealthp1.exp diff --git a/cts/scheduler/systemhealthp2.exp b/cts/scheduler/exp/systemhealthp2.exp similarity index 100% rename from cts/scheduler/systemhealthp2.exp rename to cts/scheduler/exp/systemhealthp2.exp diff --git a/cts/scheduler/systemhealthp3.exp b/cts/scheduler/exp/systemhealthp3.exp similarity index 100% rename from cts/scheduler/systemhealthp3.exp rename to cts/scheduler/exp/systemhealthp3.exp diff --git a/cts/scheduler/tags-coloc-order-1.exp b/cts/scheduler/exp/tags-coloc-order-1.exp similarity index 100% rename from cts/scheduler/tags-coloc-order-1.exp rename to cts/scheduler/exp/tags-coloc-order-1.exp diff --git a/cts/scheduler/tags-coloc-order-2.exp b/cts/scheduler/exp/tags-coloc-order-2.exp similarity index 100% rename from cts/scheduler/tags-coloc-order-2.exp rename to cts/scheduler/exp/tags-coloc-order-2.exp diff --git a/cts/scheduler/tags-location.exp b/cts/scheduler/exp/tags-location.exp similarity index 100% rename from cts/scheduler/tags-location.exp rename to cts/scheduler/exp/tags-location.exp diff --git a/cts/scheduler/tags-ticket.exp b/cts/scheduler/exp/tags-ticket.exp similarity index 100% rename from cts/scheduler/tags-ticket.exp rename to cts/scheduler/exp/tags-ticket.exp diff --git a/cts/scheduler/target-0.exp b/cts/scheduler/exp/target-0.exp similarity index 100% rename from cts/scheduler/target-0.exp rename to cts/scheduler/exp/target-0.exp diff --git a/cts/scheduler/target-1.exp b/cts/scheduler/exp/target-1.exp similarity index 100% rename from cts/scheduler/target-1.exp rename to cts/scheduler/exp/target-1.exp diff --git a/cts/scheduler/target-2.exp b/cts/scheduler/exp/target-2.exp similarity index 100% rename from cts/scheduler/target-2.exp rename to cts/scheduler/exp/target-2.exp diff --git a/cts/scheduler/template-1.exp b/cts/scheduler/exp/template-1.exp similarity index 100% rename from cts/scheduler/template-1.exp rename to cts/scheduler/exp/template-1.exp diff --git a/cts/scheduler/template-2.exp b/cts/scheduler/exp/template-2.exp similarity index 100% rename from cts/scheduler/template-2.exp rename to cts/scheduler/exp/template-2.exp diff --git a/cts/scheduler/template-3.exp b/cts/scheduler/exp/template-3.exp similarity index 100% rename from cts/scheduler/template-3.exp rename to cts/scheduler/exp/template-3.exp diff --git a/cts/scheduler/template-clone-group.exp b/cts/scheduler/exp/template-clone-group.exp similarity index 100% rename from cts/scheduler/template-clone-group.exp rename to cts/scheduler/exp/template-clone-group.exp diff --git a/cts/scheduler/template-clone-primitive.exp b/cts/scheduler/exp/template-clone-primitive.exp similarity index 100% rename from cts/scheduler/template-clone-primitive.exp rename to cts/scheduler/exp/template-clone-primitive.exp diff --git a/cts/scheduler/template-coloc-1.exp b/cts/scheduler/exp/template-coloc-1.exp similarity index 100% rename from cts/scheduler/template-coloc-1.exp rename to cts/scheduler/exp/template-coloc-1.exp diff --git a/cts/scheduler/template-coloc-2.exp b/cts/scheduler/exp/template-coloc-2.exp similarity index 100% rename from cts/scheduler/template-coloc-2.exp rename to cts/scheduler/exp/template-coloc-2.exp diff --git a/cts/scheduler/template-coloc-3.exp b/cts/scheduler/exp/template-coloc-3.exp similarity index 100% rename from cts/scheduler/template-coloc-3.exp rename to cts/scheduler/exp/template-coloc-3.exp diff --git a/cts/scheduler/template-order-1.exp b/cts/scheduler/exp/template-order-1.exp similarity index 100% rename from cts/scheduler/template-order-1.exp rename to cts/scheduler/exp/template-order-1.exp diff --git a/cts/scheduler/template-order-2.exp b/cts/scheduler/exp/template-order-2.exp similarity index 100% rename from cts/scheduler/template-order-2.exp rename to cts/scheduler/exp/template-order-2.exp diff --git a/cts/scheduler/template-order-3.exp b/cts/scheduler/exp/template-order-3.exp similarity index 100% rename from cts/scheduler/template-order-3.exp rename to cts/scheduler/exp/template-order-3.exp diff --git a/cts/scheduler/template-rsc-sets-1.exp b/cts/scheduler/exp/template-rsc-sets-1.exp similarity index 100% rename from cts/scheduler/template-rsc-sets-1.exp rename to cts/scheduler/exp/template-rsc-sets-1.exp diff --git a/cts/scheduler/template-rsc-sets-2.exp b/cts/scheduler/exp/template-rsc-sets-2.exp similarity index 100% rename from cts/scheduler/template-rsc-sets-2.exp rename to cts/scheduler/exp/template-rsc-sets-2.exp diff --git a/cts/scheduler/template-rsc-sets-3.exp b/cts/scheduler/exp/template-rsc-sets-3.exp similarity index 100% rename from cts/scheduler/template-rsc-sets-3.exp rename to cts/scheduler/exp/template-rsc-sets-3.exp diff --git a/cts/scheduler/template-rsc-sets-4.exp b/cts/scheduler/exp/template-rsc-sets-4.exp similarity index 100% rename from cts/scheduler/template-rsc-sets-4.exp rename to cts/scheduler/exp/template-rsc-sets-4.exp diff --git a/cts/scheduler/template-ticket.exp b/cts/scheduler/exp/template-ticket.exp similarity index 100% rename from cts/scheduler/template-ticket.exp rename to cts/scheduler/exp/template-ticket.exp diff --git a/cts/scheduler/ticket-clone-1.exp b/cts/scheduler/exp/ticket-clone-1.exp similarity index 100% rename from cts/scheduler/ticket-clone-1.exp rename to cts/scheduler/exp/ticket-clone-1.exp diff --git a/cts/scheduler/ticket-clone-10.exp b/cts/scheduler/exp/ticket-clone-10.exp similarity index 100% rename from cts/scheduler/ticket-clone-10.exp rename to cts/scheduler/exp/ticket-clone-10.exp diff --git a/cts/scheduler/ticket-clone-11.exp b/cts/scheduler/exp/ticket-clone-11.exp similarity index 100% rename from cts/scheduler/ticket-clone-11.exp rename to cts/scheduler/exp/ticket-clone-11.exp diff --git a/cts/scheduler/ticket-clone-12.exp b/cts/scheduler/exp/ticket-clone-12.exp similarity index 100% rename from cts/scheduler/ticket-clone-12.exp rename to cts/scheduler/exp/ticket-clone-12.exp diff --git a/cts/scheduler/ticket-clone-13.exp b/cts/scheduler/exp/ticket-clone-13.exp similarity index 100% rename from cts/scheduler/ticket-clone-13.exp rename to cts/scheduler/exp/ticket-clone-13.exp diff --git a/cts/scheduler/ticket-clone-14.exp b/cts/scheduler/exp/ticket-clone-14.exp similarity index 100% rename from cts/scheduler/ticket-clone-14.exp rename to cts/scheduler/exp/ticket-clone-14.exp diff --git a/cts/scheduler/ticket-clone-15.exp b/cts/scheduler/exp/ticket-clone-15.exp similarity index 100% rename from cts/scheduler/ticket-clone-15.exp rename to cts/scheduler/exp/ticket-clone-15.exp diff --git a/cts/scheduler/ticket-clone-16.exp b/cts/scheduler/exp/ticket-clone-16.exp similarity index 100% rename from cts/scheduler/ticket-clone-16.exp rename to cts/scheduler/exp/ticket-clone-16.exp diff --git a/cts/scheduler/ticket-clone-17.exp b/cts/scheduler/exp/ticket-clone-17.exp similarity index 100% rename from cts/scheduler/ticket-clone-17.exp rename to cts/scheduler/exp/ticket-clone-17.exp diff --git a/cts/scheduler/ticket-clone-18.exp b/cts/scheduler/exp/ticket-clone-18.exp similarity index 100% rename from cts/scheduler/ticket-clone-18.exp rename to cts/scheduler/exp/ticket-clone-18.exp diff --git a/cts/scheduler/ticket-clone-19.exp b/cts/scheduler/exp/ticket-clone-19.exp similarity index 100% rename from cts/scheduler/ticket-clone-19.exp rename to cts/scheduler/exp/ticket-clone-19.exp diff --git a/cts/scheduler/ticket-clone-2.exp b/cts/scheduler/exp/ticket-clone-2.exp similarity index 100% rename from cts/scheduler/ticket-clone-2.exp rename to cts/scheduler/exp/ticket-clone-2.exp diff --git a/cts/scheduler/ticket-clone-20.exp b/cts/scheduler/exp/ticket-clone-20.exp similarity index 100% rename from cts/scheduler/ticket-clone-20.exp rename to cts/scheduler/exp/ticket-clone-20.exp diff --git a/cts/scheduler/ticket-clone-21.exp b/cts/scheduler/exp/ticket-clone-21.exp similarity index 100% rename from cts/scheduler/ticket-clone-21.exp rename to cts/scheduler/exp/ticket-clone-21.exp diff --git a/cts/scheduler/ticket-clone-22.exp b/cts/scheduler/exp/ticket-clone-22.exp similarity index 100% rename from cts/scheduler/ticket-clone-22.exp rename to cts/scheduler/exp/ticket-clone-22.exp diff --git a/cts/scheduler/ticket-clone-23.exp b/cts/scheduler/exp/ticket-clone-23.exp similarity index 100% rename from cts/scheduler/ticket-clone-23.exp rename to cts/scheduler/exp/ticket-clone-23.exp diff --git a/cts/scheduler/ticket-clone-24.exp b/cts/scheduler/exp/ticket-clone-24.exp similarity index 100% rename from cts/scheduler/ticket-clone-24.exp rename to cts/scheduler/exp/ticket-clone-24.exp diff --git a/cts/scheduler/ticket-clone-3.exp b/cts/scheduler/exp/ticket-clone-3.exp similarity index 100% rename from cts/scheduler/ticket-clone-3.exp rename to cts/scheduler/exp/ticket-clone-3.exp diff --git a/cts/scheduler/ticket-clone-4.exp b/cts/scheduler/exp/ticket-clone-4.exp similarity index 100% rename from cts/scheduler/ticket-clone-4.exp rename to cts/scheduler/exp/ticket-clone-4.exp diff --git a/cts/scheduler/ticket-clone-5.exp b/cts/scheduler/exp/ticket-clone-5.exp similarity index 100% rename from cts/scheduler/ticket-clone-5.exp rename to cts/scheduler/exp/ticket-clone-5.exp diff --git a/cts/scheduler/ticket-clone-6.exp b/cts/scheduler/exp/ticket-clone-6.exp similarity index 100% rename from cts/scheduler/ticket-clone-6.exp rename to cts/scheduler/exp/ticket-clone-6.exp diff --git a/cts/scheduler/ticket-clone-7.exp b/cts/scheduler/exp/ticket-clone-7.exp similarity index 100% rename from cts/scheduler/ticket-clone-7.exp rename to cts/scheduler/exp/ticket-clone-7.exp diff --git a/cts/scheduler/ticket-clone-8.exp b/cts/scheduler/exp/ticket-clone-8.exp similarity index 100% rename from cts/scheduler/ticket-clone-8.exp rename to cts/scheduler/exp/ticket-clone-8.exp diff --git a/cts/scheduler/ticket-clone-9.exp b/cts/scheduler/exp/ticket-clone-9.exp similarity index 100% rename from cts/scheduler/ticket-clone-9.exp rename to cts/scheduler/exp/ticket-clone-9.exp diff --git a/cts/scheduler/ticket-group-1.exp b/cts/scheduler/exp/ticket-group-1.exp similarity index 100% rename from cts/scheduler/ticket-group-1.exp rename to cts/scheduler/exp/ticket-group-1.exp diff --git a/cts/scheduler/ticket-group-10.exp b/cts/scheduler/exp/ticket-group-10.exp similarity index 100% rename from cts/scheduler/ticket-group-10.exp rename to cts/scheduler/exp/ticket-group-10.exp diff --git a/cts/scheduler/ticket-group-11.exp b/cts/scheduler/exp/ticket-group-11.exp similarity index 100% rename from cts/scheduler/ticket-group-11.exp rename to cts/scheduler/exp/ticket-group-11.exp diff --git a/cts/scheduler/ticket-group-12.exp b/cts/scheduler/exp/ticket-group-12.exp similarity index 100% rename from cts/scheduler/ticket-group-12.exp rename to cts/scheduler/exp/ticket-group-12.exp diff --git a/cts/scheduler/ticket-group-13.exp b/cts/scheduler/exp/ticket-group-13.exp similarity index 100% rename from cts/scheduler/ticket-group-13.exp rename to cts/scheduler/exp/ticket-group-13.exp diff --git a/cts/scheduler/ticket-group-14.exp b/cts/scheduler/exp/ticket-group-14.exp similarity index 100% rename from cts/scheduler/ticket-group-14.exp rename to cts/scheduler/exp/ticket-group-14.exp diff --git a/cts/scheduler/ticket-group-15.exp b/cts/scheduler/exp/ticket-group-15.exp similarity index 100% rename from cts/scheduler/ticket-group-15.exp rename to cts/scheduler/exp/ticket-group-15.exp diff --git a/cts/scheduler/ticket-group-16.exp b/cts/scheduler/exp/ticket-group-16.exp similarity index 100% rename from cts/scheduler/ticket-group-16.exp rename to cts/scheduler/exp/ticket-group-16.exp diff --git a/cts/scheduler/ticket-group-17.exp b/cts/scheduler/exp/ticket-group-17.exp similarity index 100% rename from cts/scheduler/ticket-group-17.exp rename to cts/scheduler/exp/ticket-group-17.exp diff --git a/cts/scheduler/ticket-group-18.exp b/cts/scheduler/exp/ticket-group-18.exp similarity index 100% rename from cts/scheduler/ticket-group-18.exp rename to cts/scheduler/exp/ticket-group-18.exp diff --git a/cts/scheduler/ticket-group-19.exp b/cts/scheduler/exp/ticket-group-19.exp similarity index 100% rename from cts/scheduler/ticket-group-19.exp rename to cts/scheduler/exp/ticket-group-19.exp diff --git a/cts/scheduler/ticket-group-2.exp b/cts/scheduler/exp/ticket-group-2.exp similarity index 100% rename from cts/scheduler/ticket-group-2.exp rename to cts/scheduler/exp/ticket-group-2.exp diff --git a/cts/scheduler/ticket-group-20.exp b/cts/scheduler/exp/ticket-group-20.exp similarity index 100% rename from cts/scheduler/ticket-group-20.exp rename to cts/scheduler/exp/ticket-group-20.exp diff --git a/cts/scheduler/ticket-group-21.exp b/cts/scheduler/exp/ticket-group-21.exp similarity index 100% rename from cts/scheduler/ticket-group-21.exp rename to cts/scheduler/exp/ticket-group-21.exp diff --git a/cts/scheduler/ticket-group-22.exp b/cts/scheduler/exp/ticket-group-22.exp similarity index 100% rename from cts/scheduler/ticket-group-22.exp rename to cts/scheduler/exp/ticket-group-22.exp diff --git a/cts/scheduler/ticket-group-23.exp b/cts/scheduler/exp/ticket-group-23.exp similarity index 100% rename from cts/scheduler/ticket-group-23.exp rename to cts/scheduler/exp/ticket-group-23.exp diff --git a/cts/scheduler/ticket-group-24.exp b/cts/scheduler/exp/ticket-group-24.exp similarity index 100% rename from cts/scheduler/ticket-group-24.exp rename to cts/scheduler/exp/ticket-group-24.exp diff --git a/cts/scheduler/ticket-group-3.exp b/cts/scheduler/exp/ticket-group-3.exp similarity index 100% rename from cts/scheduler/ticket-group-3.exp rename to cts/scheduler/exp/ticket-group-3.exp diff --git a/cts/scheduler/ticket-group-4.exp b/cts/scheduler/exp/ticket-group-4.exp similarity index 100% rename from cts/scheduler/ticket-group-4.exp rename to cts/scheduler/exp/ticket-group-4.exp diff --git a/cts/scheduler/ticket-group-5.exp b/cts/scheduler/exp/ticket-group-5.exp similarity index 100% rename from cts/scheduler/ticket-group-5.exp rename to cts/scheduler/exp/ticket-group-5.exp diff --git a/cts/scheduler/ticket-group-6.exp b/cts/scheduler/exp/ticket-group-6.exp similarity index 100% rename from cts/scheduler/ticket-group-6.exp rename to cts/scheduler/exp/ticket-group-6.exp diff --git a/cts/scheduler/ticket-group-7.exp b/cts/scheduler/exp/ticket-group-7.exp similarity index 100% rename from cts/scheduler/ticket-group-7.exp rename to cts/scheduler/exp/ticket-group-7.exp diff --git a/cts/scheduler/ticket-group-8.exp b/cts/scheduler/exp/ticket-group-8.exp similarity index 100% rename from cts/scheduler/ticket-group-8.exp rename to cts/scheduler/exp/ticket-group-8.exp diff --git a/cts/scheduler/ticket-group-9.exp b/cts/scheduler/exp/ticket-group-9.exp similarity index 100% rename from cts/scheduler/ticket-group-9.exp rename to cts/scheduler/exp/ticket-group-9.exp diff --git a/cts/scheduler/ticket-master-1.exp b/cts/scheduler/exp/ticket-master-1.exp similarity index 100% rename from cts/scheduler/ticket-master-1.exp rename to cts/scheduler/exp/ticket-master-1.exp diff --git a/cts/scheduler/ticket-master-10.exp b/cts/scheduler/exp/ticket-master-10.exp similarity index 100% rename from cts/scheduler/ticket-master-10.exp rename to cts/scheduler/exp/ticket-master-10.exp diff --git a/cts/scheduler/ticket-master-11.exp b/cts/scheduler/exp/ticket-master-11.exp similarity index 100% rename from cts/scheduler/ticket-master-11.exp rename to cts/scheduler/exp/ticket-master-11.exp diff --git a/cts/scheduler/ticket-master-12.exp b/cts/scheduler/exp/ticket-master-12.exp similarity index 100% rename from cts/scheduler/ticket-master-12.exp rename to cts/scheduler/exp/ticket-master-12.exp diff --git a/cts/scheduler/ticket-master-13.exp b/cts/scheduler/exp/ticket-master-13.exp similarity index 100% rename from cts/scheduler/ticket-master-13.exp rename to cts/scheduler/exp/ticket-master-13.exp diff --git a/cts/scheduler/ticket-master-14.exp b/cts/scheduler/exp/ticket-master-14.exp similarity index 100% rename from cts/scheduler/ticket-master-14.exp rename to cts/scheduler/exp/ticket-master-14.exp diff --git a/cts/scheduler/ticket-master-15.exp b/cts/scheduler/exp/ticket-master-15.exp similarity index 100% rename from cts/scheduler/ticket-master-15.exp rename to cts/scheduler/exp/ticket-master-15.exp diff --git a/cts/scheduler/ticket-master-16.exp b/cts/scheduler/exp/ticket-master-16.exp similarity index 100% rename from cts/scheduler/ticket-master-16.exp rename to cts/scheduler/exp/ticket-master-16.exp diff --git a/cts/scheduler/ticket-master-17.exp b/cts/scheduler/exp/ticket-master-17.exp similarity index 100% rename from cts/scheduler/ticket-master-17.exp rename to cts/scheduler/exp/ticket-master-17.exp diff --git a/cts/scheduler/ticket-master-18.exp b/cts/scheduler/exp/ticket-master-18.exp similarity index 100% rename from cts/scheduler/ticket-master-18.exp rename to cts/scheduler/exp/ticket-master-18.exp diff --git a/cts/scheduler/ticket-master-19.exp b/cts/scheduler/exp/ticket-master-19.exp similarity index 100% rename from cts/scheduler/ticket-master-19.exp rename to cts/scheduler/exp/ticket-master-19.exp diff --git a/cts/scheduler/ticket-master-2.exp b/cts/scheduler/exp/ticket-master-2.exp similarity index 100% rename from cts/scheduler/ticket-master-2.exp rename to cts/scheduler/exp/ticket-master-2.exp diff --git a/cts/scheduler/ticket-master-20.exp b/cts/scheduler/exp/ticket-master-20.exp similarity index 100% rename from cts/scheduler/ticket-master-20.exp rename to cts/scheduler/exp/ticket-master-20.exp diff --git a/cts/scheduler/ticket-master-21.exp b/cts/scheduler/exp/ticket-master-21.exp similarity index 100% rename from cts/scheduler/ticket-master-21.exp rename to cts/scheduler/exp/ticket-master-21.exp diff --git a/cts/scheduler/ticket-master-22.exp b/cts/scheduler/exp/ticket-master-22.exp similarity index 100% rename from cts/scheduler/ticket-master-22.exp rename to cts/scheduler/exp/ticket-master-22.exp diff --git a/cts/scheduler/ticket-master-23.exp b/cts/scheduler/exp/ticket-master-23.exp similarity index 100% rename from cts/scheduler/ticket-master-23.exp rename to cts/scheduler/exp/ticket-master-23.exp diff --git a/cts/scheduler/ticket-master-24.exp b/cts/scheduler/exp/ticket-master-24.exp similarity index 100% rename from cts/scheduler/ticket-master-24.exp rename to cts/scheduler/exp/ticket-master-24.exp diff --git a/cts/scheduler/ticket-master-3.exp b/cts/scheduler/exp/ticket-master-3.exp similarity index 100% rename from cts/scheduler/ticket-master-3.exp rename to cts/scheduler/exp/ticket-master-3.exp diff --git a/cts/scheduler/ticket-master-4.exp b/cts/scheduler/exp/ticket-master-4.exp similarity index 100% rename from cts/scheduler/ticket-master-4.exp rename to cts/scheduler/exp/ticket-master-4.exp diff --git a/cts/scheduler/ticket-master-5.exp b/cts/scheduler/exp/ticket-master-5.exp similarity index 100% rename from cts/scheduler/ticket-master-5.exp rename to cts/scheduler/exp/ticket-master-5.exp diff --git a/cts/scheduler/ticket-master-6.exp b/cts/scheduler/exp/ticket-master-6.exp similarity index 100% rename from cts/scheduler/ticket-master-6.exp rename to cts/scheduler/exp/ticket-master-6.exp diff --git a/cts/scheduler/ticket-master-7.exp b/cts/scheduler/exp/ticket-master-7.exp similarity index 100% rename from cts/scheduler/ticket-master-7.exp rename to cts/scheduler/exp/ticket-master-7.exp diff --git a/cts/scheduler/ticket-master-8.exp b/cts/scheduler/exp/ticket-master-8.exp similarity index 100% rename from cts/scheduler/ticket-master-8.exp rename to cts/scheduler/exp/ticket-master-8.exp diff --git a/cts/scheduler/ticket-master-9.exp b/cts/scheduler/exp/ticket-master-9.exp similarity index 100% rename from cts/scheduler/ticket-master-9.exp rename to cts/scheduler/exp/ticket-master-9.exp diff --git a/cts/scheduler/ticket-primitive-1.exp b/cts/scheduler/exp/ticket-primitive-1.exp similarity index 100% rename from cts/scheduler/ticket-primitive-1.exp rename to cts/scheduler/exp/ticket-primitive-1.exp diff --git a/cts/scheduler/ticket-primitive-10.exp b/cts/scheduler/exp/ticket-primitive-10.exp similarity index 100% rename from cts/scheduler/ticket-primitive-10.exp rename to cts/scheduler/exp/ticket-primitive-10.exp diff --git a/cts/scheduler/ticket-primitive-11.exp b/cts/scheduler/exp/ticket-primitive-11.exp similarity index 100% rename from cts/scheduler/ticket-primitive-11.exp rename to cts/scheduler/exp/ticket-primitive-11.exp diff --git a/cts/scheduler/ticket-primitive-12.exp b/cts/scheduler/exp/ticket-primitive-12.exp similarity index 100% rename from cts/scheduler/ticket-primitive-12.exp rename to cts/scheduler/exp/ticket-primitive-12.exp diff --git a/cts/scheduler/ticket-primitive-13.exp b/cts/scheduler/exp/ticket-primitive-13.exp similarity index 100% rename from cts/scheduler/ticket-primitive-13.exp rename to cts/scheduler/exp/ticket-primitive-13.exp diff --git a/cts/scheduler/ticket-primitive-14.exp b/cts/scheduler/exp/ticket-primitive-14.exp similarity index 100% rename from cts/scheduler/ticket-primitive-14.exp rename to cts/scheduler/exp/ticket-primitive-14.exp diff --git a/cts/scheduler/ticket-primitive-15.exp b/cts/scheduler/exp/ticket-primitive-15.exp similarity index 100% rename from cts/scheduler/ticket-primitive-15.exp rename to cts/scheduler/exp/ticket-primitive-15.exp diff --git a/cts/scheduler/ticket-primitive-16.exp b/cts/scheduler/exp/ticket-primitive-16.exp similarity index 100% rename from cts/scheduler/ticket-primitive-16.exp rename to cts/scheduler/exp/ticket-primitive-16.exp diff --git a/cts/scheduler/ticket-primitive-17.exp b/cts/scheduler/exp/ticket-primitive-17.exp similarity index 100% rename from cts/scheduler/ticket-primitive-17.exp rename to cts/scheduler/exp/ticket-primitive-17.exp diff --git a/cts/scheduler/ticket-primitive-18.exp b/cts/scheduler/exp/ticket-primitive-18.exp similarity index 100% rename from cts/scheduler/ticket-primitive-18.exp rename to cts/scheduler/exp/ticket-primitive-18.exp diff --git a/cts/scheduler/ticket-primitive-19.exp b/cts/scheduler/exp/ticket-primitive-19.exp similarity index 100% rename from cts/scheduler/ticket-primitive-19.exp rename to cts/scheduler/exp/ticket-primitive-19.exp diff --git a/cts/scheduler/ticket-primitive-2.exp b/cts/scheduler/exp/ticket-primitive-2.exp similarity index 100% rename from cts/scheduler/ticket-primitive-2.exp rename to cts/scheduler/exp/ticket-primitive-2.exp diff --git a/cts/scheduler/ticket-primitive-20.exp b/cts/scheduler/exp/ticket-primitive-20.exp similarity index 100% rename from cts/scheduler/ticket-primitive-20.exp rename to cts/scheduler/exp/ticket-primitive-20.exp diff --git a/cts/scheduler/ticket-primitive-21.exp b/cts/scheduler/exp/ticket-primitive-21.exp similarity index 100% rename from cts/scheduler/ticket-primitive-21.exp rename to cts/scheduler/exp/ticket-primitive-21.exp diff --git a/cts/scheduler/ticket-primitive-22.exp b/cts/scheduler/exp/ticket-primitive-22.exp similarity index 100% rename from cts/scheduler/ticket-primitive-22.exp rename to cts/scheduler/exp/ticket-primitive-22.exp diff --git a/cts/scheduler/ticket-primitive-23.exp b/cts/scheduler/exp/ticket-primitive-23.exp similarity index 100% rename from cts/scheduler/ticket-primitive-23.exp rename to cts/scheduler/exp/ticket-primitive-23.exp diff --git a/cts/scheduler/ticket-primitive-24.exp b/cts/scheduler/exp/ticket-primitive-24.exp similarity index 100% rename from cts/scheduler/ticket-primitive-24.exp rename to cts/scheduler/exp/ticket-primitive-24.exp diff --git a/cts/scheduler/ticket-primitive-3.exp b/cts/scheduler/exp/ticket-primitive-3.exp similarity index 100% rename from cts/scheduler/ticket-primitive-3.exp rename to cts/scheduler/exp/ticket-primitive-3.exp diff --git a/cts/scheduler/ticket-primitive-4.exp b/cts/scheduler/exp/ticket-primitive-4.exp similarity index 100% rename from cts/scheduler/ticket-primitive-4.exp rename to cts/scheduler/exp/ticket-primitive-4.exp diff --git a/cts/scheduler/ticket-primitive-5.exp b/cts/scheduler/exp/ticket-primitive-5.exp similarity index 100% rename from cts/scheduler/ticket-primitive-5.exp rename to cts/scheduler/exp/ticket-primitive-5.exp diff --git a/cts/scheduler/ticket-primitive-6.exp b/cts/scheduler/exp/ticket-primitive-6.exp similarity index 100% rename from cts/scheduler/ticket-primitive-6.exp rename to cts/scheduler/exp/ticket-primitive-6.exp diff --git a/cts/scheduler/ticket-primitive-7.exp b/cts/scheduler/exp/ticket-primitive-7.exp similarity index 100% rename from cts/scheduler/ticket-primitive-7.exp rename to cts/scheduler/exp/ticket-primitive-7.exp diff --git a/cts/scheduler/ticket-primitive-8.exp b/cts/scheduler/exp/ticket-primitive-8.exp similarity index 100% rename from cts/scheduler/ticket-primitive-8.exp rename to cts/scheduler/exp/ticket-primitive-8.exp diff --git a/cts/scheduler/ticket-primitive-9.exp b/cts/scheduler/exp/ticket-primitive-9.exp similarity index 100% rename from cts/scheduler/ticket-primitive-9.exp rename to cts/scheduler/exp/ticket-primitive-9.exp diff --git a/cts/scheduler/ticket-rsc-sets-1.exp b/cts/scheduler/exp/ticket-rsc-sets-1.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-1.exp rename to cts/scheduler/exp/ticket-rsc-sets-1.exp diff --git a/cts/scheduler/ticket-rsc-sets-10.exp b/cts/scheduler/exp/ticket-rsc-sets-10.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-10.exp rename to cts/scheduler/exp/ticket-rsc-sets-10.exp diff --git a/cts/scheduler/ticket-rsc-sets-11.exp b/cts/scheduler/exp/ticket-rsc-sets-11.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-11.exp rename to cts/scheduler/exp/ticket-rsc-sets-11.exp diff --git a/cts/scheduler/ticket-rsc-sets-12.exp b/cts/scheduler/exp/ticket-rsc-sets-12.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-12.exp rename to cts/scheduler/exp/ticket-rsc-sets-12.exp diff --git a/cts/scheduler/ticket-rsc-sets-13.exp b/cts/scheduler/exp/ticket-rsc-sets-13.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-13.exp rename to cts/scheduler/exp/ticket-rsc-sets-13.exp diff --git a/cts/scheduler/ticket-rsc-sets-14.exp b/cts/scheduler/exp/ticket-rsc-sets-14.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-14.exp rename to cts/scheduler/exp/ticket-rsc-sets-14.exp diff --git a/cts/scheduler/ticket-rsc-sets-2.exp b/cts/scheduler/exp/ticket-rsc-sets-2.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-2.exp rename to cts/scheduler/exp/ticket-rsc-sets-2.exp diff --git a/cts/scheduler/ticket-rsc-sets-3.exp b/cts/scheduler/exp/ticket-rsc-sets-3.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-3.exp rename to cts/scheduler/exp/ticket-rsc-sets-3.exp diff --git a/cts/scheduler/ticket-rsc-sets-4.exp b/cts/scheduler/exp/ticket-rsc-sets-4.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-4.exp rename to cts/scheduler/exp/ticket-rsc-sets-4.exp diff --git a/cts/scheduler/ticket-rsc-sets-5.exp b/cts/scheduler/exp/ticket-rsc-sets-5.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-5.exp rename to cts/scheduler/exp/ticket-rsc-sets-5.exp diff --git a/cts/scheduler/ticket-rsc-sets-6.exp b/cts/scheduler/exp/ticket-rsc-sets-6.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-6.exp rename to cts/scheduler/exp/ticket-rsc-sets-6.exp diff --git a/cts/scheduler/ticket-rsc-sets-7.exp b/cts/scheduler/exp/ticket-rsc-sets-7.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-7.exp rename to cts/scheduler/exp/ticket-rsc-sets-7.exp diff --git a/cts/scheduler/ticket-rsc-sets-8.exp b/cts/scheduler/exp/ticket-rsc-sets-8.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-8.exp rename to cts/scheduler/exp/ticket-rsc-sets-8.exp diff --git a/cts/scheduler/ticket-rsc-sets-9.exp b/cts/scheduler/exp/ticket-rsc-sets-9.exp similarity index 100% rename from cts/scheduler/ticket-rsc-sets-9.exp rename to cts/scheduler/exp/ticket-rsc-sets-9.exp diff --git a/cts/scheduler/unfence-definition.exp b/cts/scheduler/exp/unfence-definition.exp similarity index 100% rename from cts/scheduler/unfence-definition.exp rename to cts/scheduler/exp/unfence-definition.exp diff --git a/cts/scheduler/unfence-device.exp b/cts/scheduler/exp/unfence-device.exp similarity index 100% rename from cts/scheduler/unfence-device.exp rename to cts/scheduler/exp/unfence-device.exp diff --git a/cts/scheduler/unfence-parameters.exp b/cts/scheduler/exp/unfence-parameters.exp similarity index 100% rename from cts/scheduler/unfence-parameters.exp rename to cts/scheduler/exp/unfence-parameters.exp diff --git a/cts/scheduler/unfence-startup.exp b/cts/scheduler/exp/unfence-startup.exp similarity index 100% rename from cts/scheduler/unfence-startup.exp rename to cts/scheduler/exp/unfence-startup.exp diff --git a/cts/scheduler/unmanaged-block-restart.exp b/cts/scheduler/exp/unmanaged-block-restart.exp similarity index 100% rename from cts/scheduler/unmanaged-block-restart.exp rename to cts/scheduler/exp/unmanaged-block-restart.exp diff --git a/cts/scheduler/unmanaged-master.exp b/cts/scheduler/exp/unmanaged-master.exp similarity index 100% rename from cts/scheduler/unmanaged-master.exp rename to cts/scheduler/exp/unmanaged-master.exp diff --git a/cts/scheduler/unmanaged-stop-1.exp b/cts/scheduler/exp/unmanaged-stop-1.exp similarity index 100% rename from cts/scheduler/unmanaged-stop-1.exp rename to cts/scheduler/exp/unmanaged-stop-1.exp diff --git a/cts/scheduler/unmanaged-stop-2.exp b/cts/scheduler/exp/unmanaged-stop-2.exp similarity index 100% rename from cts/scheduler/unmanaged-stop-2.exp rename to cts/scheduler/exp/unmanaged-stop-2.exp diff --git a/cts/scheduler/unmanaged-stop-3.exp b/cts/scheduler/exp/unmanaged-stop-3.exp similarity index 100% rename from cts/scheduler/unmanaged-stop-3.exp rename to cts/scheduler/exp/unmanaged-stop-3.exp diff --git a/cts/scheduler/unmanaged-stop-4.exp b/cts/scheduler/exp/unmanaged-stop-4.exp similarity index 100% rename from cts/scheduler/unmanaged-stop-4.exp rename to cts/scheduler/exp/unmanaged-stop-4.exp diff --git a/cts/scheduler/unrunnable-1.exp b/cts/scheduler/exp/unrunnable-1.exp similarity index 100% rename from cts/scheduler/unrunnable-1.exp rename to cts/scheduler/exp/unrunnable-1.exp diff --git a/cts/scheduler/unrunnable-2.exp b/cts/scheduler/exp/unrunnable-2.exp similarity index 100% rename from cts/scheduler/unrunnable-2.exp rename to cts/scheduler/exp/unrunnable-2.exp diff --git a/cts/scheduler/use-after-free-merge.exp b/cts/scheduler/exp/use-after-free-merge.exp similarity index 100% rename from cts/scheduler/use-after-free-merge.exp rename to cts/scheduler/exp/use-after-free-merge.exp diff --git a/cts/scheduler/utilization-check-allowed-nodes.exp b/cts/scheduler/exp/utilization-check-allowed-nodes.exp similarity index 100% rename from cts/scheduler/utilization-check-allowed-nodes.exp rename to cts/scheduler/exp/utilization-check-allowed-nodes.exp diff --git a/cts/scheduler/utilization-order1.exp b/cts/scheduler/exp/utilization-order1.exp similarity index 100% rename from cts/scheduler/utilization-order1.exp rename to cts/scheduler/exp/utilization-order1.exp diff --git a/cts/scheduler/utilization-order2.exp b/cts/scheduler/exp/utilization-order2.exp similarity index 100% rename from cts/scheduler/utilization-order2.exp rename to cts/scheduler/exp/utilization-order2.exp diff --git a/cts/scheduler/utilization-order3.exp b/cts/scheduler/exp/utilization-order3.exp similarity index 100% rename from cts/scheduler/utilization-order3.exp rename to cts/scheduler/exp/utilization-order3.exp diff --git a/cts/scheduler/utilization-order4.exp b/cts/scheduler/exp/utilization-order4.exp similarity index 100% rename from cts/scheduler/utilization-order4.exp rename to cts/scheduler/exp/utilization-order4.exp diff --git a/cts/scheduler/utilization-shuffle.exp b/cts/scheduler/exp/utilization-shuffle.exp similarity index 100% rename from cts/scheduler/utilization-shuffle.exp rename to cts/scheduler/exp/utilization-shuffle.exp diff --git a/cts/scheduler/utilization.exp b/cts/scheduler/exp/utilization.exp similarity index 100% rename from cts/scheduler/utilization.exp rename to cts/scheduler/exp/utilization.exp diff --git a/cts/scheduler/value-source.exp b/cts/scheduler/exp/value-source.exp similarity index 100% rename from cts/scheduler/value-source.exp rename to cts/scheduler/exp/value-source.exp diff --git a/cts/scheduler/versioned-operations-1.exp b/cts/scheduler/exp/versioned-operations-1.exp similarity index 100% rename from cts/scheduler/versioned-operations-1.exp rename to cts/scheduler/exp/versioned-operations-1.exp diff --git a/cts/scheduler/versioned-operations-2.exp b/cts/scheduler/exp/versioned-operations-2.exp similarity index 100% rename from cts/scheduler/versioned-operations-2.exp rename to cts/scheduler/exp/versioned-operations-2.exp diff --git a/cts/scheduler/versioned-operations-3.exp b/cts/scheduler/exp/versioned-operations-3.exp similarity index 100% rename from cts/scheduler/versioned-operations-3.exp rename to cts/scheduler/exp/versioned-operations-3.exp diff --git a/cts/scheduler/versioned-operations-4.exp b/cts/scheduler/exp/versioned-operations-4.exp similarity index 100% rename from cts/scheduler/versioned-operations-4.exp rename to cts/scheduler/exp/versioned-operations-4.exp diff --git a/cts/scheduler/versioned-resources.exp b/cts/scheduler/exp/versioned-resources.exp similarity index 100% rename from cts/scheduler/versioned-resources.exp rename to cts/scheduler/exp/versioned-resources.exp diff --git a/cts/scheduler/whitebox-asymmetric.exp b/cts/scheduler/exp/whitebox-asymmetric.exp similarity index 100% rename from cts/scheduler/whitebox-asymmetric.exp rename to cts/scheduler/exp/whitebox-asymmetric.exp diff --git a/cts/scheduler/whitebox-fail1.exp b/cts/scheduler/exp/whitebox-fail1.exp similarity index 100% rename from cts/scheduler/whitebox-fail1.exp rename to cts/scheduler/exp/whitebox-fail1.exp diff --git a/cts/scheduler/whitebox-fail2.exp b/cts/scheduler/exp/whitebox-fail2.exp similarity index 100% rename from cts/scheduler/whitebox-fail2.exp rename to cts/scheduler/exp/whitebox-fail2.exp diff --git a/cts/scheduler/whitebox-fail3.exp b/cts/scheduler/exp/whitebox-fail3.exp similarity index 100% rename from cts/scheduler/whitebox-fail3.exp rename to cts/scheduler/exp/whitebox-fail3.exp diff --git a/cts/scheduler/whitebox-imply-stop-on-fence.exp b/cts/scheduler/exp/whitebox-imply-stop-on-fence.exp similarity index 100% rename from cts/scheduler/whitebox-imply-stop-on-fence.exp rename to cts/scheduler/exp/whitebox-imply-stop-on-fence.exp diff --git a/cts/scheduler/whitebox-migrate1.exp b/cts/scheduler/exp/whitebox-migrate1.exp similarity index 100% rename from cts/scheduler/whitebox-migrate1.exp rename to cts/scheduler/exp/whitebox-migrate1.exp diff --git a/cts/scheduler/whitebox-move.exp b/cts/scheduler/exp/whitebox-move.exp similarity index 100% rename from cts/scheduler/whitebox-move.exp rename to cts/scheduler/exp/whitebox-move.exp diff --git a/cts/scheduler/whitebox-ms-ordering-move.exp b/cts/scheduler/exp/whitebox-ms-ordering-move.exp similarity index 100% rename from cts/scheduler/whitebox-ms-ordering-move.exp rename to cts/scheduler/exp/whitebox-ms-ordering-move.exp diff --git a/cts/scheduler/whitebox-ms-ordering.exp b/cts/scheduler/exp/whitebox-ms-ordering.exp similarity index 100% rename from cts/scheduler/whitebox-ms-ordering.exp rename to cts/scheduler/exp/whitebox-ms-ordering.exp diff --git a/cts/scheduler/whitebox-nested-group.exp b/cts/scheduler/exp/whitebox-nested-group.exp similarity index 100% rename from cts/scheduler/whitebox-nested-group.exp rename to cts/scheduler/exp/whitebox-nested-group.exp diff --git a/cts/scheduler/whitebox-orphan-ms.exp b/cts/scheduler/exp/whitebox-orphan-ms.exp similarity index 100% rename from cts/scheduler/whitebox-orphan-ms.exp rename to cts/scheduler/exp/whitebox-orphan-ms.exp diff --git a/cts/scheduler/whitebox-orphaned.exp b/cts/scheduler/exp/whitebox-orphaned.exp similarity index 100% rename from cts/scheduler/whitebox-orphaned.exp rename to cts/scheduler/exp/whitebox-orphaned.exp diff --git a/cts/scheduler/whitebox-start.exp b/cts/scheduler/exp/whitebox-start.exp similarity index 100% rename from cts/scheduler/whitebox-start.exp rename to cts/scheduler/exp/whitebox-start.exp diff --git a/cts/scheduler/whitebox-stop.exp b/cts/scheduler/exp/whitebox-stop.exp similarity index 100% rename from cts/scheduler/whitebox-stop.exp rename to cts/scheduler/exp/whitebox-stop.exp diff --git a/cts/scheduler/whitebox-unexpectedly-running.exp b/cts/scheduler/exp/whitebox-unexpectedly-running.exp similarity index 100% rename from cts/scheduler/whitebox-unexpectedly-running.exp rename to cts/scheduler/exp/whitebox-unexpectedly-running.exp diff --git a/cts/scheduler/year-2038.exp b/cts/scheduler/exp/year-2038.exp similarity index 100% rename from cts/scheduler/year-2038.exp rename to cts/scheduler/exp/year-2038.exp diff --git a/cts/scheduler/1-a-then-bm-move-b.scores b/cts/scheduler/scores/1-a-then-bm-move-b.scores similarity index 100% rename from cts/scheduler/1-a-then-bm-move-b.scores rename to cts/scheduler/scores/1-a-then-bm-move-b.scores diff --git a/cts/scheduler/10-a-then-bm-b-move-a-clone.scores b/cts/scheduler/scores/10-a-then-bm-b-move-a-clone.scores similarity index 100% rename from cts/scheduler/10-a-then-bm-b-move-a-clone.scores rename to cts/scheduler/scores/10-a-then-bm-b-move-a-clone.scores diff --git a/cts/scheduler/11-a-then-bm-b-move-a-clone-starting.scores b/cts/scheduler/scores/11-a-then-bm-b-move-a-clone-starting.scores similarity index 100% rename from cts/scheduler/11-a-then-bm-b-move-a-clone-starting.scores rename to cts/scheduler/scores/11-a-then-bm-b-move-a-clone-starting.scores diff --git a/cts/scheduler/1360.scores b/cts/scheduler/scores/1360.scores similarity index 100% rename from cts/scheduler/1360.scores rename to cts/scheduler/scores/1360.scores diff --git a/cts/scheduler/1484.scores b/cts/scheduler/scores/1484.scores similarity index 100% rename from cts/scheduler/1484.scores rename to cts/scheduler/scores/1484.scores diff --git a/cts/scheduler/1494.scores b/cts/scheduler/scores/1494.scores similarity index 100% rename from cts/scheduler/1494.scores rename to cts/scheduler/scores/1494.scores diff --git a/cts/scheduler/2-am-then-b-move-a.scores b/cts/scheduler/scores/2-am-then-b-move-a.scores similarity index 100% rename from cts/scheduler/2-am-then-b-move-a.scores rename to cts/scheduler/scores/2-am-then-b-move-a.scores diff --git a/cts/scheduler/3-am-then-bm-both-migrate.scores b/cts/scheduler/scores/3-am-then-bm-both-migrate.scores similarity index 100% rename from cts/scheduler/3-am-then-bm-both-migrate.scores rename to cts/scheduler/scores/3-am-then-bm-both-migrate.scores diff --git a/cts/scheduler/4-am-then-bm-b-not-migratable.scores b/cts/scheduler/scores/4-am-then-bm-b-not-migratable.scores similarity index 100% rename from cts/scheduler/4-am-then-bm-b-not-migratable.scores rename to cts/scheduler/scores/4-am-then-bm-b-not-migratable.scores diff --git a/cts/scheduler/5-am-then-bm-a-not-migratable.scores b/cts/scheduler/scores/5-am-then-bm-a-not-migratable.scores similarity index 100% rename from cts/scheduler/5-am-then-bm-a-not-migratable.scores rename to cts/scheduler/scores/5-am-then-bm-a-not-migratable.scores diff --git a/cts/scheduler/594.scores b/cts/scheduler/scores/594.scores similarity index 100% rename from cts/scheduler/594.scores rename to cts/scheduler/scores/594.scores diff --git a/cts/scheduler/6-migrate-group.scores b/cts/scheduler/scores/6-migrate-group.scores similarity index 100% rename from cts/scheduler/6-migrate-group.scores rename to cts/scheduler/scores/6-migrate-group.scores diff --git a/cts/scheduler/662.scores b/cts/scheduler/scores/662.scores similarity index 100% rename from cts/scheduler/662.scores rename to cts/scheduler/scores/662.scores diff --git a/cts/scheduler/696.scores b/cts/scheduler/scores/696.scores similarity index 100% rename from cts/scheduler/696.scores rename to cts/scheduler/scores/696.scores diff --git a/cts/scheduler/7-migrate-group-one-unmigratable.scores b/cts/scheduler/scores/7-migrate-group-one-unmigratable.scores similarity index 100% rename from cts/scheduler/7-migrate-group-one-unmigratable.scores rename to cts/scheduler/scores/7-migrate-group-one-unmigratable.scores diff --git a/cts/scheduler/726.scores b/cts/scheduler/scores/726.scores similarity index 100% rename from cts/scheduler/726.scores rename to cts/scheduler/scores/726.scores diff --git a/cts/scheduler/735.scores b/cts/scheduler/scores/735.scores similarity index 100% rename from cts/scheduler/735.scores rename to cts/scheduler/scores/735.scores diff --git a/cts/scheduler/764.scores b/cts/scheduler/scores/764.scores similarity index 100% rename from cts/scheduler/764.scores rename to cts/scheduler/scores/764.scores diff --git a/cts/scheduler/797.scores b/cts/scheduler/scores/797.scores similarity index 100% rename from cts/scheduler/797.scores rename to cts/scheduler/scores/797.scores diff --git a/cts/scheduler/8-am-then-bm-a-migrating-b-stopping.scores b/cts/scheduler/scores/8-am-then-bm-a-migrating-b-stopping.scores similarity index 100% rename from cts/scheduler/8-am-then-bm-a-migrating-b-stopping.scores rename to cts/scheduler/scores/8-am-then-bm-a-migrating-b-stopping.scores diff --git a/cts/scheduler/829.scores b/cts/scheduler/scores/829.scores similarity index 100% rename from cts/scheduler/829.scores rename to cts/scheduler/scores/829.scores diff --git a/cts/scheduler/9-am-then-bm-b-migrating-a-stopping.scores b/cts/scheduler/scores/9-am-then-bm-b-migrating-a-stopping.scores similarity index 100% rename from cts/scheduler/9-am-then-bm-b-migrating-a-stopping.scores rename to cts/scheduler/scores/9-am-then-bm-b-migrating-a-stopping.scores diff --git a/cts/scheduler/994-2.scores b/cts/scheduler/scores/994-2.scores similarity index 100% rename from cts/scheduler/994-2.scores rename to cts/scheduler/scores/994-2.scores diff --git a/cts/scheduler/994.scores b/cts/scheduler/scores/994.scores similarity index 100% rename from cts/scheduler/994.scores rename to cts/scheduler/scores/994.scores diff --git a/cts/scheduler/scores/Makefile.am b/cts/scheduler/scores/Makefile.am new file mode 100644 index 0000000000..ab40629806 --- /dev/null +++ b/cts/scheduler/scores/Makefile.am @@ -0,0 +1,12 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +scoresdir = $(datadir)/$(PACKAGE)/tests/scheduler/scores +dist_scores_DATA = $(wildcard *.scores) diff --git a/cts/scheduler/a-demote-then-b-migrate.scores b/cts/scheduler/scores/a-demote-then-b-migrate.scores similarity index 100% rename from cts/scheduler/a-demote-then-b-migrate.scores rename to cts/scheduler/scores/a-demote-then-b-migrate.scores diff --git a/cts/scheduler/a-promote-then-b-migrate.scores b/cts/scheduler/scores/a-promote-then-b-migrate.scores similarity index 100% rename from cts/scheduler/a-promote-then-b-migrate.scores rename to cts/scheduler/scores/a-promote-then-b-migrate.scores diff --git a/cts/scheduler/anon-instance-pending.scores b/cts/scheduler/scores/anon-instance-pending.scores similarity index 100% rename from cts/scheduler/anon-instance-pending.scores rename to cts/scheduler/scores/anon-instance-pending.scores diff --git a/cts/scheduler/anti-colocation-master.scores b/cts/scheduler/scores/anti-colocation-master.scores similarity index 100% rename from cts/scheduler/anti-colocation-master.scores rename to cts/scheduler/scores/anti-colocation-master.scores diff --git a/cts/scheduler/anti-colocation-order.scores b/cts/scheduler/scores/anti-colocation-order.scores similarity index 100% rename from cts/scheduler/anti-colocation-order.scores rename to cts/scheduler/scores/anti-colocation-order.scores diff --git a/cts/scheduler/anti-colocation-slave.scores b/cts/scheduler/scores/anti-colocation-slave.scores similarity index 100% rename from cts/scheduler/anti-colocation-slave.scores rename to cts/scheduler/scores/anti-colocation-slave.scores diff --git a/cts/scheduler/asymmetric.scores b/cts/scheduler/scores/asymmetric.scores similarity index 100% rename from cts/scheduler/asymmetric.scores rename to cts/scheduler/scores/asymmetric.scores diff --git a/cts/scheduler/asymmetrical-order-move.scores b/cts/scheduler/scores/asymmetrical-order-move.scores similarity index 100% rename from cts/scheduler/asymmetrical-order-move.scores rename to cts/scheduler/scores/asymmetrical-order-move.scores diff --git a/cts/scheduler/asymmetrical-order-restart.scores b/cts/scheduler/scores/asymmetrical-order-restart.scores similarity index 100% rename from cts/scheduler/asymmetrical-order-restart.scores rename to cts/scheduler/scores/asymmetrical-order-restart.scores diff --git a/cts/scheduler/attrs1.scores b/cts/scheduler/scores/attrs1.scores similarity index 100% rename from cts/scheduler/attrs1.scores rename to cts/scheduler/scores/attrs1.scores diff --git a/cts/scheduler/attrs2.scores b/cts/scheduler/scores/attrs2.scores similarity index 100% rename from cts/scheduler/attrs2.scores rename to cts/scheduler/scores/attrs2.scores diff --git a/cts/scheduler/attrs3.scores b/cts/scheduler/scores/attrs3.scores similarity index 100% rename from cts/scheduler/attrs3.scores rename to cts/scheduler/scores/attrs3.scores diff --git a/cts/scheduler/attrs4.scores b/cts/scheduler/scores/attrs4.scores similarity index 100% rename from cts/scheduler/attrs4.scores rename to cts/scheduler/scores/attrs4.scores diff --git a/cts/scheduler/attrs5.scores b/cts/scheduler/scores/attrs5.scores similarity index 100% rename from cts/scheduler/attrs5.scores rename to cts/scheduler/scores/attrs5.scores diff --git a/cts/scheduler/attrs6.scores b/cts/scheduler/scores/attrs6.scores similarity index 100% rename from cts/scheduler/attrs6.scores rename to cts/scheduler/scores/attrs6.scores diff --git a/cts/scheduler/attrs7.scores b/cts/scheduler/scores/attrs7.scores similarity index 100% rename from cts/scheduler/attrs7.scores rename to cts/scheduler/scores/attrs7.scores diff --git a/cts/scheduler/attrs8.scores b/cts/scheduler/scores/attrs8.scores similarity index 100% rename from cts/scheduler/attrs8.scores rename to cts/scheduler/scores/attrs8.scores diff --git a/cts/scheduler/balanced.scores b/cts/scheduler/scores/balanced.scores similarity index 100% rename from cts/scheduler/balanced.scores rename to cts/scheduler/scores/balanced.scores diff --git a/cts/scheduler/base-score.scores b/cts/scheduler/scores/base-score.scores similarity index 100% rename from cts/scheduler/base-score.scores rename to cts/scheduler/scores/base-score.scores diff --git a/cts/scheduler/bnc-515172.scores b/cts/scheduler/scores/bnc-515172.scores similarity index 100% rename from cts/scheduler/bnc-515172.scores rename to cts/scheduler/scores/bnc-515172.scores diff --git a/cts/scheduler/bug-1572-1.scores b/cts/scheduler/scores/bug-1572-1.scores similarity index 100% rename from cts/scheduler/bug-1572-1.scores rename to cts/scheduler/scores/bug-1572-1.scores diff --git a/cts/scheduler/bug-1572-2.scores b/cts/scheduler/scores/bug-1572-2.scores similarity index 100% rename from cts/scheduler/bug-1572-2.scores rename to cts/scheduler/scores/bug-1572-2.scores diff --git a/cts/scheduler/bug-1573.scores b/cts/scheduler/scores/bug-1573.scores similarity index 100% rename from cts/scheduler/bug-1573.scores rename to cts/scheduler/scores/bug-1573.scores diff --git a/cts/scheduler/bug-1685.scores b/cts/scheduler/scores/bug-1685.scores similarity index 100% rename from cts/scheduler/bug-1685.scores rename to cts/scheduler/scores/bug-1685.scores diff --git a/cts/scheduler/bug-1718.scores b/cts/scheduler/scores/bug-1718.scores similarity index 100% rename from cts/scheduler/bug-1718.scores rename to cts/scheduler/scores/bug-1718.scores diff --git a/cts/scheduler/bug-1765.scores b/cts/scheduler/scores/bug-1765.scores similarity index 100% rename from cts/scheduler/bug-1765.scores rename to cts/scheduler/scores/bug-1765.scores diff --git a/cts/scheduler/bug-1820-1.scores b/cts/scheduler/scores/bug-1820-1.scores similarity index 100% rename from cts/scheduler/bug-1820-1.scores rename to cts/scheduler/scores/bug-1820-1.scores diff --git a/cts/scheduler/bug-1820.scores b/cts/scheduler/scores/bug-1820.scores similarity index 100% rename from cts/scheduler/bug-1820.scores rename to cts/scheduler/scores/bug-1820.scores diff --git a/cts/scheduler/bug-1822.scores b/cts/scheduler/scores/bug-1822.scores similarity index 100% rename from cts/scheduler/bug-1822.scores rename to cts/scheduler/scores/bug-1822.scores diff --git a/cts/scheduler/bug-5007-masterslave_colocation.scores b/cts/scheduler/scores/bug-5007-masterslave_colocation.scores similarity index 100% rename from cts/scheduler/bug-5007-masterslave_colocation.scores rename to cts/scheduler/scores/bug-5007-masterslave_colocation.scores diff --git a/cts/scheduler/bug-5014-A-start-B-start.scores b/cts/scheduler/scores/bug-5014-A-start-B-start.scores similarity index 100% rename from cts/scheduler/bug-5014-A-start-B-start.scores rename to cts/scheduler/scores/bug-5014-A-start-B-start.scores diff --git a/cts/scheduler/bug-5014-A-stop-B-started.scores b/cts/scheduler/scores/bug-5014-A-stop-B-started.scores similarity index 100% rename from cts/scheduler/bug-5014-A-stop-B-started.scores rename to cts/scheduler/scores/bug-5014-A-stop-B-started.scores diff --git a/cts/scheduler/bug-5014-A-stopped-B-stopped.scores b/cts/scheduler/scores/bug-5014-A-stopped-B-stopped.scores similarity index 100% rename from cts/scheduler/bug-5014-A-stopped-B-stopped.scores rename to cts/scheduler/scores/bug-5014-A-stopped-B-stopped.scores diff --git a/cts/scheduler/bug-5014-CLONE-A-start-B-start.scores b/cts/scheduler/scores/bug-5014-CLONE-A-start-B-start.scores similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-start-B-start.scores rename to cts/scheduler/scores/bug-5014-CLONE-A-start-B-start.scores diff --git a/cts/scheduler/bug-5014-CLONE-A-stop-B-started.scores b/cts/scheduler/scores/bug-5014-CLONE-A-stop-B-started.scores similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-stop-B-started.scores rename to cts/scheduler/scores/bug-5014-CLONE-A-stop-B-started.scores diff --git a/cts/scheduler/bug-5014-CthenAthenB-C-stopped.scores b/cts/scheduler/scores/bug-5014-CthenAthenB-C-stopped.scores similarity index 100% rename from cts/scheduler/bug-5014-CthenAthenB-C-stopped.scores rename to cts/scheduler/scores/bug-5014-CthenAthenB-C-stopped.scores diff --git a/cts/scheduler/bug-5014-GROUP-A-start-B-start.scores b/cts/scheduler/scores/bug-5014-GROUP-A-start-B-start.scores similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-start-B-start.scores rename to cts/scheduler/scores/bug-5014-GROUP-A-start-B-start.scores diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-started.scores b/cts/scheduler/scores/bug-5014-GROUP-A-stopped-B-started.scores similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-started.scores rename to cts/scheduler/scores/bug-5014-GROUP-A-stopped-B-started.scores diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.scores b/cts/scheduler/scores/bug-5014-GROUP-A-stopped-B-stopped.scores similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.scores rename to cts/scheduler/scores/bug-5014-GROUP-A-stopped-B-stopped.scores diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-false.scores b/cts/scheduler/scores/bug-5014-ordered-set-symmetrical-false.scores similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-false.scores rename to cts/scheduler/scores/bug-5014-ordered-set-symmetrical-false.scores diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-true.scores b/cts/scheduler/scores/bug-5014-ordered-set-symmetrical-true.scores similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-true.scores rename to cts/scheduler/scores/bug-5014-ordered-set-symmetrical-true.scores diff --git a/cts/scheduler/bug-5025-1.scores b/cts/scheduler/scores/bug-5025-1.scores similarity index 100% rename from cts/scheduler/bug-5025-1.scores rename to cts/scheduler/scores/bug-5025-1.scores diff --git a/cts/scheduler/bug-5025-2.scores b/cts/scheduler/scores/bug-5025-2.scores similarity index 100% rename from cts/scheduler/bug-5025-2.scores rename to cts/scheduler/scores/bug-5025-2.scores diff --git a/cts/scheduler/bug-5025-3.scores b/cts/scheduler/scores/bug-5025-3.scores similarity index 100% rename from cts/scheduler/bug-5025-3.scores rename to cts/scheduler/scores/bug-5025-3.scores diff --git a/cts/scheduler/bug-5025-4.scores b/cts/scheduler/scores/bug-5025-4.scores similarity index 100% rename from cts/scheduler/bug-5025-4.scores rename to cts/scheduler/scores/bug-5025-4.scores diff --git a/cts/scheduler/bug-5028-bottom.scores b/cts/scheduler/scores/bug-5028-bottom.scores similarity index 100% rename from cts/scheduler/bug-5028-bottom.scores rename to cts/scheduler/scores/bug-5028-bottom.scores diff --git a/cts/scheduler/bug-5028-detach.scores b/cts/scheduler/scores/bug-5028-detach.scores similarity index 100% rename from cts/scheduler/bug-5028-detach.scores rename to cts/scheduler/scores/bug-5028-detach.scores diff --git a/cts/scheduler/bug-5028.scores b/cts/scheduler/scores/bug-5028.scores similarity index 100% rename from cts/scheduler/bug-5028.scores rename to cts/scheduler/scores/bug-5028.scores diff --git a/cts/scheduler/bug-5038.scores b/cts/scheduler/scores/bug-5038.scores similarity index 100% rename from cts/scheduler/bug-5038.scores rename to cts/scheduler/scores/bug-5038.scores diff --git a/cts/scheduler/bug-5059.scores b/cts/scheduler/scores/bug-5059.scores similarity index 100% rename from cts/scheduler/bug-5059.scores rename to cts/scheduler/scores/bug-5059.scores diff --git a/cts/scheduler/bug-5069-op-disabled.scores b/cts/scheduler/scores/bug-5069-op-disabled.scores similarity index 100% rename from cts/scheduler/bug-5069-op-disabled.scores rename to cts/scheduler/scores/bug-5069-op-disabled.scores diff --git a/cts/scheduler/bug-5069-op-enabled.scores b/cts/scheduler/scores/bug-5069-op-enabled.scores similarity index 100% rename from cts/scheduler/bug-5069-op-enabled.scores rename to cts/scheduler/scores/bug-5069-op-enabled.scores diff --git a/cts/scheduler/bug-5140-require-all-false.scores b/cts/scheduler/scores/bug-5140-require-all-false.scores similarity index 100% rename from cts/scheduler/bug-5140-require-all-false.scores rename to cts/scheduler/scores/bug-5140-require-all-false.scores diff --git a/cts/scheduler/bug-5143-ms-shuffle.scores b/cts/scheduler/scores/bug-5143-ms-shuffle.scores similarity index 100% rename from cts/scheduler/bug-5143-ms-shuffle.scores rename to cts/scheduler/scores/bug-5143-ms-shuffle.scores diff --git a/cts/scheduler/bug-5186-partial-migrate.scores b/cts/scheduler/scores/bug-5186-partial-migrate.scores similarity index 100% rename from cts/scheduler/bug-5186-partial-migrate.scores rename to cts/scheduler/scores/bug-5186-partial-migrate.scores diff --git a/cts/scheduler/bug-cl-5168.scores b/cts/scheduler/scores/bug-cl-5168.scores similarity index 100% rename from cts/scheduler/bug-cl-5168.scores rename to cts/scheduler/scores/bug-cl-5168.scores diff --git a/cts/scheduler/bug-cl-5170.scores b/cts/scheduler/scores/bug-cl-5170.scores similarity index 100% rename from cts/scheduler/bug-cl-5170.scores rename to cts/scheduler/scores/bug-cl-5170.scores diff --git a/cts/scheduler/bug-cl-5212.scores b/cts/scheduler/scores/bug-cl-5212.scores similarity index 100% rename from cts/scheduler/bug-cl-5212.scores rename to cts/scheduler/scores/bug-cl-5212.scores diff --git a/cts/scheduler/bug-cl-5213.scores b/cts/scheduler/scores/bug-cl-5213.scores similarity index 100% rename from cts/scheduler/bug-cl-5213.scores rename to cts/scheduler/scores/bug-cl-5213.scores diff --git a/cts/scheduler/bug-cl-5219.scores b/cts/scheduler/scores/bug-cl-5219.scores similarity index 100% rename from cts/scheduler/bug-cl-5219.scores rename to cts/scheduler/scores/bug-cl-5219.scores diff --git a/cts/scheduler/bug-cl-5247.scores b/cts/scheduler/scores/bug-cl-5247.scores similarity index 100% rename from cts/scheduler/bug-cl-5247.scores rename to cts/scheduler/scores/bug-cl-5247.scores diff --git a/cts/scheduler/bug-lf-1852.scores b/cts/scheduler/scores/bug-lf-1852.scores similarity index 100% rename from cts/scheduler/bug-lf-1852.scores rename to cts/scheduler/scores/bug-lf-1852.scores diff --git a/cts/scheduler/bug-lf-1920.scores b/cts/scheduler/scores/bug-lf-1920.scores similarity index 100% rename from cts/scheduler/bug-lf-1920.scores rename to cts/scheduler/scores/bug-lf-1920.scores diff --git a/cts/scheduler/bug-lf-2106.scores b/cts/scheduler/scores/bug-lf-2106.scores similarity index 100% rename from cts/scheduler/bug-lf-2106.scores rename to cts/scheduler/scores/bug-lf-2106.scores diff --git a/cts/scheduler/bug-lf-2153.scores b/cts/scheduler/scores/bug-lf-2153.scores similarity index 100% rename from cts/scheduler/bug-lf-2153.scores rename to cts/scheduler/scores/bug-lf-2153.scores diff --git a/cts/scheduler/bug-lf-2160.scores b/cts/scheduler/scores/bug-lf-2160.scores similarity index 100% rename from cts/scheduler/bug-lf-2160.scores rename to cts/scheduler/scores/bug-lf-2160.scores diff --git a/cts/scheduler/bug-lf-2171.scores b/cts/scheduler/scores/bug-lf-2171.scores similarity index 100% rename from cts/scheduler/bug-lf-2171.scores rename to cts/scheduler/scores/bug-lf-2171.scores diff --git a/cts/scheduler/bug-lf-2213.scores b/cts/scheduler/scores/bug-lf-2213.scores similarity index 100% rename from cts/scheduler/bug-lf-2213.scores rename to cts/scheduler/scores/bug-lf-2213.scores diff --git a/cts/scheduler/bug-lf-2317.scores b/cts/scheduler/scores/bug-lf-2317.scores similarity index 100% rename from cts/scheduler/bug-lf-2317.scores rename to cts/scheduler/scores/bug-lf-2317.scores diff --git a/cts/scheduler/bug-lf-2358.scores b/cts/scheduler/scores/bug-lf-2358.scores similarity index 100% rename from cts/scheduler/bug-lf-2358.scores rename to cts/scheduler/scores/bug-lf-2358.scores diff --git a/cts/scheduler/bug-lf-2361.scores b/cts/scheduler/scores/bug-lf-2361.scores similarity index 100% rename from cts/scheduler/bug-lf-2361.scores rename to cts/scheduler/scores/bug-lf-2361.scores diff --git a/cts/scheduler/bug-lf-2422.scores b/cts/scheduler/scores/bug-lf-2422.scores similarity index 100% rename from cts/scheduler/bug-lf-2422.scores rename to cts/scheduler/scores/bug-lf-2422.scores diff --git a/cts/scheduler/bug-lf-2435.scores b/cts/scheduler/scores/bug-lf-2435.scores similarity index 100% rename from cts/scheduler/bug-lf-2435.scores rename to cts/scheduler/scores/bug-lf-2435.scores diff --git a/cts/scheduler/bug-lf-2445.scores b/cts/scheduler/scores/bug-lf-2445.scores similarity index 100% rename from cts/scheduler/bug-lf-2445.scores rename to cts/scheduler/scores/bug-lf-2445.scores diff --git a/cts/scheduler/bug-lf-2453.scores b/cts/scheduler/scores/bug-lf-2453.scores similarity index 100% rename from cts/scheduler/bug-lf-2453.scores rename to cts/scheduler/scores/bug-lf-2453.scores diff --git a/cts/scheduler/bug-lf-2474.scores b/cts/scheduler/scores/bug-lf-2474.scores similarity index 100% rename from cts/scheduler/bug-lf-2474.scores rename to cts/scheduler/scores/bug-lf-2474.scores diff --git a/cts/scheduler/bug-lf-2493.scores b/cts/scheduler/scores/bug-lf-2493.scores similarity index 100% rename from cts/scheduler/bug-lf-2493.scores rename to cts/scheduler/scores/bug-lf-2493.scores diff --git a/cts/scheduler/bug-lf-2508.scores b/cts/scheduler/scores/bug-lf-2508.scores similarity index 100% rename from cts/scheduler/bug-lf-2508.scores rename to cts/scheduler/scores/bug-lf-2508.scores diff --git a/cts/scheduler/bug-lf-2544.scores b/cts/scheduler/scores/bug-lf-2544.scores similarity index 100% rename from cts/scheduler/bug-lf-2544.scores rename to cts/scheduler/scores/bug-lf-2544.scores diff --git a/cts/scheduler/bug-lf-2551.scores b/cts/scheduler/scores/bug-lf-2551.scores similarity index 100% rename from cts/scheduler/bug-lf-2551.scores rename to cts/scheduler/scores/bug-lf-2551.scores diff --git a/cts/scheduler/bug-lf-2574.scores b/cts/scheduler/scores/bug-lf-2574.scores similarity index 100% rename from cts/scheduler/bug-lf-2574.scores rename to cts/scheduler/scores/bug-lf-2574.scores diff --git a/cts/scheduler/bug-lf-2581.scores b/cts/scheduler/scores/bug-lf-2581.scores similarity index 100% rename from cts/scheduler/bug-lf-2581.scores rename to cts/scheduler/scores/bug-lf-2581.scores diff --git a/cts/scheduler/bug-lf-2606.scores b/cts/scheduler/scores/bug-lf-2606.scores similarity index 100% rename from cts/scheduler/bug-lf-2606.scores rename to cts/scheduler/scores/bug-lf-2606.scores diff --git a/cts/scheduler/bug-lf-2613.scores b/cts/scheduler/scores/bug-lf-2613.scores similarity index 100% rename from cts/scheduler/bug-lf-2613.scores rename to cts/scheduler/scores/bug-lf-2613.scores diff --git a/cts/scheduler/bug-lf-2619.scores b/cts/scheduler/scores/bug-lf-2619.scores similarity index 100% rename from cts/scheduler/bug-lf-2619.scores rename to cts/scheduler/scores/bug-lf-2619.scores diff --git a/cts/scheduler/bug-n-385265-2.scores b/cts/scheduler/scores/bug-n-385265-2.scores similarity index 100% rename from cts/scheduler/bug-n-385265-2.scores rename to cts/scheduler/scores/bug-n-385265-2.scores diff --git a/cts/scheduler/bug-n-385265.scores b/cts/scheduler/scores/bug-n-385265.scores similarity index 100% rename from cts/scheduler/bug-n-385265.scores rename to cts/scheduler/scores/bug-n-385265.scores diff --git a/cts/scheduler/bug-n-387749.scores b/cts/scheduler/scores/bug-n-387749.scores similarity index 100% rename from cts/scheduler/bug-n-387749.scores rename to cts/scheduler/scores/bug-n-387749.scores diff --git a/cts/scheduler/bug-pm-11.scores b/cts/scheduler/scores/bug-pm-11.scores similarity index 100% rename from cts/scheduler/bug-pm-11.scores rename to cts/scheduler/scores/bug-pm-11.scores diff --git a/cts/scheduler/bug-pm-12.scores b/cts/scheduler/scores/bug-pm-12.scores similarity index 100% rename from cts/scheduler/bug-pm-12.scores rename to cts/scheduler/scores/bug-pm-12.scores diff --git a/cts/scheduler/bug-rh-1097457.scores b/cts/scheduler/scores/bug-rh-1097457.scores similarity index 100% rename from cts/scheduler/bug-rh-1097457.scores rename to cts/scheduler/scores/bug-rh-1097457.scores diff --git a/cts/scheduler/bug-rh-880249.scores b/cts/scheduler/scores/bug-rh-880249.scores similarity index 100% rename from cts/scheduler/bug-rh-880249.scores rename to cts/scheduler/scores/bug-rh-880249.scores diff --git a/cts/scheduler/bug-suse-707150.scores b/cts/scheduler/scores/bug-suse-707150.scores similarity index 100% rename from cts/scheduler/bug-suse-707150.scores rename to cts/scheduler/scores/bug-suse-707150.scores diff --git a/cts/scheduler/bundle-nested-colocation.scores b/cts/scheduler/scores/bundle-nested-colocation.scores similarity index 100% rename from cts/scheduler/bundle-nested-colocation.scores rename to cts/scheduler/scores/bundle-nested-colocation.scores diff --git a/cts/scheduler/bundle-order-fencing.scores b/cts/scheduler/scores/bundle-order-fencing.scores similarity index 100% rename from cts/scheduler/bundle-order-fencing.scores rename to cts/scheduler/scores/bundle-order-fencing.scores diff --git a/cts/scheduler/bundle-order-partial-start-2.scores b/cts/scheduler/scores/bundle-order-partial-start-2.scores similarity index 100% rename from cts/scheduler/bundle-order-partial-start-2.scores rename to cts/scheduler/scores/bundle-order-partial-start-2.scores diff --git a/cts/scheduler/bundle-order-partial-start.scores b/cts/scheduler/scores/bundle-order-partial-start.scores similarity index 100% rename from cts/scheduler/bundle-order-partial-start.scores rename to cts/scheduler/scores/bundle-order-partial-start.scores diff --git a/cts/scheduler/bundle-order-partial-stop.scores b/cts/scheduler/scores/bundle-order-partial-stop.scores similarity index 100% rename from cts/scheduler/bundle-order-partial-stop.scores rename to cts/scheduler/scores/bundle-order-partial-stop.scores diff --git a/cts/scheduler/bundle-order-partial.scores b/cts/scheduler/scores/bundle-order-partial.scores similarity index 100% rename from cts/scheduler/bundle-order-partial.scores rename to cts/scheduler/scores/bundle-order-partial.scores diff --git a/cts/scheduler/bundle-order-startup-clone-2.scores b/cts/scheduler/scores/bundle-order-startup-clone-2.scores similarity index 100% rename from cts/scheduler/bundle-order-startup-clone-2.scores rename to cts/scheduler/scores/bundle-order-startup-clone-2.scores diff --git a/cts/scheduler/bundle-order-startup-clone.scores b/cts/scheduler/scores/bundle-order-startup-clone.scores similarity index 100% rename from cts/scheduler/bundle-order-startup-clone.scores rename to cts/scheduler/scores/bundle-order-startup-clone.scores diff --git a/cts/scheduler/bundle-order-startup.scores b/cts/scheduler/scores/bundle-order-startup.scores similarity index 100% rename from cts/scheduler/bundle-order-startup.scores rename to cts/scheduler/scores/bundle-order-startup.scores diff --git a/cts/scheduler/bundle-order-stop-clone.scores b/cts/scheduler/scores/bundle-order-stop-clone.scores similarity index 100% rename from cts/scheduler/bundle-order-stop-clone.scores rename to cts/scheduler/scores/bundle-order-stop-clone.scores diff --git a/cts/scheduler/bundle-order-stop-on-remote.scores b/cts/scheduler/scores/bundle-order-stop-on-remote.scores similarity index 100% rename from cts/scheduler/bundle-order-stop-on-remote.scores rename to cts/scheduler/scores/bundle-order-stop-on-remote.scores diff --git a/cts/scheduler/bundle-order-stop.scores b/cts/scheduler/scores/bundle-order-stop.scores similarity index 100% rename from cts/scheduler/bundle-order-stop.scores rename to cts/scheduler/scores/bundle-order-stop.scores diff --git a/cts/scheduler/bundle-probe-order-1.scores b/cts/scheduler/scores/bundle-probe-order-1.scores similarity index 100% rename from cts/scheduler/bundle-probe-order-1.scores rename to cts/scheduler/scores/bundle-probe-order-1.scores diff --git a/cts/scheduler/bundle-probe-order-2.scores b/cts/scheduler/scores/bundle-probe-order-2.scores similarity index 100% rename from cts/scheduler/bundle-probe-order-2.scores rename to cts/scheduler/scores/bundle-probe-order-2.scores diff --git a/cts/scheduler/bundle-probe-order-3.scores b/cts/scheduler/scores/bundle-probe-order-3.scores similarity index 100% rename from cts/scheduler/bundle-probe-order-3.scores rename to cts/scheduler/scores/bundle-probe-order-3.scores diff --git a/cts/scheduler/bundle-probe-remotes.scores b/cts/scheduler/scores/bundle-probe-remotes.scores similarity index 100% rename from cts/scheduler/bundle-probe-remotes.scores rename to cts/scheduler/scores/bundle-probe-remotes.scores diff --git a/cts/scheduler/bundle-replicas-change.scores b/cts/scheduler/scores/bundle-replicas-change.scores similarity index 100% rename from cts/scheduler/bundle-replicas-change.scores rename to cts/scheduler/scores/bundle-replicas-change.scores diff --git a/cts/scheduler/cancel-behind-moving-remote.scores b/cts/scheduler/scores/cancel-behind-moving-remote.scores similarity index 100% rename from cts/scheduler/cancel-behind-moving-remote.scores rename to cts/scheduler/scores/cancel-behind-moving-remote.scores diff --git a/cts/scheduler/clone-anon-dup.scores b/cts/scheduler/scores/clone-anon-dup.scores similarity index 100% rename from cts/scheduler/clone-anon-dup.scores rename to cts/scheduler/scores/clone-anon-dup.scores diff --git a/cts/scheduler/clone-anon-failcount.scores b/cts/scheduler/scores/clone-anon-failcount.scores similarity index 100% rename from cts/scheduler/clone-anon-failcount.scores rename to cts/scheduler/scores/clone-anon-failcount.scores diff --git a/cts/scheduler/clone-anon-probe-1.scores b/cts/scheduler/scores/clone-anon-probe-1.scores similarity index 100% rename from cts/scheduler/clone-anon-probe-1.scores rename to cts/scheduler/scores/clone-anon-probe-1.scores diff --git a/cts/scheduler/clone-anon-probe-2.scores b/cts/scheduler/scores/clone-anon-probe-2.scores similarity index 100% rename from cts/scheduler/clone-anon-probe-2.scores rename to cts/scheduler/scores/clone-anon-probe-2.scores diff --git a/cts/scheduler/clone-colocate-instance-1.scores b/cts/scheduler/scores/clone-colocate-instance-1.scores similarity index 100% rename from cts/scheduler/clone-colocate-instance-1.scores rename to cts/scheduler/scores/clone-colocate-instance-1.scores diff --git a/cts/scheduler/clone-colocate-instance-2.scores b/cts/scheduler/scores/clone-colocate-instance-2.scores similarity index 100% rename from cts/scheduler/clone-colocate-instance-2.scores rename to cts/scheduler/scores/clone-colocate-instance-2.scores diff --git a/cts/scheduler/clone-fail-block-colocation.scores b/cts/scheduler/scores/clone-fail-block-colocation.scores similarity index 100% rename from cts/scheduler/clone-fail-block-colocation.scores rename to cts/scheduler/scores/clone-fail-block-colocation.scores diff --git a/cts/scheduler/clone-interleave-1.scores b/cts/scheduler/scores/clone-interleave-1.scores similarity index 100% rename from cts/scheduler/clone-interleave-1.scores rename to cts/scheduler/scores/clone-interleave-1.scores diff --git a/cts/scheduler/clone-interleave-2.scores b/cts/scheduler/scores/clone-interleave-2.scores similarity index 100% rename from cts/scheduler/clone-interleave-2.scores rename to cts/scheduler/scores/clone-interleave-2.scores diff --git a/cts/scheduler/clone-interleave-3.scores b/cts/scheduler/scores/clone-interleave-3.scores similarity index 100% rename from cts/scheduler/clone-interleave-3.scores rename to cts/scheduler/scores/clone-interleave-3.scores diff --git a/cts/scheduler/clone-max-zero.scores b/cts/scheduler/scores/clone-max-zero.scores similarity index 100% rename from cts/scheduler/clone-max-zero.scores rename to cts/scheduler/scores/clone-max-zero.scores diff --git a/cts/scheduler/clone-no-shuffle.scores b/cts/scheduler/scores/clone-no-shuffle.scores similarity index 100% rename from cts/scheduler/clone-no-shuffle.scores rename to cts/scheduler/scores/clone-no-shuffle.scores diff --git a/cts/scheduler/clone-order-16instances.scores b/cts/scheduler/scores/clone-order-16instances.scores similarity index 100% rename from cts/scheduler/clone-order-16instances.scores rename to cts/scheduler/scores/clone-order-16instances.scores diff --git a/cts/scheduler/clone-order-instance.scores b/cts/scheduler/scores/clone-order-instance.scores similarity index 100% rename from cts/scheduler/clone-order-instance.scores rename to cts/scheduler/scores/clone-order-instance.scores diff --git a/cts/scheduler/clone-order-primitive.scores b/cts/scheduler/scores/clone-order-primitive.scores similarity index 100% rename from cts/scheduler/clone-order-primitive.scores rename to cts/scheduler/scores/clone-order-primitive.scores diff --git a/cts/scheduler/clone-require-all-1.scores b/cts/scheduler/scores/clone-require-all-1.scores similarity index 100% rename from cts/scheduler/clone-require-all-1.scores rename to cts/scheduler/scores/clone-require-all-1.scores diff --git a/cts/scheduler/clone-require-all-2.scores b/cts/scheduler/scores/clone-require-all-2.scores similarity index 100% rename from cts/scheduler/clone-require-all-2.scores rename to cts/scheduler/scores/clone-require-all-2.scores diff --git a/cts/scheduler/clone-require-all-3.scores b/cts/scheduler/scores/clone-require-all-3.scores similarity index 100% rename from cts/scheduler/clone-require-all-3.scores rename to cts/scheduler/scores/clone-require-all-3.scores diff --git a/cts/scheduler/clone-require-all-4.scores b/cts/scheduler/scores/clone-require-all-4.scores similarity index 100% rename from cts/scheduler/clone-require-all-4.scores rename to cts/scheduler/scores/clone-require-all-4.scores diff --git a/cts/scheduler/clone-require-all-5.scores b/cts/scheduler/scores/clone-require-all-5.scores similarity index 100% rename from cts/scheduler/clone-require-all-5.scores rename to cts/scheduler/scores/clone-require-all-5.scores diff --git a/cts/scheduler/clone-require-all-6.scores b/cts/scheduler/scores/clone-require-all-6.scores similarity index 100% rename from cts/scheduler/clone-require-all-6.scores rename to cts/scheduler/scores/clone-require-all-6.scores diff --git a/cts/scheduler/clone-require-all-7.scores b/cts/scheduler/scores/clone-require-all-7.scores similarity index 100% rename from cts/scheduler/clone-require-all-7.scores rename to cts/scheduler/scores/clone-require-all-7.scores diff --git a/cts/scheduler/clone-require-all-no-interleave-1.scores b/cts/scheduler/scores/clone-require-all-no-interleave-1.scores similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-1.scores rename to cts/scheduler/scores/clone-require-all-no-interleave-1.scores diff --git a/cts/scheduler/clone-require-all-no-interleave-2.scores b/cts/scheduler/scores/clone-require-all-no-interleave-2.scores similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-2.scores rename to cts/scheduler/scores/clone-require-all-no-interleave-2.scores diff --git a/cts/scheduler/clone-require-all-no-interleave-3.scores b/cts/scheduler/scores/clone-require-all-no-interleave-3.scores similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-3.scores rename to cts/scheduler/scores/clone-require-all-no-interleave-3.scores diff --git a/cts/scheduler/clone-requires-quorum-recovery.scores b/cts/scheduler/scores/clone-requires-quorum-recovery.scores similarity index 100% rename from cts/scheduler/clone-requires-quorum-recovery.scores rename to cts/scheduler/scores/clone-requires-quorum-recovery.scores diff --git a/cts/scheduler/clone-requires-quorum.scores b/cts/scheduler/scores/clone-requires-quorum.scores similarity index 100% rename from cts/scheduler/clone-requires-quorum.scores rename to cts/scheduler/scores/clone-requires-quorum.scores diff --git a/cts/scheduler/clone_min_interleave_start_one.scores b/cts/scheduler/scores/clone_min_interleave_start_one.scores similarity index 100% rename from cts/scheduler/clone_min_interleave_start_one.scores rename to cts/scheduler/scores/clone_min_interleave_start_one.scores diff --git a/cts/scheduler/clone_min_interleave_start_two.scores b/cts/scheduler/scores/clone_min_interleave_start_two.scores similarity index 100% rename from cts/scheduler/clone_min_interleave_start_two.scores rename to cts/scheduler/scores/clone_min_interleave_start_two.scores diff --git a/cts/scheduler/clone_min_interleave_stop_one.scores b/cts/scheduler/scores/clone_min_interleave_stop_one.scores similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_one.scores rename to cts/scheduler/scores/clone_min_interleave_stop_one.scores diff --git a/cts/scheduler/clone_min_interleave_stop_two.scores b/cts/scheduler/scores/clone_min_interleave_stop_two.scores similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_two.scores rename to cts/scheduler/scores/clone_min_interleave_stop_two.scores diff --git a/cts/scheduler/clone_min_start_one.scores b/cts/scheduler/scores/clone_min_start_one.scores similarity index 100% rename from cts/scheduler/clone_min_start_one.scores rename to cts/scheduler/scores/clone_min_start_one.scores diff --git a/cts/scheduler/clone_min_start_two.scores b/cts/scheduler/scores/clone_min_start_two.scores similarity index 100% rename from cts/scheduler/clone_min_start_two.scores rename to cts/scheduler/scores/clone_min_start_two.scores diff --git a/cts/scheduler/clone_min_stop_all.scores b/cts/scheduler/scores/clone_min_stop_all.scores similarity index 100% rename from cts/scheduler/clone_min_stop_all.scores rename to cts/scheduler/scores/clone_min_stop_all.scores diff --git a/cts/scheduler/clone_min_stop_one.scores b/cts/scheduler/scores/clone_min_stop_one.scores similarity index 100% rename from cts/scheduler/clone_min_stop_one.scores rename to cts/scheduler/scores/clone_min_stop_one.scores diff --git a/cts/scheduler/clone_min_stop_two.scores b/cts/scheduler/scores/clone_min_stop_two.scores similarity index 100% rename from cts/scheduler/clone_min_stop_two.scores rename to cts/scheduler/scores/clone_min_stop_two.scores diff --git a/cts/scheduler/cloned-group-stop.scores b/cts/scheduler/scores/cloned-group-stop.scores similarity index 100% rename from cts/scheduler/cloned-group-stop.scores rename to cts/scheduler/scores/cloned-group-stop.scores diff --git a/cts/scheduler/cloned-group.scores b/cts/scheduler/scores/cloned-group.scores similarity index 100% rename from cts/scheduler/cloned-group.scores rename to cts/scheduler/scores/cloned-group.scores diff --git a/cts/scheduler/cloned_start_one.scores b/cts/scheduler/scores/cloned_start_one.scores similarity index 100% rename from cts/scheduler/cloned_start_one.scores rename to cts/scheduler/scores/cloned_start_one.scores diff --git a/cts/scheduler/cloned_start_two.scores b/cts/scheduler/scores/cloned_start_two.scores similarity index 100% rename from cts/scheduler/cloned_start_two.scores rename to cts/scheduler/scores/cloned_start_two.scores diff --git a/cts/scheduler/cloned_stop_one.scores b/cts/scheduler/scores/cloned_stop_one.scores similarity index 100% rename from cts/scheduler/cloned_stop_one.scores rename to cts/scheduler/scores/cloned_stop_one.scores diff --git a/cts/scheduler/cloned_stop_two.scores b/cts/scheduler/scores/cloned_stop_two.scores similarity index 100% rename from cts/scheduler/cloned_stop_two.scores rename to cts/scheduler/scores/cloned_stop_two.scores diff --git a/cts/scheduler/cluster-specific-params.scores b/cts/scheduler/scores/cluster-specific-params.scores similarity index 100% rename from cts/scheduler/cluster-specific-params.scores rename to cts/scheduler/scores/cluster-specific-params.scores diff --git a/cts/scheduler/colo_master_w_native.scores b/cts/scheduler/scores/colo_master_w_native.scores similarity index 100% rename from cts/scheduler/colo_master_w_native.scores rename to cts/scheduler/scores/colo_master_w_native.scores diff --git a/cts/scheduler/colo_slave_w_native.scores b/cts/scheduler/scores/colo_slave_w_native.scores similarity index 100% rename from cts/scheduler/colo_slave_w_native.scores rename to cts/scheduler/scores/colo_slave_w_native.scores diff --git a/cts/scheduler/coloc-attr.scores b/cts/scheduler/scores/coloc-attr.scores similarity index 100% rename from cts/scheduler/coloc-attr.scores rename to cts/scheduler/scores/coloc-attr.scores diff --git a/cts/scheduler/coloc-clone-stays-active.scores b/cts/scheduler/scores/coloc-clone-stays-active.scores similarity index 100% rename from cts/scheduler/coloc-clone-stays-active.scores rename to cts/scheduler/scores/coloc-clone-stays-active.scores diff --git a/cts/scheduler/coloc-dependee-should-move.scores b/cts/scheduler/scores/coloc-dependee-should-move.scores similarity index 100% rename from cts/scheduler/coloc-dependee-should-move.scores rename to cts/scheduler/scores/coloc-dependee-should-move.scores diff --git a/cts/scheduler/coloc-dependee-should-stay.scores b/cts/scheduler/scores/coloc-dependee-should-stay.scores similarity index 100% rename from cts/scheduler/coloc-dependee-should-stay.scores rename to cts/scheduler/scores/coloc-dependee-should-stay.scores diff --git a/cts/scheduler/coloc-group.scores b/cts/scheduler/scores/coloc-group.scores similarity index 100% rename from cts/scheduler/coloc-group.scores rename to cts/scheduler/scores/coloc-group.scores diff --git a/cts/scheduler/coloc-intra-set.scores b/cts/scheduler/scores/coloc-intra-set.scores similarity index 100% rename from cts/scheduler/coloc-intra-set.scores rename to cts/scheduler/scores/coloc-intra-set.scores diff --git a/cts/scheduler/coloc-list.scores b/cts/scheduler/scores/coloc-list.scores similarity index 100% rename from cts/scheduler/coloc-list.scores rename to cts/scheduler/scores/coloc-list.scores diff --git a/cts/scheduler/coloc-loop.scores b/cts/scheduler/scores/coloc-loop.scores similarity index 100% rename from cts/scheduler/coloc-loop.scores rename to cts/scheduler/scores/coloc-loop.scores diff --git a/cts/scheduler/coloc-many-one.scores b/cts/scheduler/scores/coloc-many-one.scores similarity index 100% rename from cts/scheduler/coloc-many-one.scores rename to cts/scheduler/scores/coloc-many-one.scores diff --git a/cts/scheduler/coloc-negative-group.scores b/cts/scheduler/scores/coloc-negative-group.scores similarity index 100% rename from cts/scheduler/coloc-negative-group.scores rename to cts/scheduler/scores/coloc-negative-group.scores diff --git a/cts/scheduler/coloc-slave-anti.scores b/cts/scheduler/scores/coloc-slave-anti.scores similarity index 100% rename from cts/scheduler/coloc-slave-anti.scores rename to cts/scheduler/scores/coloc-slave-anti.scores diff --git a/cts/scheduler/coloc_fp_logic.scores b/cts/scheduler/scores/coloc_fp_logic.scores similarity index 100% rename from cts/scheduler/coloc_fp_logic.scores rename to cts/scheduler/scores/coloc_fp_logic.scores diff --git a/cts/scheduler/colocate-primitive-with-clone.scores b/cts/scheduler/scores/colocate-primitive-with-clone.scores similarity index 100% rename from cts/scheduler/colocate-primitive-with-clone.scores rename to cts/scheduler/scores/colocate-primitive-with-clone.scores diff --git a/cts/scheduler/colocated-utilization-clone.scores b/cts/scheduler/scores/colocated-utilization-clone.scores similarity index 100% rename from cts/scheduler/colocated-utilization-clone.scores rename to cts/scheduler/scores/colocated-utilization-clone.scores diff --git a/cts/scheduler/colocated-utilization-group.scores b/cts/scheduler/scores/colocated-utilization-group.scores similarity index 100% rename from cts/scheduler/colocated-utilization-group.scores rename to cts/scheduler/scores/colocated-utilization-group.scores diff --git a/cts/scheduler/colocated-utilization-primitive-1.scores b/cts/scheduler/scores/colocated-utilization-primitive-1.scores similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-1.scores rename to cts/scheduler/scores/colocated-utilization-primitive-1.scores diff --git a/cts/scheduler/colocated-utilization-primitive-2.scores b/cts/scheduler/scores/colocated-utilization-primitive-2.scores similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-2.scores rename to cts/scheduler/scores/colocated-utilization-primitive-2.scores diff --git a/cts/scheduler/colocation-influence.scores b/cts/scheduler/scores/colocation-influence.scores similarity index 100% rename from cts/scheduler/colocation-influence.scores rename to cts/scheduler/scores/colocation-influence.scores diff --git a/cts/scheduler/colocation_constraint_stops_master.scores b/cts/scheduler/scores/colocation_constraint_stops_master.scores similarity index 100% rename from cts/scheduler/colocation_constraint_stops_master.scores rename to cts/scheduler/scores/colocation_constraint_stops_master.scores diff --git a/cts/scheduler/colocation_constraint_stops_slave.scores b/cts/scheduler/scores/colocation_constraint_stops_slave.scores similarity index 100% rename from cts/scheduler/colocation_constraint_stops_slave.scores rename to cts/scheduler/scores/colocation_constraint_stops_slave.scores diff --git a/cts/scheduler/comments.scores b/cts/scheduler/scores/comments.scores similarity index 100% rename from cts/scheduler/comments.scores rename to cts/scheduler/scores/comments.scores diff --git a/cts/scheduler/complex_enforce_colo.scores b/cts/scheduler/scores/complex_enforce_colo.scores similarity index 100% rename from cts/scheduler/complex_enforce_colo.scores rename to cts/scheduler/scores/complex_enforce_colo.scores diff --git a/cts/scheduler/concurrent-fencing.scores b/cts/scheduler/scores/concurrent-fencing.scores similarity index 100% rename from cts/scheduler/concurrent-fencing.scores rename to cts/scheduler/scores/concurrent-fencing.scores diff --git a/cts/scheduler/container-1.scores b/cts/scheduler/scores/container-1.scores similarity index 100% rename from cts/scheduler/container-1.scores rename to cts/scheduler/scores/container-1.scores diff --git a/cts/scheduler/container-2.scores b/cts/scheduler/scores/container-2.scores similarity index 100% rename from cts/scheduler/container-2.scores rename to cts/scheduler/scores/container-2.scores diff --git a/cts/scheduler/container-3.scores b/cts/scheduler/scores/container-3.scores similarity index 100% rename from cts/scheduler/container-3.scores rename to cts/scheduler/scores/container-3.scores diff --git a/cts/scheduler/container-4.scores b/cts/scheduler/scores/container-4.scores similarity index 100% rename from cts/scheduler/container-4.scores rename to cts/scheduler/scores/container-4.scores diff --git a/cts/scheduler/container-group-1.scores b/cts/scheduler/scores/container-group-1.scores similarity index 100% rename from cts/scheduler/container-group-1.scores rename to cts/scheduler/scores/container-group-1.scores diff --git a/cts/scheduler/container-group-2.scores b/cts/scheduler/scores/container-group-2.scores similarity index 100% rename from cts/scheduler/container-group-2.scores rename to cts/scheduler/scores/container-group-2.scores diff --git a/cts/scheduler/container-group-3.scores b/cts/scheduler/scores/container-group-3.scores similarity index 100% rename from cts/scheduler/container-group-3.scores rename to cts/scheduler/scores/container-group-3.scores diff --git a/cts/scheduler/container-group-4.scores b/cts/scheduler/scores/container-group-4.scores similarity index 100% rename from cts/scheduler/container-group-4.scores rename to cts/scheduler/scores/container-group-4.scores diff --git a/cts/scheduler/container-is-remote-node.scores b/cts/scheduler/scores/container-is-remote-node.scores similarity index 100% rename from cts/scheduler/container-is-remote-node.scores rename to cts/scheduler/scores/container-is-remote-node.scores diff --git a/cts/scheduler/date-1.scores b/cts/scheduler/scores/date-1.scores similarity index 100% rename from cts/scheduler/date-1.scores rename to cts/scheduler/scores/date-1.scores diff --git a/cts/scheduler/date-2.scores b/cts/scheduler/scores/date-2.scores similarity index 100% rename from cts/scheduler/date-2.scores rename to cts/scheduler/scores/date-2.scores diff --git a/cts/scheduler/date-3.scores b/cts/scheduler/scores/date-3.scores similarity index 100% rename from cts/scheduler/date-3.scores rename to cts/scheduler/scores/date-3.scores diff --git a/cts/scheduler/dc-fence-ordering.scores b/cts/scheduler/scores/dc-fence-ordering.scores similarity index 100% rename from cts/scheduler/dc-fence-ordering.scores rename to cts/scheduler/scores/dc-fence-ordering.scores diff --git a/cts/scheduler/enforce-colo1.scores b/cts/scheduler/scores/enforce-colo1.scores similarity index 100% rename from cts/scheduler/enforce-colo1.scores rename to cts/scheduler/scores/enforce-colo1.scores diff --git a/cts/scheduler/expire-non-blocked-failure.scores b/cts/scheduler/scores/expire-non-blocked-failure.scores similarity index 100% rename from cts/scheduler/expire-non-blocked-failure.scores rename to cts/scheduler/scores/expire-non-blocked-failure.scores diff --git a/cts/scheduler/failcount-block.scores b/cts/scheduler/scores/failcount-block.scores similarity index 100% rename from cts/scheduler/failcount-block.scores rename to cts/scheduler/scores/failcount-block.scores diff --git a/cts/scheduler/failcount.scores b/cts/scheduler/scores/failcount.scores similarity index 100% rename from cts/scheduler/failcount.scores rename to cts/scheduler/scores/failcount.scores diff --git a/cts/scheduler/failed-demote-recovery-master.scores b/cts/scheduler/scores/failed-demote-recovery-master.scores similarity index 100% rename from cts/scheduler/failed-demote-recovery-master.scores rename to cts/scheduler/scores/failed-demote-recovery-master.scores diff --git a/cts/scheduler/failed-demote-recovery.scores b/cts/scheduler/scores/failed-demote-recovery.scores similarity index 100% rename from cts/scheduler/failed-demote-recovery.scores rename to cts/scheduler/scores/failed-demote-recovery.scores diff --git a/cts/scheduler/force-anon-clone-max.scores b/cts/scheduler/scores/force-anon-clone-max.scores similarity index 100% rename from cts/scheduler/force-anon-clone-max.scores rename to cts/scheduler/scores/force-anon-clone-max.scores diff --git a/cts/scheduler/group-dependents.scores b/cts/scheduler/scores/group-dependents.scores similarity index 100% rename from cts/scheduler/group-dependents.scores rename to cts/scheduler/scores/group-dependents.scores diff --git a/cts/scheduler/group-fail.scores b/cts/scheduler/scores/group-fail.scores similarity index 100% rename from cts/scheduler/group-fail.scores rename to cts/scheduler/scores/group-fail.scores diff --git a/cts/scheduler/group-stop-ordering.scores b/cts/scheduler/scores/group-stop-ordering.scores similarity index 100% rename from cts/scheduler/group-stop-ordering.scores rename to cts/scheduler/scores/group-stop-ordering.scores diff --git a/cts/scheduler/group-unmanaged-stopped.scores b/cts/scheduler/scores/group-unmanaged-stopped.scores similarity index 100% rename from cts/scheduler/group-unmanaged-stopped.scores rename to cts/scheduler/scores/group-unmanaged-stopped.scores diff --git a/cts/scheduler/group-unmanaged.scores b/cts/scheduler/scores/group-unmanaged.scores similarity index 100% rename from cts/scheduler/group-unmanaged.scores rename to cts/scheduler/scores/group-unmanaged.scores diff --git a/cts/scheduler/group1.scores b/cts/scheduler/scores/group1.scores similarity index 100% rename from cts/scheduler/group1.scores rename to cts/scheduler/scores/group1.scores diff --git a/cts/scheduler/group10.scores b/cts/scheduler/scores/group10.scores similarity index 100% rename from cts/scheduler/group10.scores rename to cts/scheduler/scores/group10.scores diff --git a/cts/scheduler/group11.scores b/cts/scheduler/scores/group11.scores similarity index 100% rename from cts/scheduler/group11.scores rename to cts/scheduler/scores/group11.scores diff --git a/cts/scheduler/group13.scores b/cts/scheduler/scores/group13.scores similarity index 100% rename from cts/scheduler/group13.scores rename to cts/scheduler/scores/group13.scores diff --git a/cts/scheduler/group14.scores b/cts/scheduler/scores/group14.scores similarity index 100% rename from cts/scheduler/group14.scores rename to cts/scheduler/scores/group14.scores diff --git a/cts/scheduler/group15.scores b/cts/scheduler/scores/group15.scores similarity index 100% rename from cts/scheduler/group15.scores rename to cts/scheduler/scores/group15.scores diff --git a/cts/scheduler/group2.scores b/cts/scheduler/scores/group2.scores similarity index 100% rename from cts/scheduler/group2.scores rename to cts/scheduler/scores/group2.scores diff --git a/cts/scheduler/group3.scores b/cts/scheduler/scores/group3.scores similarity index 100% rename from cts/scheduler/group3.scores rename to cts/scheduler/scores/group3.scores diff --git a/cts/scheduler/group4.scores b/cts/scheduler/scores/group4.scores similarity index 100% rename from cts/scheduler/group4.scores rename to cts/scheduler/scores/group4.scores diff --git a/cts/scheduler/group5.scores b/cts/scheduler/scores/group5.scores similarity index 100% rename from cts/scheduler/group5.scores rename to cts/scheduler/scores/group5.scores diff --git a/cts/scheduler/group6.scores b/cts/scheduler/scores/group6.scores similarity index 100% rename from cts/scheduler/group6.scores rename to cts/scheduler/scores/group6.scores diff --git a/cts/scheduler/group7.scores b/cts/scheduler/scores/group7.scores similarity index 100% rename from cts/scheduler/group7.scores rename to cts/scheduler/scores/group7.scores diff --git a/cts/scheduler/group8.scores b/cts/scheduler/scores/group8.scores similarity index 100% rename from cts/scheduler/group8.scores rename to cts/scheduler/scores/group8.scores diff --git a/cts/scheduler/group9.scores b/cts/scheduler/scores/group9.scores similarity index 100% rename from cts/scheduler/group9.scores rename to cts/scheduler/scores/group9.scores diff --git a/cts/scheduler/guest-host-not-fenceable.scores b/cts/scheduler/scores/guest-host-not-fenceable.scores similarity index 100% rename from cts/scheduler/guest-host-not-fenceable.scores rename to cts/scheduler/scores/guest-host-not-fenceable.scores diff --git a/cts/scheduler/guest-node-cleanup.scores b/cts/scheduler/scores/guest-node-cleanup.scores similarity index 100% rename from cts/scheduler/guest-node-cleanup.scores rename to cts/scheduler/scores/guest-node-cleanup.scores diff --git a/cts/scheduler/guest-node-host-dies.scores b/cts/scheduler/scores/guest-node-host-dies.scores similarity index 100% rename from cts/scheduler/guest-node-host-dies.scores rename to cts/scheduler/scores/guest-node-host-dies.scores diff --git a/cts/scheduler/history-1.scores b/cts/scheduler/scores/history-1.scores similarity index 100% rename from cts/scheduler/history-1.scores rename to cts/scheduler/scores/history-1.scores diff --git a/cts/scheduler/honor_stonith_rsc_order1.scores b/cts/scheduler/scores/honor_stonith_rsc_order1.scores similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order1.scores rename to cts/scheduler/scores/honor_stonith_rsc_order1.scores diff --git a/cts/scheduler/honor_stonith_rsc_order2.scores b/cts/scheduler/scores/honor_stonith_rsc_order2.scores similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order2.scores rename to cts/scheduler/scores/honor_stonith_rsc_order2.scores diff --git a/cts/scheduler/honor_stonith_rsc_order3.scores b/cts/scheduler/scores/honor_stonith_rsc_order3.scores similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order3.scores rename to cts/scheduler/scores/honor_stonith_rsc_order3.scores diff --git a/cts/scheduler/honor_stonith_rsc_order4.scores b/cts/scheduler/scores/honor_stonith_rsc_order4.scores similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order4.scores rename to cts/scheduler/scores/honor_stonith_rsc_order4.scores diff --git a/cts/scheduler/ignore_stonith_rsc_order1.scores b/cts/scheduler/scores/ignore_stonith_rsc_order1.scores similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order1.scores rename to cts/scheduler/scores/ignore_stonith_rsc_order1.scores diff --git a/cts/scheduler/ignore_stonith_rsc_order2.scores b/cts/scheduler/scores/ignore_stonith_rsc_order2.scores similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order2.scores rename to cts/scheduler/scores/ignore_stonith_rsc_order2.scores diff --git a/cts/scheduler/ignore_stonith_rsc_order3.scores b/cts/scheduler/scores/ignore_stonith_rsc_order3.scores similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order3.scores rename to cts/scheduler/scores/ignore_stonith_rsc_order3.scores diff --git a/cts/scheduler/ignore_stonith_rsc_order4.scores b/cts/scheduler/scores/ignore_stonith_rsc_order4.scores similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order4.scores rename to cts/scheduler/scores/ignore_stonith_rsc_order4.scores diff --git a/cts/scheduler/inc0.scores b/cts/scheduler/scores/inc0.scores similarity index 100% rename from cts/scheduler/inc0.scores rename to cts/scheduler/scores/inc0.scores diff --git a/cts/scheduler/inc1.scores b/cts/scheduler/scores/inc1.scores similarity index 100% rename from cts/scheduler/inc1.scores rename to cts/scheduler/scores/inc1.scores diff --git a/cts/scheduler/inc10.scores b/cts/scheduler/scores/inc10.scores similarity index 100% rename from cts/scheduler/inc10.scores rename to cts/scheduler/scores/inc10.scores diff --git a/cts/scheduler/inc11.scores b/cts/scheduler/scores/inc11.scores similarity index 100% rename from cts/scheduler/inc11.scores rename to cts/scheduler/scores/inc11.scores diff --git a/cts/scheduler/inc12.scores b/cts/scheduler/scores/inc12.scores similarity index 100% rename from cts/scheduler/inc12.scores rename to cts/scheduler/scores/inc12.scores diff --git a/cts/scheduler/inc2.scores b/cts/scheduler/scores/inc2.scores similarity index 100% rename from cts/scheduler/inc2.scores rename to cts/scheduler/scores/inc2.scores diff --git a/cts/scheduler/inc3.scores b/cts/scheduler/scores/inc3.scores similarity index 100% rename from cts/scheduler/inc3.scores rename to cts/scheduler/scores/inc3.scores diff --git a/cts/scheduler/inc4.scores b/cts/scheduler/scores/inc4.scores similarity index 100% rename from cts/scheduler/inc4.scores rename to cts/scheduler/scores/inc4.scores diff --git a/cts/scheduler/inc5.scores b/cts/scheduler/scores/inc5.scores similarity index 100% rename from cts/scheduler/inc5.scores rename to cts/scheduler/scores/inc5.scores diff --git a/cts/scheduler/inc6.scores b/cts/scheduler/scores/inc6.scores similarity index 100% rename from cts/scheduler/inc6.scores rename to cts/scheduler/scores/inc6.scores diff --git a/cts/scheduler/inc7.scores b/cts/scheduler/scores/inc7.scores similarity index 100% rename from cts/scheduler/inc7.scores rename to cts/scheduler/scores/inc7.scores diff --git a/cts/scheduler/inc8.scores b/cts/scheduler/scores/inc8.scores similarity index 100% rename from cts/scheduler/inc8.scores rename to cts/scheduler/scores/inc8.scores diff --git a/cts/scheduler/inc9.scores b/cts/scheduler/scores/inc9.scores similarity index 100% rename from cts/scheduler/inc9.scores rename to cts/scheduler/scores/inc9.scores diff --git a/cts/scheduler/interleave-0.scores b/cts/scheduler/scores/interleave-0.scores similarity index 100% rename from cts/scheduler/interleave-0.scores rename to cts/scheduler/scores/interleave-0.scores diff --git a/cts/scheduler/interleave-1.scores b/cts/scheduler/scores/interleave-1.scores similarity index 100% rename from cts/scheduler/interleave-1.scores rename to cts/scheduler/scores/interleave-1.scores diff --git a/cts/scheduler/interleave-2.scores b/cts/scheduler/scores/interleave-2.scores similarity index 100% rename from cts/scheduler/interleave-2.scores rename to cts/scheduler/scores/interleave-2.scores diff --git a/cts/scheduler/interleave-3.scores b/cts/scheduler/scores/interleave-3.scores similarity index 100% rename from cts/scheduler/interleave-3.scores rename to cts/scheduler/scores/interleave-3.scores diff --git a/cts/scheduler/interleave-pseudo-stop.scores b/cts/scheduler/scores/interleave-pseudo-stop.scores similarity index 100% rename from cts/scheduler/interleave-pseudo-stop.scores rename to cts/scheduler/scores/interleave-pseudo-stop.scores diff --git a/cts/scheduler/interleave-restart.scores b/cts/scheduler/scores/interleave-restart.scores similarity index 100% rename from cts/scheduler/interleave-restart.scores rename to cts/scheduler/scores/interleave-restart.scores diff --git a/cts/scheduler/interleave-stop.scores b/cts/scheduler/scores/interleave-stop.scores similarity index 100% rename from cts/scheduler/interleave-stop.scores rename to cts/scheduler/scores/interleave-stop.scores diff --git a/cts/scheduler/intervals.scores b/cts/scheduler/scores/intervals.scores similarity index 100% rename from cts/scheduler/intervals.scores rename to cts/scheduler/scores/intervals.scores diff --git a/cts/scheduler/load-stopped-loop-2.scores b/cts/scheduler/scores/load-stopped-loop-2.scores similarity index 100% rename from cts/scheduler/load-stopped-loop-2.scores rename to cts/scheduler/scores/load-stopped-loop-2.scores diff --git a/cts/scheduler/load-stopped-loop.scores b/cts/scheduler/scores/load-stopped-loop.scores similarity index 100% rename from cts/scheduler/load-stopped-loop.scores rename to cts/scheduler/scores/load-stopped-loop.scores diff --git a/cts/scheduler/location-date-rules-1.scores b/cts/scheduler/scores/location-date-rules-1.scores similarity index 100% rename from cts/scheduler/location-date-rules-1.scores rename to cts/scheduler/scores/location-date-rules-1.scores diff --git a/cts/scheduler/location-date-rules-2.scores b/cts/scheduler/scores/location-date-rules-2.scores similarity index 100% rename from cts/scheduler/location-date-rules-2.scores rename to cts/scheduler/scores/location-date-rules-2.scores diff --git a/cts/scheduler/location-sets-templates.scores b/cts/scheduler/scores/location-sets-templates.scores similarity index 100% rename from cts/scheduler/location-sets-templates.scores rename to cts/scheduler/scores/location-sets-templates.scores diff --git a/cts/scheduler/managed-0.scores b/cts/scheduler/scores/managed-0.scores similarity index 100% rename from cts/scheduler/managed-0.scores rename to cts/scheduler/scores/managed-0.scores diff --git a/cts/scheduler/managed-1.scores b/cts/scheduler/scores/managed-1.scores similarity index 100% rename from cts/scheduler/managed-1.scores rename to cts/scheduler/scores/managed-1.scores diff --git a/cts/scheduler/managed-2.scores b/cts/scheduler/scores/managed-2.scores similarity index 100% rename from cts/scheduler/managed-2.scores rename to cts/scheduler/scores/managed-2.scores diff --git a/cts/scheduler/master-0.scores b/cts/scheduler/scores/master-0.scores similarity index 100% rename from cts/scheduler/master-0.scores rename to cts/scheduler/scores/master-0.scores diff --git a/cts/scheduler/master-1.scores b/cts/scheduler/scores/master-1.scores similarity index 100% rename from cts/scheduler/master-1.scores rename to cts/scheduler/scores/master-1.scores diff --git a/cts/scheduler/master-10.scores b/cts/scheduler/scores/master-10.scores similarity index 100% rename from cts/scheduler/master-10.scores rename to cts/scheduler/scores/master-10.scores diff --git a/cts/scheduler/master-11.scores b/cts/scheduler/scores/master-11.scores similarity index 100% rename from cts/scheduler/master-11.scores rename to cts/scheduler/scores/master-11.scores diff --git a/cts/scheduler/master-12.scores b/cts/scheduler/scores/master-12.scores similarity index 100% rename from cts/scheduler/master-12.scores rename to cts/scheduler/scores/master-12.scores diff --git a/cts/scheduler/master-13.scores b/cts/scheduler/scores/master-13.scores similarity index 100% rename from cts/scheduler/master-13.scores rename to cts/scheduler/scores/master-13.scores diff --git a/cts/scheduler/master-2.scores b/cts/scheduler/scores/master-2.scores similarity index 100% rename from cts/scheduler/master-2.scores rename to cts/scheduler/scores/master-2.scores diff --git a/cts/scheduler/master-3.scores b/cts/scheduler/scores/master-3.scores similarity index 100% rename from cts/scheduler/master-3.scores rename to cts/scheduler/scores/master-3.scores diff --git a/cts/scheduler/master-4.scores b/cts/scheduler/scores/master-4.scores similarity index 100% rename from cts/scheduler/master-4.scores rename to cts/scheduler/scores/master-4.scores diff --git a/cts/scheduler/master-5.scores b/cts/scheduler/scores/master-5.scores similarity index 100% rename from cts/scheduler/master-5.scores rename to cts/scheduler/scores/master-5.scores diff --git a/cts/scheduler/master-6.scores b/cts/scheduler/scores/master-6.scores similarity index 100% rename from cts/scheduler/master-6.scores rename to cts/scheduler/scores/master-6.scores diff --git a/cts/scheduler/master-7.scores b/cts/scheduler/scores/master-7.scores similarity index 100% rename from cts/scheduler/master-7.scores rename to cts/scheduler/scores/master-7.scores diff --git a/cts/scheduler/master-8.scores b/cts/scheduler/scores/master-8.scores similarity index 100% rename from cts/scheduler/master-8.scores rename to cts/scheduler/scores/master-8.scores diff --git a/cts/scheduler/master-9.scores b/cts/scheduler/scores/master-9.scores similarity index 100% rename from cts/scheduler/master-9.scores rename to cts/scheduler/scores/master-9.scores diff --git a/cts/scheduler/master-allow-start.scores b/cts/scheduler/scores/master-allow-start.scores similarity index 100% rename from cts/scheduler/master-allow-start.scores rename to cts/scheduler/scores/master-allow-start.scores diff --git a/cts/scheduler/master-asymmetrical-order.scores b/cts/scheduler/scores/master-asymmetrical-order.scores similarity index 100% rename from cts/scheduler/master-asymmetrical-order.scores rename to cts/scheduler/scores/master-asymmetrical-order.scores diff --git a/cts/scheduler/master-colocation.scores b/cts/scheduler/scores/master-colocation.scores similarity index 100% rename from cts/scheduler/master-colocation.scores rename to cts/scheduler/scores/master-colocation.scores diff --git a/cts/scheduler/master-demote-2.scores b/cts/scheduler/scores/master-demote-2.scores similarity index 100% rename from cts/scheduler/master-demote-2.scores rename to cts/scheduler/scores/master-demote-2.scores diff --git a/cts/scheduler/master-demote-block.scores b/cts/scheduler/scores/master-demote-block.scores similarity index 100% rename from cts/scheduler/master-demote-block.scores rename to cts/scheduler/scores/master-demote-block.scores diff --git a/cts/scheduler/master-demote.scores b/cts/scheduler/scores/master-demote.scores similarity index 100% rename from cts/scheduler/master-demote.scores rename to cts/scheduler/scores/master-demote.scores diff --git a/cts/scheduler/master-depend.scores b/cts/scheduler/scores/master-depend.scores similarity index 100% rename from cts/scheduler/master-depend.scores rename to cts/scheduler/scores/master-depend.scores diff --git a/cts/scheduler/master-dependent-ban.scores b/cts/scheduler/scores/master-dependent-ban.scores similarity index 100% rename from cts/scheduler/master-dependent-ban.scores rename to cts/scheduler/scores/master-dependent-ban.scores diff --git a/cts/scheduler/master-failed-demote-2.scores b/cts/scheduler/scores/master-failed-demote-2.scores similarity index 100% rename from cts/scheduler/master-failed-demote-2.scores rename to cts/scheduler/scores/master-failed-demote-2.scores diff --git a/cts/scheduler/master-failed-demote.scores b/cts/scheduler/scores/master-failed-demote.scores similarity index 100% rename from cts/scheduler/master-failed-demote.scores rename to cts/scheduler/scores/master-failed-demote.scores diff --git a/cts/scheduler/master-group.scores b/cts/scheduler/scores/master-group.scores similarity index 100% rename from cts/scheduler/master-group.scores rename to cts/scheduler/scores/master-group.scores diff --git a/cts/scheduler/master-move.scores b/cts/scheduler/scores/master-move.scores similarity index 100% rename from cts/scheduler/master-move.scores rename to cts/scheduler/scores/master-move.scores diff --git a/cts/scheduler/master-notify.scores b/cts/scheduler/scores/master-notify.scores similarity index 100% rename from cts/scheduler/master-notify.scores rename to cts/scheduler/scores/master-notify.scores diff --git a/cts/scheduler/master-ordering.scores b/cts/scheduler/scores/master-ordering.scores similarity index 100% rename from cts/scheduler/master-ordering.scores rename to cts/scheduler/scores/master-ordering.scores diff --git a/cts/scheduler/master-partially-demoted-group.scores b/cts/scheduler/scores/master-partially-demoted-group.scores similarity index 100% rename from cts/scheduler/master-partially-demoted-group.scores rename to cts/scheduler/scores/master-partially-demoted-group.scores diff --git a/cts/scheduler/master-probed-score.scores b/cts/scheduler/scores/master-probed-score.scores similarity index 100% rename from cts/scheduler/master-probed-score.scores rename to cts/scheduler/scores/master-probed-score.scores diff --git a/cts/scheduler/master-promotion-constraint.scores b/cts/scheduler/scores/master-promotion-constraint.scores similarity index 100% rename from cts/scheduler/master-promotion-constraint.scores rename to cts/scheduler/scores/master-promotion-constraint.scores diff --git a/cts/scheduler/master-pseudo.scores b/cts/scheduler/scores/master-pseudo.scores similarity index 100% rename from cts/scheduler/master-pseudo.scores rename to cts/scheduler/scores/master-pseudo.scores diff --git a/cts/scheduler/master-reattach.scores b/cts/scheduler/scores/master-reattach.scores similarity index 100% rename from cts/scheduler/master-reattach.scores rename to cts/scheduler/scores/master-reattach.scores diff --git a/cts/scheduler/master-role.scores b/cts/scheduler/scores/master-role.scores similarity index 100% rename from cts/scheduler/master-role.scores rename to cts/scheduler/scores/master-role.scores diff --git a/cts/scheduler/master-score-startup.scores b/cts/scheduler/scores/master-score-startup.scores similarity index 100% rename from cts/scheduler/master-score-startup.scores rename to cts/scheduler/scores/master-score-startup.scores diff --git a/cts/scheduler/master-stop.scores b/cts/scheduler/scores/master-stop.scores similarity index 100% rename from cts/scheduler/master-stop.scores rename to cts/scheduler/scores/master-stop.scores diff --git a/cts/scheduler/master-unmanaged-monitor.scores b/cts/scheduler/scores/master-unmanaged-monitor.scores similarity index 100% rename from cts/scheduler/master-unmanaged-monitor.scores rename to cts/scheduler/scores/master-unmanaged-monitor.scores diff --git a/cts/scheduler/master_monitor_restart.scores b/cts/scheduler/scores/master_monitor_restart.scores similarity index 100% rename from cts/scheduler/master_monitor_restart.scores rename to cts/scheduler/scores/master_monitor_restart.scores diff --git a/cts/scheduler/migrate-1.scores b/cts/scheduler/scores/migrate-1.scores similarity index 100% rename from cts/scheduler/migrate-1.scores rename to cts/scheduler/scores/migrate-1.scores diff --git a/cts/scheduler/migrate-2.scores b/cts/scheduler/scores/migrate-2.scores similarity index 100% rename from cts/scheduler/migrate-2.scores rename to cts/scheduler/scores/migrate-2.scores diff --git a/cts/scheduler/migrate-3.scores b/cts/scheduler/scores/migrate-3.scores similarity index 100% rename from cts/scheduler/migrate-3.scores rename to cts/scheduler/scores/migrate-3.scores diff --git a/cts/scheduler/migrate-4.scores b/cts/scheduler/scores/migrate-4.scores similarity index 100% rename from cts/scheduler/migrate-4.scores rename to cts/scheduler/scores/migrate-4.scores diff --git a/cts/scheduler/migrate-5.scores b/cts/scheduler/scores/migrate-5.scores similarity index 100% rename from cts/scheduler/migrate-5.scores rename to cts/scheduler/scores/migrate-5.scores diff --git a/cts/scheduler/migrate-begin.scores b/cts/scheduler/scores/migrate-begin.scores similarity index 100% rename from cts/scheduler/migrate-begin.scores rename to cts/scheduler/scores/migrate-begin.scores diff --git a/cts/scheduler/migrate-both-vms.scores b/cts/scheduler/scores/migrate-both-vms.scores similarity index 100% rename from cts/scheduler/migrate-both-vms.scores rename to cts/scheduler/scores/migrate-both-vms.scores diff --git a/cts/scheduler/migrate-fail-2.scores b/cts/scheduler/scores/migrate-fail-2.scores similarity index 100% rename from cts/scheduler/migrate-fail-2.scores rename to cts/scheduler/scores/migrate-fail-2.scores diff --git a/cts/scheduler/migrate-fail-3.scores b/cts/scheduler/scores/migrate-fail-3.scores similarity index 100% rename from cts/scheduler/migrate-fail-3.scores rename to cts/scheduler/scores/migrate-fail-3.scores diff --git a/cts/scheduler/migrate-fail-4.scores b/cts/scheduler/scores/migrate-fail-4.scores similarity index 100% rename from cts/scheduler/migrate-fail-4.scores rename to cts/scheduler/scores/migrate-fail-4.scores diff --git a/cts/scheduler/migrate-fail-5.scores b/cts/scheduler/scores/migrate-fail-5.scores similarity index 100% rename from cts/scheduler/migrate-fail-5.scores rename to cts/scheduler/scores/migrate-fail-5.scores diff --git a/cts/scheduler/migrate-fail-6.scores b/cts/scheduler/scores/migrate-fail-6.scores similarity index 100% rename from cts/scheduler/migrate-fail-6.scores rename to cts/scheduler/scores/migrate-fail-6.scores diff --git a/cts/scheduler/migrate-fail-7.scores b/cts/scheduler/scores/migrate-fail-7.scores similarity index 100% rename from cts/scheduler/migrate-fail-7.scores rename to cts/scheduler/scores/migrate-fail-7.scores diff --git a/cts/scheduler/migrate-fail-8.scores b/cts/scheduler/scores/migrate-fail-8.scores similarity index 100% rename from cts/scheduler/migrate-fail-8.scores rename to cts/scheduler/scores/migrate-fail-8.scores diff --git a/cts/scheduler/migrate-fail-9.scores b/cts/scheduler/scores/migrate-fail-9.scores similarity index 100% rename from cts/scheduler/migrate-fail-9.scores rename to cts/scheduler/scores/migrate-fail-9.scores diff --git a/cts/scheduler/migrate-fencing.scores b/cts/scheduler/scores/migrate-fencing.scores similarity index 100% rename from cts/scheduler/migrate-fencing.scores rename to cts/scheduler/scores/migrate-fencing.scores diff --git a/cts/scheduler/migrate-partial-1.scores b/cts/scheduler/scores/migrate-partial-1.scores similarity index 100% rename from cts/scheduler/migrate-partial-1.scores rename to cts/scheduler/scores/migrate-partial-1.scores diff --git a/cts/scheduler/migrate-partial-2.scores b/cts/scheduler/scores/migrate-partial-2.scores similarity index 100% rename from cts/scheduler/migrate-partial-2.scores rename to cts/scheduler/scores/migrate-partial-2.scores diff --git a/cts/scheduler/migrate-partial-3.scores b/cts/scheduler/scores/migrate-partial-3.scores similarity index 100% rename from cts/scheduler/migrate-partial-3.scores rename to cts/scheduler/scores/migrate-partial-3.scores diff --git a/cts/scheduler/migrate-partial-4.scores b/cts/scheduler/scores/migrate-partial-4.scores similarity index 100% rename from cts/scheduler/migrate-partial-4.scores rename to cts/scheduler/scores/migrate-partial-4.scores diff --git a/cts/scheduler/migrate-shutdown.scores b/cts/scheduler/scores/migrate-shutdown.scores similarity index 100% rename from cts/scheduler/migrate-shutdown.scores rename to cts/scheduler/scores/migrate-shutdown.scores diff --git a/cts/scheduler/migrate-start-complex.scores b/cts/scheduler/scores/migrate-start-complex.scores similarity index 100% rename from cts/scheduler/migrate-start-complex.scores rename to cts/scheduler/scores/migrate-start-complex.scores diff --git a/cts/scheduler/migrate-start.scores b/cts/scheduler/scores/migrate-start.scores similarity index 100% rename from cts/scheduler/migrate-start.scores rename to cts/scheduler/scores/migrate-start.scores diff --git a/cts/scheduler/migrate-stop-complex.scores b/cts/scheduler/scores/migrate-stop-complex.scores similarity index 100% rename from cts/scheduler/migrate-stop-complex.scores rename to cts/scheduler/scores/migrate-stop-complex.scores diff --git a/cts/scheduler/migrate-stop-start-complex.scores b/cts/scheduler/scores/migrate-stop-start-complex.scores similarity index 100% rename from cts/scheduler/migrate-stop-start-complex.scores rename to cts/scheduler/scores/migrate-stop-start-complex.scores diff --git a/cts/scheduler/migrate-stop.scores b/cts/scheduler/scores/migrate-stop.scores similarity index 100% rename from cts/scheduler/migrate-stop.scores rename to cts/scheduler/scores/migrate-stop.scores diff --git a/cts/scheduler/migrate-stop_start.scores b/cts/scheduler/scores/migrate-stop_start.scores similarity index 100% rename from cts/scheduler/migrate-stop_start.scores rename to cts/scheduler/scores/migrate-stop_start.scores diff --git a/cts/scheduler/migrate-success.scores b/cts/scheduler/scores/migrate-success.scores similarity index 100% rename from cts/scheduler/migrate-success.scores rename to cts/scheduler/scores/migrate-success.scores diff --git a/cts/scheduler/migrate-versioned.scores b/cts/scheduler/scores/migrate-versioned.scores similarity index 100% rename from cts/scheduler/migrate-versioned.scores rename to cts/scheduler/scores/migrate-versioned.scores diff --git a/cts/scheduler/migration-behind-migrating-remote.scores b/cts/scheduler/scores/migration-behind-migrating-remote.scores similarity index 100% rename from cts/scheduler/migration-behind-migrating-remote.scores rename to cts/scheduler/scores/migration-behind-migrating-remote.scores diff --git a/cts/scheduler/migration-ping-pong.scores b/cts/scheduler/scores/migration-ping-pong.scores similarity index 100% rename from cts/scheduler/migration-ping-pong.scores rename to cts/scheduler/scores/migration-ping-pong.scores diff --git a/cts/scheduler/minimal.scores b/cts/scheduler/scores/minimal.scores similarity index 100% rename from cts/scheduler/minimal.scores rename to cts/scheduler/scores/minimal.scores diff --git a/cts/scheduler/mon-rsc-1.scores b/cts/scheduler/scores/mon-rsc-1.scores similarity index 100% rename from cts/scheduler/mon-rsc-1.scores rename to cts/scheduler/scores/mon-rsc-1.scores diff --git a/cts/scheduler/mon-rsc-2.scores b/cts/scheduler/scores/mon-rsc-2.scores similarity index 100% rename from cts/scheduler/mon-rsc-2.scores rename to cts/scheduler/scores/mon-rsc-2.scores diff --git a/cts/scheduler/mon-rsc-3.scores b/cts/scheduler/scores/mon-rsc-3.scores similarity index 100% rename from cts/scheduler/mon-rsc-3.scores rename to cts/scheduler/scores/mon-rsc-3.scores diff --git a/cts/scheduler/mon-rsc-4.scores b/cts/scheduler/scores/mon-rsc-4.scores similarity index 100% rename from cts/scheduler/mon-rsc-4.scores rename to cts/scheduler/scores/mon-rsc-4.scores diff --git a/cts/scheduler/monitor-onfail-restart.scores b/cts/scheduler/scores/monitor-onfail-restart.scores similarity index 100% rename from cts/scheduler/monitor-onfail-restart.scores rename to cts/scheduler/scores/monitor-onfail-restart.scores diff --git a/cts/scheduler/monitor-onfail-stop.scores b/cts/scheduler/scores/monitor-onfail-stop.scores similarity index 100% rename from cts/scheduler/monitor-onfail-stop.scores rename to cts/scheduler/scores/monitor-onfail-stop.scores diff --git a/cts/scheduler/monitor-recovery.scores b/cts/scheduler/scores/monitor-recovery.scores similarity index 100% rename from cts/scheduler/monitor-recovery.scores rename to cts/scheduler/scores/monitor-recovery.scores diff --git a/cts/scheduler/multi1.scores b/cts/scheduler/scores/multi1.scores similarity index 100% rename from cts/scheduler/multi1.scores rename to cts/scheduler/scores/multi1.scores diff --git a/cts/scheduler/multiple-active-block-group.scores b/cts/scheduler/scores/multiple-active-block-group.scores similarity index 100% rename from cts/scheduler/multiple-active-block-group.scores rename to cts/scheduler/scores/multiple-active-block-group.scores diff --git a/cts/scheduler/multiple-monitor-one-failed.scores b/cts/scheduler/scores/multiple-monitor-one-failed.scores similarity index 100% rename from cts/scheduler/multiple-monitor-one-failed.scores rename to cts/scheduler/scores/multiple-monitor-one-failed.scores diff --git a/cts/scheduler/multiply-active-stonith.scores b/cts/scheduler/scores/multiply-active-stonith.scores similarity index 100% rename from cts/scheduler/multiply-active-stonith.scores rename to cts/scheduler/scores/multiply-active-stonith.scores diff --git a/cts/scheduler/nested-remote-recovery.scores b/cts/scheduler/scores/nested-remote-recovery.scores similarity index 100% rename from cts/scheduler/nested-remote-recovery.scores rename to cts/scheduler/scores/nested-remote-recovery.scores diff --git a/cts/scheduler/no-promote-on-unrunnable-guest.scores b/cts/scheduler/scores/no-promote-on-unrunnable-guest.scores similarity index 100% rename from cts/scheduler/no-promote-on-unrunnable-guest.scores rename to cts/scheduler/scores/no-promote-on-unrunnable-guest.scores diff --git a/cts/scheduler/no_quorum_demote.scores b/cts/scheduler/scores/no_quorum_demote.scores similarity index 100% rename from cts/scheduler/no_quorum_demote.scores rename to cts/scheduler/scores/no_quorum_demote.scores diff --git a/cts/scheduler/node-maintenance-1.scores b/cts/scheduler/scores/node-maintenance-1.scores similarity index 100% rename from cts/scheduler/node-maintenance-1.scores rename to cts/scheduler/scores/node-maintenance-1.scores diff --git a/cts/scheduler/node-maintenance-2.scores b/cts/scheduler/scores/node-maintenance-2.scores similarity index 100% rename from cts/scheduler/node-maintenance-2.scores rename to cts/scheduler/scores/node-maintenance-2.scores diff --git a/cts/scheduler/not-installed-agent.scores b/cts/scheduler/scores/not-installed-agent.scores similarity index 100% rename from cts/scheduler/not-installed-agent.scores rename to cts/scheduler/scores/not-installed-agent.scores diff --git a/cts/scheduler/not-installed-tools.scores b/cts/scheduler/scores/not-installed-tools.scores similarity index 100% rename from cts/scheduler/not-installed-tools.scores rename to cts/scheduler/scores/not-installed-tools.scores diff --git a/cts/scheduler/not-reschedule-unneeded-monitor.scores b/cts/scheduler/scores/not-reschedule-unneeded-monitor.scores similarity index 100% rename from cts/scheduler/not-reschedule-unneeded-monitor.scores rename to cts/scheduler/scores/not-reschedule-unneeded-monitor.scores diff --git a/cts/scheduler/notifs-for-unrunnable.scores b/cts/scheduler/scores/notifs-for-unrunnable.scores similarity index 100% rename from cts/scheduler/notifs-for-unrunnable.scores rename to cts/scheduler/scores/notifs-for-unrunnable.scores diff --git a/cts/scheduler/notify-0.scores b/cts/scheduler/scores/notify-0.scores similarity index 100% rename from cts/scheduler/notify-0.scores rename to cts/scheduler/scores/notify-0.scores diff --git a/cts/scheduler/notify-1.scores b/cts/scheduler/scores/notify-1.scores similarity index 100% rename from cts/scheduler/notify-1.scores rename to cts/scheduler/scores/notify-1.scores diff --git a/cts/scheduler/notify-2.scores b/cts/scheduler/scores/notify-2.scores similarity index 100% rename from cts/scheduler/notify-2.scores rename to cts/scheduler/scores/notify-2.scores diff --git a/cts/scheduler/notify-3.scores b/cts/scheduler/scores/notify-3.scores similarity index 100% rename from cts/scheduler/notify-3.scores rename to cts/scheduler/scores/notify-3.scores diff --git a/cts/scheduler/notify-behind-stopping-remote.scores b/cts/scheduler/scores/notify-behind-stopping-remote.scores similarity index 100% rename from cts/scheduler/notify-behind-stopping-remote.scores rename to cts/scheduler/scores/notify-behind-stopping-remote.scores diff --git a/cts/scheduler/novell-239079.scores b/cts/scheduler/scores/novell-239079.scores similarity index 100% rename from cts/scheduler/novell-239079.scores rename to cts/scheduler/scores/novell-239079.scores diff --git a/cts/scheduler/novell-239082.scores b/cts/scheduler/scores/novell-239082.scores similarity index 100% rename from cts/scheduler/novell-239082.scores rename to cts/scheduler/scores/novell-239082.scores diff --git a/cts/scheduler/novell-239087.scores b/cts/scheduler/scores/novell-239087.scores similarity index 100% rename from cts/scheduler/novell-239087.scores rename to cts/scheduler/scores/novell-239087.scores diff --git a/cts/scheduler/novell-251689.scores b/cts/scheduler/scores/novell-251689.scores similarity index 100% rename from cts/scheduler/novell-251689.scores rename to cts/scheduler/scores/novell-251689.scores diff --git a/cts/scheduler/novell-252693-2.scores b/cts/scheduler/scores/novell-252693-2.scores similarity index 100% rename from cts/scheduler/novell-252693-2.scores rename to cts/scheduler/scores/novell-252693-2.scores diff --git a/cts/scheduler/novell-252693-3.scores b/cts/scheduler/scores/novell-252693-3.scores similarity index 100% rename from cts/scheduler/novell-252693-3.scores rename to cts/scheduler/scores/novell-252693-3.scores diff --git a/cts/scheduler/novell-252693.scores b/cts/scheduler/scores/novell-252693.scores similarity index 100% rename from cts/scheduler/novell-252693.scores rename to cts/scheduler/scores/novell-252693.scores diff --git a/cts/scheduler/nvpair-date-rules-1.scores b/cts/scheduler/scores/nvpair-date-rules-1.scores similarity index 100% rename from cts/scheduler/nvpair-date-rules-1.scores rename to cts/scheduler/scores/nvpair-date-rules-1.scores diff --git a/cts/scheduler/nvpair-id-ref.scores b/cts/scheduler/scores/nvpair-id-ref.scores similarity index 100% rename from cts/scheduler/nvpair-id-ref.scores rename to cts/scheduler/scores/nvpair-id-ref.scores diff --git a/cts/scheduler/obsolete-lrm-resource.scores b/cts/scheduler/scores/obsolete-lrm-resource.scores similarity index 100% rename from cts/scheduler/obsolete-lrm-resource.scores rename to cts/scheduler/scores/obsolete-lrm-resource.scores diff --git a/cts/scheduler/ocf_degraded-remap-ocf_ok.scores b/cts/scheduler/scores/ocf_degraded-remap-ocf_ok.scores similarity index 100% rename from cts/scheduler/ocf_degraded-remap-ocf_ok.scores rename to cts/scheduler/scores/ocf_degraded-remap-ocf_ok.scores diff --git a/cts/scheduler/ocf_degraded_master-remap-ocf_ok.scores b/cts/scheduler/scores/ocf_degraded_master-remap-ocf_ok.scores similarity index 100% rename from cts/scheduler/ocf_degraded_master-remap-ocf_ok.scores rename to cts/scheduler/scores/ocf_degraded_master-remap-ocf_ok.scores diff --git a/cts/scheduler/on-fail-ignore.scores b/cts/scheduler/scores/on-fail-ignore.scores similarity index 100% rename from cts/scheduler/on-fail-ignore.scores rename to cts/scheduler/scores/on-fail-ignore.scores diff --git a/cts/scheduler/on_fail_demote1.scores b/cts/scheduler/scores/on_fail_demote1.scores similarity index 100% rename from cts/scheduler/on_fail_demote1.scores rename to cts/scheduler/scores/on_fail_demote1.scores diff --git a/cts/scheduler/on_fail_demote2.scores b/cts/scheduler/scores/on_fail_demote2.scores similarity index 100% rename from cts/scheduler/on_fail_demote2.scores rename to cts/scheduler/scores/on_fail_demote2.scores diff --git a/cts/scheduler/on_fail_demote3.scores b/cts/scheduler/scores/on_fail_demote3.scores similarity index 100% rename from cts/scheduler/on_fail_demote3.scores rename to cts/scheduler/scores/on_fail_demote3.scores diff --git a/cts/scheduler/on_fail_demote4.scores b/cts/scheduler/scores/on_fail_demote4.scores similarity index 100% rename from cts/scheduler/on_fail_demote4.scores rename to cts/scheduler/scores/on_fail_demote4.scores diff --git a/cts/scheduler/one-or-more-0.scores b/cts/scheduler/scores/one-or-more-0.scores similarity index 100% rename from cts/scheduler/one-or-more-0.scores rename to cts/scheduler/scores/one-or-more-0.scores diff --git a/cts/scheduler/one-or-more-1.scores b/cts/scheduler/scores/one-or-more-1.scores similarity index 100% rename from cts/scheduler/one-or-more-1.scores rename to cts/scheduler/scores/one-or-more-1.scores diff --git a/cts/scheduler/one-or-more-2.scores b/cts/scheduler/scores/one-or-more-2.scores similarity index 100% rename from cts/scheduler/one-or-more-2.scores rename to cts/scheduler/scores/one-or-more-2.scores diff --git a/cts/scheduler/one-or-more-3.scores b/cts/scheduler/scores/one-or-more-3.scores similarity index 100% rename from cts/scheduler/one-or-more-3.scores rename to cts/scheduler/scores/one-or-more-3.scores diff --git a/cts/scheduler/one-or-more-4.scores b/cts/scheduler/scores/one-or-more-4.scores similarity index 100% rename from cts/scheduler/one-or-more-4.scores rename to cts/scheduler/scores/one-or-more-4.scores diff --git a/cts/scheduler/one-or-more-5.scores b/cts/scheduler/scores/one-or-more-5.scores similarity index 100% rename from cts/scheduler/one-or-more-5.scores rename to cts/scheduler/scores/one-or-more-5.scores diff --git a/cts/scheduler/one-or-more-6.scores b/cts/scheduler/scores/one-or-more-6.scores similarity index 100% rename from cts/scheduler/one-or-more-6.scores rename to cts/scheduler/scores/one-or-more-6.scores diff --git a/cts/scheduler/one-or-more-7.scores b/cts/scheduler/scores/one-or-more-7.scores similarity index 100% rename from cts/scheduler/one-or-more-7.scores rename to cts/scheduler/scores/one-or-more-7.scores diff --git a/cts/scheduler/one-or-more-unrunnable-instances.scores b/cts/scheduler/scores/one-or-more-unrunnable-instances.scores similarity index 100% rename from cts/scheduler/one-or-more-unrunnable-instances.scores rename to cts/scheduler/scores/one-or-more-unrunnable-instances.scores diff --git a/cts/scheduler/op-defaults-2.scores b/cts/scheduler/scores/op-defaults-2.scores similarity index 100% rename from cts/scheduler/op-defaults-2.scores rename to cts/scheduler/scores/op-defaults-2.scores diff --git a/cts/scheduler/op-defaults-3.scores b/cts/scheduler/scores/op-defaults-3.scores similarity index 100% rename from cts/scheduler/op-defaults-3.scores rename to cts/scheduler/scores/op-defaults-3.scores diff --git a/cts/scheduler/op-defaults.scores b/cts/scheduler/scores/op-defaults.scores similarity index 100% rename from cts/scheduler/op-defaults.scores rename to cts/scheduler/scores/op-defaults.scores diff --git a/cts/scheduler/order-clone.scores b/cts/scheduler/scores/order-clone.scores similarity index 100% rename from cts/scheduler/order-clone.scores rename to cts/scheduler/scores/order-clone.scores diff --git a/cts/scheduler/order-expired-failure.scores b/cts/scheduler/scores/order-expired-failure.scores similarity index 100% rename from cts/scheduler/order-expired-failure.scores rename to cts/scheduler/scores/order-expired-failure.scores diff --git a/cts/scheduler/order-first-probes.scores b/cts/scheduler/scores/order-first-probes.scores similarity index 100% rename from cts/scheduler/order-first-probes.scores rename to cts/scheduler/scores/order-first-probes.scores diff --git a/cts/scheduler/order-mandatory.scores b/cts/scheduler/scores/order-mandatory.scores similarity index 100% rename from cts/scheduler/order-mandatory.scores rename to cts/scheduler/scores/order-mandatory.scores diff --git a/cts/scheduler/order-optional-keyword.scores b/cts/scheduler/scores/order-optional-keyword.scores similarity index 100% rename from cts/scheduler/order-optional-keyword.scores rename to cts/scheduler/scores/order-optional-keyword.scores diff --git a/cts/scheduler/order-optional.scores b/cts/scheduler/scores/order-optional.scores similarity index 100% rename from cts/scheduler/order-optional.scores rename to cts/scheduler/scores/order-optional.scores diff --git a/cts/scheduler/order-required.scores b/cts/scheduler/scores/order-required.scores similarity index 100% rename from cts/scheduler/order-required.scores rename to cts/scheduler/scores/order-required.scores diff --git a/cts/scheduler/order-serialize-set.scores b/cts/scheduler/scores/order-serialize-set.scores similarity index 100% rename from cts/scheduler/order-serialize-set.scores rename to cts/scheduler/scores/order-serialize-set.scores diff --git a/cts/scheduler/order-serialize.scores b/cts/scheduler/scores/order-serialize.scores similarity index 100% rename from cts/scheduler/order-serialize.scores rename to cts/scheduler/scores/order-serialize.scores diff --git a/cts/scheduler/order-sets.scores b/cts/scheduler/scores/order-sets.scores similarity index 100% rename from cts/scheduler/order-sets.scores rename to cts/scheduler/scores/order-sets.scores diff --git a/cts/scheduler/order-wrong-kind.scores b/cts/scheduler/scores/order-wrong-kind.scores similarity index 100% rename from cts/scheduler/order-wrong-kind.scores rename to cts/scheduler/scores/order-wrong-kind.scores diff --git a/cts/scheduler/order1.scores b/cts/scheduler/scores/order1.scores similarity index 100% rename from cts/scheduler/order1.scores rename to cts/scheduler/scores/order1.scores diff --git a/cts/scheduler/order2.scores b/cts/scheduler/scores/order2.scores similarity index 100% rename from cts/scheduler/order2.scores rename to cts/scheduler/scores/order2.scores diff --git a/cts/scheduler/order3.scores b/cts/scheduler/scores/order3.scores similarity index 100% rename from cts/scheduler/order3.scores rename to cts/scheduler/scores/order3.scores diff --git a/cts/scheduler/order4.scores b/cts/scheduler/scores/order4.scores similarity index 100% rename from cts/scheduler/order4.scores rename to cts/scheduler/scores/order4.scores diff --git a/cts/scheduler/order5.scores b/cts/scheduler/scores/order5.scores similarity index 100% rename from cts/scheduler/order5.scores rename to cts/scheduler/scores/order5.scores diff --git a/cts/scheduler/order6.scores b/cts/scheduler/scores/order6.scores similarity index 100% rename from cts/scheduler/order6.scores rename to cts/scheduler/scores/order6.scores diff --git a/cts/scheduler/order7.scores b/cts/scheduler/scores/order7.scores similarity index 100% rename from cts/scheduler/order7.scores rename to cts/scheduler/scores/order7.scores diff --git a/cts/scheduler/order_constraint_stops_master.scores b/cts/scheduler/scores/order_constraint_stops_master.scores similarity index 100% rename from cts/scheduler/order_constraint_stops_master.scores rename to cts/scheduler/scores/order_constraint_stops_master.scores diff --git a/cts/scheduler/order_constraint_stops_slave.scores b/cts/scheduler/scores/order_constraint_stops_slave.scores similarity index 100% rename from cts/scheduler/order_constraint_stops_slave.scores rename to cts/scheduler/scores/order_constraint_stops_slave.scores diff --git a/cts/scheduler/ordered-set-basic-startup.scores b/cts/scheduler/scores/ordered-set-basic-startup.scores similarity index 100% rename from cts/scheduler/ordered-set-basic-startup.scores rename to cts/scheduler/scores/ordered-set-basic-startup.scores diff --git a/cts/scheduler/ordered-set-natural.scores b/cts/scheduler/scores/ordered-set-natural.scores similarity index 100% rename from cts/scheduler/ordered-set-natural.scores rename to cts/scheduler/scores/ordered-set-natural.scores diff --git a/cts/scheduler/origin.scores b/cts/scheduler/scores/origin.scores similarity index 100% rename from cts/scheduler/origin.scores rename to cts/scheduler/scores/origin.scores diff --git a/cts/scheduler/orphan-0.scores b/cts/scheduler/scores/orphan-0.scores similarity index 100% rename from cts/scheduler/orphan-0.scores rename to cts/scheduler/scores/orphan-0.scores diff --git a/cts/scheduler/orphan-1.scores b/cts/scheduler/scores/orphan-1.scores similarity index 100% rename from cts/scheduler/orphan-1.scores rename to cts/scheduler/scores/orphan-1.scores diff --git a/cts/scheduler/orphan-2.scores b/cts/scheduler/scores/orphan-2.scores similarity index 100% rename from cts/scheduler/orphan-2.scores rename to cts/scheduler/scores/orphan-2.scores diff --git a/cts/scheduler/params-0.scores b/cts/scheduler/scores/params-0.scores similarity index 100% rename from cts/scheduler/params-0.scores rename to cts/scheduler/scores/params-0.scores diff --git a/cts/scheduler/params-1.scores b/cts/scheduler/scores/params-1.scores similarity index 100% rename from cts/scheduler/params-1.scores rename to cts/scheduler/scores/params-1.scores diff --git a/cts/scheduler/params-2.scores b/cts/scheduler/scores/params-2.scores similarity index 100% rename from cts/scheduler/params-2.scores rename to cts/scheduler/scores/params-2.scores diff --git a/cts/scheduler/params-3.scores b/cts/scheduler/scores/params-3.scores similarity index 100% rename from cts/scheduler/params-3.scores rename to cts/scheduler/scores/params-3.scores diff --git a/cts/scheduler/params-4.scores b/cts/scheduler/scores/params-4.scores similarity index 100% rename from cts/scheduler/params-4.scores rename to cts/scheduler/scores/params-4.scores diff --git a/cts/scheduler/params-5.scores b/cts/scheduler/scores/params-5.scores similarity index 100% rename from cts/scheduler/params-5.scores rename to cts/scheduler/scores/params-5.scores diff --git a/cts/scheduler/params-6.scores b/cts/scheduler/scores/params-6.scores similarity index 100% rename from cts/scheduler/params-6.scores rename to cts/scheduler/scores/params-6.scores diff --git a/cts/scheduler/per-node-attrs.scores b/cts/scheduler/scores/per-node-attrs.scores similarity index 100% rename from cts/scheduler/per-node-attrs.scores rename to cts/scheduler/scores/per-node-attrs.scores diff --git a/cts/scheduler/per-op-failcount.scores b/cts/scheduler/scores/per-op-failcount.scores similarity index 100% rename from cts/scheduler/per-op-failcount.scores rename to cts/scheduler/scores/per-op-failcount.scores diff --git a/cts/scheduler/placement-capacity.scores b/cts/scheduler/scores/placement-capacity.scores similarity index 100% rename from cts/scheduler/placement-capacity.scores rename to cts/scheduler/scores/placement-capacity.scores diff --git a/cts/scheduler/placement-location.scores b/cts/scheduler/scores/placement-location.scores similarity index 100% rename from cts/scheduler/placement-location.scores rename to cts/scheduler/scores/placement-location.scores diff --git a/cts/scheduler/placement-priority.scores b/cts/scheduler/scores/placement-priority.scores similarity index 100% rename from cts/scheduler/placement-priority.scores rename to cts/scheduler/scores/placement-priority.scores diff --git a/cts/scheduler/placement-stickiness.scores b/cts/scheduler/scores/placement-stickiness.scores similarity index 100% rename from cts/scheduler/placement-stickiness.scores rename to cts/scheduler/scores/placement-stickiness.scores diff --git a/cts/scheduler/priority-fencing-delay.scores b/cts/scheduler/scores/priority-fencing-delay.scores similarity index 100% rename from cts/scheduler/priority-fencing-delay.scores rename to cts/scheduler/scores/priority-fencing-delay.scores diff --git a/cts/scheduler/probe-0.scores b/cts/scheduler/scores/probe-0.scores similarity index 100% rename from cts/scheduler/probe-0.scores rename to cts/scheduler/scores/probe-0.scores diff --git a/cts/scheduler/probe-1.scores b/cts/scheduler/scores/probe-1.scores similarity index 100% rename from cts/scheduler/probe-1.scores rename to cts/scheduler/scores/probe-1.scores diff --git a/cts/scheduler/probe-2.scores b/cts/scheduler/scores/probe-2.scores similarity index 100% rename from cts/scheduler/probe-2.scores rename to cts/scheduler/scores/probe-2.scores diff --git a/cts/scheduler/probe-3.scores b/cts/scheduler/scores/probe-3.scores similarity index 100% rename from cts/scheduler/probe-3.scores rename to cts/scheduler/scores/probe-3.scores diff --git a/cts/scheduler/probe-4.scores b/cts/scheduler/scores/probe-4.scores similarity index 100% rename from cts/scheduler/probe-4.scores rename to cts/scheduler/scores/probe-4.scores diff --git a/cts/scheduler/probe-timeout.scores b/cts/scheduler/scores/probe-timeout.scores similarity index 100% rename from cts/scheduler/probe-timeout.scores rename to cts/scheduler/scores/probe-timeout.scores diff --git a/cts/scheduler/quorum-1.scores b/cts/scheduler/scores/quorum-1.scores similarity index 100% rename from cts/scheduler/quorum-1.scores rename to cts/scheduler/scores/quorum-1.scores diff --git a/cts/scheduler/quorum-2.scores b/cts/scheduler/scores/quorum-2.scores similarity index 100% rename from cts/scheduler/quorum-2.scores rename to cts/scheduler/scores/quorum-2.scores diff --git a/cts/scheduler/quorum-3.scores b/cts/scheduler/scores/quorum-3.scores similarity index 100% rename from cts/scheduler/quorum-3.scores rename to cts/scheduler/scores/quorum-3.scores diff --git a/cts/scheduler/quorum-4.scores b/cts/scheduler/scores/quorum-4.scores similarity index 100% rename from cts/scheduler/quorum-4.scores rename to cts/scheduler/scores/quorum-4.scores diff --git a/cts/scheduler/quorum-5.scores b/cts/scheduler/scores/quorum-5.scores similarity index 100% rename from cts/scheduler/quorum-5.scores rename to cts/scheduler/scores/quorum-5.scores diff --git a/cts/scheduler/quorum-6.scores b/cts/scheduler/scores/quorum-6.scores similarity index 100% rename from cts/scheduler/quorum-6.scores rename to cts/scheduler/scores/quorum-6.scores diff --git a/cts/scheduler/rebalance-unique-clones.scores b/cts/scheduler/scores/rebalance-unique-clones.scores similarity index 100% rename from cts/scheduler/rebalance-unique-clones.scores rename to cts/scheduler/scores/rebalance-unique-clones.scores diff --git a/cts/scheduler/rec-node-1.scores b/cts/scheduler/scores/rec-node-1.scores similarity index 100% rename from cts/scheduler/rec-node-1.scores rename to cts/scheduler/scores/rec-node-1.scores diff --git a/cts/scheduler/rec-node-10.scores b/cts/scheduler/scores/rec-node-10.scores similarity index 100% rename from cts/scheduler/rec-node-10.scores rename to cts/scheduler/scores/rec-node-10.scores diff --git a/cts/scheduler/rec-node-11.scores b/cts/scheduler/scores/rec-node-11.scores similarity index 100% rename from cts/scheduler/rec-node-11.scores rename to cts/scheduler/scores/rec-node-11.scores diff --git a/cts/scheduler/rec-node-12.scores b/cts/scheduler/scores/rec-node-12.scores similarity index 100% rename from cts/scheduler/rec-node-12.scores rename to cts/scheduler/scores/rec-node-12.scores diff --git a/cts/scheduler/rec-node-13.scores b/cts/scheduler/scores/rec-node-13.scores similarity index 100% rename from cts/scheduler/rec-node-13.scores rename to cts/scheduler/scores/rec-node-13.scores diff --git a/cts/scheduler/rec-node-14.scores b/cts/scheduler/scores/rec-node-14.scores similarity index 100% rename from cts/scheduler/rec-node-14.scores rename to cts/scheduler/scores/rec-node-14.scores diff --git a/cts/scheduler/rec-node-15.scores b/cts/scheduler/scores/rec-node-15.scores similarity index 100% rename from cts/scheduler/rec-node-15.scores rename to cts/scheduler/scores/rec-node-15.scores diff --git a/cts/scheduler/rec-node-2.scores b/cts/scheduler/scores/rec-node-2.scores similarity index 100% rename from cts/scheduler/rec-node-2.scores rename to cts/scheduler/scores/rec-node-2.scores diff --git a/cts/scheduler/rec-node-3.scores b/cts/scheduler/scores/rec-node-3.scores similarity index 100% rename from cts/scheduler/rec-node-3.scores rename to cts/scheduler/scores/rec-node-3.scores diff --git a/cts/scheduler/rec-node-4.scores b/cts/scheduler/scores/rec-node-4.scores similarity index 100% rename from cts/scheduler/rec-node-4.scores rename to cts/scheduler/scores/rec-node-4.scores diff --git a/cts/scheduler/rec-node-5.scores b/cts/scheduler/scores/rec-node-5.scores similarity index 100% rename from cts/scheduler/rec-node-5.scores rename to cts/scheduler/scores/rec-node-5.scores diff --git a/cts/scheduler/rec-node-6.scores b/cts/scheduler/scores/rec-node-6.scores similarity index 100% rename from cts/scheduler/rec-node-6.scores rename to cts/scheduler/scores/rec-node-6.scores diff --git a/cts/scheduler/rec-node-7.scores b/cts/scheduler/scores/rec-node-7.scores similarity index 100% rename from cts/scheduler/rec-node-7.scores rename to cts/scheduler/scores/rec-node-7.scores diff --git a/cts/scheduler/rec-node-8.scores b/cts/scheduler/scores/rec-node-8.scores similarity index 100% rename from cts/scheduler/rec-node-8.scores rename to cts/scheduler/scores/rec-node-8.scores diff --git a/cts/scheduler/rec-node-9.scores b/cts/scheduler/scores/rec-node-9.scores similarity index 100% rename from cts/scheduler/rec-node-9.scores rename to cts/scheduler/scores/rec-node-9.scores diff --git a/cts/scheduler/rec-rsc-0.scores b/cts/scheduler/scores/rec-rsc-0.scores similarity index 100% rename from cts/scheduler/rec-rsc-0.scores rename to cts/scheduler/scores/rec-rsc-0.scores diff --git a/cts/scheduler/rec-rsc-1.scores b/cts/scheduler/scores/rec-rsc-1.scores similarity index 100% rename from cts/scheduler/rec-rsc-1.scores rename to cts/scheduler/scores/rec-rsc-1.scores diff --git a/cts/scheduler/rec-rsc-2.scores b/cts/scheduler/scores/rec-rsc-2.scores similarity index 100% rename from cts/scheduler/rec-rsc-2.scores rename to cts/scheduler/scores/rec-rsc-2.scores diff --git a/cts/scheduler/rec-rsc-3.scores b/cts/scheduler/scores/rec-rsc-3.scores similarity index 100% rename from cts/scheduler/rec-rsc-3.scores rename to cts/scheduler/scores/rec-rsc-3.scores diff --git a/cts/scheduler/rec-rsc-4.scores b/cts/scheduler/scores/rec-rsc-4.scores similarity index 100% rename from cts/scheduler/rec-rsc-4.scores rename to cts/scheduler/scores/rec-rsc-4.scores diff --git a/cts/scheduler/rec-rsc-5.scores b/cts/scheduler/scores/rec-rsc-5.scores similarity index 100% rename from cts/scheduler/rec-rsc-5.scores rename to cts/scheduler/scores/rec-rsc-5.scores diff --git a/cts/scheduler/rec-rsc-6.scores b/cts/scheduler/scores/rec-rsc-6.scores similarity index 100% rename from cts/scheduler/rec-rsc-6.scores rename to cts/scheduler/scores/rec-rsc-6.scores diff --git a/cts/scheduler/rec-rsc-7.scores b/cts/scheduler/scores/rec-rsc-7.scores similarity index 100% rename from cts/scheduler/rec-rsc-7.scores rename to cts/scheduler/scores/rec-rsc-7.scores diff --git a/cts/scheduler/rec-rsc-8.scores b/cts/scheduler/scores/rec-rsc-8.scores similarity index 100% rename from cts/scheduler/rec-rsc-8.scores rename to cts/scheduler/scores/rec-rsc-8.scores diff --git a/cts/scheduler/rec-rsc-9.scores b/cts/scheduler/scores/rec-rsc-9.scores similarity index 100% rename from cts/scheduler/rec-rsc-9.scores rename to cts/scheduler/scores/rec-rsc-9.scores diff --git a/cts/scheduler/reload-becomes-restart.scores b/cts/scheduler/scores/reload-becomes-restart.scores similarity index 100% rename from cts/scheduler/reload-becomes-restart.scores rename to cts/scheduler/scores/reload-becomes-restart.scores diff --git a/cts/scheduler/reload-versioned.scores b/cts/scheduler/scores/reload-versioned.scores similarity index 100% rename from cts/scheduler/reload-versioned.scores rename to cts/scheduler/scores/reload-versioned.scores diff --git a/cts/scheduler/remote-connection-shutdown.scores b/cts/scheduler/scores/remote-connection-shutdown.scores similarity index 100% rename from cts/scheduler/remote-connection-shutdown.scores rename to cts/scheduler/scores/remote-connection-shutdown.scores diff --git a/cts/scheduler/remote-connection-unrecoverable.scores b/cts/scheduler/scores/remote-connection-unrecoverable.scores similarity index 100% rename from cts/scheduler/remote-connection-unrecoverable.scores rename to cts/scheduler/scores/remote-connection-unrecoverable.scores diff --git a/cts/scheduler/remote-disable.scores b/cts/scheduler/scores/remote-disable.scores similarity index 100% rename from cts/scheduler/remote-disable.scores rename to cts/scheduler/scores/remote-disable.scores diff --git a/cts/scheduler/remote-fence-before-reconnect.scores b/cts/scheduler/scores/remote-fence-before-reconnect.scores similarity index 100% rename from cts/scheduler/remote-fence-before-reconnect.scores rename to cts/scheduler/scores/remote-fence-before-reconnect.scores diff --git a/cts/scheduler/remote-fence-unclean-3.scores b/cts/scheduler/scores/remote-fence-unclean-3.scores similarity index 100% rename from cts/scheduler/remote-fence-unclean-3.scores rename to cts/scheduler/scores/remote-fence-unclean-3.scores diff --git a/cts/scheduler/remote-fence-unclean.scores b/cts/scheduler/scores/remote-fence-unclean.scores similarity index 100% rename from cts/scheduler/remote-fence-unclean.scores rename to cts/scheduler/scores/remote-fence-unclean.scores diff --git a/cts/scheduler/remote-fence-unclean2.scores b/cts/scheduler/scores/remote-fence-unclean2.scores similarity index 100% rename from cts/scheduler/remote-fence-unclean2.scores rename to cts/scheduler/scores/remote-fence-unclean2.scores diff --git a/cts/scheduler/remote-move.scores b/cts/scheduler/scores/remote-move.scores similarity index 100% rename from cts/scheduler/remote-move.scores rename to cts/scheduler/scores/remote-move.scores diff --git a/cts/scheduler/remote-orphaned.scores b/cts/scheduler/scores/remote-orphaned.scores similarity index 100% rename from cts/scheduler/remote-orphaned.scores rename to cts/scheduler/scores/remote-orphaned.scores diff --git a/cts/scheduler/remote-orphaned2.scores b/cts/scheduler/scores/remote-orphaned2.scores similarity index 100% rename from cts/scheduler/remote-orphaned2.scores rename to cts/scheduler/scores/remote-orphaned2.scores diff --git a/cts/scheduler/remote-partial-migrate.scores b/cts/scheduler/scores/remote-partial-migrate.scores similarity index 100% rename from cts/scheduler/remote-partial-migrate.scores rename to cts/scheduler/scores/remote-partial-migrate.scores diff --git a/cts/scheduler/remote-partial-migrate2.scores b/cts/scheduler/scores/remote-partial-migrate2.scores similarity index 100% rename from cts/scheduler/remote-partial-migrate2.scores rename to cts/scheduler/scores/remote-partial-migrate2.scores diff --git a/cts/scheduler/remote-probe-disable.scores b/cts/scheduler/scores/remote-probe-disable.scores similarity index 100% rename from cts/scheduler/remote-probe-disable.scores rename to cts/scheduler/scores/remote-probe-disable.scores diff --git a/cts/scheduler/remote-reconnect-delay.scores b/cts/scheduler/scores/remote-reconnect-delay.scores similarity index 100% rename from cts/scheduler/remote-reconnect-delay.scores rename to cts/scheduler/scores/remote-reconnect-delay.scores diff --git a/cts/scheduler/remote-recover-all.scores b/cts/scheduler/scores/remote-recover-all.scores similarity index 100% rename from cts/scheduler/remote-recover-all.scores rename to cts/scheduler/scores/remote-recover-all.scores diff --git a/cts/scheduler/remote-recover-connection.scores b/cts/scheduler/scores/remote-recover-connection.scores similarity index 100% rename from cts/scheduler/remote-recover-connection.scores rename to cts/scheduler/scores/remote-recover-connection.scores diff --git a/cts/scheduler/remote-recover-fail.scores b/cts/scheduler/scores/remote-recover-fail.scores similarity index 100% rename from cts/scheduler/remote-recover-fail.scores rename to cts/scheduler/scores/remote-recover-fail.scores diff --git a/cts/scheduler/remote-recover-no-resources.scores b/cts/scheduler/scores/remote-recover-no-resources.scores similarity index 100% rename from cts/scheduler/remote-recover-no-resources.scores rename to cts/scheduler/scores/remote-recover-no-resources.scores diff --git a/cts/scheduler/remote-recover-unknown.scores b/cts/scheduler/scores/remote-recover-unknown.scores similarity index 100% rename from cts/scheduler/remote-recover-unknown.scores rename to cts/scheduler/scores/remote-recover-unknown.scores diff --git a/cts/scheduler/remote-recover.scores b/cts/scheduler/scores/remote-recover.scores similarity index 100% rename from cts/scheduler/remote-recover.scores rename to cts/scheduler/scores/remote-recover.scores diff --git a/cts/scheduler/remote-recovery.scores b/cts/scheduler/scores/remote-recovery.scores similarity index 100% rename from cts/scheduler/remote-recovery.scores rename to cts/scheduler/scores/remote-recovery.scores diff --git a/cts/scheduler/remote-stale-node-entry.scores b/cts/scheduler/scores/remote-stale-node-entry.scores similarity index 100% rename from cts/scheduler/remote-stale-node-entry.scores rename to cts/scheduler/scores/remote-stale-node-entry.scores diff --git a/cts/scheduler/remote-start-fail.scores b/cts/scheduler/scores/remote-start-fail.scores similarity index 100% rename from cts/scheduler/remote-start-fail.scores rename to cts/scheduler/scores/remote-start-fail.scores diff --git a/cts/scheduler/remote-startup-probes.scores b/cts/scheduler/scores/remote-startup-probes.scores similarity index 100% rename from cts/scheduler/remote-startup-probes.scores rename to cts/scheduler/scores/remote-startup-probes.scores diff --git a/cts/scheduler/remote-startup.scores b/cts/scheduler/scores/remote-startup.scores similarity index 100% rename from cts/scheduler/remote-startup.scores rename to cts/scheduler/scores/remote-startup.scores diff --git a/cts/scheduler/remote-unclean2.scores b/cts/scheduler/scores/remote-unclean2.scores similarity index 100% rename from cts/scheduler/remote-unclean2.scores rename to cts/scheduler/scores/remote-unclean2.scores diff --git a/cts/scheduler/reprobe-target_rc.scores b/cts/scheduler/scores/reprobe-target_rc.scores similarity index 100% rename from cts/scheduler/reprobe-target_rc.scores rename to cts/scheduler/scores/reprobe-target_rc.scores diff --git a/cts/scheduler/resource-discovery.scores b/cts/scheduler/scores/resource-discovery.scores similarity index 100% rename from cts/scheduler/resource-discovery.scores rename to cts/scheduler/scores/resource-discovery.scores diff --git a/cts/scheduler/restart-versioned.scores b/cts/scheduler/scores/restart-versioned.scores similarity index 100% rename from cts/scheduler/restart-versioned.scores rename to cts/scheduler/scores/restart-versioned.scores diff --git a/cts/scheduler/route-remote-notify.scores b/cts/scheduler/scores/route-remote-notify.scores similarity index 100% rename from cts/scheduler/route-remote-notify.scores rename to cts/scheduler/scores/route-remote-notify.scores diff --git a/cts/scheduler/rsc-defaults-2.scores b/cts/scheduler/scores/rsc-defaults-2.scores similarity index 100% rename from cts/scheduler/rsc-defaults-2.scores rename to cts/scheduler/scores/rsc-defaults-2.scores diff --git a/cts/scheduler/rsc-defaults.scores b/cts/scheduler/scores/rsc-defaults.scores similarity index 100% rename from cts/scheduler/rsc-defaults.scores rename to cts/scheduler/scores/rsc-defaults.scores diff --git a/cts/scheduler/rsc-discovery-per-node.scores b/cts/scheduler/scores/rsc-discovery-per-node.scores similarity index 100% rename from cts/scheduler/rsc-discovery-per-node.scores rename to cts/scheduler/scores/rsc-discovery-per-node.scores diff --git a/cts/scheduler/rsc-maintenance.scores b/cts/scheduler/scores/rsc-maintenance.scores similarity index 100% rename from cts/scheduler/rsc-maintenance.scores rename to cts/scheduler/scores/rsc-maintenance.scores diff --git a/cts/scheduler/rsc-sets-clone-1.scores b/cts/scheduler/scores/rsc-sets-clone-1.scores similarity index 100% rename from cts/scheduler/rsc-sets-clone-1.scores rename to cts/scheduler/scores/rsc-sets-clone-1.scores diff --git a/cts/scheduler/rsc-sets-clone.scores b/cts/scheduler/scores/rsc-sets-clone.scores similarity index 100% rename from cts/scheduler/rsc-sets-clone.scores rename to cts/scheduler/scores/rsc-sets-clone.scores diff --git a/cts/scheduler/rsc-sets-master.scores b/cts/scheduler/scores/rsc-sets-master.scores similarity index 100% rename from cts/scheduler/rsc-sets-master.scores rename to cts/scheduler/scores/rsc-sets-master.scores diff --git a/cts/scheduler/rsc-sets-seq-false.scores b/cts/scheduler/scores/rsc-sets-seq-false.scores similarity index 100% rename from cts/scheduler/rsc-sets-seq-false.scores rename to cts/scheduler/scores/rsc-sets-seq-false.scores diff --git a/cts/scheduler/rsc-sets-seq-true.scores b/cts/scheduler/scores/rsc-sets-seq-true.scores similarity index 100% rename from cts/scheduler/rsc-sets-seq-true.scores rename to cts/scheduler/scores/rsc-sets-seq-true.scores diff --git a/cts/scheduler/rsc_dep1.scores b/cts/scheduler/scores/rsc_dep1.scores similarity index 100% rename from cts/scheduler/rsc_dep1.scores rename to cts/scheduler/scores/rsc_dep1.scores diff --git a/cts/scheduler/rsc_dep10.scores b/cts/scheduler/scores/rsc_dep10.scores similarity index 100% rename from cts/scheduler/rsc_dep10.scores rename to cts/scheduler/scores/rsc_dep10.scores diff --git a/cts/scheduler/rsc_dep2.scores b/cts/scheduler/scores/rsc_dep2.scores similarity index 100% rename from cts/scheduler/rsc_dep2.scores rename to cts/scheduler/scores/rsc_dep2.scores diff --git a/cts/scheduler/rsc_dep3.scores b/cts/scheduler/scores/rsc_dep3.scores similarity index 100% rename from cts/scheduler/rsc_dep3.scores rename to cts/scheduler/scores/rsc_dep3.scores diff --git a/cts/scheduler/rsc_dep4.scores b/cts/scheduler/scores/rsc_dep4.scores similarity index 100% rename from cts/scheduler/rsc_dep4.scores rename to cts/scheduler/scores/rsc_dep4.scores diff --git a/cts/scheduler/rsc_dep5.scores b/cts/scheduler/scores/rsc_dep5.scores similarity index 100% rename from cts/scheduler/rsc_dep5.scores rename to cts/scheduler/scores/rsc_dep5.scores diff --git a/cts/scheduler/rsc_dep7.scores b/cts/scheduler/scores/rsc_dep7.scores similarity index 100% rename from cts/scheduler/rsc_dep7.scores rename to cts/scheduler/scores/rsc_dep7.scores diff --git a/cts/scheduler/rsc_dep8.scores b/cts/scheduler/scores/rsc_dep8.scores similarity index 100% rename from cts/scheduler/rsc_dep8.scores rename to cts/scheduler/scores/rsc_dep8.scores diff --git a/cts/scheduler/rule-dbl-as-auto-number-match.scores b/cts/scheduler/scores/rule-dbl-as-auto-number-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-match.scores rename to cts/scheduler/scores/rule-dbl-as-auto-number-match.scores diff --git a/cts/scheduler/rule-dbl-as-auto-number-no-match.scores b/cts/scheduler/scores/rule-dbl-as-auto-number-no-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-no-match.scores rename to cts/scheduler/scores/rule-dbl-as-auto-number-no-match.scores diff --git a/cts/scheduler/rule-dbl-as-integer-match.scores b/cts/scheduler/scores/rule-dbl-as-integer-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-match.scores rename to cts/scheduler/scores/rule-dbl-as-integer-match.scores diff --git a/cts/scheduler/rule-dbl-as-integer-no-match.scores b/cts/scheduler/scores/rule-dbl-as-integer-no-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-no-match.scores rename to cts/scheduler/scores/rule-dbl-as-integer-no-match.scores diff --git a/cts/scheduler/rule-dbl-as-number-match.scores b/cts/scheduler/scores/rule-dbl-as-number-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-as-number-match.scores rename to cts/scheduler/scores/rule-dbl-as-number-match.scores diff --git a/cts/scheduler/rule-dbl-as-number-no-match.scores b/cts/scheduler/scores/rule-dbl-as-number-no-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-as-number-no-match.scores rename to cts/scheduler/scores/rule-dbl-as-number-no-match.scores diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-match.scores b/cts/scheduler/scores/rule-dbl-parse-fail-default-str-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-match.scores rename to cts/scheduler/scores/rule-dbl-parse-fail-default-str-match.scores diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-no-match.scores b/cts/scheduler/scores/rule-dbl-parse-fail-default-str-no-match.scores similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-no-match.scores rename to cts/scheduler/scores/rule-dbl-parse-fail-default-str-no-match.scores diff --git a/cts/scheduler/rule-int-as-auto-integer-match.scores b/cts/scheduler/scores/rule-int-as-auto-integer-match.scores similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-match.scores rename to cts/scheduler/scores/rule-int-as-auto-integer-match.scores diff --git a/cts/scheduler/rule-int-as-auto-integer-no-match.scores b/cts/scheduler/scores/rule-int-as-auto-integer-no-match.scores similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-no-match.scores rename to cts/scheduler/scores/rule-int-as-auto-integer-no-match.scores diff --git a/cts/scheduler/rule-int-as-integer-match.scores b/cts/scheduler/scores/rule-int-as-integer-match.scores similarity index 100% rename from cts/scheduler/rule-int-as-integer-match.scores rename to cts/scheduler/scores/rule-int-as-integer-match.scores diff --git a/cts/scheduler/rule-int-as-integer-no-match.scores b/cts/scheduler/scores/rule-int-as-integer-no-match.scores similarity index 100% rename from cts/scheduler/rule-int-as-integer-no-match.scores rename to cts/scheduler/scores/rule-int-as-integer-no-match.scores diff --git a/cts/scheduler/rule-int-as-number-match.scores b/cts/scheduler/scores/rule-int-as-number-match.scores similarity index 100% rename from cts/scheduler/rule-int-as-number-match.scores rename to cts/scheduler/scores/rule-int-as-number-match.scores diff --git a/cts/scheduler/rule-int-as-number-no-match.scores b/cts/scheduler/scores/rule-int-as-number-no-match.scores similarity index 100% rename from cts/scheduler/rule-int-as-number-no-match.scores rename to cts/scheduler/scores/rule-int-as-number-no-match.scores diff --git a/cts/scheduler/rule-int-parse-fail-default-str-match.scores b/cts/scheduler/scores/rule-int-parse-fail-default-str-match.scores similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-match.scores rename to cts/scheduler/scores/rule-int-parse-fail-default-str-match.scores diff --git a/cts/scheduler/rule-int-parse-fail-default-str-no-match.scores b/cts/scheduler/scores/rule-int-parse-fail-default-str-no-match.scores similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-no-match.scores rename to cts/scheduler/scores/rule-int-parse-fail-default-str-no-match.scores diff --git a/cts/scheduler/shutdown-lock-expiration.scores b/cts/scheduler/scores/shutdown-lock-expiration.scores similarity index 100% rename from cts/scheduler/shutdown-lock-expiration.scores rename to cts/scheduler/scores/shutdown-lock-expiration.scores diff --git a/cts/scheduler/shutdown-lock.scores b/cts/scheduler/scores/shutdown-lock.scores similarity index 100% rename from cts/scheduler/shutdown-lock.scores rename to cts/scheduler/scores/shutdown-lock.scores diff --git a/cts/scheduler/shutdown-maintenance-node.scores b/cts/scheduler/scores/shutdown-maintenance-node.scores similarity index 100% rename from cts/scheduler/shutdown-maintenance-node.scores rename to cts/scheduler/scores/shutdown-maintenance-node.scores diff --git a/cts/scheduler/simple1.scores b/cts/scheduler/scores/simple1.scores similarity index 100% rename from cts/scheduler/simple1.scores rename to cts/scheduler/scores/simple1.scores diff --git a/cts/scheduler/simple11.scores b/cts/scheduler/scores/simple11.scores similarity index 100% rename from cts/scheduler/simple11.scores rename to cts/scheduler/scores/simple11.scores diff --git a/cts/scheduler/simple12.scores b/cts/scheduler/scores/simple12.scores similarity index 100% rename from cts/scheduler/simple12.scores rename to cts/scheduler/scores/simple12.scores diff --git a/cts/scheduler/simple2.scores b/cts/scheduler/scores/simple2.scores similarity index 100% rename from cts/scheduler/simple2.scores rename to cts/scheduler/scores/simple2.scores diff --git a/cts/scheduler/simple3.scores b/cts/scheduler/scores/simple3.scores similarity index 100% rename from cts/scheduler/simple3.scores rename to cts/scheduler/scores/simple3.scores diff --git a/cts/scheduler/simple4.scores b/cts/scheduler/scores/simple4.scores similarity index 100% rename from cts/scheduler/simple4.scores rename to cts/scheduler/scores/simple4.scores diff --git a/cts/scheduler/simple6.scores b/cts/scheduler/scores/simple6.scores similarity index 100% rename from cts/scheduler/simple6.scores rename to cts/scheduler/scores/simple6.scores diff --git a/cts/scheduler/simple7.scores b/cts/scheduler/scores/simple7.scores similarity index 100% rename from cts/scheduler/simple7.scores rename to cts/scheduler/scores/simple7.scores diff --git a/cts/scheduler/simple8.scores b/cts/scheduler/scores/simple8.scores similarity index 100% rename from cts/scheduler/simple8.scores rename to cts/scheduler/scores/simple8.scores diff --git a/cts/scheduler/site-specific-params.scores b/cts/scheduler/scores/site-specific-params.scores similarity index 100% rename from cts/scheduler/site-specific-params.scores rename to cts/scheduler/scores/site-specific-params.scores diff --git a/cts/scheduler/standby.scores b/cts/scheduler/scores/standby.scores similarity index 100% rename from cts/scheduler/standby.scores rename to cts/scheduler/scores/standby.scores diff --git a/cts/scheduler/start-then-stop-with-unfence.scores b/cts/scheduler/scores/start-then-stop-with-unfence.scores similarity index 100% rename from cts/scheduler/start-then-stop-with-unfence.scores rename to cts/scheduler/scores/start-then-stop-with-unfence.scores diff --git a/cts/scheduler/stonith-0.scores b/cts/scheduler/scores/stonith-0.scores similarity index 100% rename from cts/scheduler/stonith-0.scores rename to cts/scheduler/scores/stonith-0.scores diff --git a/cts/scheduler/stonith-1.scores b/cts/scheduler/scores/stonith-1.scores similarity index 100% rename from cts/scheduler/stonith-1.scores rename to cts/scheduler/scores/stonith-1.scores diff --git a/cts/scheduler/stonith-2.scores b/cts/scheduler/scores/stonith-2.scores similarity index 100% rename from cts/scheduler/stonith-2.scores rename to cts/scheduler/scores/stonith-2.scores diff --git a/cts/scheduler/stonith-3.scores b/cts/scheduler/scores/stonith-3.scores similarity index 100% rename from cts/scheduler/stonith-3.scores rename to cts/scheduler/scores/stonith-3.scores diff --git a/cts/scheduler/stonith-4.scores b/cts/scheduler/scores/stonith-4.scores similarity index 100% rename from cts/scheduler/stonith-4.scores rename to cts/scheduler/scores/stonith-4.scores diff --git a/cts/scheduler/stop-all-resources.scores b/cts/scheduler/scores/stop-all-resources.scores similarity index 100% rename from cts/scheduler/stop-all-resources.scores rename to cts/scheduler/scores/stop-all-resources.scores diff --git a/cts/scheduler/stop-failure-no-fencing.scores b/cts/scheduler/scores/stop-failure-no-fencing.scores similarity index 100% rename from cts/scheduler/stop-failure-no-fencing.scores rename to cts/scheduler/scores/stop-failure-no-fencing.scores diff --git a/cts/scheduler/stop-failure-no-quorum.scores b/cts/scheduler/scores/stop-failure-no-quorum.scores similarity index 100% rename from cts/scheduler/stop-failure-no-quorum.scores rename to cts/scheduler/scores/stop-failure-no-quorum.scores diff --git a/cts/scheduler/stop-failure-with-fencing.scores b/cts/scheduler/scores/stop-failure-with-fencing.scores similarity index 100% rename from cts/scheduler/stop-failure-with-fencing.scores rename to cts/scheduler/scores/stop-failure-with-fencing.scores diff --git a/cts/scheduler/stopped-monitor-00.scores b/cts/scheduler/scores/stopped-monitor-00.scores similarity index 100% rename from cts/scheduler/stopped-monitor-00.scores rename to cts/scheduler/scores/stopped-monitor-00.scores diff --git a/cts/scheduler/stopped-monitor-01.scores b/cts/scheduler/scores/stopped-monitor-01.scores similarity index 100% rename from cts/scheduler/stopped-monitor-01.scores rename to cts/scheduler/scores/stopped-monitor-01.scores diff --git a/cts/scheduler/stopped-monitor-02.scores b/cts/scheduler/scores/stopped-monitor-02.scores similarity index 100% rename from cts/scheduler/stopped-monitor-02.scores rename to cts/scheduler/scores/stopped-monitor-02.scores diff --git a/cts/scheduler/stopped-monitor-03.scores b/cts/scheduler/scores/stopped-monitor-03.scores similarity index 100% rename from cts/scheduler/stopped-monitor-03.scores rename to cts/scheduler/scores/stopped-monitor-03.scores diff --git a/cts/scheduler/stopped-monitor-04.scores b/cts/scheduler/scores/stopped-monitor-04.scores similarity index 100% rename from cts/scheduler/stopped-monitor-04.scores rename to cts/scheduler/scores/stopped-monitor-04.scores diff --git a/cts/scheduler/stopped-monitor-05.scores b/cts/scheduler/scores/stopped-monitor-05.scores similarity index 100% rename from cts/scheduler/stopped-monitor-05.scores rename to cts/scheduler/scores/stopped-monitor-05.scores diff --git a/cts/scheduler/stopped-monitor-06.scores b/cts/scheduler/scores/stopped-monitor-06.scores similarity index 100% rename from cts/scheduler/stopped-monitor-06.scores rename to cts/scheduler/scores/stopped-monitor-06.scores diff --git a/cts/scheduler/stopped-monitor-07.scores b/cts/scheduler/scores/stopped-monitor-07.scores similarity index 100% rename from cts/scheduler/stopped-monitor-07.scores rename to cts/scheduler/scores/stopped-monitor-07.scores diff --git a/cts/scheduler/stopped-monitor-08.scores b/cts/scheduler/scores/stopped-monitor-08.scores similarity index 100% rename from cts/scheduler/stopped-monitor-08.scores rename to cts/scheduler/scores/stopped-monitor-08.scores diff --git a/cts/scheduler/stopped-monitor-09.scores b/cts/scheduler/scores/stopped-monitor-09.scores similarity index 100% rename from cts/scheduler/stopped-monitor-09.scores rename to cts/scheduler/scores/stopped-monitor-09.scores diff --git a/cts/scheduler/stopped-monitor-10.scores b/cts/scheduler/scores/stopped-monitor-10.scores similarity index 100% rename from cts/scheduler/stopped-monitor-10.scores rename to cts/scheduler/scores/stopped-monitor-10.scores diff --git a/cts/scheduler/stopped-monitor-11.scores b/cts/scheduler/scores/stopped-monitor-11.scores similarity index 100% rename from cts/scheduler/stopped-monitor-11.scores rename to cts/scheduler/scores/stopped-monitor-11.scores diff --git a/cts/scheduler/stopped-monitor-12.scores b/cts/scheduler/scores/stopped-monitor-12.scores similarity index 100% rename from cts/scheduler/stopped-monitor-12.scores rename to cts/scheduler/scores/stopped-monitor-12.scores diff --git a/cts/scheduler/stopped-monitor-20.scores b/cts/scheduler/scores/stopped-monitor-20.scores similarity index 100% rename from cts/scheduler/stopped-monitor-20.scores rename to cts/scheduler/scores/stopped-monitor-20.scores diff --git a/cts/scheduler/stopped-monitor-21.scores b/cts/scheduler/scores/stopped-monitor-21.scores similarity index 100% rename from cts/scheduler/stopped-monitor-21.scores rename to cts/scheduler/scores/stopped-monitor-21.scores diff --git a/cts/scheduler/stopped-monitor-22.scores b/cts/scheduler/scores/stopped-monitor-22.scores similarity index 100% rename from cts/scheduler/stopped-monitor-22.scores rename to cts/scheduler/scores/stopped-monitor-22.scores diff --git a/cts/scheduler/stopped-monitor-23.scores b/cts/scheduler/scores/stopped-monitor-23.scores similarity index 100% rename from cts/scheduler/stopped-monitor-23.scores rename to cts/scheduler/scores/stopped-monitor-23.scores diff --git a/cts/scheduler/stopped-monitor-24.scores b/cts/scheduler/scores/stopped-monitor-24.scores similarity index 100% rename from cts/scheduler/stopped-monitor-24.scores rename to cts/scheduler/scores/stopped-monitor-24.scores diff --git a/cts/scheduler/stopped-monitor-25.scores b/cts/scheduler/scores/stopped-monitor-25.scores similarity index 100% rename from cts/scheduler/stopped-monitor-25.scores rename to cts/scheduler/scores/stopped-monitor-25.scores diff --git a/cts/scheduler/stopped-monitor-26.scores b/cts/scheduler/scores/stopped-monitor-26.scores similarity index 100% rename from cts/scheduler/stopped-monitor-26.scores rename to cts/scheduler/scores/stopped-monitor-26.scores diff --git a/cts/scheduler/stopped-monitor-27.scores b/cts/scheduler/scores/stopped-monitor-27.scores similarity index 100% rename from cts/scheduler/stopped-monitor-27.scores rename to cts/scheduler/scores/stopped-monitor-27.scores diff --git a/cts/scheduler/stopped-monitor-30.scores b/cts/scheduler/scores/stopped-monitor-30.scores similarity index 100% rename from cts/scheduler/stopped-monitor-30.scores rename to cts/scheduler/scores/stopped-monitor-30.scores diff --git a/cts/scheduler/stopped-monitor-31.scores b/cts/scheduler/scores/stopped-monitor-31.scores similarity index 100% rename from cts/scheduler/stopped-monitor-31.scores rename to cts/scheduler/scores/stopped-monitor-31.scores diff --git a/cts/scheduler/suicide-needed-inquorate.scores b/cts/scheduler/scores/suicide-needed-inquorate.scores similarity index 100% rename from cts/scheduler/suicide-needed-inquorate.scores rename to cts/scheduler/scores/suicide-needed-inquorate.scores diff --git a/cts/scheduler/suicide-not-needed-initial-quorum.scores b/cts/scheduler/scores/suicide-not-needed-initial-quorum.scores similarity index 100% rename from cts/scheduler/suicide-not-needed-initial-quorum.scores rename to cts/scheduler/scores/suicide-not-needed-initial-quorum.scores diff --git a/cts/scheduler/suicide-not-needed-never-quorate.scores b/cts/scheduler/scores/suicide-not-needed-never-quorate.scores similarity index 100% rename from cts/scheduler/suicide-not-needed-never-quorate.scores rename to cts/scheduler/scores/suicide-not-needed-never-quorate.scores diff --git a/cts/scheduler/suicide-not-needed-quorate.scores b/cts/scheduler/scores/suicide-not-needed-quorate.scores similarity index 100% rename from cts/scheduler/suicide-not-needed-quorate.scores rename to cts/scheduler/scores/suicide-not-needed-quorate.scores diff --git a/cts/scheduler/systemhealth1.scores b/cts/scheduler/scores/systemhealth1.scores similarity index 100% rename from cts/scheduler/systemhealth1.scores rename to cts/scheduler/scores/systemhealth1.scores diff --git a/cts/scheduler/systemhealth2.scores b/cts/scheduler/scores/systemhealth2.scores similarity index 100% rename from cts/scheduler/systemhealth2.scores rename to cts/scheduler/scores/systemhealth2.scores diff --git a/cts/scheduler/systemhealth3.scores b/cts/scheduler/scores/systemhealth3.scores similarity index 100% rename from cts/scheduler/systemhealth3.scores rename to cts/scheduler/scores/systemhealth3.scores diff --git a/cts/scheduler/systemhealthm1.scores b/cts/scheduler/scores/systemhealthm1.scores similarity index 100% rename from cts/scheduler/systemhealthm1.scores rename to cts/scheduler/scores/systemhealthm1.scores diff --git a/cts/scheduler/systemhealthm2.scores b/cts/scheduler/scores/systemhealthm2.scores similarity index 100% rename from cts/scheduler/systemhealthm2.scores rename to cts/scheduler/scores/systemhealthm2.scores diff --git a/cts/scheduler/systemhealthm3.scores b/cts/scheduler/scores/systemhealthm3.scores similarity index 100% rename from cts/scheduler/systemhealthm3.scores rename to cts/scheduler/scores/systemhealthm3.scores diff --git a/cts/scheduler/systemhealthn1.scores b/cts/scheduler/scores/systemhealthn1.scores similarity index 100% rename from cts/scheduler/systemhealthn1.scores rename to cts/scheduler/scores/systemhealthn1.scores diff --git a/cts/scheduler/systemhealthn2.scores b/cts/scheduler/scores/systemhealthn2.scores similarity index 100% rename from cts/scheduler/systemhealthn2.scores rename to cts/scheduler/scores/systemhealthn2.scores diff --git a/cts/scheduler/systemhealthn3.scores b/cts/scheduler/scores/systemhealthn3.scores similarity index 100% rename from cts/scheduler/systemhealthn3.scores rename to cts/scheduler/scores/systemhealthn3.scores diff --git a/cts/scheduler/systemhealtho1.scores b/cts/scheduler/scores/systemhealtho1.scores similarity index 100% rename from cts/scheduler/systemhealtho1.scores rename to cts/scheduler/scores/systemhealtho1.scores diff --git a/cts/scheduler/systemhealtho2.scores b/cts/scheduler/scores/systemhealtho2.scores similarity index 100% rename from cts/scheduler/systemhealtho2.scores rename to cts/scheduler/scores/systemhealtho2.scores diff --git a/cts/scheduler/systemhealtho3.scores b/cts/scheduler/scores/systemhealtho3.scores similarity index 100% rename from cts/scheduler/systemhealtho3.scores rename to cts/scheduler/scores/systemhealtho3.scores diff --git a/cts/scheduler/systemhealthp1.scores b/cts/scheduler/scores/systemhealthp1.scores similarity index 100% rename from cts/scheduler/systemhealthp1.scores rename to cts/scheduler/scores/systemhealthp1.scores diff --git a/cts/scheduler/systemhealthp2.scores b/cts/scheduler/scores/systemhealthp2.scores similarity index 100% rename from cts/scheduler/systemhealthp2.scores rename to cts/scheduler/scores/systemhealthp2.scores diff --git a/cts/scheduler/systemhealthp3.scores b/cts/scheduler/scores/systemhealthp3.scores similarity index 100% rename from cts/scheduler/systemhealthp3.scores rename to cts/scheduler/scores/systemhealthp3.scores diff --git a/cts/scheduler/tags-coloc-order-1.scores b/cts/scheduler/scores/tags-coloc-order-1.scores similarity index 100% rename from cts/scheduler/tags-coloc-order-1.scores rename to cts/scheduler/scores/tags-coloc-order-1.scores diff --git a/cts/scheduler/tags-coloc-order-2.scores b/cts/scheduler/scores/tags-coloc-order-2.scores similarity index 100% rename from cts/scheduler/tags-coloc-order-2.scores rename to cts/scheduler/scores/tags-coloc-order-2.scores diff --git a/cts/scheduler/tags-location.scores b/cts/scheduler/scores/tags-location.scores similarity index 100% rename from cts/scheduler/tags-location.scores rename to cts/scheduler/scores/tags-location.scores diff --git a/cts/scheduler/tags-ticket.scores b/cts/scheduler/scores/tags-ticket.scores similarity index 100% rename from cts/scheduler/tags-ticket.scores rename to cts/scheduler/scores/tags-ticket.scores diff --git a/cts/scheduler/target-0.scores b/cts/scheduler/scores/target-0.scores similarity index 100% rename from cts/scheduler/target-0.scores rename to cts/scheduler/scores/target-0.scores diff --git a/cts/scheduler/target-1.scores b/cts/scheduler/scores/target-1.scores similarity index 100% rename from cts/scheduler/target-1.scores rename to cts/scheduler/scores/target-1.scores diff --git a/cts/scheduler/target-2.scores b/cts/scheduler/scores/target-2.scores similarity index 100% rename from cts/scheduler/target-2.scores rename to cts/scheduler/scores/target-2.scores diff --git a/cts/scheduler/template-1.scores b/cts/scheduler/scores/template-1.scores similarity index 100% rename from cts/scheduler/template-1.scores rename to cts/scheduler/scores/template-1.scores diff --git a/cts/scheduler/template-2.scores b/cts/scheduler/scores/template-2.scores similarity index 100% rename from cts/scheduler/template-2.scores rename to cts/scheduler/scores/template-2.scores diff --git a/cts/scheduler/template-3.scores b/cts/scheduler/scores/template-3.scores similarity index 100% rename from cts/scheduler/template-3.scores rename to cts/scheduler/scores/template-3.scores diff --git a/cts/scheduler/template-clone-group.scores b/cts/scheduler/scores/template-clone-group.scores similarity index 100% rename from cts/scheduler/template-clone-group.scores rename to cts/scheduler/scores/template-clone-group.scores diff --git a/cts/scheduler/template-clone-primitive.scores b/cts/scheduler/scores/template-clone-primitive.scores similarity index 100% rename from cts/scheduler/template-clone-primitive.scores rename to cts/scheduler/scores/template-clone-primitive.scores diff --git a/cts/scheduler/template-coloc-1.scores b/cts/scheduler/scores/template-coloc-1.scores similarity index 100% rename from cts/scheduler/template-coloc-1.scores rename to cts/scheduler/scores/template-coloc-1.scores diff --git a/cts/scheduler/template-coloc-2.scores b/cts/scheduler/scores/template-coloc-2.scores similarity index 100% rename from cts/scheduler/template-coloc-2.scores rename to cts/scheduler/scores/template-coloc-2.scores diff --git a/cts/scheduler/template-coloc-3.scores b/cts/scheduler/scores/template-coloc-3.scores similarity index 100% rename from cts/scheduler/template-coloc-3.scores rename to cts/scheduler/scores/template-coloc-3.scores diff --git a/cts/scheduler/template-order-1.scores b/cts/scheduler/scores/template-order-1.scores similarity index 100% rename from cts/scheduler/template-order-1.scores rename to cts/scheduler/scores/template-order-1.scores diff --git a/cts/scheduler/template-order-2.scores b/cts/scheduler/scores/template-order-2.scores similarity index 100% rename from cts/scheduler/template-order-2.scores rename to cts/scheduler/scores/template-order-2.scores diff --git a/cts/scheduler/template-order-3.scores b/cts/scheduler/scores/template-order-3.scores similarity index 100% rename from cts/scheduler/template-order-3.scores rename to cts/scheduler/scores/template-order-3.scores diff --git a/cts/scheduler/template-rsc-sets-1.scores b/cts/scheduler/scores/template-rsc-sets-1.scores similarity index 100% rename from cts/scheduler/template-rsc-sets-1.scores rename to cts/scheduler/scores/template-rsc-sets-1.scores diff --git a/cts/scheduler/template-rsc-sets-2.scores b/cts/scheduler/scores/template-rsc-sets-2.scores similarity index 100% rename from cts/scheduler/template-rsc-sets-2.scores rename to cts/scheduler/scores/template-rsc-sets-2.scores diff --git a/cts/scheduler/template-rsc-sets-3.scores b/cts/scheduler/scores/template-rsc-sets-3.scores similarity index 100% rename from cts/scheduler/template-rsc-sets-3.scores rename to cts/scheduler/scores/template-rsc-sets-3.scores diff --git a/cts/scheduler/template-rsc-sets-4.scores b/cts/scheduler/scores/template-rsc-sets-4.scores similarity index 100% rename from cts/scheduler/template-rsc-sets-4.scores rename to cts/scheduler/scores/template-rsc-sets-4.scores diff --git a/cts/scheduler/template-ticket.scores b/cts/scheduler/scores/template-ticket.scores similarity index 100% rename from cts/scheduler/template-ticket.scores rename to cts/scheduler/scores/template-ticket.scores diff --git a/cts/scheduler/ticket-clone-1.scores b/cts/scheduler/scores/ticket-clone-1.scores similarity index 100% rename from cts/scheduler/ticket-clone-1.scores rename to cts/scheduler/scores/ticket-clone-1.scores diff --git a/cts/scheduler/ticket-clone-10.scores b/cts/scheduler/scores/ticket-clone-10.scores similarity index 100% rename from cts/scheduler/ticket-clone-10.scores rename to cts/scheduler/scores/ticket-clone-10.scores diff --git a/cts/scheduler/ticket-clone-11.scores b/cts/scheduler/scores/ticket-clone-11.scores similarity index 100% rename from cts/scheduler/ticket-clone-11.scores rename to cts/scheduler/scores/ticket-clone-11.scores diff --git a/cts/scheduler/ticket-clone-12.scores b/cts/scheduler/scores/ticket-clone-12.scores similarity index 100% rename from cts/scheduler/ticket-clone-12.scores rename to cts/scheduler/scores/ticket-clone-12.scores diff --git a/cts/scheduler/ticket-clone-13.scores b/cts/scheduler/scores/ticket-clone-13.scores similarity index 100% rename from cts/scheduler/ticket-clone-13.scores rename to cts/scheduler/scores/ticket-clone-13.scores diff --git a/cts/scheduler/ticket-clone-14.scores b/cts/scheduler/scores/ticket-clone-14.scores similarity index 100% rename from cts/scheduler/ticket-clone-14.scores rename to cts/scheduler/scores/ticket-clone-14.scores diff --git a/cts/scheduler/ticket-clone-15.scores b/cts/scheduler/scores/ticket-clone-15.scores similarity index 100% rename from cts/scheduler/ticket-clone-15.scores rename to cts/scheduler/scores/ticket-clone-15.scores diff --git a/cts/scheduler/ticket-clone-16.scores b/cts/scheduler/scores/ticket-clone-16.scores similarity index 100% rename from cts/scheduler/ticket-clone-16.scores rename to cts/scheduler/scores/ticket-clone-16.scores diff --git a/cts/scheduler/ticket-clone-17.scores b/cts/scheduler/scores/ticket-clone-17.scores similarity index 100% rename from cts/scheduler/ticket-clone-17.scores rename to cts/scheduler/scores/ticket-clone-17.scores diff --git a/cts/scheduler/ticket-clone-18.scores b/cts/scheduler/scores/ticket-clone-18.scores similarity index 100% rename from cts/scheduler/ticket-clone-18.scores rename to cts/scheduler/scores/ticket-clone-18.scores diff --git a/cts/scheduler/ticket-clone-19.scores b/cts/scheduler/scores/ticket-clone-19.scores similarity index 100% rename from cts/scheduler/ticket-clone-19.scores rename to cts/scheduler/scores/ticket-clone-19.scores diff --git a/cts/scheduler/ticket-clone-2.scores b/cts/scheduler/scores/ticket-clone-2.scores similarity index 100% rename from cts/scheduler/ticket-clone-2.scores rename to cts/scheduler/scores/ticket-clone-2.scores diff --git a/cts/scheduler/ticket-clone-20.scores b/cts/scheduler/scores/ticket-clone-20.scores similarity index 100% rename from cts/scheduler/ticket-clone-20.scores rename to cts/scheduler/scores/ticket-clone-20.scores diff --git a/cts/scheduler/ticket-clone-21.scores b/cts/scheduler/scores/ticket-clone-21.scores similarity index 100% rename from cts/scheduler/ticket-clone-21.scores rename to cts/scheduler/scores/ticket-clone-21.scores diff --git a/cts/scheduler/ticket-clone-22.scores b/cts/scheduler/scores/ticket-clone-22.scores similarity index 100% rename from cts/scheduler/ticket-clone-22.scores rename to cts/scheduler/scores/ticket-clone-22.scores diff --git a/cts/scheduler/ticket-clone-23.scores b/cts/scheduler/scores/ticket-clone-23.scores similarity index 100% rename from cts/scheduler/ticket-clone-23.scores rename to cts/scheduler/scores/ticket-clone-23.scores diff --git a/cts/scheduler/ticket-clone-24.scores b/cts/scheduler/scores/ticket-clone-24.scores similarity index 100% rename from cts/scheduler/ticket-clone-24.scores rename to cts/scheduler/scores/ticket-clone-24.scores diff --git a/cts/scheduler/ticket-clone-3.scores b/cts/scheduler/scores/ticket-clone-3.scores similarity index 100% rename from cts/scheduler/ticket-clone-3.scores rename to cts/scheduler/scores/ticket-clone-3.scores diff --git a/cts/scheduler/ticket-clone-4.scores b/cts/scheduler/scores/ticket-clone-4.scores similarity index 100% rename from cts/scheduler/ticket-clone-4.scores rename to cts/scheduler/scores/ticket-clone-4.scores diff --git a/cts/scheduler/ticket-clone-5.scores b/cts/scheduler/scores/ticket-clone-5.scores similarity index 100% rename from cts/scheduler/ticket-clone-5.scores rename to cts/scheduler/scores/ticket-clone-5.scores diff --git a/cts/scheduler/ticket-clone-6.scores b/cts/scheduler/scores/ticket-clone-6.scores similarity index 100% rename from cts/scheduler/ticket-clone-6.scores rename to cts/scheduler/scores/ticket-clone-6.scores diff --git a/cts/scheduler/ticket-clone-7.scores b/cts/scheduler/scores/ticket-clone-7.scores similarity index 100% rename from cts/scheduler/ticket-clone-7.scores rename to cts/scheduler/scores/ticket-clone-7.scores diff --git a/cts/scheduler/ticket-clone-8.scores b/cts/scheduler/scores/ticket-clone-8.scores similarity index 100% rename from cts/scheduler/ticket-clone-8.scores rename to cts/scheduler/scores/ticket-clone-8.scores diff --git a/cts/scheduler/ticket-clone-9.scores b/cts/scheduler/scores/ticket-clone-9.scores similarity index 100% rename from cts/scheduler/ticket-clone-9.scores rename to cts/scheduler/scores/ticket-clone-9.scores diff --git a/cts/scheduler/ticket-group-1.scores b/cts/scheduler/scores/ticket-group-1.scores similarity index 100% rename from cts/scheduler/ticket-group-1.scores rename to cts/scheduler/scores/ticket-group-1.scores diff --git a/cts/scheduler/ticket-group-10.scores b/cts/scheduler/scores/ticket-group-10.scores similarity index 100% rename from cts/scheduler/ticket-group-10.scores rename to cts/scheduler/scores/ticket-group-10.scores diff --git a/cts/scheduler/ticket-group-11.scores b/cts/scheduler/scores/ticket-group-11.scores similarity index 100% rename from cts/scheduler/ticket-group-11.scores rename to cts/scheduler/scores/ticket-group-11.scores diff --git a/cts/scheduler/ticket-group-12.scores b/cts/scheduler/scores/ticket-group-12.scores similarity index 100% rename from cts/scheduler/ticket-group-12.scores rename to cts/scheduler/scores/ticket-group-12.scores diff --git a/cts/scheduler/ticket-group-13.scores b/cts/scheduler/scores/ticket-group-13.scores similarity index 100% rename from cts/scheduler/ticket-group-13.scores rename to cts/scheduler/scores/ticket-group-13.scores diff --git a/cts/scheduler/ticket-group-14.scores b/cts/scheduler/scores/ticket-group-14.scores similarity index 100% rename from cts/scheduler/ticket-group-14.scores rename to cts/scheduler/scores/ticket-group-14.scores diff --git a/cts/scheduler/ticket-group-15.scores b/cts/scheduler/scores/ticket-group-15.scores similarity index 100% rename from cts/scheduler/ticket-group-15.scores rename to cts/scheduler/scores/ticket-group-15.scores diff --git a/cts/scheduler/ticket-group-16.scores b/cts/scheduler/scores/ticket-group-16.scores similarity index 100% rename from cts/scheduler/ticket-group-16.scores rename to cts/scheduler/scores/ticket-group-16.scores diff --git a/cts/scheduler/ticket-group-17.scores b/cts/scheduler/scores/ticket-group-17.scores similarity index 100% rename from cts/scheduler/ticket-group-17.scores rename to cts/scheduler/scores/ticket-group-17.scores diff --git a/cts/scheduler/ticket-group-18.scores b/cts/scheduler/scores/ticket-group-18.scores similarity index 100% rename from cts/scheduler/ticket-group-18.scores rename to cts/scheduler/scores/ticket-group-18.scores diff --git a/cts/scheduler/ticket-group-19.scores b/cts/scheduler/scores/ticket-group-19.scores similarity index 100% rename from cts/scheduler/ticket-group-19.scores rename to cts/scheduler/scores/ticket-group-19.scores diff --git a/cts/scheduler/ticket-group-2.scores b/cts/scheduler/scores/ticket-group-2.scores similarity index 100% rename from cts/scheduler/ticket-group-2.scores rename to cts/scheduler/scores/ticket-group-2.scores diff --git a/cts/scheduler/ticket-group-20.scores b/cts/scheduler/scores/ticket-group-20.scores similarity index 100% rename from cts/scheduler/ticket-group-20.scores rename to cts/scheduler/scores/ticket-group-20.scores diff --git a/cts/scheduler/ticket-group-21.scores b/cts/scheduler/scores/ticket-group-21.scores similarity index 100% rename from cts/scheduler/ticket-group-21.scores rename to cts/scheduler/scores/ticket-group-21.scores diff --git a/cts/scheduler/ticket-group-22.scores b/cts/scheduler/scores/ticket-group-22.scores similarity index 100% rename from cts/scheduler/ticket-group-22.scores rename to cts/scheduler/scores/ticket-group-22.scores diff --git a/cts/scheduler/ticket-group-23.scores b/cts/scheduler/scores/ticket-group-23.scores similarity index 100% rename from cts/scheduler/ticket-group-23.scores rename to cts/scheduler/scores/ticket-group-23.scores diff --git a/cts/scheduler/ticket-group-24.scores b/cts/scheduler/scores/ticket-group-24.scores similarity index 100% rename from cts/scheduler/ticket-group-24.scores rename to cts/scheduler/scores/ticket-group-24.scores diff --git a/cts/scheduler/ticket-group-3.scores b/cts/scheduler/scores/ticket-group-3.scores similarity index 100% rename from cts/scheduler/ticket-group-3.scores rename to cts/scheduler/scores/ticket-group-3.scores diff --git a/cts/scheduler/ticket-group-4.scores b/cts/scheduler/scores/ticket-group-4.scores similarity index 100% rename from cts/scheduler/ticket-group-4.scores rename to cts/scheduler/scores/ticket-group-4.scores diff --git a/cts/scheduler/ticket-group-5.scores b/cts/scheduler/scores/ticket-group-5.scores similarity index 100% rename from cts/scheduler/ticket-group-5.scores rename to cts/scheduler/scores/ticket-group-5.scores diff --git a/cts/scheduler/ticket-group-6.scores b/cts/scheduler/scores/ticket-group-6.scores similarity index 100% rename from cts/scheduler/ticket-group-6.scores rename to cts/scheduler/scores/ticket-group-6.scores diff --git a/cts/scheduler/ticket-group-7.scores b/cts/scheduler/scores/ticket-group-7.scores similarity index 100% rename from cts/scheduler/ticket-group-7.scores rename to cts/scheduler/scores/ticket-group-7.scores diff --git a/cts/scheduler/ticket-group-8.scores b/cts/scheduler/scores/ticket-group-8.scores similarity index 100% rename from cts/scheduler/ticket-group-8.scores rename to cts/scheduler/scores/ticket-group-8.scores diff --git a/cts/scheduler/ticket-group-9.scores b/cts/scheduler/scores/ticket-group-9.scores similarity index 100% rename from cts/scheduler/ticket-group-9.scores rename to cts/scheduler/scores/ticket-group-9.scores diff --git a/cts/scheduler/ticket-master-1.scores b/cts/scheduler/scores/ticket-master-1.scores similarity index 100% rename from cts/scheduler/ticket-master-1.scores rename to cts/scheduler/scores/ticket-master-1.scores diff --git a/cts/scheduler/ticket-master-10.scores b/cts/scheduler/scores/ticket-master-10.scores similarity index 100% rename from cts/scheduler/ticket-master-10.scores rename to cts/scheduler/scores/ticket-master-10.scores diff --git a/cts/scheduler/ticket-master-11.scores b/cts/scheduler/scores/ticket-master-11.scores similarity index 100% rename from cts/scheduler/ticket-master-11.scores rename to cts/scheduler/scores/ticket-master-11.scores diff --git a/cts/scheduler/ticket-master-12.scores b/cts/scheduler/scores/ticket-master-12.scores similarity index 100% rename from cts/scheduler/ticket-master-12.scores rename to cts/scheduler/scores/ticket-master-12.scores diff --git a/cts/scheduler/ticket-master-13.scores b/cts/scheduler/scores/ticket-master-13.scores similarity index 100% rename from cts/scheduler/ticket-master-13.scores rename to cts/scheduler/scores/ticket-master-13.scores diff --git a/cts/scheduler/ticket-master-14.scores b/cts/scheduler/scores/ticket-master-14.scores similarity index 100% rename from cts/scheduler/ticket-master-14.scores rename to cts/scheduler/scores/ticket-master-14.scores diff --git a/cts/scheduler/ticket-master-15.scores b/cts/scheduler/scores/ticket-master-15.scores similarity index 100% rename from cts/scheduler/ticket-master-15.scores rename to cts/scheduler/scores/ticket-master-15.scores diff --git a/cts/scheduler/ticket-master-16.scores b/cts/scheduler/scores/ticket-master-16.scores similarity index 100% rename from cts/scheduler/ticket-master-16.scores rename to cts/scheduler/scores/ticket-master-16.scores diff --git a/cts/scheduler/ticket-master-17.scores b/cts/scheduler/scores/ticket-master-17.scores similarity index 100% rename from cts/scheduler/ticket-master-17.scores rename to cts/scheduler/scores/ticket-master-17.scores diff --git a/cts/scheduler/ticket-master-18.scores b/cts/scheduler/scores/ticket-master-18.scores similarity index 100% rename from cts/scheduler/ticket-master-18.scores rename to cts/scheduler/scores/ticket-master-18.scores diff --git a/cts/scheduler/ticket-master-19.scores b/cts/scheduler/scores/ticket-master-19.scores similarity index 100% rename from cts/scheduler/ticket-master-19.scores rename to cts/scheduler/scores/ticket-master-19.scores diff --git a/cts/scheduler/ticket-master-2.scores b/cts/scheduler/scores/ticket-master-2.scores similarity index 100% rename from cts/scheduler/ticket-master-2.scores rename to cts/scheduler/scores/ticket-master-2.scores diff --git a/cts/scheduler/ticket-master-20.scores b/cts/scheduler/scores/ticket-master-20.scores similarity index 100% rename from cts/scheduler/ticket-master-20.scores rename to cts/scheduler/scores/ticket-master-20.scores diff --git a/cts/scheduler/ticket-master-21.scores b/cts/scheduler/scores/ticket-master-21.scores similarity index 100% rename from cts/scheduler/ticket-master-21.scores rename to cts/scheduler/scores/ticket-master-21.scores diff --git a/cts/scheduler/ticket-master-22.scores b/cts/scheduler/scores/ticket-master-22.scores similarity index 100% rename from cts/scheduler/ticket-master-22.scores rename to cts/scheduler/scores/ticket-master-22.scores diff --git a/cts/scheduler/ticket-master-23.scores b/cts/scheduler/scores/ticket-master-23.scores similarity index 100% rename from cts/scheduler/ticket-master-23.scores rename to cts/scheduler/scores/ticket-master-23.scores diff --git a/cts/scheduler/ticket-master-24.scores b/cts/scheduler/scores/ticket-master-24.scores similarity index 100% rename from cts/scheduler/ticket-master-24.scores rename to cts/scheduler/scores/ticket-master-24.scores diff --git a/cts/scheduler/ticket-master-3.scores b/cts/scheduler/scores/ticket-master-3.scores similarity index 100% rename from cts/scheduler/ticket-master-3.scores rename to cts/scheduler/scores/ticket-master-3.scores diff --git a/cts/scheduler/ticket-master-4.scores b/cts/scheduler/scores/ticket-master-4.scores similarity index 100% rename from cts/scheduler/ticket-master-4.scores rename to cts/scheduler/scores/ticket-master-4.scores diff --git a/cts/scheduler/ticket-master-5.scores b/cts/scheduler/scores/ticket-master-5.scores similarity index 100% rename from cts/scheduler/ticket-master-5.scores rename to cts/scheduler/scores/ticket-master-5.scores diff --git a/cts/scheduler/ticket-master-6.scores b/cts/scheduler/scores/ticket-master-6.scores similarity index 100% rename from cts/scheduler/ticket-master-6.scores rename to cts/scheduler/scores/ticket-master-6.scores diff --git a/cts/scheduler/ticket-master-7.scores b/cts/scheduler/scores/ticket-master-7.scores similarity index 100% rename from cts/scheduler/ticket-master-7.scores rename to cts/scheduler/scores/ticket-master-7.scores diff --git a/cts/scheduler/ticket-master-8.scores b/cts/scheduler/scores/ticket-master-8.scores similarity index 100% rename from cts/scheduler/ticket-master-8.scores rename to cts/scheduler/scores/ticket-master-8.scores diff --git a/cts/scheduler/ticket-master-9.scores b/cts/scheduler/scores/ticket-master-9.scores similarity index 100% rename from cts/scheduler/ticket-master-9.scores rename to cts/scheduler/scores/ticket-master-9.scores diff --git a/cts/scheduler/ticket-primitive-1.scores b/cts/scheduler/scores/ticket-primitive-1.scores similarity index 100% rename from cts/scheduler/ticket-primitive-1.scores rename to cts/scheduler/scores/ticket-primitive-1.scores diff --git a/cts/scheduler/ticket-primitive-10.scores b/cts/scheduler/scores/ticket-primitive-10.scores similarity index 100% rename from cts/scheduler/ticket-primitive-10.scores rename to cts/scheduler/scores/ticket-primitive-10.scores diff --git a/cts/scheduler/ticket-primitive-11.scores b/cts/scheduler/scores/ticket-primitive-11.scores similarity index 100% rename from cts/scheduler/ticket-primitive-11.scores rename to cts/scheduler/scores/ticket-primitive-11.scores diff --git a/cts/scheduler/ticket-primitive-12.scores b/cts/scheduler/scores/ticket-primitive-12.scores similarity index 100% rename from cts/scheduler/ticket-primitive-12.scores rename to cts/scheduler/scores/ticket-primitive-12.scores diff --git a/cts/scheduler/ticket-primitive-13.scores b/cts/scheduler/scores/ticket-primitive-13.scores similarity index 100% rename from cts/scheduler/ticket-primitive-13.scores rename to cts/scheduler/scores/ticket-primitive-13.scores diff --git a/cts/scheduler/ticket-primitive-14.scores b/cts/scheduler/scores/ticket-primitive-14.scores similarity index 100% rename from cts/scheduler/ticket-primitive-14.scores rename to cts/scheduler/scores/ticket-primitive-14.scores diff --git a/cts/scheduler/ticket-primitive-15.scores b/cts/scheduler/scores/ticket-primitive-15.scores similarity index 100% rename from cts/scheduler/ticket-primitive-15.scores rename to cts/scheduler/scores/ticket-primitive-15.scores diff --git a/cts/scheduler/ticket-primitive-16.scores b/cts/scheduler/scores/ticket-primitive-16.scores similarity index 100% rename from cts/scheduler/ticket-primitive-16.scores rename to cts/scheduler/scores/ticket-primitive-16.scores diff --git a/cts/scheduler/ticket-primitive-17.scores b/cts/scheduler/scores/ticket-primitive-17.scores similarity index 100% rename from cts/scheduler/ticket-primitive-17.scores rename to cts/scheduler/scores/ticket-primitive-17.scores diff --git a/cts/scheduler/ticket-primitive-18.scores b/cts/scheduler/scores/ticket-primitive-18.scores similarity index 100% rename from cts/scheduler/ticket-primitive-18.scores rename to cts/scheduler/scores/ticket-primitive-18.scores diff --git a/cts/scheduler/ticket-primitive-19.scores b/cts/scheduler/scores/ticket-primitive-19.scores similarity index 100% rename from cts/scheduler/ticket-primitive-19.scores rename to cts/scheduler/scores/ticket-primitive-19.scores diff --git a/cts/scheduler/ticket-primitive-2.scores b/cts/scheduler/scores/ticket-primitive-2.scores similarity index 100% rename from cts/scheduler/ticket-primitive-2.scores rename to cts/scheduler/scores/ticket-primitive-2.scores diff --git a/cts/scheduler/ticket-primitive-20.scores b/cts/scheduler/scores/ticket-primitive-20.scores similarity index 100% rename from cts/scheduler/ticket-primitive-20.scores rename to cts/scheduler/scores/ticket-primitive-20.scores diff --git a/cts/scheduler/ticket-primitive-21.scores b/cts/scheduler/scores/ticket-primitive-21.scores similarity index 100% rename from cts/scheduler/ticket-primitive-21.scores rename to cts/scheduler/scores/ticket-primitive-21.scores diff --git a/cts/scheduler/ticket-primitive-22.scores b/cts/scheduler/scores/ticket-primitive-22.scores similarity index 100% rename from cts/scheduler/ticket-primitive-22.scores rename to cts/scheduler/scores/ticket-primitive-22.scores diff --git a/cts/scheduler/ticket-primitive-23.scores b/cts/scheduler/scores/ticket-primitive-23.scores similarity index 100% rename from cts/scheduler/ticket-primitive-23.scores rename to cts/scheduler/scores/ticket-primitive-23.scores diff --git a/cts/scheduler/ticket-primitive-24.scores b/cts/scheduler/scores/ticket-primitive-24.scores similarity index 100% rename from cts/scheduler/ticket-primitive-24.scores rename to cts/scheduler/scores/ticket-primitive-24.scores diff --git a/cts/scheduler/ticket-primitive-3.scores b/cts/scheduler/scores/ticket-primitive-3.scores similarity index 100% rename from cts/scheduler/ticket-primitive-3.scores rename to cts/scheduler/scores/ticket-primitive-3.scores diff --git a/cts/scheduler/ticket-primitive-4.scores b/cts/scheduler/scores/ticket-primitive-4.scores similarity index 100% rename from cts/scheduler/ticket-primitive-4.scores rename to cts/scheduler/scores/ticket-primitive-4.scores diff --git a/cts/scheduler/ticket-primitive-5.scores b/cts/scheduler/scores/ticket-primitive-5.scores similarity index 100% rename from cts/scheduler/ticket-primitive-5.scores rename to cts/scheduler/scores/ticket-primitive-5.scores diff --git a/cts/scheduler/ticket-primitive-6.scores b/cts/scheduler/scores/ticket-primitive-6.scores similarity index 100% rename from cts/scheduler/ticket-primitive-6.scores rename to cts/scheduler/scores/ticket-primitive-6.scores diff --git a/cts/scheduler/ticket-primitive-7.scores b/cts/scheduler/scores/ticket-primitive-7.scores similarity index 100% rename from cts/scheduler/ticket-primitive-7.scores rename to cts/scheduler/scores/ticket-primitive-7.scores diff --git a/cts/scheduler/ticket-primitive-8.scores b/cts/scheduler/scores/ticket-primitive-8.scores similarity index 100% rename from cts/scheduler/ticket-primitive-8.scores rename to cts/scheduler/scores/ticket-primitive-8.scores diff --git a/cts/scheduler/ticket-primitive-9.scores b/cts/scheduler/scores/ticket-primitive-9.scores similarity index 100% rename from cts/scheduler/ticket-primitive-9.scores rename to cts/scheduler/scores/ticket-primitive-9.scores diff --git a/cts/scheduler/ticket-rsc-sets-1.scores b/cts/scheduler/scores/ticket-rsc-sets-1.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-1.scores rename to cts/scheduler/scores/ticket-rsc-sets-1.scores diff --git a/cts/scheduler/ticket-rsc-sets-10.scores b/cts/scheduler/scores/ticket-rsc-sets-10.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-10.scores rename to cts/scheduler/scores/ticket-rsc-sets-10.scores diff --git a/cts/scheduler/ticket-rsc-sets-11.scores b/cts/scheduler/scores/ticket-rsc-sets-11.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-11.scores rename to cts/scheduler/scores/ticket-rsc-sets-11.scores diff --git a/cts/scheduler/ticket-rsc-sets-12.scores b/cts/scheduler/scores/ticket-rsc-sets-12.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-12.scores rename to cts/scheduler/scores/ticket-rsc-sets-12.scores diff --git a/cts/scheduler/ticket-rsc-sets-13.scores b/cts/scheduler/scores/ticket-rsc-sets-13.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-13.scores rename to cts/scheduler/scores/ticket-rsc-sets-13.scores diff --git a/cts/scheduler/ticket-rsc-sets-14.scores b/cts/scheduler/scores/ticket-rsc-sets-14.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-14.scores rename to cts/scheduler/scores/ticket-rsc-sets-14.scores diff --git a/cts/scheduler/ticket-rsc-sets-2.scores b/cts/scheduler/scores/ticket-rsc-sets-2.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-2.scores rename to cts/scheduler/scores/ticket-rsc-sets-2.scores diff --git a/cts/scheduler/ticket-rsc-sets-3.scores b/cts/scheduler/scores/ticket-rsc-sets-3.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-3.scores rename to cts/scheduler/scores/ticket-rsc-sets-3.scores diff --git a/cts/scheduler/ticket-rsc-sets-4.scores b/cts/scheduler/scores/ticket-rsc-sets-4.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-4.scores rename to cts/scheduler/scores/ticket-rsc-sets-4.scores diff --git a/cts/scheduler/ticket-rsc-sets-5.scores b/cts/scheduler/scores/ticket-rsc-sets-5.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-5.scores rename to cts/scheduler/scores/ticket-rsc-sets-5.scores diff --git a/cts/scheduler/ticket-rsc-sets-6.scores b/cts/scheduler/scores/ticket-rsc-sets-6.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-6.scores rename to cts/scheduler/scores/ticket-rsc-sets-6.scores diff --git a/cts/scheduler/ticket-rsc-sets-7.scores b/cts/scheduler/scores/ticket-rsc-sets-7.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-7.scores rename to cts/scheduler/scores/ticket-rsc-sets-7.scores diff --git a/cts/scheduler/ticket-rsc-sets-8.scores b/cts/scheduler/scores/ticket-rsc-sets-8.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-8.scores rename to cts/scheduler/scores/ticket-rsc-sets-8.scores diff --git a/cts/scheduler/ticket-rsc-sets-9.scores b/cts/scheduler/scores/ticket-rsc-sets-9.scores similarity index 100% rename from cts/scheduler/ticket-rsc-sets-9.scores rename to cts/scheduler/scores/ticket-rsc-sets-9.scores diff --git a/cts/scheduler/unfence-definition.scores b/cts/scheduler/scores/unfence-definition.scores similarity index 100% rename from cts/scheduler/unfence-definition.scores rename to cts/scheduler/scores/unfence-definition.scores diff --git a/cts/scheduler/unfence-device.scores b/cts/scheduler/scores/unfence-device.scores similarity index 100% rename from cts/scheduler/unfence-device.scores rename to cts/scheduler/scores/unfence-device.scores diff --git a/cts/scheduler/unfence-parameters.scores b/cts/scheduler/scores/unfence-parameters.scores similarity index 100% rename from cts/scheduler/unfence-parameters.scores rename to cts/scheduler/scores/unfence-parameters.scores diff --git a/cts/scheduler/unfence-startup.scores b/cts/scheduler/scores/unfence-startup.scores similarity index 100% rename from cts/scheduler/unfence-startup.scores rename to cts/scheduler/scores/unfence-startup.scores diff --git a/cts/scheduler/unmanaged-block-restart.scores b/cts/scheduler/scores/unmanaged-block-restart.scores similarity index 100% rename from cts/scheduler/unmanaged-block-restart.scores rename to cts/scheduler/scores/unmanaged-block-restart.scores diff --git a/cts/scheduler/unmanaged-master.scores b/cts/scheduler/scores/unmanaged-master.scores similarity index 100% rename from cts/scheduler/unmanaged-master.scores rename to cts/scheduler/scores/unmanaged-master.scores diff --git a/cts/scheduler/unmanaged-stop-1.scores b/cts/scheduler/scores/unmanaged-stop-1.scores similarity index 100% rename from cts/scheduler/unmanaged-stop-1.scores rename to cts/scheduler/scores/unmanaged-stop-1.scores diff --git a/cts/scheduler/unmanaged-stop-2.scores b/cts/scheduler/scores/unmanaged-stop-2.scores similarity index 100% rename from cts/scheduler/unmanaged-stop-2.scores rename to cts/scheduler/scores/unmanaged-stop-2.scores diff --git a/cts/scheduler/unmanaged-stop-3.scores b/cts/scheduler/scores/unmanaged-stop-3.scores similarity index 100% rename from cts/scheduler/unmanaged-stop-3.scores rename to cts/scheduler/scores/unmanaged-stop-3.scores diff --git a/cts/scheduler/unmanaged-stop-4.scores b/cts/scheduler/scores/unmanaged-stop-4.scores similarity index 100% rename from cts/scheduler/unmanaged-stop-4.scores rename to cts/scheduler/scores/unmanaged-stop-4.scores diff --git a/cts/scheduler/unrunnable-1.scores b/cts/scheduler/scores/unrunnable-1.scores similarity index 100% rename from cts/scheduler/unrunnable-1.scores rename to cts/scheduler/scores/unrunnable-1.scores diff --git a/cts/scheduler/unrunnable-2.scores b/cts/scheduler/scores/unrunnable-2.scores similarity index 100% rename from cts/scheduler/unrunnable-2.scores rename to cts/scheduler/scores/unrunnable-2.scores diff --git a/cts/scheduler/use-after-free-merge.scores b/cts/scheduler/scores/use-after-free-merge.scores similarity index 100% rename from cts/scheduler/use-after-free-merge.scores rename to cts/scheduler/scores/use-after-free-merge.scores diff --git a/cts/scheduler/utilization-check-allowed-nodes.scores b/cts/scheduler/scores/utilization-check-allowed-nodes.scores similarity index 100% rename from cts/scheduler/utilization-check-allowed-nodes.scores rename to cts/scheduler/scores/utilization-check-allowed-nodes.scores diff --git a/cts/scheduler/utilization-order1.scores b/cts/scheduler/scores/utilization-order1.scores similarity index 100% rename from cts/scheduler/utilization-order1.scores rename to cts/scheduler/scores/utilization-order1.scores diff --git a/cts/scheduler/utilization-order2.scores b/cts/scheduler/scores/utilization-order2.scores similarity index 100% rename from cts/scheduler/utilization-order2.scores rename to cts/scheduler/scores/utilization-order2.scores diff --git a/cts/scheduler/utilization-order3.scores b/cts/scheduler/scores/utilization-order3.scores similarity index 100% rename from cts/scheduler/utilization-order3.scores rename to cts/scheduler/scores/utilization-order3.scores diff --git a/cts/scheduler/utilization-order4.scores b/cts/scheduler/scores/utilization-order4.scores similarity index 100% rename from cts/scheduler/utilization-order4.scores rename to cts/scheduler/scores/utilization-order4.scores diff --git a/cts/scheduler/utilization-shuffle.scores b/cts/scheduler/scores/utilization-shuffle.scores similarity index 100% rename from cts/scheduler/utilization-shuffle.scores rename to cts/scheduler/scores/utilization-shuffle.scores diff --git a/cts/scheduler/utilization.scores b/cts/scheduler/scores/utilization.scores similarity index 100% rename from cts/scheduler/utilization.scores rename to cts/scheduler/scores/utilization.scores diff --git a/cts/scheduler/value-source.scores b/cts/scheduler/scores/value-source.scores similarity index 100% rename from cts/scheduler/value-source.scores rename to cts/scheduler/scores/value-source.scores diff --git a/cts/scheduler/versioned-operations-1.scores b/cts/scheduler/scores/versioned-operations-1.scores similarity index 100% rename from cts/scheduler/versioned-operations-1.scores rename to cts/scheduler/scores/versioned-operations-1.scores diff --git a/cts/scheduler/versioned-operations-2.scores b/cts/scheduler/scores/versioned-operations-2.scores similarity index 100% rename from cts/scheduler/versioned-operations-2.scores rename to cts/scheduler/scores/versioned-operations-2.scores diff --git a/cts/scheduler/versioned-operations-3.scores b/cts/scheduler/scores/versioned-operations-3.scores similarity index 100% rename from cts/scheduler/versioned-operations-3.scores rename to cts/scheduler/scores/versioned-operations-3.scores diff --git a/cts/scheduler/versioned-operations-4.scores b/cts/scheduler/scores/versioned-operations-4.scores similarity index 100% rename from cts/scheduler/versioned-operations-4.scores rename to cts/scheduler/scores/versioned-operations-4.scores diff --git a/cts/scheduler/versioned-resources.scores b/cts/scheduler/scores/versioned-resources.scores similarity index 100% rename from cts/scheduler/versioned-resources.scores rename to cts/scheduler/scores/versioned-resources.scores diff --git a/cts/scheduler/whitebox-asymmetric.scores b/cts/scheduler/scores/whitebox-asymmetric.scores similarity index 100% rename from cts/scheduler/whitebox-asymmetric.scores rename to cts/scheduler/scores/whitebox-asymmetric.scores diff --git a/cts/scheduler/whitebox-fail1.scores b/cts/scheduler/scores/whitebox-fail1.scores similarity index 100% rename from cts/scheduler/whitebox-fail1.scores rename to cts/scheduler/scores/whitebox-fail1.scores diff --git a/cts/scheduler/whitebox-fail2.scores b/cts/scheduler/scores/whitebox-fail2.scores similarity index 100% rename from cts/scheduler/whitebox-fail2.scores rename to cts/scheduler/scores/whitebox-fail2.scores diff --git a/cts/scheduler/whitebox-fail3.scores b/cts/scheduler/scores/whitebox-fail3.scores similarity index 100% rename from cts/scheduler/whitebox-fail3.scores rename to cts/scheduler/scores/whitebox-fail3.scores diff --git a/cts/scheduler/whitebox-imply-stop-on-fence.scores b/cts/scheduler/scores/whitebox-imply-stop-on-fence.scores similarity index 100% rename from cts/scheduler/whitebox-imply-stop-on-fence.scores rename to cts/scheduler/scores/whitebox-imply-stop-on-fence.scores diff --git a/cts/scheduler/whitebox-migrate1.scores b/cts/scheduler/scores/whitebox-migrate1.scores similarity index 100% rename from cts/scheduler/whitebox-migrate1.scores rename to cts/scheduler/scores/whitebox-migrate1.scores diff --git a/cts/scheduler/whitebox-move.scores b/cts/scheduler/scores/whitebox-move.scores similarity index 100% rename from cts/scheduler/whitebox-move.scores rename to cts/scheduler/scores/whitebox-move.scores diff --git a/cts/scheduler/whitebox-ms-ordering-move.scores b/cts/scheduler/scores/whitebox-ms-ordering-move.scores similarity index 100% rename from cts/scheduler/whitebox-ms-ordering-move.scores rename to cts/scheduler/scores/whitebox-ms-ordering-move.scores diff --git a/cts/scheduler/whitebox-ms-ordering.scores b/cts/scheduler/scores/whitebox-ms-ordering.scores similarity index 100% rename from cts/scheduler/whitebox-ms-ordering.scores rename to cts/scheduler/scores/whitebox-ms-ordering.scores diff --git a/cts/scheduler/whitebox-nested-group.scores b/cts/scheduler/scores/whitebox-nested-group.scores similarity index 100% rename from cts/scheduler/whitebox-nested-group.scores rename to cts/scheduler/scores/whitebox-nested-group.scores diff --git a/cts/scheduler/whitebox-orphan-ms.scores b/cts/scheduler/scores/whitebox-orphan-ms.scores similarity index 100% rename from cts/scheduler/whitebox-orphan-ms.scores rename to cts/scheduler/scores/whitebox-orphan-ms.scores diff --git a/cts/scheduler/whitebox-orphaned.scores b/cts/scheduler/scores/whitebox-orphaned.scores similarity index 100% rename from cts/scheduler/whitebox-orphaned.scores rename to cts/scheduler/scores/whitebox-orphaned.scores diff --git a/cts/scheduler/whitebox-start.scores b/cts/scheduler/scores/whitebox-start.scores similarity index 100% rename from cts/scheduler/whitebox-start.scores rename to cts/scheduler/scores/whitebox-start.scores diff --git a/cts/scheduler/whitebox-stop.scores b/cts/scheduler/scores/whitebox-stop.scores similarity index 100% rename from cts/scheduler/whitebox-stop.scores rename to cts/scheduler/scores/whitebox-stop.scores diff --git a/cts/scheduler/whitebox-unexpectedly-running.scores b/cts/scheduler/scores/whitebox-unexpectedly-running.scores similarity index 100% rename from cts/scheduler/whitebox-unexpectedly-running.scores rename to cts/scheduler/scores/whitebox-unexpectedly-running.scores diff --git a/cts/scheduler/year-2038.scores b/cts/scheduler/scores/year-2038.scores similarity index 100% rename from cts/scheduler/year-2038.scores rename to cts/scheduler/scores/year-2038.scores diff --git a/cts/scheduler/stderr/Makefile.am b/cts/scheduler/stderr/Makefile.am new file mode 100644 index 0000000000..5dbac99341 --- /dev/null +++ b/cts/scheduler/stderr/Makefile.am @@ -0,0 +1,12 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +scoresdir = $(datadir)/$(PACKAGE)/tests/scheduler/stderr +dist_scores_DATA = $(wildcard *.stderr) diff --git a/cts/scheduler/order-wrong-kind.stderr b/cts/scheduler/stderr/order-wrong-kind.stderr similarity index 100% rename from cts/scheduler/order-wrong-kind.stderr rename to cts/scheduler/stderr/order-wrong-kind.stderr diff --git a/cts/scheduler/1-a-then-bm-move-b.summary b/cts/scheduler/summary/1-a-then-bm-move-b.summary similarity index 100% rename from cts/scheduler/1-a-then-bm-move-b.summary rename to cts/scheduler/summary/1-a-then-bm-move-b.summary diff --git a/cts/scheduler/10-a-then-bm-b-move-a-clone.summary b/cts/scheduler/summary/10-a-then-bm-b-move-a-clone.summary similarity index 100% rename from cts/scheduler/10-a-then-bm-b-move-a-clone.summary rename to cts/scheduler/summary/10-a-then-bm-b-move-a-clone.summary diff --git a/cts/scheduler/11-a-then-bm-b-move-a-clone-starting.summary b/cts/scheduler/summary/11-a-then-bm-b-move-a-clone-starting.summary similarity index 100% rename from cts/scheduler/11-a-then-bm-b-move-a-clone-starting.summary rename to cts/scheduler/summary/11-a-then-bm-b-move-a-clone-starting.summary diff --git a/cts/scheduler/1360.summary b/cts/scheduler/summary/1360.summary similarity index 100% rename from cts/scheduler/1360.summary rename to cts/scheduler/summary/1360.summary diff --git a/cts/scheduler/1484.summary b/cts/scheduler/summary/1484.summary similarity index 100% rename from cts/scheduler/1484.summary rename to cts/scheduler/summary/1484.summary diff --git a/cts/scheduler/1494.summary b/cts/scheduler/summary/1494.summary similarity index 100% rename from cts/scheduler/1494.summary rename to cts/scheduler/summary/1494.summary diff --git a/cts/scheduler/2-am-then-b-move-a.summary b/cts/scheduler/summary/2-am-then-b-move-a.summary similarity index 100% rename from cts/scheduler/2-am-then-b-move-a.summary rename to cts/scheduler/summary/2-am-then-b-move-a.summary diff --git a/cts/scheduler/3-am-then-bm-both-migrate.summary b/cts/scheduler/summary/3-am-then-bm-both-migrate.summary similarity index 100% rename from cts/scheduler/3-am-then-bm-both-migrate.summary rename to cts/scheduler/summary/3-am-then-bm-both-migrate.summary diff --git a/cts/scheduler/4-am-then-bm-b-not-migratable.summary b/cts/scheduler/summary/4-am-then-bm-b-not-migratable.summary similarity index 100% rename from cts/scheduler/4-am-then-bm-b-not-migratable.summary rename to cts/scheduler/summary/4-am-then-bm-b-not-migratable.summary diff --git a/cts/scheduler/5-am-then-bm-a-not-migratable.summary b/cts/scheduler/summary/5-am-then-bm-a-not-migratable.summary similarity index 100% rename from cts/scheduler/5-am-then-bm-a-not-migratable.summary rename to cts/scheduler/summary/5-am-then-bm-a-not-migratable.summary diff --git a/cts/scheduler/594.summary b/cts/scheduler/summary/594.summary similarity index 100% rename from cts/scheduler/594.summary rename to cts/scheduler/summary/594.summary diff --git a/cts/scheduler/6-migrate-group.summary b/cts/scheduler/summary/6-migrate-group.summary similarity index 100% rename from cts/scheduler/6-migrate-group.summary rename to cts/scheduler/summary/6-migrate-group.summary diff --git a/cts/scheduler/662.summary b/cts/scheduler/summary/662.summary similarity index 100% rename from cts/scheduler/662.summary rename to cts/scheduler/summary/662.summary diff --git a/cts/scheduler/696.summary b/cts/scheduler/summary/696.summary similarity index 100% rename from cts/scheduler/696.summary rename to cts/scheduler/summary/696.summary diff --git a/cts/scheduler/7-migrate-group-one-unmigratable.summary b/cts/scheduler/summary/7-migrate-group-one-unmigratable.summary similarity index 100% rename from cts/scheduler/7-migrate-group-one-unmigratable.summary rename to cts/scheduler/summary/7-migrate-group-one-unmigratable.summary diff --git a/cts/scheduler/726.summary b/cts/scheduler/summary/726.summary similarity index 100% rename from cts/scheduler/726.summary rename to cts/scheduler/summary/726.summary diff --git a/cts/scheduler/735.summary b/cts/scheduler/summary/735.summary similarity index 100% rename from cts/scheduler/735.summary rename to cts/scheduler/summary/735.summary diff --git a/cts/scheduler/764.summary b/cts/scheduler/summary/764.summary similarity index 100% rename from cts/scheduler/764.summary rename to cts/scheduler/summary/764.summary diff --git a/cts/scheduler/797.summary b/cts/scheduler/summary/797.summary similarity index 100% rename from cts/scheduler/797.summary rename to cts/scheduler/summary/797.summary diff --git a/cts/scheduler/8-am-then-bm-a-migrating-b-stopping.summary b/cts/scheduler/summary/8-am-then-bm-a-migrating-b-stopping.summary similarity index 100% rename from cts/scheduler/8-am-then-bm-a-migrating-b-stopping.summary rename to cts/scheduler/summary/8-am-then-bm-a-migrating-b-stopping.summary diff --git a/cts/scheduler/829.summary b/cts/scheduler/summary/829.summary similarity index 100% rename from cts/scheduler/829.summary rename to cts/scheduler/summary/829.summary diff --git a/cts/scheduler/9-am-then-bm-b-migrating-a-stopping.summary b/cts/scheduler/summary/9-am-then-bm-b-migrating-a-stopping.summary similarity index 100% rename from cts/scheduler/9-am-then-bm-b-migrating-a-stopping.summary rename to cts/scheduler/summary/9-am-then-bm-b-migrating-a-stopping.summary diff --git a/cts/scheduler/994-2.summary b/cts/scheduler/summary/994-2.summary similarity index 100% rename from cts/scheduler/994-2.summary rename to cts/scheduler/summary/994-2.summary diff --git a/cts/scheduler/994.summary b/cts/scheduler/summary/994.summary similarity index 100% rename from cts/scheduler/994.summary rename to cts/scheduler/summary/994.summary diff --git a/cts/scheduler/summary/Makefile.am b/cts/scheduler/summary/Makefile.am new file mode 100644 index 0000000000..f89c904825 --- /dev/null +++ b/cts/scheduler/summary/Makefile.am @@ -0,0 +1,12 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +summarydir = $(datadir)/$(PACKAGE)/tests/scheduler/summary +dist_summary_DATA = $(wildcard *.summary) diff --git a/cts/scheduler/a-demote-then-b-migrate.summary b/cts/scheduler/summary/a-demote-then-b-migrate.summary similarity index 100% rename from cts/scheduler/a-demote-then-b-migrate.summary rename to cts/scheduler/summary/a-demote-then-b-migrate.summary diff --git a/cts/scheduler/a-promote-then-b-migrate.summary b/cts/scheduler/summary/a-promote-then-b-migrate.summary similarity index 100% rename from cts/scheduler/a-promote-then-b-migrate.summary rename to cts/scheduler/summary/a-promote-then-b-migrate.summary diff --git a/cts/scheduler/anon-instance-pending.summary b/cts/scheduler/summary/anon-instance-pending.summary similarity index 100% rename from cts/scheduler/anon-instance-pending.summary rename to cts/scheduler/summary/anon-instance-pending.summary diff --git a/cts/scheduler/anti-colocation-master.summary b/cts/scheduler/summary/anti-colocation-master.summary similarity index 100% rename from cts/scheduler/anti-colocation-master.summary rename to cts/scheduler/summary/anti-colocation-master.summary diff --git a/cts/scheduler/anti-colocation-order.summary b/cts/scheduler/summary/anti-colocation-order.summary similarity index 100% rename from cts/scheduler/anti-colocation-order.summary rename to cts/scheduler/summary/anti-colocation-order.summary diff --git a/cts/scheduler/anti-colocation-slave.summary b/cts/scheduler/summary/anti-colocation-slave.summary similarity index 100% rename from cts/scheduler/anti-colocation-slave.summary rename to cts/scheduler/summary/anti-colocation-slave.summary diff --git a/cts/scheduler/asymmetric.summary b/cts/scheduler/summary/asymmetric.summary similarity index 100% rename from cts/scheduler/asymmetric.summary rename to cts/scheduler/summary/asymmetric.summary diff --git a/cts/scheduler/asymmetrical-order-move.summary b/cts/scheduler/summary/asymmetrical-order-move.summary similarity index 100% rename from cts/scheduler/asymmetrical-order-move.summary rename to cts/scheduler/summary/asymmetrical-order-move.summary diff --git a/cts/scheduler/asymmetrical-order-restart.summary b/cts/scheduler/summary/asymmetrical-order-restart.summary similarity index 100% rename from cts/scheduler/asymmetrical-order-restart.summary rename to cts/scheduler/summary/asymmetrical-order-restart.summary diff --git a/cts/scheduler/attrs1.summary b/cts/scheduler/summary/attrs1.summary similarity index 100% rename from cts/scheduler/attrs1.summary rename to cts/scheduler/summary/attrs1.summary diff --git a/cts/scheduler/attrs2.summary b/cts/scheduler/summary/attrs2.summary similarity index 100% rename from cts/scheduler/attrs2.summary rename to cts/scheduler/summary/attrs2.summary diff --git a/cts/scheduler/attrs3.summary b/cts/scheduler/summary/attrs3.summary similarity index 100% rename from cts/scheduler/attrs3.summary rename to cts/scheduler/summary/attrs3.summary diff --git a/cts/scheduler/attrs4.summary b/cts/scheduler/summary/attrs4.summary similarity index 100% rename from cts/scheduler/attrs4.summary rename to cts/scheduler/summary/attrs4.summary diff --git a/cts/scheduler/attrs5.summary b/cts/scheduler/summary/attrs5.summary similarity index 100% rename from cts/scheduler/attrs5.summary rename to cts/scheduler/summary/attrs5.summary diff --git a/cts/scheduler/attrs6.summary b/cts/scheduler/summary/attrs6.summary similarity index 100% rename from cts/scheduler/attrs6.summary rename to cts/scheduler/summary/attrs6.summary diff --git a/cts/scheduler/attrs7.summary b/cts/scheduler/summary/attrs7.summary similarity index 100% rename from cts/scheduler/attrs7.summary rename to cts/scheduler/summary/attrs7.summary diff --git a/cts/scheduler/attrs8.summary b/cts/scheduler/summary/attrs8.summary similarity index 100% rename from cts/scheduler/attrs8.summary rename to cts/scheduler/summary/attrs8.summary diff --git a/cts/scheduler/balanced.summary b/cts/scheduler/summary/balanced.summary similarity index 100% rename from cts/scheduler/balanced.summary rename to cts/scheduler/summary/balanced.summary diff --git a/cts/scheduler/base-score.summary b/cts/scheduler/summary/base-score.summary similarity index 100% rename from cts/scheduler/base-score.summary rename to cts/scheduler/summary/base-score.summary diff --git a/cts/scheduler/bnc-515172.summary b/cts/scheduler/summary/bnc-515172.summary similarity index 100% rename from cts/scheduler/bnc-515172.summary rename to cts/scheduler/summary/bnc-515172.summary diff --git a/cts/scheduler/bug-1572-1.summary b/cts/scheduler/summary/bug-1572-1.summary similarity index 100% rename from cts/scheduler/bug-1572-1.summary rename to cts/scheduler/summary/bug-1572-1.summary diff --git a/cts/scheduler/bug-1572-2.summary b/cts/scheduler/summary/bug-1572-2.summary similarity index 100% rename from cts/scheduler/bug-1572-2.summary rename to cts/scheduler/summary/bug-1572-2.summary diff --git a/cts/scheduler/bug-1573.summary b/cts/scheduler/summary/bug-1573.summary similarity index 100% rename from cts/scheduler/bug-1573.summary rename to cts/scheduler/summary/bug-1573.summary diff --git a/cts/scheduler/bug-1685.summary b/cts/scheduler/summary/bug-1685.summary similarity index 100% rename from cts/scheduler/bug-1685.summary rename to cts/scheduler/summary/bug-1685.summary diff --git a/cts/scheduler/bug-1718.summary b/cts/scheduler/summary/bug-1718.summary similarity index 100% rename from cts/scheduler/bug-1718.summary rename to cts/scheduler/summary/bug-1718.summary diff --git a/cts/scheduler/bug-1765.summary b/cts/scheduler/summary/bug-1765.summary similarity index 100% rename from cts/scheduler/bug-1765.summary rename to cts/scheduler/summary/bug-1765.summary diff --git a/cts/scheduler/bug-1820-1.summary b/cts/scheduler/summary/bug-1820-1.summary similarity index 100% rename from cts/scheduler/bug-1820-1.summary rename to cts/scheduler/summary/bug-1820-1.summary diff --git a/cts/scheduler/bug-1820.summary b/cts/scheduler/summary/bug-1820.summary similarity index 100% rename from cts/scheduler/bug-1820.summary rename to cts/scheduler/summary/bug-1820.summary diff --git a/cts/scheduler/bug-1822.summary b/cts/scheduler/summary/bug-1822.summary similarity index 100% rename from cts/scheduler/bug-1822.summary rename to cts/scheduler/summary/bug-1822.summary diff --git a/cts/scheduler/bug-5007-masterslave_colocation.summary b/cts/scheduler/summary/bug-5007-masterslave_colocation.summary similarity index 100% rename from cts/scheduler/bug-5007-masterslave_colocation.summary rename to cts/scheduler/summary/bug-5007-masterslave_colocation.summary diff --git a/cts/scheduler/bug-5014-A-start-B-start.summary b/cts/scheduler/summary/bug-5014-A-start-B-start.summary similarity index 100% rename from cts/scheduler/bug-5014-A-start-B-start.summary rename to cts/scheduler/summary/bug-5014-A-start-B-start.summary diff --git a/cts/scheduler/bug-5014-A-stop-B-started.summary b/cts/scheduler/summary/bug-5014-A-stop-B-started.summary similarity index 100% rename from cts/scheduler/bug-5014-A-stop-B-started.summary rename to cts/scheduler/summary/bug-5014-A-stop-B-started.summary diff --git a/cts/scheduler/bug-5014-A-stopped-B-stopped.summary b/cts/scheduler/summary/bug-5014-A-stopped-B-stopped.summary similarity index 100% rename from cts/scheduler/bug-5014-A-stopped-B-stopped.summary rename to cts/scheduler/summary/bug-5014-A-stopped-B-stopped.summary diff --git a/cts/scheduler/bug-5014-CLONE-A-start-B-start.summary b/cts/scheduler/summary/bug-5014-CLONE-A-start-B-start.summary similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-start-B-start.summary rename to cts/scheduler/summary/bug-5014-CLONE-A-start-B-start.summary diff --git a/cts/scheduler/bug-5014-CLONE-A-stop-B-started.summary b/cts/scheduler/summary/bug-5014-CLONE-A-stop-B-started.summary similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-stop-B-started.summary rename to cts/scheduler/summary/bug-5014-CLONE-A-stop-B-started.summary diff --git a/cts/scheduler/bug-5014-CthenAthenB-C-stopped.summary b/cts/scheduler/summary/bug-5014-CthenAthenB-C-stopped.summary similarity index 100% rename from cts/scheduler/bug-5014-CthenAthenB-C-stopped.summary rename to cts/scheduler/summary/bug-5014-CthenAthenB-C-stopped.summary diff --git a/cts/scheduler/bug-5014-GROUP-A-start-B-start.summary b/cts/scheduler/summary/bug-5014-GROUP-A-start-B-start.summary similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-start-B-start.summary rename to cts/scheduler/summary/bug-5014-GROUP-A-start-B-start.summary diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-started.summary b/cts/scheduler/summary/bug-5014-GROUP-A-stopped-B-started.summary similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-started.summary rename to cts/scheduler/summary/bug-5014-GROUP-A-stopped-B-started.summary diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.summary b/cts/scheduler/summary/bug-5014-GROUP-A-stopped-B-stopped.summary similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.summary rename to cts/scheduler/summary/bug-5014-GROUP-A-stopped-B-stopped.summary diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-false.summary b/cts/scheduler/summary/bug-5014-ordered-set-symmetrical-false.summary similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-false.summary rename to cts/scheduler/summary/bug-5014-ordered-set-symmetrical-false.summary diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-true.summary b/cts/scheduler/summary/bug-5014-ordered-set-symmetrical-true.summary similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-true.summary rename to cts/scheduler/summary/bug-5014-ordered-set-symmetrical-true.summary diff --git a/cts/scheduler/bug-5025-1.summary b/cts/scheduler/summary/bug-5025-1.summary similarity index 100% rename from cts/scheduler/bug-5025-1.summary rename to cts/scheduler/summary/bug-5025-1.summary diff --git a/cts/scheduler/bug-5025-2.summary b/cts/scheduler/summary/bug-5025-2.summary similarity index 100% rename from cts/scheduler/bug-5025-2.summary rename to cts/scheduler/summary/bug-5025-2.summary diff --git a/cts/scheduler/bug-5025-3.summary b/cts/scheduler/summary/bug-5025-3.summary similarity index 100% rename from cts/scheduler/bug-5025-3.summary rename to cts/scheduler/summary/bug-5025-3.summary diff --git a/cts/scheduler/bug-5025-4.summary b/cts/scheduler/summary/bug-5025-4.summary similarity index 100% rename from cts/scheduler/bug-5025-4.summary rename to cts/scheduler/summary/bug-5025-4.summary diff --git a/cts/scheduler/bug-5028-bottom.summary b/cts/scheduler/summary/bug-5028-bottom.summary similarity index 100% rename from cts/scheduler/bug-5028-bottom.summary rename to cts/scheduler/summary/bug-5028-bottom.summary diff --git a/cts/scheduler/bug-5028-detach.summary b/cts/scheduler/summary/bug-5028-detach.summary similarity index 100% rename from cts/scheduler/bug-5028-detach.summary rename to cts/scheduler/summary/bug-5028-detach.summary diff --git a/cts/scheduler/bug-5028.summary b/cts/scheduler/summary/bug-5028.summary similarity index 100% rename from cts/scheduler/bug-5028.summary rename to cts/scheduler/summary/bug-5028.summary diff --git a/cts/scheduler/bug-5038.summary b/cts/scheduler/summary/bug-5038.summary similarity index 100% rename from cts/scheduler/bug-5038.summary rename to cts/scheduler/summary/bug-5038.summary diff --git a/cts/scheduler/bug-5059.summary b/cts/scheduler/summary/bug-5059.summary similarity index 100% rename from cts/scheduler/bug-5059.summary rename to cts/scheduler/summary/bug-5059.summary diff --git a/cts/scheduler/bug-5069-op-disabled.summary b/cts/scheduler/summary/bug-5069-op-disabled.summary similarity index 100% rename from cts/scheduler/bug-5069-op-disabled.summary rename to cts/scheduler/summary/bug-5069-op-disabled.summary diff --git a/cts/scheduler/bug-5069-op-enabled.summary b/cts/scheduler/summary/bug-5069-op-enabled.summary similarity index 100% rename from cts/scheduler/bug-5069-op-enabled.summary rename to cts/scheduler/summary/bug-5069-op-enabled.summary diff --git a/cts/scheduler/bug-5140-require-all-false.summary b/cts/scheduler/summary/bug-5140-require-all-false.summary similarity index 100% rename from cts/scheduler/bug-5140-require-all-false.summary rename to cts/scheduler/summary/bug-5140-require-all-false.summary diff --git a/cts/scheduler/bug-5143-ms-shuffle.summary b/cts/scheduler/summary/bug-5143-ms-shuffle.summary similarity index 100% rename from cts/scheduler/bug-5143-ms-shuffle.summary rename to cts/scheduler/summary/bug-5143-ms-shuffle.summary diff --git a/cts/scheduler/bug-5186-partial-migrate.summary b/cts/scheduler/summary/bug-5186-partial-migrate.summary similarity index 100% rename from cts/scheduler/bug-5186-partial-migrate.summary rename to cts/scheduler/summary/bug-5186-partial-migrate.summary diff --git a/cts/scheduler/bug-cl-5168.summary b/cts/scheduler/summary/bug-cl-5168.summary similarity index 100% rename from cts/scheduler/bug-cl-5168.summary rename to cts/scheduler/summary/bug-cl-5168.summary diff --git a/cts/scheduler/bug-cl-5170.summary b/cts/scheduler/summary/bug-cl-5170.summary similarity index 100% rename from cts/scheduler/bug-cl-5170.summary rename to cts/scheduler/summary/bug-cl-5170.summary diff --git a/cts/scheduler/bug-cl-5212.summary b/cts/scheduler/summary/bug-cl-5212.summary similarity index 100% rename from cts/scheduler/bug-cl-5212.summary rename to cts/scheduler/summary/bug-cl-5212.summary diff --git a/cts/scheduler/bug-cl-5213.summary b/cts/scheduler/summary/bug-cl-5213.summary similarity index 100% rename from cts/scheduler/bug-cl-5213.summary rename to cts/scheduler/summary/bug-cl-5213.summary diff --git a/cts/scheduler/bug-cl-5219.summary b/cts/scheduler/summary/bug-cl-5219.summary similarity index 100% rename from cts/scheduler/bug-cl-5219.summary rename to cts/scheduler/summary/bug-cl-5219.summary diff --git a/cts/scheduler/bug-cl-5247.summary b/cts/scheduler/summary/bug-cl-5247.summary similarity index 100% rename from cts/scheduler/bug-cl-5247.summary rename to cts/scheduler/summary/bug-cl-5247.summary diff --git a/cts/scheduler/bug-lf-1852.summary b/cts/scheduler/summary/bug-lf-1852.summary similarity index 100% rename from cts/scheduler/bug-lf-1852.summary rename to cts/scheduler/summary/bug-lf-1852.summary diff --git a/cts/scheduler/bug-lf-1920.summary b/cts/scheduler/summary/bug-lf-1920.summary similarity index 100% rename from cts/scheduler/bug-lf-1920.summary rename to cts/scheduler/summary/bug-lf-1920.summary diff --git a/cts/scheduler/bug-lf-2106.summary b/cts/scheduler/summary/bug-lf-2106.summary similarity index 100% rename from cts/scheduler/bug-lf-2106.summary rename to cts/scheduler/summary/bug-lf-2106.summary diff --git a/cts/scheduler/bug-lf-2153.summary b/cts/scheduler/summary/bug-lf-2153.summary similarity index 100% rename from cts/scheduler/bug-lf-2153.summary rename to cts/scheduler/summary/bug-lf-2153.summary diff --git a/cts/scheduler/bug-lf-2160.summary b/cts/scheduler/summary/bug-lf-2160.summary similarity index 100% rename from cts/scheduler/bug-lf-2160.summary rename to cts/scheduler/summary/bug-lf-2160.summary diff --git a/cts/scheduler/bug-lf-2171.summary b/cts/scheduler/summary/bug-lf-2171.summary similarity index 100% rename from cts/scheduler/bug-lf-2171.summary rename to cts/scheduler/summary/bug-lf-2171.summary diff --git a/cts/scheduler/bug-lf-2213.summary b/cts/scheduler/summary/bug-lf-2213.summary similarity index 100% rename from cts/scheduler/bug-lf-2213.summary rename to cts/scheduler/summary/bug-lf-2213.summary diff --git a/cts/scheduler/bug-lf-2317.summary b/cts/scheduler/summary/bug-lf-2317.summary similarity index 100% rename from cts/scheduler/bug-lf-2317.summary rename to cts/scheduler/summary/bug-lf-2317.summary diff --git a/cts/scheduler/bug-lf-2358.summary b/cts/scheduler/summary/bug-lf-2358.summary similarity index 100% rename from cts/scheduler/bug-lf-2358.summary rename to cts/scheduler/summary/bug-lf-2358.summary diff --git a/cts/scheduler/bug-lf-2361.summary b/cts/scheduler/summary/bug-lf-2361.summary similarity index 100% rename from cts/scheduler/bug-lf-2361.summary rename to cts/scheduler/summary/bug-lf-2361.summary diff --git a/cts/scheduler/bug-lf-2422.summary b/cts/scheduler/summary/bug-lf-2422.summary similarity index 100% rename from cts/scheduler/bug-lf-2422.summary rename to cts/scheduler/summary/bug-lf-2422.summary diff --git a/cts/scheduler/bug-lf-2435.summary b/cts/scheduler/summary/bug-lf-2435.summary similarity index 100% rename from cts/scheduler/bug-lf-2435.summary rename to cts/scheduler/summary/bug-lf-2435.summary diff --git a/cts/scheduler/bug-lf-2445.summary b/cts/scheduler/summary/bug-lf-2445.summary similarity index 100% rename from cts/scheduler/bug-lf-2445.summary rename to cts/scheduler/summary/bug-lf-2445.summary diff --git a/cts/scheduler/bug-lf-2453.summary b/cts/scheduler/summary/bug-lf-2453.summary similarity index 100% rename from cts/scheduler/bug-lf-2453.summary rename to cts/scheduler/summary/bug-lf-2453.summary diff --git a/cts/scheduler/bug-lf-2474.summary b/cts/scheduler/summary/bug-lf-2474.summary similarity index 100% rename from cts/scheduler/bug-lf-2474.summary rename to cts/scheduler/summary/bug-lf-2474.summary diff --git a/cts/scheduler/bug-lf-2493.summary b/cts/scheduler/summary/bug-lf-2493.summary similarity index 100% rename from cts/scheduler/bug-lf-2493.summary rename to cts/scheduler/summary/bug-lf-2493.summary diff --git a/cts/scheduler/bug-lf-2508.summary b/cts/scheduler/summary/bug-lf-2508.summary similarity index 100% rename from cts/scheduler/bug-lf-2508.summary rename to cts/scheduler/summary/bug-lf-2508.summary diff --git a/cts/scheduler/bug-lf-2544.summary b/cts/scheduler/summary/bug-lf-2544.summary similarity index 100% rename from cts/scheduler/bug-lf-2544.summary rename to cts/scheduler/summary/bug-lf-2544.summary diff --git a/cts/scheduler/bug-lf-2551.summary b/cts/scheduler/summary/bug-lf-2551.summary similarity index 100% rename from cts/scheduler/bug-lf-2551.summary rename to cts/scheduler/summary/bug-lf-2551.summary diff --git a/cts/scheduler/bug-lf-2574.summary b/cts/scheduler/summary/bug-lf-2574.summary similarity index 100% rename from cts/scheduler/bug-lf-2574.summary rename to cts/scheduler/summary/bug-lf-2574.summary diff --git a/cts/scheduler/bug-lf-2581.summary b/cts/scheduler/summary/bug-lf-2581.summary similarity index 100% rename from cts/scheduler/bug-lf-2581.summary rename to cts/scheduler/summary/bug-lf-2581.summary diff --git a/cts/scheduler/bug-lf-2606.summary b/cts/scheduler/summary/bug-lf-2606.summary similarity index 100% rename from cts/scheduler/bug-lf-2606.summary rename to cts/scheduler/summary/bug-lf-2606.summary diff --git a/cts/scheduler/bug-lf-2613.summary b/cts/scheduler/summary/bug-lf-2613.summary similarity index 100% rename from cts/scheduler/bug-lf-2613.summary rename to cts/scheduler/summary/bug-lf-2613.summary diff --git a/cts/scheduler/bug-lf-2619.summary b/cts/scheduler/summary/bug-lf-2619.summary similarity index 100% rename from cts/scheduler/bug-lf-2619.summary rename to cts/scheduler/summary/bug-lf-2619.summary diff --git a/cts/scheduler/bug-n-385265-2.summary b/cts/scheduler/summary/bug-n-385265-2.summary similarity index 100% rename from cts/scheduler/bug-n-385265-2.summary rename to cts/scheduler/summary/bug-n-385265-2.summary diff --git a/cts/scheduler/bug-n-385265.summary b/cts/scheduler/summary/bug-n-385265.summary similarity index 100% rename from cts/scheduler/bug-n-385265.summary rename to cts/scheduler/summary/bug-n-385265.summary diff --git a/cts/scheduler/bug-n-387749.summary b/cts/scheduler/summary/bug-n-387749.summary similarity index 100% rename from cts/scheduler/bug-n-387749.summary rename to cts/scheduler/summary/bug-n-387749.summary diff --git a/cts/scheduler/bug-pm-11.summary b/cts/scheduler/summary/bug-pm-11.summary similarity index 100% rename from cts/scheduler/bug-pm-11.summary rename to cts/scheduler/summary/bug-pm-11.summary diff --git a/cts/scheduler/bug-pm-12.summary b/cts/scheduler/summary/bug-pm-12.summary similarity index 100% rename from cts/scheduler/bug-pm-12.summary rename to cts/scheduler/summary/bug-pm-12.summary diff --git a/cts/scheduler/bug-rh-1097457.summary b/cts/scheduler/summary/bug-rh-1097457.summary similarity index 100% rename from cts/scheduler/bug-rh-1097457.summary rename to cts/scheduler/summary/bug-rh-1097457.summary diff --git a/cts/scheduler/bug-rh-880249.summary b/cts/scheduler/summary/bug-rh-880249.summary similarity index 100% rename from cts/scheduler/bug-rh-880249.summary rename to cts/scheduler/summary/bug-rh-880249.summary diff --git a/cts/scheduler/bug-suse-707150.summary b/cts/scheduler/summary/bug-suse-707150.summary similarity index 100% rename from cts/scheduler/bug-suse-707150.summary rename to cts/scheduler/summary/bug-suse-707150.summary diff --git a/cts/scheduler/bundle-nested-colocation.summary b/cts/scheduler/summary/bundle-nested-colocation.summary similarity index 100% rename from cts/scheduler/bundle-nested-colocation.summary rename to cts/scheduler/summary/bundle-nested-colocation.summary diff --git a/cts/scheduler/bundle-order-fencing.summary b/cts/scheduler/summary/bundle-order-fencing.summary similarity index 100% rename from cts/scheduler/bundle-order-fencing.summary rename to cts/scheduler/summary/bundle-order-fencing.summary diff --git a/cts/scheduler/bundle-order-partial-start-2.summary b/cts/scheduler/summary/bundle-order-partial-start-2.summary similarity index 100% rename from cts/scheduler/bundle-order-partial-start-2.summary rename to cts/scheduler/summary/bundle-order-partial-start-2.summary diff --git a/cts/scheduler/bundle-order-partial-start.summary b/cts/scheduler/summary/bundle-order-partial-start.summary similarity index 100% rename from cts/scheduler/bundle-order-partial-start.summary rename to cts/scheduler/summary/bundle-order-partial-start.summary diff --git a/cts/scheduler/bundle-order-partial-stop.summary b/cts/scheduler/summary/bundle-order-partial-stop.summary similarity index 100% rename from cts/scheduler/bundle-order-partial-stop.summary rename to cts/scheduler/summary/bundle-order-partial-stop.summary diff --git a/cts/scheduler/bundle-order-partial.summary b/cts/scheduler/summary/bundle-order-partial.summary similarity index 100% rename from cts/scheduler/bundle-order-partial.summary rename to cts/scheduler/summary/bundle-order-partial.summary diff --git a/cts/scheduler/bundle-order-startup-clone-2.summary b/cts/scheduler/summary/bundle-order-startup-clone-2.summary similarity index 100% rename from cts/scheduler/bundle-order-startup-clone-2.summary rename to cts/scheduler/summary/bundle-order-startup-clone-2.summary diff --git a/cts/scheduler/bundle-order-startup-clone.summary b/cts/scheduler/summary/bundle-order-startup-clone.summary similarity index 100% rename from cts/scheduler/bundle-order-startup-clone.summary rename to cts/scheduler/summary/bundle-order-startup-clone.summary diff --git a/cts/scheduler/bundle-order-startup.summary b/cts/scheduler/summary/bundle-order-startup.summary similarity index 100% rename from cts/scheduler/bundle-order-startup.summary rename to cts/scheduler/summary/bundle-order-startup.summary diff --git a/cts/scheduler/bundle-order-stop-clone.summary b/cts/scheduler/summary/bundle-order-stop-clone.summary similarity index 100% rename from cts/scheduler/bundle-order-stop-clone.summary rename to cts/scheduler/summary/bundle-order-stop-clone.summary diff --git a/cts/scheduler/bundle-order-stop-on-remote.summary b/cts/scheduler/summary/bundle-order-stop-on-remote.summary similarity index 100% rename from cts/scheduler/bundle-order-stop-on-remote.summary rename to cts/scheduler/summary/bundle-order-stop-on-remote.summary diff --git a/cts/scheduler/bundle-order-stop.summary b/cts/scheduler/summary/bundle-order-stop.summary similarity index 100% rename from cts/scheduler/bundle-order-stop.summary rename to cts/scheduler/summary/bundle-order-stop.summary diff --git a/cts/scheduler/bundle-probe-order-1.summary b/cts/scheduler/summary/bundle-probe-order-1.summary similarity index 100% rename from cts/scheduler/bundle-probe-order-1.summary rename to cts/scheduler/summary/bundle-probe-order-1.summary diff --git a/cts/scheduler/bundle-probe-order-2.summary b/cts/scheduler/summary/bundle-probe-order-2.summary similarity index 100% rename from cts/scheduler/bundle-probe-order-2.summary rename to cts/scheduler/summary/bundle-probe-order-2.summary diff --git a/cts/scheduler/bundle-probe-order-3.summary b/cts/scheduler/summary/bundle-probe-order-3.summary similarity index 100% rename from cts/scheduler/bundle-probe-order-3.summary rename to cts/scheduler/summary/bundle-probe-order-3.summary diff --git a/cts/scheduler/bundle-probe-remotes.summary b/cts/scheduler/summary/bundle-probe-remotes.summary similarity index 100% rename from cts/scheduler/bundle-probe-remotes.summary rename to cts/scheduler/summary/bundle-probe-remotes.summary diff --git a/cts/scheduler/bundle-replicas-change.summary b/cts/scheduler/summary/bundle-replicas-change.summary similarity index 100% rename from cts/scheduler/bundle-replicas-change.summary rename to cts/scheduler/summary/bundle-replicas-change.summary diff --git a/cts/scheduler/cancel-behind-moving-remote.summary b/cts/scheduler/summary/cancel-behind-moving-remote.summary similarity index 100% rename from cts/scheduler/cancel-behind-moving-remote.summary rename to cts/scheduler/summary/cancel-behind-moving-remote.summary diff --git a/cts/scheduler/clone-anon-dup.summary b/cts/scheduler/summary/clone-anon-dup.summary similarity index 100% rename from cts/scheduler/clone-anon-dup.summary rename to cts/scheduler/summary/clone-anon-dup.summary diff --git a/cts/scheduler/clone-anon-failcount.summary b/cts/scheduler/summary/clone-anon-failcount.summary similarity index 100% rename from cts/scheduler/clone-anon-failcount.summary rename to cts/scheduler/summary/clone-anon-failcount.summary diff --git a/cts/scheduler/clone-anon-probe-1.summary b/cts/scheduler/summary/clone-anon-probe-1.summary similarity index 100% rename from cts/scheduler/clone-anon-probe-1.summary rename to cts/scheduler/summary/clone-anon-probe-1.summary diff --git a/cts/scheduler/clone-anon-probe-2.summary b/cts/scheduler/summary/clone-anon-probe-2.summary similarity index 100% rename from cts/scheduler/clone-anon-probe-2.summary rename to cts/scheduler/summary/clone-anon-probe-2.summary diff --git a/cts/scheduler/clone-colocate-instance-1.summary b/cts/scheduler/summary/clone-colocate-instance-1.summary similarity index 100% rename from cts/scheduler/clone-colocate-instance-1.summary rename to cts/scheduler/summary/clone-colocate-instance-1.summary diff --git a/cts/scheduler/clone-colocate-instance-2.summary b/cts/scheduler/summary/clone-colocate-instance-2.summary similarity index 100% rename from cts/scheduler/clone-colocate-instance-2.summary rename to cts/scheduler/summary/clone-colocate-instance-2.summary diff --git a/cts/scheduler/clone-fail-block-colocation.summary b/cts/scheduler/summary/clone-fail-block-colocation.summary similarity index 100% rename from cts/scheduler/clone-fail-block-colocation.summary rename to cts/scheduler/summary/clone-fail-block-colocation.summary diff --git a/cts/scheduler/clone-interleave-1.summary b/cts/scheduler/summary/clone-interleave-1.summary similarity index 100% rename from cts/scheduler/clone-interleave-1.summary rename to cts/scheduler/summary/clone-interleave-1.summary diff --git a/cts/scheduler/clone-interleave-2.summary b/cts/scheduler/summary/clone-interleave-2.summary similarity index 100% rename from cts/scheduler/clone-interleave-2.summary rename to cts/scheduler/summary/clone-interleave-2.summary diff --git a/cts/scheduler/clone-interleave-3.summary b/cts/scheduler/summary/clone-interleave-3.summary similarity index 100% rename from cts/scheduler/clone-interleave-3.summary rename to cts/scheduler/summary/clone-interleave-3.summary diff --git a/cts/scheduler/clone-max-zero.summary b/cts/scheduler/summary/clone-max-zero.summary similarity index 100% rename from cts/scheduler/clone-max-zero.summary rename to cts/scheduler/summary/clone-max-zero.summary diff --git a/cts/scheduler/clone-no-shuffle.summary b/cts/scheduler/summary/clone-no-shuffle.summary similarity index 100% rename from cts/scheduler/clone-no-shuffle.summary rename to cts/scheduler/summary/clone-no-shuffle.summary diff --git a/cts/scheduler/clone-order-16instances.summary b/cts/scheduler/summary/clone-order-16instances.summary similarity index 100% rename from cts/scheduler/clone-order-16instances.summary rename to cts/scheduler/summary/clone-order-16instances.summary diff --git a/cts/scheduler/clone-order-instance.summary b/cts/scheduler/summary/clone-order-instance.summary similarity index 100% rename from cts/scheduler/clone-order-instance.summary rename to cts/scheduler/summary/clone-order-instance.summary diff --git a/cts/scheduler/clone-order-primitive.summary b/cts/scheduler/summary/clone-order-primitive.summary similarity index 100% rename from cts/scheduler/clone-order-primitive.summary rename to cts/scheduler/summary/clone-order-primitive.summary diff --git a/cts/scheduler/clone-require-all-1.summary b/cts/scheduler/summary/clone-require-all-1.summary similarity index 100% rename from cts/scheduler/clone-require-all-1.summary rename to cts/scheduler/summary/clone-require-all-1.summary diff --git a/cts/scheduler/clone-require-all-2.summary b/cts/scheduler/summary/clone-require-all-2.summary similarity index 100% rename from cts/scheduler/clone-require-all-2.summary rename to cts/scheduler/summary/clone-require-all-2.summary diff --git a/cts/scheduler/clone-require-all-3.summary b/cts/scheduler/summary/clone-require-all-3.summary similarity index 100% rename from cts/scheduler/clone-require-all-3.summary rename to cts/scheduler/summary/clone-require-all-3.summary diff --git a/cts/scheduler/clone-require-all-4.summary b/cts/scheduler/summary/clone-require-all-4.summary similarity index 100% rename from cts/scheduler/clone-require-all-4.summary rename to cts/scheduler/summary/clone-require-all-4.summary diff --git a/cts/scheduler/clone-require-all-5.summary b/cts/scheduler/summary/clone-require-all-5.summary similarity index 100% rename from cts/scheduler/clone-require-all-5.summary rename to cts/scheduler/summary/clone-require-all-5.summary diff --git a/cts/scheduler/clone-require-all-6.summary b/cts/scheduler/summary/clone-require-all-6.summary similarity index 100% rename from cts/scheduler/clone-require-all-6.summary rename to cts/scheduler/summary/clone-require-all-6.summary diff --git a/cts/scheduler/clone-require-all-7.summary b/cts/scheduler/summary/clone-require-all-7.summary similarity index 100% rename from cts/scheduler/clone-require-all-7.summary rename to cts/scheduler/summary/clone-require-all-7.summary diff --git a/cts/scheduler/clone-require-all-no-interleave-1.summary b/cts/scheduler/summary/clone-require-all-no-interleave-1.summary similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-1.summary rename to cts/scheduler/summary/clone-require-all-no-interleave-1.summary diff --git a/cts/scheduler/clone-require-all-no-interleave-2.summary b/cts/scheduler/summary/clone-require-all-no-interleave-2.summary similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-2.summary rename to cts/scheduler/summary/clone-require-all-no-interleave-2.summary diff --git a/cts/scheduler/clone-require-all-no-interleave-3.summary b/cts/scheduler/summary/clone-require-all-no-interleave-3.summary similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-3.summary rename to cts/scheduler/summary/clone-require-all-no-interleave-3.summary diff --git a/cts/scheduler/clone-requires-quorum-recovery.summary b/cts/scheduler/summary/clone-requires-quorum-recovery.summary similarity index 100% rename from cts/scheduler/clone-requires-quorum-recovery.summary rename to cts/scheduler/summary/clone-requires-quorum-recovery.summary diff --git a/cts/scheduler/clone-requires-quorum.summary b/cts/scheduler/summary/clone-requires-quorum.summary similarity index 100% rename from cts/scheduler/clone-requires-quorum.summary rename to cts/scheduler/summary/clone-requires-quorum.summary diff --git a/cts/scheduler/clone_min_interleave_start_one.summary b/cts/scheduler/summary/clone_min_interleave_start_one.summary similarity index 100% rename from cts/scheduler/clone_min_interleave_start_one.summary rename to cts/scheduler/summary/clone_min_interleave_start_one.summary diff --git a/cts/scheduler/clone_min_interleave_start_two.summary b/cts/scheduler/summary/clone_min_interleave_start_two.summary similarity index 100% rename from cts/scheduler/clone_min_interleave_start_two.summary rename to cts/scheduler/summary/clone_min_interleave_start_two.summary diff --git a/cts/scheduler/clone_min_interleave_stop_one.summary b/cts/scheduler/summary/clone_min_interleave_stop_one.summary similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_one.summary rename to cts/scheduler/summary/clone_min_interleave_stop_one.summary diff --git a/cts/scheduler/clone_min_interleave_stop_two.summary b/cts/scheduler/summary/clone_min_interleave_stop_two.summary similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_two.summary rename to cts/scheduler/summary/clone_min_interleave_stop_two.summary diff --git a/cts/scheduler/clone_min_start_one.summary b/cts/scheduler/summary/clone_min_start_one.summary similarity index 100% rename from cts/scheduler/clone_min_start_one.summary rename to cts/scheduler/summary/clone_min_start_one.summary diff --git a/cts/scheduler/clone_min_start_two.summary b/cts/scheduler/summary/clone_min_start_two.summary similarity index 100% rename from cts/scheduler/clone_min_start_two.summary rename to cts/scheduler/summary/clone_min_start_two.summary diff --git a/cts/scheduler/clone_min_stop_all.summary b/cts/scheduler/summary/clone_min_stop_all.summary similarity index 100% rename from cts/scheduler/clone_min_stop_all.summary rename to cts/scheduler/summary/clone_min_stop_all.summary diff --git a/cts/scheduler/clone_min_stop_one.summary b/cts/scheduler/summary/clone_min_stop_one.summary similarity index 100% rename from cts/scheduler/clone_min_stop_one.summary rename to cts/scheduler/summary/clone_min_stop_one.summary diff --git a/cts/scheduler/clone_min_stop_two.summary b/cts/scheduler/summary/clone_min_stop_two.summary similarity index 100% rename from cts/scheduler/clone_min_stop_two.summary rename to cts/scheduler/summary/clone_min_stop_two.summary diff --git a/cts/scheduler/cloned-group-stop.summary b/cts/scheduler/summary/cloned-group-stop.summary similarity index 100% rename from cts/scheduler/cloned-group-stop.summary rename to cts/scheduler/summary/cloned-group-stop.summary diff --git a/cts/scheduler/cloned-group.summary b/cts/scheduler/summary/cloned-group.summary similarity index 100% rename from cts/scheduler/cloned-group.summary rename to cts/scheduler/summary/cloned-group.summary diff --git a/cts/scheduler/cloned_start_one.summary b/cts/scheduler/summary/cloned_start_one.summary similarity index 100% rename from cts/scheduler/cloned_start_one.summary rename to cts/scheduler/summary/cloned_start_one.summary diff --git a/cts/scheduler/cloned_start_two.summary b/cts/scheduler/summary/cloned_start_two.summary similarity index 100% rename from cts/scheduler/cloned_start_two.summary rename to cts/scheduler/summary/cloned_start_two.summary diff --git a/cts/scheduler/cloned_stop_one.summary b/cts/scheduler/summary/cloned_stop_one.summary similarity index 100% rename from cts/scheduler/cloned_stop_one.summary rename to cts/scheduler/summary/cloned_stop_one.summary diff --git a/cts/scheduler/cloned_stop_two.summary b/cts/scheduler/summary/cloned_stop_two.summary similarity index 100% rename from cts/scheduler/cloned_stop_two.summary rename to cts/scheduler/summary/cloned_stop_two.summary diff --git a/cts/scheduler/cluster-specific-params.summary b/cts/scheduler/summary/cluster-specific-params.summary similarity index 100% rename from cts/scheduler/cluster-specific-params.summary rename to cts/scheduler/summary/cluster-specific-params.summary diff --git a/cts/scheduler/colo_master_w_native.summary b/cts/scheduler/summary/colo_master_w_native.summary similarity index 100% rename from cts/scheduler/colo_master_w_native.summary rename to cts/scheduler/summary/colo_master_w_native.summary diff --git a/cts/scheduler/colo_slave_w_native.summary b/cts/scheduler/summary/colo_slave_w_native.summary similarity index 100% rename from cts/scheduler/colo_slave_w_native.summary rename to cts/scheduler/summary/colo_slave_w_native.summary diff --git a/cts/scheduler/coloc-attr.summary b/cts/scheduler/summary/coloc-attr.summary similarity index 100% rename from cts/scheduler/coloc-attr.summary rename to cts/scheduler/summary/coloc-attr.summary diff --git a/cts/scheduler/coloc-clone-stays-active.summary b/cts/scheduler/summary/coloc-clone-stays-active.summary similarity index 100% rename from cts/scheduler/coloc-clone-stays-active.summary rename to cts/scheduler/summary/coloc-clone-stays-active.summary diff --git a/cts/scheduler/coloc-dependee-should-move.summary b/cts/scheduler/summary/coloc-dependee-should-move.summary similarity index 100% rename from cts/scheduler/coloc-dependee-should-move.summary rename to cts/scheduler/summary/coloc-dependee-should-move.summary diff --git a/cts/scheduler/coloc-dependee-should-stay.summary b/cts/scheduler/summary/coloc-dependee-should-stay.summary similarity index 100% rename from cts/scheduler/coloc-dependee-should-stay.summary rename to cts/scheduler/summary/coloc-dependee-should-stay.summary diff --git a/cts/scheduler/coloc-group.summary b/cts/scheduler/summary/coloc-group.summary similarity index 100% rename from cts/scheduler/coloc-group.summary rename to cts/scheduler/summary/coloc-group.summary diff --git a/cts/scheduler/coloc-intra-set.summary b/cts/scheduler/summary/coloc-intra-set.summary similarity index 100% rename from cts/scheduler/coloc-intra-set.summary rename to cts/scheduler/summary/coloc-intra-set.summary diff --git a/cts/scheduler/coloc-list.summary b/cts/scheduler/summary/coloc-list.summary similarity index 100% rename from cts/scheduler/coloc-list.summary rename to cts/scheduler/summary/coloc-list.summary diff --git a/cts/scheduler/coloc-loop.summary b/cts/scheduler/summary/coloc-loop.summary similarity index 100% rename from cts/scheduler/coloc-loop.summary rename to cts/scheduler/summary/coloc-loop.summary diff --git a/cts/scheduler/coloc-many-one.summary b/cts/scheduler/summary/coloc-many-one.summary similarity index 100% rename from cts/scheduler/coloc-many-one.summary rename to cts/scheduler/summary/coloc-many-one.summary diff --git a/cts/scheduler/coloc-negative-group.summary b/cts/scheduler/summary/coloc-negative-group.summary similarity index 100% rename from cts/scheduler/coloc-negative-group.summary rename to cts/scheduler/summary/coloc-negative-group.summary diff --git a/cts/scheduler/coloc-slave-anti.summary b/cts/scheduler/summary/coloc-slave-anti.summary similarity index 100% rename from cts/scheduler/coloc-slave-anti.summary rename to cts/scheduler/summary/coloc-slave-anti.summary diff --git a/cts/scheduler/coloc_fp_logic.summary b/cts/scheduler/summary/coloc_fp_logic.summary similarity index 100% rename from cts/scheduler/coloc_fp_logic.summary rename to cts/scheduler/summary/coloc_fp_logic.summary diff --git a/cts/scheduler/colocate-primitive-with-clone.summary b/cts/scheduler/summary/colocate-primitive-with-clone.summary similarity index 100% rename from cts/scheduler/colocate-primitive-with-clone.summary rename to cts/scheduler/summary/colocate-primitive-with-clone.summary diff --git a/cts/scheduler/colocated-utilization-clone.summary b/cts/scheduler/summary/colocated-utilization-clone.summary similarity index 100% rename from cts/scheduler/colocated-utilization-clone.summary rename to cts/scheduler/summary/colocated-utilization-clone.summary diff --git a/cts/scheduler/colocated-utilization-group.summary b/cts/scheduler/summary/colocated-utilization-group.summary similarity index 100% rename from cts/scheduler/colocated-utilization-group.summary rename to cts/scheduler/summary/colocated-utilization-group.summary diff --git a/cts/scheduler/colocated-utilization-primitive-1.summary b/cts/scheduler/summary/colocated-utilization-primitive-1.summary similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-1.summary rename to cts/scheduler/summary/colocated-utilization-primitive-1.summary diff --git a/cts/scheduler/colocated-utilization-primitive-2.summary b/cts/scheduler/summary/colocated-utilization-primitive-2.summary similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-2.summary rename to cts/scheduler/summary/colocated-utilization-primitive-2.summary diff --git a/cts/scheduler/colocation-influence.summary b/cts/scheduler/summary/colocation-influence.summary similarity index 100% rename from cts/scheduler/colocation-influence.summary rename to cts/scheduler/summary/colocation-influence.summary diff --git a/cts/scheduler/colocation_constraint_stops_master.summary b/cts/scheduler/summary/colocation_constraint_stops_master.summary similarity index 100% rename from cts/scheduler/colocation_constraint_stops_master.summary rename to cts/scheduler/summary/colocation_constraint_stops_master.summary diff --git a/cts/scheduler/colocation_constraint_stops_slave.summary b/cts/scheduler/summary/colocation_constraint_stops_slave.summary similarity index 100% rename from cts/scheduler/colocation_constraint_stops_slave.summary rename to cts/scheduler/summary/colocation_constraint_stops_slave.summary diff --git a/cts/scheduler/comments.summary b/cts/scheduler/summary/comments.summary similarity index 100% rename from cts/scheduler/comments.summary rename to cts/scheduler/summary/comments.summary diff --git a/cts/scheduler/complex_enforce_colo.summary b/cts/scheduler/summary/complex_enforce_colo.summary similarity index 100% rename from cts/scheduler/complex_enforce_colo.summary rename to cts/scheduler/summary/complex_enforce_colo.summary diff --git a/cts/scheduler/concurrent-fencing.summary b/cts/scheduler/summary/concurrent-fencing.summary similarity index 100% rename from cts/scheduler/concurrent-fencing.summary rename to cts/scheduler/summary/concurrent-fencing.summary diff --git a/cts/scheduler/container-1.summary b/cts/scheduler/summary/container-1.summary similarity index 100% rename from cts/scheduler/container-1.summary rename to cts/scheduler/summary/container-1.summary diff --git a/cts/scheduler/container-2.summary b/cts/scheduler/summary/container-2.summary similarity index 100% rename from cts/scheduler/container-2.summary rename to cts/scheduler/summary/container-2.summary diff --git a/cts/scheduler/container-3.summary b/cts/scheduler/summary/container-3.summary similarity index 100% rename from cts/scheduler/container-3.summary rename to cts/scheduler/summary/container-3.summary diff --git a/cts/scheduler/container-4.summary b/cts/scheduler/summary/container-4.summary similarity index 100% rename from cts/scheduler/container-4.summary rename to cts/scheduler/summary/container-4.summary diff --git a/cts/scheduler/container-group-1.summary b/cts/scheduler/summary/container-group-1.summary similarity index 100% rename from cts/scheduler/container-group-1.summary rename to cts/scheduler/summary/container-group-1.summary diff --git a/cts/scheduler/container-group-2.summary b/cts/scheduler/summary/container-group-2.summary similarity index 100% rename from cts/scheduler/container-group-2.summary rename to cts/scheduler/summary/container-group-2.summary diff --git a/cts/scheduler/container-group-3.summary b/cts/scheduler/summary/container-group-3.summary similarity index 100% rename from cts/scheduler/container-group-3.summary rename to cts/scheduler/summary/container-group-3.summary diff --git a/cts/scheduler/container-group-4.summary b/cts/scheduler/summary/container-group-4.summary similarity index 100% rename from cts/scheduler/container-group-4.summary rename to cts/scheduler/summary/container-group-4.summary diff --git a/cts/scheduler/container-is-remote-node.summary b/cts/scheduler/summary/container-is-remote-node.summary similarity index 100% rename from cts/scheduler/container-is-remote-node.summary rename to cts/scheduler/summary/container-is-remote-node.summary diff --git a/cts/scheduler/date-1.summary b/cts/scheduler/summary/date-1.summary similarity index 100% rename from cts/scheduler/date-1.summary rename to cts/scheduler/summary/date-1.summary diff --git a/cts/scheduler/date-2.summary b/cts/scheduler/summary/date-2.summary similarity index 100% rename from cts/scheduler/date-2.summary rename to cts/scheduler/summary/date-2.summary diff --git a/cts/scheduler/date-3.summary b/cts/scheduler/summary/date-3.summary similarity index 100% rename from cts/scheduler/date-3.summary rename to cts/scheduler/summary/date-3.summary diff --git a/cts/scheduler/dc-fence-ordering.summary b/cts/scheduler/summary/dc-fence-ordering.summary similarity index 100% rename from cts/scheduler/dc-fence-ordering.summary rename to cts/scheduler/summary/dc-fence-ordering.summary diff --git a/cts/scheduler/enforce-colo1.summary b/cts/scheduler/summary/enforce-colo1.summary similarity index 100% rename from cts/scheduler/enforce-colo1.summary rename to cts/scheduler/summary/enforce-colo1.summary diff --git a/cts/scheduler/expire-non-blocked-failure.summary b/cts/scheduler/summary/expire-non-blocked-failure.summary similarity index 100% rename from cts/scheduler/expire-non-blocked-failure.summary rename to cts/scheduler/summary/expire-non-blocked-failure.summary diff --git a/cts/scheduler/failcount-block.summary b/cts/scheduler/summary/failcount-block.summary similarity index 100% rename from cts/scheduler/failcount-block.summary rename to cts/scheduler/summary/failcount-block.summary diff --git a/cts/scheduler/failcount.summary b/cts/scheduler/summary/failcount.summary similarity index 100% rename from cts/scheduler/failcount.summary rename to cts/scheduler/summary/failcount.summary diff --git a/cts/scheduler/failed-demote-recovery-master.summary b/cts/scheduler/summary/failed-demote-recovery-master.summary similarity index 100% rename from cts/scheduler/failed-demote-recovery-master.summary rename to cts/scheduler/summary/failed-demote-recovery-master.summary diff --git a/cts/scheduler/failed-demote-recovery.summary b/cts/scheduler/summary/failed-demote-recovery.summary similarity index 100% rename from cts/scheduler/failed-demote-recovery.summary rename to cts/scheduler/summary/failed-demote-recovery.summary diff --git a/cts/scheduler/force-anon-clone-max.summary b/cts/scheduler/summary/force-anon-clone-max.summary similarity index 100% rename from cts/scheduler/force-anon-clone-max.summary rename to cts/scheduler/summary/force-anon-clone-max.summary diff --git a/cts/scheduler/group-dependents.summary b/cts/scheduler/summary/group-dependents.summary similarity index 100% rename from cts/scheduler/group-dependents.summary rename to cts/scheduler/summary/group-dependents.summary diff --git a/cts/scheduler/group-fail.summary b/cts/scheduler/summary/group-fail.summary similarity index 100% rename from cts/scheduler/group-fail.summary rename to cts/scheduler/summary/group-fail.summary diff --git a/cts/scheduler/group-stop-ordering.summary b/cts/scheduler/summary/group-stop-ordering.summary similarity index 100% rename from cts/scheduler/group-stop-ordering.summary rename to cts/scheduler/summary/group-stop-ordering.summary diff --git a/cts/scheduler/group-unmanaged-stopped.summary b/cts/scheduler/summary/group-unmanaged-stopped.summary similarity index 100% rename from cts/scheduler/group-unmanaged-stopped.summary rename to cts/scheduler/summary/group-unmanaged-stopped.summary diff --git a/cts/scheduler/group-unmanaged.summary b/cts/scheduler/summary/group-unmanaged.summary similarity index 100% rename from cts/scheduler/group-unmanaged.summary rename to cts/scheduler/summary/group-unmanaged.summary diff --git a/cts/scheduler/group1.summary b/cts/scheduler/summary/group1.summary similarity index 100% rename from cts/scheduler/group1.summary rename to cts/scheduler/summary/group1.summary diff --git a/cts/scheduler/group10.summary b/cts/scheduler/summary/group10.summary similarity index 100% rename from cts/scheduler/group10.summary rename to cts/scheduler/summary/group10.summary diff --git a/cts/scheduler/group11.summary b/cts/scheduler/summary/group11.summary similarity index 100% rename from cts/scheduler/group11.summary rename to cts/scheduler/summary/group11.summary diff --git a/cts/scheduler/group13.summary b/cts/scheduler/summary/group13.summary similarity index 100% rename from cts/scheduler/group13.summary rename to cts/scheduler/summary/group13.summary diff --git a/cts/scheduler/group14.summary b/cts/scheduler/summary/group14.summary similarity index 100% rename from cts/scheduler/group14.summary rename to cts/scheduler/summary/group14.summary diff --git a/cts/scheduler/group15.summary b/cts/scheduler/summary/group15.summary similarity index 100% rename from cts/scheduler/group15.summary rename to cts/scheduler/summary/group15.summary diff --git a/cts/scheduler/group2.summary b/cts/scheduler/summary/group2.summary similarity index 100% rename from cts/scheduler/group2.summary rename to cts/scheduler/summary/group2.summary diff --git a/cts/scheduler/group3.summary b/cts/scheduler/summary/group3.summary similarity index 100% rename from cts/scheduler/group3.summary rename to cts/scheduler/summary/group3.summary diff --git a/cts/scheduler/group4.summary b/cts/scheduler/summary/group4.summary similarity index 100% rename from cts/scheduler/group4.summary rename to cts/scheduler/summary/group4.summary diff --git a/cts/scheduler/group5.summary b/cts/scheduler/summary/group5.summary similarity index 100% rename from cts/scheduler/group5.summary rename to cts/scheduler/summary/group5.summary diff --git a/cts/scheduler/group6.summary b/cts/scheduler/summary/group6.summary similarity index 100% rename from cts/scheduler/group6.summary rename to cts/scheduler/summary/group6.summary diff --git a/cts/scheduler/group7.summary b/cts/scheduler/summary/group7.summary similarity index 100% rename from cts/scheduler/group7.summary rename to cts/scheduler/summary/group7.summary diff --git a/cts/scheduler/group8.summary b/cts/scheduler/summary/group8.summary similarity index 100% rename from cts/scheduler/group8.summary rename to cts/scheduler/summary/group8.summary diff --git a/cts/scheduler/group9.summary b/cts/scheduler/summary/group9.summary similarity index 100% rename from cts/scheduler/group9.summary rename to cts/scheduler/summary/group9.summary diff --git a/cts/scheduler/guest-host-not-fenceable.summary b/cts/scheduler/summary/guest-host-not-fenceable.summary similarity index 100% rename from cts/scheduler/guest-host-not-fenceable.summary rename to cts/scheduler/summary/guest-host-not-fenceable.summary diff --git a/cts/scheduler/guest-node-cleanup.summary b/cts/scheduler/summary/guest-node-cleanup.summary similarity index 100% rename from cts/scheduler/guest-node-cleanup.summary rename to cts/scheduler/summary/guest-node-cleanup.summary diff --git a/cts/scheduler/guest-node-host-dies.summary b/cts/scheduler/summary/guest-node-host-dies.summary similarity index 100% rename from cts/scheduler/guest-node-host-dies.summary rename to cts/scheduler/summary/guest-node-host-dies.summary diff --git a/cts/scheduler/history-1.summary b/cts/scheduler/summary/history-1.summary similarity index 100% rename from cts/scheduler/history-1.summary rename to cts/scheduler/summary/history-1.summary diff --git a/cts/scheduler/honor_stonith_rsc_order1.summary b/cts/scheduler/summary/honor_stonith_rsc_order1.summary similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order1.summary rename to cts/scheduler/summary/honor_stonith_rsc_order1.summary diff --git a/cts/scheduler/honor_stonith_rsc_order2.summary b/cts/scheduler/summary/honor_stonith_rsc_order2.summary similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order2.summary rename to cts/scheduler/summary/honor_stonith_rsc_order2.summary diff --git a/cts/scheduler/honor_stonith_rsc_order3.summary b/cts/scheduler/summary/honor_stonith_rsc_order3.summary similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order3.summary rename to cts/scheduler/summary/honor_stonith_rsc_order3.summary diff --git a/cts/scheduler/honor_stonith_rsc_order4.summary b/cts/scheduler/summary/honor_stonith_rsc_order4.summary similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order4.summary rename to cts/scheduler/summary/honor_stonith_rsc_order4.summary diff --git a/cts/scheduler/ignore_stonith_rsc_order1.summary b/cts/scheduler/summary/ignore_stonith_rsc_order1.summary similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order1.summary rename to cts/scheduler/summary/ignore_stonith_rsc_order1.summary diff --git a/cts/scheduler/ignore_stonith_rsc_order2.summary b/cts/scheduler/summary/ignore_stonith_rsc_order2.summary similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order2.summary rename to cts/scheduler/summary/ignore_stonith_rsc_order2.summary diff --git a/cts/scheduler/ignore_stonith_rsc_order3.summary b/cts/scheduler/summary/ignore_stonith_rsc_order3.summary similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order3.summary rename to cts/scheduler/summary/ignore_stonith_rsc_order3.summary diff --git a/cts/scheduler/ignore_stonith_rsc_order4.summary b/cts/scheduler/summary/ignore_stonith_rsc_order4.summary similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order4.summary rename to cts/scheduler/summary/ignore_stonith_rsc_order4.summary diff --git a/cts/scheduler/inc0.summary b/cts/scheduler/summary/inc0.summary similarity index 100% rename from cts/scheduler/inc0.summary rename to cts/scheduler/summary/inc0.summary diff --git a/cts/scheduler/inc1.summary b/cts/scheduler/summary/inc1.summary similarity index 100% rename from cts/scheduler/inc1.summary rename to cts/scheduler/summary/inc1.summary diff --git a/cts/scheduler/inc10.summary b/cts/scheduler/summary/inc10.summary similarity index 100% rename from cts/scheduler/inc10.summary rename to cts/scheduler/summary/inc10.summary diff --git a/cts/scheduler/inc11.summary b/cts/scheduler/summary/inc11.summary similarity index 100% rename from cts/scheduler/inc11.summary rename to cts/scheduler/summary/inc11.summary diff --git a/cts/scheduler/inc12.summary b/cts/scheduler/summary/inc12.summary similarity index 100% rename from cts/scheduler/inc12.summary rename to cts/scheduler/summary/inc12.summary diff --git a/cts/scheduler/inc2.summary b/cts/scheduler/summary/inc2.summary similarity index 100% rename from cts/scheduler/inc2.summary rename to cts/scheduler/summary/inc2.summary diff --git a/cts/scheduler/inc3.summary b/cts/scheduler/summary/inc3.summary similarity index 100% rename from cts/scheduler/inc3.summary rename to cts/scheduler/summary/inc3.summary diff --git a/cts/scheduler/inc4.summary b/cts/scheduler/summary/inc4.summary similarity index 100% rename from cts/scheduler/inc4.summary rename to cts/scheduler/summary/inc4.summary diff --git a/cts/scheduler/inc5.summary b/cts/scheduler/summary/inc5.summary similarity index 100% rename from cts/scheduler/inc5.summary rename to cts/scheduler/summary/inc5.summary diff --git a/cts/scheduler/inc6.summary b/cts/scheduler/summary/inc6.summary similarity index 100% rename from cts/scheduler/inc6.summary rename to cts/scheduler/summary/inc6.summary diff --git a/cts/scheduler/inc7.summary b/cts/scheduler/summary/inc7.summary similarity index 100% rename from cts/scheduler/inc7.summary rename to cts/scheduler/summary/inc7.summary diff --git a/cts/scheduler/inc8.summary b/cts/scheduler/summary/inc8.summary similarity index 100% rename from cts/scheduler/inc8.summary rename to cts/scheduler/summary/inc8.summary diff --git a/cts/scheduler/inc9.summary b/cts/scheduler/summary/inc9.summary similarity index 100% rename from cts/scheduler/inc9.summary rename to cts/scheduler/summary/inc9.summary diff --git a/cts/scheduler/interleave-0.summary b/cts/scheduler/summary/interleave-0.summary similarity index 100% rename from cts/scheduler/interleave-0.summary rename to cts/scheduler/summary/interleave-0.summary diff --git a/cts/scheduler/interleave-1.summary b/cts/scheduler/summary/interleave-1.summary similarity index 100% rename from cts/scheduler/interleave-1.summary rename to cts/scheduler/summary/interleave-1.summary diff --git a/cts/scheduler/interleave-2.summary b/cts/scheduler/summary/interleave-2.summary similarity index 100% rename from cts/scheduler/interleave-2.summary rename to cts/scheduler/summary/interleave-2.summary diff --git a/cts/scheduler/interleave-3.summary b/cts/scheduler/summary/interleave-3.summary similarity index 100% rename from cts/scheduler/interleave-3.summary rename to cts/scheduler/summary/interleave-3.summary diff --git a/cts/scheduler/interleave-pseudo-stop.summary b/cts/scheduler/summary/interleave-pseudo-stop.summary similarity index 100% rename from cts/scheduler/interleave-pseudo-stop.summary rename to cts/scheduler/summary/interleave-pseudo-stop.summary diff --git a/cts/scheduler/interleave-restart.summary b/cts/scheduler/summary/interleave-restart.summary similarity index 100% rename from cts/scheduler/interleave-restart.summary rename to cts/scheduler/summary/interleave-restart.summary diff --git a/cts/scheduler/interleave-stop.summary b/cts/scheduler/summary/interleave-stop.summary similarity index 100% rename from cts/scheduler/interleave-stop.summary rename to cts/scheduler/summary/interleave-stop.summary diff --git a/cts/scheduler/intervals.summary b/cts/scheduler/summary/intervals.summary similarity index 100% rename from cts/scheduler/intervals.summary rename to cts/scheduler/summary/intervals.summary diff --git a/cts/scheduler/load-stopped-loop-2.summary b/cts/scheduler/summary/load-stopped-loop-2.summary similarity index 100% rename from cts/scheduler/load-stopped-loop-2.summary rename to cts/scheduler/summary/load-stopped-loop-2.summary diff --git a/cts/scheduler/load-stopped-loop.summary b/cts/scheduler/summary/load-stopped-loop.summary similarity index 100% rename from cts/scheduler/load-stopped-loop.summary rename to cts/scheduler/summary/load-stopped-loop.summary diff --git a/cts/scheduler/location-date-rules-1.summary b/cts/scheduler/summary/location-date-rules-1.summary similarity index 100% rename from cts/scheduler/location-date-rules-1.summary rename to cts/scheduler/summary/location-date-rules-1.summary diff --git a/cts/scheduler/location-date-rules-2.summary b/cts/scheduler/summary/location-date-rules-2.summary similarity index 100% rename from cts/scheduler/location-date-rules-2.summary rename to cts/scheduler/summary/location-date-rules-2.summary diff --git a/cts/scheduler/location-sets-templates.summary b/cts/scheduler/summary/location-sets-templates.summary similarity index 100% rename from cts/scheduler/location-sets-templates.summary rename to cts/scheduler/summary/location-sets-templates.summary diff --git a/cts/scheduler/managed-0.summary b/cts/scheduler/summary/managed-0.summary similarity index 100% rename from cts/scheduler/managed-0.summary rename to cts/scheduler/summary/managed-0.summary diff --git a/cts/scheduler/managed-1.summary b/cts/scheduler/summary/managed-1.summary similarity index 100% rename from cts/scheduler/managed-1.summary rename to cts/scheduler/summary/managed-1.summary diff --git a/cts/scheduler/managed-2.summary b/cts/scheduler/summary/managed-2.summary similarity index 100% rename from cts/scheduler/managed-2.summary rename to cts/scheduler/summary/managed-2.summary diff --git a/cts/scheduler/master-0.summary b/cts/scheduler/summary/master-0.summary similarity index 100% rename from cts/scheduler/master-0.summary rename to cts/scheduler/summary/master-0.summary diff --git a/cts/scheduler/master-1.summary b/cts/scheduler/summary/master-1.summary similarity index 100% rename from cts/scheduler/master-1.summary rename to cts/scheduler/summary/master-1.summary diff --git a/cts/scheduler/master-10.summary b/cts/scheduler/summary/master-10.summary similarity index 100% rename from cts/scheduler/master-10.summary rename to cts/scheduler/summary/master-10.summary diff --git a/cts/scheduler/master-11.summary b/cts/scheduler/summary/master-11.summary similarity index 100% rename from cts/scheduler/master-11.summary rename to cts/scheduler/summary/master-11.summary diff --git a/cts/scheduler/master-12.summary b/cts/scheduler/summary/master-12.summary similarity index 100% rename from cts/scheduler/master-12.summary rename to cts/scheduler/summary/master-12.summary diff --git a/cts/scheduler/master-13.summary b/cts/scheduler/summary/master-13.summary similarity index 100% rename from cts/scheduler/master-13.summary rename to cts/scheduler/summary/master-13.summary diff --git a/cts/scheduler/master-2.summary b/cts/scheduler/summary/master-2.summary similarity index 100% rename from cts/scheduler/master-2.summary rename to cts/scheduler/summary/master-2.summary diff --git a/cts/scheduler/master-3.summary b/cts/scheduler/summary/master-3.summary similarity index 100% rename from cts/scheduler/master-3.summary rename to cts/scheduler/summary/master-3.summary diff --git a/cts/scheduler/master-4.summary b/cts/scheduler/summary/master-4.summary similarity index 100% rename from cts/scheduler/master-4.summary rename to cts/scheduler/summary/master-4.summary diff --git a/cts/scheduler/master-5.summary b/cts/scheduler/summary/master-5.summary similarity index 100% rename from cts/scheduler/master-5.summary rename to cts/scheduler/summary/master-5.summary diff --git a/cts/scheduler/master-6.summary b/cts/scheduler/summary/master-6.summary similarity index 100% rename from cts/scheduler/master-6.summary rename to cts/scheduler/summary/master-6.summary diff --git a/cts/scheduler/master-7.summary b/cts/scheduler/summary/master-7.summary similarity index 100% rename from cts/scheduler/master-7.summary rename to cts/scheduler/summary/master-7.summary diff --git a/cts/scheduler/master-8.summary b/cts/scheduler/summary/master-8.summary similarity index 100% rename from cts/scheduler/master-8.summary rename to cts/scheduler/summary/master-8.summary diff --git a/cts/scheduler/master-9.summary b/cts/scheduler/summary/master-9.summary similarity index 100% rename from cts/scheduler/master-9.summary rename to cts/scheduler/summary/master-9.summary diff --git a/cts/scheduler/master-allow-start.summary b/cts/scheduler/summary/master-allow-start.summary similarity index 100% rename from cts/scheduler/master-allow-start.summary rename to cts/scheduler/summary/master-allow-start.summary diff --git a/cts/scheduler/master-asymmetrical-order.summary b/cts/scheduler/summary/master-asymmetrical-order.summary similarity index 100% rename from cts/scheduler/master-asymmetrical-order.summary rename to cts/scheduler/summary/master-asymmetrical-order.summary diff --git a/cts/scheduler/master-colocation.summary b/cts/scheduler/summary/master-colocation.summary similarity index 100% rename from cts/scheduler/master-colocation.summary rename to cts/scheduler/summary/master-colocation.summary diff --git a/cts/scheduler/master-demote-2.summary b/cts/scheduler/summary/master-demote-2.summary similarity index 100% rename from cts/scheduler/master-demote-2.summary rename to cts/scheduler/summary/master-demote-2.summary diff --git a/cts/scheduler/master-demote-block.summary b/cts/scheduler/summary/master-demote-block.summary similarity index 100% rename from cts/scheduler/master-demote-block.summary rename to cts/scheduler/summary/master-demote-block.summary diff --git a/cts/scheduler/master-demote.summary b/cts/scheduler/summary/master-demote.summary similarity index 100% rename from cts/scheduler/master-demote.summary rename to cts/scheduler/summary/master-demote.summary diff --git a/cts/scheduler/master-depend.summary b/cts/scheduler/summary/master-depend.summary similarity index 100% rename from cts/scheduler/master-depend.summary rename to cts/scheduler/summary/master-depend.summary diff --git a/cts/scheduler/master-dependent-ban.summary b/cts/scheduler/summary/master-dependent-ban.summary similarity index 100% rename from cts/scheduler/master-dependent-ban.summary rename to cts/scheduler/summary/master-dependent-ban.summary diff --git a/cts/scheduler/master-failed-demote-2.summary b/cts/scheduler/summary/master-failed-demote-2.summary similarity index 100% rename from cts/scheduler/master-failed-demote-2.summary rename to cts/scheduler/summary/master-failed-demote-2.summary diff --git a/cts/scheduler/master-failed-demote.summary b/cts/scheduler/summary/master-failed-demote.summary similarity index 100% rename from cts/scheduler/master-failed-demote.summary rename to cts/scheduler/summary/master-failed-demote.summary diff --git a/cts/scheduler/master-group.summary b/cts/scheduler/summary/master-group.summary similarity index 100% rename from cts/scheduler/master-group.summary rename to cts/scheduler/summary/master-group.summary diff --git a/cts/scheduler/master-move.summary b/cts/scheduler/summary/master-move.summary similarity index 100% rename from cts/scheduler/master-move.summary rename to cts/scheduler/summary/master-move.summary diff --git a/cts/scheduler/master-notify.summary b/cts/scheduler/summary/master-notify.summary similarity index 100% rename from cts/scheduler/master-notify.summary rename to cts/scheduler/summary/master-notify.summary diff --git a/cts/scheduler/master-ordering.summary b/cts/scheduler/summary/master-ordering.summary similarity index 100% rename from cts/scheduler/master-ordering.summary rename to cts/scheduler/summary/master-ordering.summary diff --git a/cts/scheduler/master-partially-demoted-group.summary b/cts/scheduler/summary/master-partially-demoted-group.summary similarity index 100% rename from cts/scheduler/master-partially-demoted-group.summary rename to cts/scheduler/summary/master-partially-demoted-group.summary diff --git a/cts/scheduler/master-probed-score.summary b/cts/scheduler/summary/master-probed-score.summary similarity index 100% rename from cts/scheduler/master-probed-score.summary rename to cts/scheduler/summary/master-probed-score.summary diff --git a/cts/scheduler/master-promotion-constraint.summary b/cts/scheduler/summary/master-promotion-constraint.summary similarity index 100% rename from cts/scheduler/master-promotion-constraint.summary rename to cts/scheduler/summary/master-promotion-constraint.summary diff --git a/cts/scheduler/master-pseudo.summary b/cts/scheduler/summary/master-pseudo.summary similarity index 100% rename from cts/scheduler/master-pseudo.summary rename to cts/scheduler/summary/master-pseudo.summary diff --git a/cts/scheduler/master-reattach.summary b/cts/scheduler/summary/master-reattach.summary similarity index 100% rename from cts/scheduler/master-reattach.summary rename to cts/scheduler/summary/master-reattach.summary diff --git a/cts/scheduler/master-role.summary b/cts/scheduler/summary/master-role.summary similarity index 100% rename from cts/scheduler/master-role.summary rename to cts/scheduler/summary/master-role.summary diff --git a/cts/scheduler/master-score-startup.summary b/cts/scheduler/summary/master-score-startup.summary similarity index 100% rename from cts/scheduler/master-score-startup.summary rename to cts/scheduler/summary/master-score-startup.summary diff --git a/cts/scheduler/master-stop.summary b/cts/scheduler/summary/master-stop.summary similarity index 100% rename from cts/scheduler/master-stop.summary rename to cts/scheduler/summary/master-stop.summary diff --git a/cts/scheduler/master-unmanaged-monitor.summary b/cts/scheduler/summary/master-unmanaged-monitor.summary similarity index 100% rename from cts/scheduler/master-unmanaged-monitor.summary rename to cts/scheduler/summary/master-unmanaged-monitor.summary diff --git a/cts/scheduler/master_monitor_restart.summary b/cts/scheduler/summary/master_monitor_restart.summary similarity index 100% rename from cts/scheduler/master_monitor_restart.summary rename to cts/scheduler/summary/master_monitor_restart.summary diff --git a/cts/scheduler/migrate-1.summary b/cts/scheduler/summary/migrate-1.summary similarity index 100% rename from cts/scheduler/migrate-1.summary rename to cts/scheduler/summary/migrate-1.summary diff --git a/cts/scheduler/migrate-2.summary b/cts/scheduler/summary/migrate-2.summary similarity index 100% rename from cts/scheduler/migrate-2.summary rename to cts/scheduler/summary/migrate-2.summary diff --git a/cts/scheduler/migrate-3.summary b/cts/scheduler/summary/migrate-3.summary similarity index 100% rename from cts/scheduler/migrate-3.summary rename to cts/scheduler/summary/migrate-3.summary diff --git a/cts/scheduler/migrate-4.summary b/cts/scheduler/summary/migrate-4.summary similarity index 100% rename from cts/scheduler/migrate-4.summary rename to cts/scheduler/summary/migrate-4.summary diff --git a/cts/scheduler/migrate-5.summary b/cts/scheduler/summary/migrate-5.summary similarity index 100% rename from cts/scheduler/migrate-5.summary rename to cts/scheduler/summary/migrate-5.summary diff --git a/cts/scheduler/migrate-begin.summary b/cts/scheduler/summary/migrate-begin.summary similarity index 100% rename from cts/scheduler/migrate-begin.summary rename to cts/scheduler/summary/migrate-begin.summary diff --git a/cts/scheduler/migrate-both-vms.summary b/cts/scheduler/summary/migrate-both-vms.summary similarity index 100% rename from cts/scheduler/migrate-both-vms.summary rename to cts/scheduler/summary/migrate-both-vms.summary diff --git a/cts/scheduler/migrate-fail-2.summary b/cts/scheduler/summary/migrate-fail-2.summary similarity index 100% rename from cts/scheduler/migrate-fail-2.summary rename to cts/scheduler/summary/migrate-fail-2.summary diff --git a/cts/scheduler/migrate-fail-3.summary b/cts/scheduler/summary/migrate-fail-3.summary similarity index 100% rename from cts/scheduler/migrate-fail-3.summary rename to cts/scheduler/summary/migrate-fail-3.summary diff --git a/cts/scheduler/migrate-fail-4.summary b/cts/scheduler/summary/migrate-fail-4.summary similarity index 100% rename from cts/scheduler/migrate-fail-4.summary rename to cts/scheduler/summary/migrate-fail-4.summary diff --git a/cts/scheduler/migrate-fail-5.summary b/cts/scheduler/summary/migrate-fail-5.summary similarity index 100% rename from cts/scheduler/migrate-fail-5.summary rename to cts/scheduler/summary/migrate-fail-5.summary diff --git a/cts/scheduler/migrate-fail-6.summary b/cts/scheduler/summary/migrate-fail-6.summary similarity index 100% rename from cts/scheduler/migrate-fail-6.summary rename to cts/scheduler/summary/migrate-fail-6.summary diff --git a/cts/scheduler/migrate-fail-7.summary b/cts/scheduler/summary/migrate-fail-7.summary similarity index 100% rename from cts/scheduler/migrate-fail-7.summary rename to cts/scheduler/summary/migrate-fail-7.summary diff --git a/cts/scheduler/migrate-fail-8.summary b/cts/scheduler/summary/migrate-fail-8.summary similarity index 100% rename from cts/scheduler/migrate-fail-8.summary rename to cts/scheduler/summary/migrate-fail-8.summary diff --git a/cts/scheduler/migrate-fail-9.summary b/cts/scheduler/summary/migrate-fail-9.summary similarity index 100% rename from cts/scheduler/migrate-fail-9.summary rename to cts/scheduler/summary/migrate-fail-9.summary diff --git a/cts/scheduler/migrate-fencing.summary b/cts/scheduler/summary/migrate-fencing.summary similarity index 100% rename from cts/scheduler/migrate-fencing.summary rename to cts/scheduler/summary/migrate-fencing.summary diff --git a/cts/scheduler/migrate-partial-1.summary b/cts/scheduler/summary/migrate-partial-1.summary similarity index 100% rename from cts/scheduler/migrate-partial-1.summary rename to cts/scheduler/summary/migrate-partial-1.summary diff --git a/cts/scheduler/migrate-partial-2.summary b/cts/scheduler/summary/migrate-partial-2.summary similarity index 100% rename from cts/scheduler/migrate-partial-2.summary rename to cts/scheduler/summary/migrate-partial-2.summary diff --git a/cts/scheduler/migrate-partial-3.summary b/cts/scheduler/summary/migrate-partial-3.summary similarity index 100% rename from cts/scheduler/migrate-partial-3.summary rename to cts/scheduler/summary/migrate-partial-3.summary diff --git a/cts/scheduler/migrate-partial-4.summary b/cts/scheduler/summary/migrate-partial-4.summary similarity index 100% rename from cts/scheduler/migrate-partial-4.summary rename to cts/scheduler/summary/migrate-partial-4.summary diff --git a/cts/scheduler/migrate-shutdown.summary b/cts/scheduler/summary/migrate-shutdown.summary similarity index 100% rename from cts/scheduler/migrate-shutdown.summary rename to cts/scheduler/summary/migrate-shutdown.summary diff --git a/cts/scheduler/migrate-start-complex.summary b/cts/scheduler/summary/migrate-start-complex.summary similarity index 100% rename from cts/scheduler/migrate-start-complex.summary rename to cts/scheduler/summary/migrate-start-complex.summary diff --git a/cts/scheduler/migrate-start.summary b/cts/scheduler/summary/migrate-start.summary similarity index 100% rename from cts/scheduler/migrate-start.summary rename to cts/scheduler/summary/migrate-start.summary diff --git a/cts/scheduler/migrate-stop-complex.summary b/cts/scheduler/summary/migrate-stop-complex.summary similarity index 100% rename from cts/scheduler/migrate-stop-complex.summary rename to cts/scheduler/summary/migrate-stop-complex.summary diff --git a/cts/scheduler/migrate-stop-start-complex.summary b/cts/scheduler/summary/migrate-stop-start-complex.summary similarity index 100% rename from cts/scheduler/migrate-stop-start-complex.summary rename to cts/scheduler/summary/migrate-stop-start-complex.summary diff --git a/cts/scheduler/migrate-stop.summary b/cts/scheduler/summary/migrate-stop.summary similarity index 100% rename from cts/scheduler/migrate-stop.summary rename to cts/scheduler/summary/migrate-stop.summary diff --git a/cts/scheduler/migrate-stop_start.summary b/cts/scheduler/summary/migrate-stop_start.summary similarity index 100% rename from cts/scheduler/migrate-stop_start.summary rename to cts/scheduler/summary/migrate-stop_start.summary diff --git a/cts/scheduler/migrate-success.summary b/cts/scheduler/summary/migrate-success.summary similarity index 100% rename from cts/scheduler/migrate-success.summary rename to cts/scheduler/summary/migrate-success.summary diff --git a/cts/scheduler/migrate-versioned.summary b/cts/scheduler/summary/migrate-versioned.summary similarity index 100% rename from cts/scheduler/migrate-versioned.summary rename to cts/scheduler/summary/migrate-versioned.summary diff --git a/cts/scheduler/migration-behind-migrating-remote.summary b/cts/scheduler/summary/migration-behind-migrating-remote.summary similarity index 100% rename from cts/scheduler/migration-behind-migrating-remote.summary rename to cts/scheduler/summary/migration-behind-migrating-remote.summary diff --git a/cts/scheduler/migration-ping-pong.summary b/cts/scheduler/summary/migration-ping-pong.summary similarity index 100% rename from cts/scheduler/migration-ping-pong.summary rename to cts/scheduler/summary/migration-ping-pong.summary diff --git a/cts/scheduler/minimal.summary b/cts/scheduler/summary/minimal.summary similarity index 100% rename from cts/scheduler/minimal.summary rename to cts/scheduler/summary/minimal.summary diff --git a/cts/scheduler/mon-rsc-1.summary b/cts/scheduler/summary/mon-rsc-1.summary similarity index 100% rename from cts/scheduler/mon-rsc-1.summary rename to cts/scheduler/summary/mon-rsc-1.summary diff --git a/cts/scheduler/mon-rsc-2.summary b/cts/scheduler/summary/mon-rsc-2.summary similarity index 100% rename from cts/scheduler/mon-rsc-2.summary rename to cts/scheduler/summary/mon-rsc-2.summary diff --git a/cts/scheduler/mon-rsc-3.summary b/cts/scheduler/summary/mon-rsc-3.summary similarity index 100% rename from cts/scheduler/mon-rsc-3.summary rename to cts/scheduler/summary/mon-rsc-3.summary diff --git a/cts/scheduler/mon-rsc-4.summary b/cts/scheduler/summary/mon-rsc-4.summary similarity index 100% rename from cts/scheduler/mon-rsc-4.summary rename to cts/scheduler/summary/mon-rsc-4.summary diff --git a/cts/scheduler/monitor-onfail-restart.summary b/cts/scheduler/summary/monitor-onfail-restart.summary similarity index 100% rename from cts/scheduler/monitor-onfail-restart.summary rename to cts/scheduler/summary/monitor-onfail-restart.summary diff --git a/cts/scheduler/monitor-onfail-stop.summary b/cts/scheduler/summary/monitor-onfail-stop.summary similarity index 100% rename from cts/scheduler/monitor-onfail-stop.summary rename to cts/scheduler/summary/monitor-onfail-stop.summary diff --git a/cts/scheduler/monitor-recovery.summary b/cts/scheduler/summary/monitor-recovery.summary similarity index 100% rename from cts/scheduler/monitor-recovery.summary rename to cts/scheduler/summary/monitor-recovery.summary diff --git a/cts/scheduler/multi1.summary b/cts/scheduler/summary/multi1.summary similarity index 100% rename from cts/scheduler/multi1.summary rename to cts/scheduler/summary/multi1.summary diff --git a/cts/scheduler/multiple-active-block-group.summary b/cts/scheduler/summary/multiple-active-block-group.summary similarity index 100% rename from cts/scheduler/multiple-active-block-group.summary rename to cts/scheduler/summary/multiple-active-block-group.summary diff --git a/cts/scheduler/multiple-monitor-one-failed.summary b/cts/scheduler/summary/multiple-monitor-one-failed.summary similarity index 100% rename from cts/scheduler/multiple-monitor-one-failed.summary rename to cts/scheduler/summary/multiple-monitor-one-failed.summary diff --git a/cts/scheduler/multiply-active-stonith.summary b/cts/scheduler/summary/multiply-active-stonith.summary similarity index 100% rename from cts/scheduler/multiply-active-stonith.summary rename to cts/scheduler/summary/multiply-active-stonith.summary diff --git a/cts/scheduler/nested-remote-recovery.summary b/cts/scheduler/summary/nested-remote-recovery.summary similarity index 100% rename from cts/scheduler/nested-remote-recovery.summary rename to cts/scheduler/summary/nested-remote-recovery.summary diff --git a/cts/scheduler/no-promote-on-unrunnable-guest.summary b/cts/scheduler/summary/no-promote-on-unrunnable-guest.summary similarity index 100% rename from cts/scheduler/no-promote-on-unrunnable-guest.summary rename to cts/scheduler/summary/no-promote-on-unrunnable-guest.summary diff --git a/cts/scheduler/no_quorum_demote.summary b/cts/scheduler/summary/no_quorum_demote.summary similarity index 100% rename from cts/scheduler/no_quorum_demote.summary rename to cts/scheduler/summary/no_quorum_demote.summary diff --git a/cts/scheduler/node-maintenance-1.summary b/cts/scheduler/summary/node-maintenance-1.summary similarity index 100% rename from cts/scheduler/node-maintenance-1.summary rename to cts/scheduler/summary/node-maintenance-1.summary diff --git a/cts/scheduler/node-maintenance-2.summary b/cts/scheduler/summary/node-maintenance-2.summary similarity index 100% rename from cts/scheduler/node-maintenance-2.summary rename to cts/scheduler/summary/node-maintenance-2.summary diff --git a/cts/scheduler/not-installed-agent.summary b/cts/scheduler/summary/not-installed-agent.summary similarity index 100% rename from cts/scheduler/not-installed-agent.summary rename to cts/scheduler/summary/not-installed-agent.summary diff --git a/cts/scheduler/not-installed-tools.summary b/cts/scheduler/summary/not-installed-tools.summary similarity index 100% rename from cts/scheduler/not-installed-tools.summary rename to cts/scheduler/summary/not-installed-tools.summary diff --git a/cts/scheduler/not-reschedule-unneeded-monitor.summary b/cts/scheduler/summary/not-reschedule-unneeded-monitor.summary similarity index 100% rename from cts/scheduler/not-reschedule-unneeded-monitor.summary rename to cts/scheduler/summary/not-reschedule-unneeded-monitor.summary diff --git a/cts/scheduler/notifs-for-unrunnable.summary b/cts/scheduler/summary/notifs-for-unrunnable.summary similarity index 100% rename from cts/scheduler/notifs-for-unrunnable.summary rename to cts/scheduler/summary/notifs-for-unrunnable.summary diff --git a/cts/scheduler/notify-0.summary b/cts/scheduler/summary/notify-0.summary similarity index 100% rename from cts/scheduler/notify-0.summary rename to cts/scheduler/summary/notify-0.summary diff --git a/cts/scheduler/notify-1.summary b/cts/scheduler/summary/notify-1.summary similarity index 100% rename from cts/scheduler/notify-1.summary rename to cts/scheduler/summary/notify-1.summary diff --git a/cts/scheduler/notify-2.summary b/cts/scheduler/summary/notify-2.summary similarity index 100% rename from cts/scheduler/notify-2.summary rename to cts/scheduler/summary/notify-2.summary diff --git a/cts/scheduler/notify-3.summary b/cts/scheduler/summary/notify-3.summary similarity index 100% rename from cts/scheduler/notify-3.summary rename to cts/scheduler/summary/notify-3.summary diff --git a/cts/scheduler/notify-behind-stopping-remote.summary b/cts/scheduler/summary/notify-behind-stopping-remote.summary similarity index 100% rename from cts/scheduler/notify-behind-stopping-remote.summary rename to cts/scheduler/summary/notify-behind-stopping-remote.summary diff --git a/cts/scheduler/novell-239079.summary b/cts/scheduler/summary/novell-239079.summary similarity index 100% rename from cts/scheduler/novell-239079.summary rename to cts/scheduler/summary/novell-239079.summary diff --git a/cts/scheduler/novell-239082.summary b/cts/scheduler/summary/novell-239082.summary similarity index 100% rename from cts/scheduler/novell-239082.summary rename to cts/scheduler/summary/novell-239082.summary diff --git a/cts/scheduler/novell-239087.summary b/cts/scheduler/summary/novell-239087.summary similarity index 100% rename from cts/scheduler/novell-239087.summary rename to cts/scheduler/summary/novell-239087.summary diff --git a/cts/scheduler/novell-251689.summary b/cts/scheduler/summary/novell-251689.summary similarity index 100% rename from cts/scheduler/novell-251689.summary rename to cts/scheduler/summary/novell-251689.summary diff --git a/cts/scheduler/novell-252693-2.summary b/cts/scheduler/summary/novell-252693-2.summary similarity index 100% rename from cts/scheduler/novell-252693-2.summary rename to cts/scheduler/summary/novell-252693-2.summary diff --git a/cts/scheduler/novell-252693-3.summary b/cts/scheduler/summary/novell-252693-3.summary similarity index 100% rename from cts/scheduler/novell-252693-3.summary rename to cts/scheduler/summary/novell-252693-3.summary diff --git a/cts/scheduler/novell-252693.summary b/cts/scheduler/summary/novell-252693.summary similarity index 100% rename from cts/scheduler/novell-252693.summary rename to cts/scheduler/summary/novell-252693.summary diff --git a/cts/scheduler/nvpair-date-rules-1.summary b/cts/scheduler/summary/nvpair-date-rules-1.summary similarity index 100% rename from cts/scheduler/nvpair-date-rules-1.summary rename to cts/scheduler/summary/nvpair-date-rules-1.summary diff --git a/cts/scheduler/nvpair-id-ref.summary b/cts/scheduler/summary/nvpair-id-ref.summary similarity index 100% rename from cts/scheduler/nvpair-id-ref.summary rename to cts/scheduler/summary/nvpair-id-ref.summary diff --git a/cts/scheduler/obsolete-lrm-resource.summary b/cts/scheduler/summary/obsolete-lrm-resource.summary similarity index 100% rename from cts/scheduler/obsolete-lrm-resource.summary rename to cts/scheduler/summary/obsolete-lrm-resource.summary diff --git a/cts/scheduler/ocf_degraded-remap-ocf_ok.summary b/cts/scheduler/summary/ocf_degraded-remap-ocf_ok.summary similarity index 100% rename from cts/scheduler/ocf_degraded-remap-ocf_ok.summary rename to cts/scheduler/summary/ocf_degraded-remap-ocf_ok.summary diff --git a/cts/scheduler/ocf_degraded_master-remap-ocf_ok.summary b/cts/scheduler/summary/ocf_degraded_master-remap-ocf_ok.summary similarity index 100% rename from cts/scheduler/ocf_degraded_master-remap-ocf_ok.summary rename to cts/scheduler/summary/ocf_degraded_master-remap-ocf_ok.summary diff --git a/cts/scheduler/on-fail-ignore.summary b/cts/scheduler/summary/on-fail-ignore.summary similarity index 100% rename from cts/scheduler/on-fail-ignore.summary rename to cts/scheduler/summary/on-fail-ignore.summary diff --git a/cts/scheduler/on_fail_demote1.summary b/cts/scheduler/summary/on_fail_demote1.summary similarity index 100% rename from cts/scheduler/on_fail_demote1.summary rename to cts/scheduler/summary/on_fail_demote1.summary diff --git a/cts/scheduler/on_fail_demote2.summary b/cts/scheduler/summary/on_fail_demote2.summary similarity index 100% rename from cts/scheduler/on_fail_demote2.summary rename to cts/scheduler/summary/on_fail_demote2.summary diff --git a/cts/scheduler/on_fail_demote3.summary b/cts/scheduler/summary/on_fail_demote3.summary similarity index 100% rename from cts/scheduler/on_fail_demote3.summary rename to cts/scheduler/summary/on_fail_demote3.summary diff --git a/cts/scheduler/on_fail_demote4.summary b/cts/scheduler/summary/on_fail_demote4.summary similarity index 100% rename from cts/scheduler/on_fail_demote4.summary rename to cts/scheduler/summary/on_fail_demote4.summary diff --git a/cts/scheduler/one-or-more-0.summary b/cts/scheduler/summary/one-or-more-0.summary similarity index 100% rename from cts/scheduler/one-or-more-0.summary rename to cts/scheduler/summary/one-or-more-0.summary diff --git a/cts/scheduler/one-or-more-1.summary b/cts/scheduler/summary/one-or-more-1.summary similarity index 100% rename from cts/scheduler/one-or-more-1.summary rename to cts/scheduler/summary/one-or-more-1.summary diff --git a/cts/scheduler/one-or-more-2.summary b/cts/scheduler/summary/one-or-more-2.summary similarity index 100% rename from cts/scheduler/one-or-more-2.summary rename to cts/scheduler/summary/one-or-more-2.summary diff --git a/cts/scheduler/one-or-more-3.summary b/cts/scheduler/summary/one-or-more-3.summary similarity index 100% rename from cts/scheduler/one-or-more-3.summary rename to cts/scheduler/summary/one-or-more-3.summary diff --git a/cts/scheduler/one-or-more-4.summary b/cts/scheduler/summary/one-or-more-4.summary similarity index 100% rename from cts/scheduler/one-or-more-4.summary rename to cts/scheduler/summary/one-or-more-4.summary diff --git a/cts/scheduler/one-or-more-5.summary b/cts/scheduler/summary/one-or-more-5.summary similarity index 100% rename from cts/scheduler/one-or-more-5.summary rename to cts/scheduler/summary/one-or-more-5.summary diff --git a/cts/scheduler/one-or-more-6.summary b/cts/scheduler/summary/one-or-more-6.summary similarity index 100% rename from cts/scheduler/one-or-more-6.summary rename to cts/scheduler/summary/one-or-more-6.summary diff --git a/cts/scheduler/one-or-more-7.summary b/cts/scheduler/summary/one-or-more-7.summary similarity index 100% rename from cts/scheduler/one-or-more-7.summary rename to cts/scheduler/summary/one-or-more-7.summary diff --git a/cts/scheduler/one-or-more-unrunnable-instances.summary b/cts/scheduler/summary/one-or-more-unrunnable-instances.summary similarity index 100% rename from cts/scheduler/one-or-more-unrunnable-instances.summary rename to cts/scheduler/summary/one-or-more-unrunnable-instances.summary diff --git a/cts/scheduler/op-defaults-2.summary b/cts/scheduler/summary/op-defaults-2.summary similarity index 100% rename from cts/scheduler/op-defaults-2.summary rename to cts/scheduler/summary/op-defaults-2.summary diff --git a/cts/scheduler/op-defaults-3.summary b/cts/scheduler/summary/op-defaults-3.summary similarity index 100% rename from cts/scheduler/op-defaults-3.summary rename to cts/scheduler/summary/op-defaults-3.summary diff --git a/cts/scheduler/op-defaults.summary b/cts/scheduler/summary/op-defaults.summary similarity index 100% rename from cts/scheduler/op-defaults.summary rename to cts/scheduler/summary/op-defaults.summary diff --git a/cts/scheduler/order-clone.summary b/cts/scheduler/summary/order-clone.summary similarity index 100% rename from cts/scheduler/order-clone.summary rename to cts/scheduler/summary/order-clone.summary diff --git a/cts/scheduler/order-expired-failure.summary b/cts/scheduler/summary/order-expired-failure.summary similarity index 100% rename from cts/scheduler/order-expired-failure.summary rename to cts/scheduler/summary/order-expired-failure.summary diff --git a/cts/scheduler/order-first-probes.summary b/cts/scheduler/summary/order-first-probes.summary similarity index 100% rename from cts/scheduler/order-first-probes.summary rename to cts/scheduler/summary/order-first-probes.summary diff --git a/cts/scheduler/order-mandatory.summary b/cts/scheduler/summary/order-mandatory.summary similarity index 100% rename from cts/scheduler/order-mandatory.summary rename to cts/scheduler/summary/order-mandatory.summary diff --git a/cts/scheduler/order-optional-keyword.summary b/cts/scheduler/summary/order-optional-keyword.summary similarity index 100% rename from cts/scheduler/order-optional-keyword.summary rename to cts/scheduler/summary/order-optional-keyword.summary diff --git a/cts/scheduler/order-optional.summary b/cts/scheduler/summary/order-optional.summary similarity index 100% rename from cts/scheduler/order-optional.summary rename to cts/scheduler/summary/order-optional.summary diff --git a/cts/scheduler/order-required.summary b/cts/scheduler/summary/order-required.summary similarity index 100% rename from cts/scheduler/order-required.summary rename to cts/scheduler/summary/order-required.summary diff --git a/cts/scheduler/order-serialize-set.summary b/cts/scheduler/summary/order-serialize-set.summary similarity index 100% rename from cts/scheduler/order-serialize-set.summary rename to cts/scheduler/summary/order-serialize-set.summary diff --git a/cts/scheduler/order-serialize.summary b/cts/scheduler/summary/order-serialize.summary similarity index 100% rename from cts/scheduler/order-serialize.summary rename to cts/scheduler/summary/order-serialize.summary diff --git a/cts/scheduler/order-sets.summary b/cts/scheduler/summary/order-sets.summary similarity index 100% rename from cts/scheduler/order-sets.summary rename to cts/scheduler/summary/order-sets.summary diff --git a/cts/scheduler/order-wrong-kind.summary b/cts/scheduler/summary/order-wrong-kind.summary similarity index 100% rename from cts/scheduler/order-wrong-kind.summary rename to cts/scheduler/summary/order-wrong-kind.summary diff --git a/cts/scheduler/order1.summary b/cts/scheduler/summary/order1.summary similarity index 100% rename from cts/scheduler/order1.summary rename to cts/scheduler/summary/order1.summary diff --git a/cts/scheduler/order2.summary b/cts/scheduler/summary/order2.summary similarity index 100% rename from cts/scheduler/order2.summary rename to cts/scheduler/summary/order2.summary diff --git a/cts/scheduler/order3.summary b/cts/scheduler/summary/order3.summary similarity index 100% rename from cts/scheduler/order3.summary rename to cts/scheduler/summary/order3.summary diff --git a/cts/scheduler/order4.summary b/cts/scheduler/summary/order4.summary similarity index 100% rename from cts/scheduler/order4.summary rename to cts/scheduler/summary/order4.summary diff --git a/cts/scheduler/order5.summary b/cts/scheduler/summary/order5.summary similarity index 100% rename from cts/scheduler/order5.summary rename to cts/scheduler/summary/order5.summary diff --git a/cts/scheduler/order6.summary b/cts/scheduler/summary/order6.summary similarity index 100% rename from cts/scheduler/order6.summary rename to cts/scheduler/summary/order6.summary diff --git a/cts/scheduler/order7.summary b/cts/scheduler/summary/order7.summary similarity index 100% rename from cts/scheduler/order7.summary rename to cts/scheduler/summary/order7.summary diff --git a/cts/scheduler/order_constraint_stops_master.summary b/cts/scheduler/summary/order_constraint_stops_master.summary similarity index 100% rename from cts/scheduler/order_constraint_stops_master.summary rename to cts/scheduler/summary/order_constraint_stops_master.summary diff --git a/cts/scheduler/order_constraint_stops_slave.summary b/cts/scheduler/summary/order_constraint_stops_slave.summary similarity index 100% rename from cts/scheduler/order_constraint_stops_slave.summary rename to cts/scheduler/summary/order_constraint_stops_slave.summary diff --git a/cts/scheduler/ordered-set-basic-startup.summary b/cts/scheduler/summary/ordered-set-basic-startup.summary similarity index 100% rename from cts/scheduler/ordered-set-basic-startup.summary rename to cts/scheduler/summary/ordered-set-basic-startup.summary diff --git a/cts/scheduler/ordered-set-natural.summary b/cts/scheduler/summary/ordered-set-natural.summary similarity index 100% rename from cts/scheduler/ordered-set-natural.summary rename to cts/scheduler/summary/ordered-set-natural.summary diff --git a/cts/scheduler/origin.summary b/cts/scheduler/summary/origin.summary similarity index 100% rename from cts/scheduler/origin.summary rename to cts/scheduler/summary/origin.summary diff --git a/cts/scheduler/orphan-0.summary b/cts/scheduler/summary/orphan-0.summary similarity index 100% rename from cts/scheduler/orphan-0.summary rename to cts/scheduler/summary/orphan-0.summary diff --git a/cts/scheduler/orphan-1.summary b/cts/scheduler/summary/orphan-1.summary similarity index 100% rename from cts/scheduler/orphan-1.summary rename to cts/scheduler/summary/orphan-1.summary diff --git a/cts/scheduler/orphan-2.summary b/cts/scheduler/summary/orphan-2.summary similarity index 100% rename from cts/scheduler/orphan-2.summary rename to cts/scheduler/summary/orphan-2.summary diff --git a/cts/scheduler/params-0.summary b/cts/scheduler/summary/params-0.summary similarity index 100% rename from cts/scheduler/params-0.summary rename to cts/scheduler/summary/params-0.summary diff --git a/cts/scheduler/params-1.summary b/cts/scheduler/summary/params-1.summary similarity index 100% rename from cts/scheduler/params-1.summary rename to cts/scheduler/summary/params-1.summary diff --git a/cts/scheduler/params-2.summary b/cts/scheduler/summary/params-2.summary similarity index 100% rename from cts/scheduler/params-2.summary rename to cts/scheduler/summary/params-2.summary diff --git a/cts/scheduler/params-3.summary b/cts/scheduler/summary/params-3.summary similarity index 100% rename from cts/scheduler/params-3.summary rename to cts/scheduler/summary/params-3.summary diff --git a/cts/scheduler/params-4.summary b/cts/scheduler/summary/params-4.summary similarity index 100% rename from cts/scheduler/params-4.summary rename to cts/scheduler/summary/params-4.summary diff --git a/cts/scheduler/params-5.summary b/cts/scheduler/summary/params-5.summary similarity index 100% rename from cts/scheduler/params-5.summary rename to cts/scheduler/summary/params-5.summary diff --git a/cts/scheduler/params-6.summary b/cts/scheduler/summary/params-6.summary similarity index 100% rename from cts/scheduler/params-6.summary rename to cts/scheduler/summary/params-6.summary diff --git a/cts/scheduler/per-node-attrs.summary b/cts/scheduler/summary/per-node-attrs.summary similarity index 100% rename from cts/scheduler/per-node-attrs.summary rename to cts/scheduler/summary/per-node-attrs.summary diff --git a/cts/scheduler/per-op-failcount.summary b/cts/scheduler/summary/per-op-failcount.summary similarity index 100% rename from cts/scheduler/per-op-failcount.summary rename to cts/scheduler/summary/per-op-failcount.summary diff --git a/cts/scheduler/placement-capacity.summary b/cts/scheduler/summary/placement-capacity.summary similarity index 100% rename from cts/scheduler/placement-capacity.summary rename to cts/scheduler/summary/placement-capacity.summary diff --git a/cts/scheduler/placement-location.summary b/cts/scheduler/summary/placement-location.summary similarity index 100% rename from cts/scheduler/placement-location.summary rename to cts/scheduler/summary/placement-location.summary diff --git a/cts/scheduler/placement-priority.summary b/cts/scheduler/summary/placement-priority.summary similarity index 100% rename from cts/scheduler/placement-priority.summary rename to cts/scheduler/summary/placement-priority.summary diff --git a/cts/scheduler/placement-stickiness.summary b/cts/scheduler/summary/placement-stickiness.summary similarity index 100% rename from cts/scheduler/placement-stickiness.summary rename to cts/scheduler/summary/placement-stickiness.summary diff --git a/cts/scheduler/priority-fencing-delay.summary b/cts/scheduler/summary/priority-fencing-delay.summary similarity index 100% rename from cts/scheduler/priority-fencing-delay.summary rename to cts/scheduler/summary/priority-fencing-delay.summary diff --git a/cts/scheduler/probe-0.summary b/cts/scheduler/summary/probe-0.summary similarity index 100% rename from cts/scheduler/probe-0.summary rename to cts/scheduler/summary/probe-0.summary diff --git a/cts/scheduler/probe-1.summary b/cts/scheduler/summary/probe-1.summary similarity index 100% rename from cts/scheduler/probe-1.summary rename to cts/scheduler/summary/probe-1.summary diff --git a/cts/scheduler/probe-2.summary b/cts/scheduler/summary/probe-2.summary similarity index 100% rename from cts/scheduler/probe-2.summary rename to cts/scheduler/summary/probe-2.summary diff --git a/cts/scheduler/probe-3.summary b/cts/scheduler/summary/probe-3.summary similarity index 100% rename from cts/scheduler/probe-3.summary rename to cts/scheduler/summary/probe-3.summary diff --git a/cts/scheduler/probe-4.summary b/cts/scheduler/summary/probe-4.summary similarity index 100% rename from cts/scheduler/probe-4.summary rename to cts/scheduler/summary/probe-4.summary diff --git a/cts/scheduler/probe-timeout.summary b/cts/scheduler/summary/probe-timeout.summary similarity index 100% rename from cts/scheduler/probe-timeout.summary rename to cts/scheduler/summary/probe-timeout.summary diff --git a/cts/scheduler/quorum-1.summary b/cts/scheduler/summary/quorum-1.summary similarity index 100% rename from cts/scheduler/quorum-1.summary rename to cts/scheduler/summary/quorum-1.summary diff --git a/cts/scheduler/quorum-2.summary b/cts/scheduler/summary/quorum-2.summary similarity index 100% rename from cts/scheduler/quorum-2.summary rename to cts/scheduler/summary/quorum-2.summary diff --git a/cts/scheduler/quorum-3.summary b/cts/scheduler/summary/quorum-3.summary similarity index 100% rename from cts/scheduler/quorum-3.summary rename to cts/scheduler/summary/quorum-3.summary diff --git a/cts/scheduler/quorum-4.summary b/cts/scheduler/summary/quorum-4.summary similarity index 100% rename from cts/scheduler/quorum-4.summary rename to cts/scheduler/summary/quorum-4.summary diff --git a/cts/scheduler/quorum-5.summary b/cts/scheduler/summary/quorum-5.summary similarity index 100% rename from cts/scheduler/quorum-5.summary rename to cts/scheduler/summary/quorum-5.summary diff --git a/cts/scheduler/quorum-6.summary b/cts/scheduler/summary/quorum-6.summary similarity index 100% rename from cts/scheduler/quorum-6.summary rename to cts/scheduler/summary/quorum-6.summary diff --git a/cts/scheduler/rebalance-unique-clones.summary b/cts/scheduler/summary/rebalance-unique-clones.summary similarity index 100% rename from cts/scheduler/rebalance-unique-clones.summary rename to cts/scheduler/summary/rebalance-unique-clones.summary diff --git a/cts/scheduler/rec-node-1.summary b/cts/scheduler/summary/rec-node-1.summary similarity index 100% rename from cts/scheduler/rec-node-1.summary rename to cts/scheduler/summary/rec-node-1.summary diff --git a/cts/scheduler/rec-node-10.summary b/cts/scheduler/summary/rec-node-10.summary similarity index 100% rename from cts/scheduler/rec-node-10.summary rename to cts/scheduler/summary/rec-node-10.summary diff --git a/cts/scheduler/rec-node-11.summary b/cts/scheduler/summary/rec-node-11.summary similarity index 100% rename from cts/scheduler/rec-node-11.summary rename to cts/scheduler/summary/rec-node-11.summary diff --git a/cts/scheduler/rec-node-12.summary b/cts/scheduler/summary/rec-node-12.summary similarity index 100% rename from cts/scheduler/rec-node-12.summary rename to cts/scheduler/summary/rec-node-12.summary diff --git a/cts/scheduler/rec-node-13.summary b/cts/scheduler/summary/rec-node-13.summary similarity index 100% rename from cts/scheduler/rec-node-13.summary rename to cts/scheduler/summary/rec-node-13.summary diff --git a/cts/scheduler/rec-node-14.summary b/cts/scheduler/summary/rec-node-14.summary similarity index 100% rename from cts/scheduler/rec-node-14.summary rename to cts/scheduler/summary/rec-node-14.summary diff --git a/cts/scheduler/rec-node-15.summary b/cts/scheduler/summary/rec-node-15.summary similarity index 100% rename from cts/scheduler/rec-node-15.summary rename to cts/scheduler/summary/rec-node-15.summary diff --git a/cts/scheduler/rec-node-2.summary b/cts/scheduler/summary/rec-node-2.summary similarity index 100% rename from cts/scheduler/rec-node-2.summary rename to cts/scheduler/summary/rec-node-2.summary diff --git a/cts/scheduler/rec-node-3.summary b/cts/scheduler/summary/rec-node-3.summary similarity index 100% rename from cts/scheduler/rec-node-3.summary rename to cts/scheduler/summary/rec-node-3.summary diff --git a/cts/scheduler/rec-node-4.summary b/cts/scheduler/summary/rec-node-4.summary similarity index 100% rename from cts/scheduler/rec-node-4.summary rename to cts/scheduler/summary/rec-node-4.summary diff --git a/cts/scheduler/rec-node-5.summary b/cts/scheduler/summary/rec-node-5.summary similarity index 100% rename from cts/scheduler/rec-node-5.summary rename to cts/scheduler/summary/rec-node-5.summary diff --git a/cts/scheduler/rec-node-6.summary b/cts/scheduler/summary/rec-node-6.summary similarity index 100% rename from cts/scheduler/rec-node-6.summary rename to cts/scheduler/summary/rec-node-6.summary diff --git a/cts/scheduler/rec-node-7.summary b/cts/scheduler/summary/rec-node-7.summary similarity index 100% rename from cts/scheduler/rec-node-7.summary rename to cts/scheduler/summary/rec-node-7.summary diff --git a/cts/scheduler/rec-node-8.summary b/cts/scheduler/summary/rec-node-8.summary similarity index 100% rename from cts/scheduler/rec-node-8.summary rename to cts/scheduler/summary/rec-node-8.summary diff --git a/cts/scheduler/rec-node-9.summary b/cts/scheduler/summary/rec-node-9.summary similarity index 100% rename from cts/scheduler/rec-node-9.summary rename to cts/scheduler/summary/rec-node-9.summary diff --git a/cts/scheduler/rec-rsc-0.summary b/cts/scheduler/summary/rec-rsc-0.summary similarity index 100% rename from cts/scheduler/rec-rsc-0.summary rename to cts/scheduler/summary/rec-rsc-0.summary diff --git a/cts/scheduler/rec-rsc-1.summary b/cts/scheduler/summary/rec-rsc-1.summary similarity index 100% rename from cts/scheduler/rec-rsc-1.summary rename to cts/scheduler/summary/rec-rsc-1.summary diff --git a/cts/scheduler/rec-rsc-2.summary b/cts/scheduler/summary/rec-rsc-2.summary similarity index 100% rename from cts/scheduler/rec-rsc-2.summary rename to cts/scheduler/summary/rec-rsc-2.summary diff --git a/cts/scheduler/rec-rsc-3.summary b/cts/scheduler/summary/rec-rsc-3.summary similarity index 100% rename from cts/scheduler/rec-rsc-3.summary rename to cts/scheduler/summary/rec-rsc-3.summary diff --git a/cts/scheduler/rec-rsc-4.summary b/cts/scheduler/summary/rec-rsc-4.summary similarity index 100% rename from cts/scheduler/rec-rsc-4.summary rename to cts/scheduler/summary/rec-rsc-4.summary diff --git a/cts/scheduler/rec-rsc-5.summary b/cts/scheduler/summary/rec-rsc-5.summary similarity index 100% rename from cts/scheduler/rec-rsc-5.summary rename to cts/scheduler/summary/rec-rsc-5.summary diff --git a/cts/scheduler/rec-rsc-6.summary b/cts/scheduler/summary/rec-rsc-6.summary similarity index 100% rename from cts/scheduler/rec-rsc-6.summary rename to cts/scheduler/summary/rec-rsc-6.summary diff --git a/cts/scheduler/rec-rsc-7.summary b/cts/scheduler/summary/rec-rsc-7.summary similarity index 100% rename from cts/scheduler/rec-rsc-7.summary rename to cts/scheduler/summary/rec-rsc-7.summary diff --git a/cts/scheduler/rec-rsc-8.summary b/cts/scheduler/summary/rec-rsc-8.summary similarity index 100% rename from cts/scheduler/rec-rsc-8.summary rename to cts/scheduler/summary/rec-rsc-8.summary diff --git a/cts/scheduler/rec-rsc-9.summary b/cts/scheduler/summary/rec-rsc-9.summary similarity index 100% rename from cts/scheduler/rec-rsc-9.summary rename to cts/scheduler/summary/rec-rsc-9.summary diff --git a/cts/scheduler/reload-becomes-restart.summary b/cts/scheduler/summary/reload-becomes-restart.summary similarity index 100% rename from cts/scheduler/reload-becomes-restart.summary rename to cts/scheduler/summary/reload-becomes-restart.summary diff --git a/cts/scheduler/reload-versioned.summary b/cts/scheduler/summary/reload-versioned.summary similarity index 100% rename from cts/scheduler/reload-versioned.summary rename to cts/scheduler/summary/reload-versioned.summary diff --git a/cts/scheduler/remote-connection-shutdown.summary b/cts/scheduler/summary/remote-connection-shutdown.summary similarity index 100% rename from cts/scheduler/remote-connection-shutdown.summary rename to cts/scheduler/summary/remote-connection-shutdown.summary diff --git a/cts/scheduler/remote-connection-unrecoverable.summary b/cts/scheduler/summary/remote-connection-unrecoverable.summary similarity index 100% rename from cts/scheduler/remote-connection-unrecoverable.summary rename to cts/scheduler/summary/remote-connection-unrecoverable.summary diff --git a/cts/scheduler/remote-disable.summary b/cts/scheduler/summary/remote-disable.summary similarity index 100% rename from cts/scheduler/remote-disable.summary rename to cts/scheduler/summary/remote-disable.summary diff --git a/cts/scheduler/remote-fence-before-reconnect.summary b/cts/scheduler/summary/remote-fence-before-reconnect.summary similarity index 100% rename from cts/scheduler/remote-fence-before-reconnect.summary rename to cts/scheduler/summary/remote-fence-before-reconnect.summary diff --git a/cts/scheduler/remote-fence-unclean-3.summary b/cts/scheduler/summary/remote-fence-unclean-3.summary similarity index 100% rename from cts/scheduler/remote-fence-unclean-3.summary rename to cts/scheduler/summary/remote-fence-unclean-3.summary diff --git a/cts/scheduler/remote-fence-unclean.summary b/cts/scheduler/summary/remote-fence-unclean.summary similarity index 100% rename from cts/scheduler/remote-fence-unclean.summary rename to cts/scheduler/summary/remote-fence-unclean.summary diff --git a/cts/scheduler/remote-fence-unclean2.summary b/cts/scheduler/summary/remote-fence-unclean2.summary similarity index 100% rename from cts/scheduler/remote-fence-unclean2.summary rename to cts/scheduler/summary/remote-fence-unclean2.summary diff --git a/cts/scheduler/remote-move.summary b/cts/scheduler/summary/remote-move.summary similarity index 100% rename from cts/scheduler/remote-move.summary rename to cts/scheduler/summary/remote-move.summary diff --git a/cts/scheduler/remote-orphaned.summary b/cts/scheduler/summary/remote-orphaned.summary similarity index 100% rename from cts/scheduler/remote-orphaned.summary rename to cts/scheduler/summary/remote-orphaned.summary diff --git a/cts/scheduler/remote-orphaned2.summary b/cts/scheduler/summary/remote-orphaned2.summary similarity index 100% rename from cts/scheduler/remote-orphaned2.summary rename to cts/scheduler/summary/remote-orphaned2.summary diff --git a/cts/scheduler/remote-partial-migrate.summary b/cts/scheduler/summary/remote-partial-migrate.summary similarity index 100% rename from cts/scheduler/remote-partial-migrate.summary rename to cts/scheduler/summary/remote-partial-migrate.summary diff --git a/cts/scheduler/remote-partial-migrate2.summary b/cts/scheduler/summary/remote-partial-migrate2.summary similarity index 100% rename from cts/scheduler/remote-partial-migrate2.summary rename to cts/scheduler/summary/remote-partial-migrate2.summary diff --git a/cts/scheduler/remote-probe-disable.summary b/cts/scheduler/summary/remote-probe-disable.summary similarity index 100% rename from cts/scheduler/remote-probe-disable.summary rename to cts/scheduler/summary/remote-probe-disable.summary diff --git a/cts/scheduler/remote-reconnect-delay.summary b/cts/scheduler/summary/remote-reconnect-delay.summary similarity index 100% rename from cts/scheduler/remote-reconnect-delay.summary rename to cts/scheduler/summary/remote-reconnect-delay.summary diff --git a/cts/scheduler/remote-recover-all.summary b/cts/scheduler/summary/remote-recover-all.summary similarity index 100% rename from cts/scheduler/remote-recover-all.summary rename to cts/scheduler/summary/remote-recover-all.summary diff --git a/cts/scheduler/remote-recover-connection.summary b/cts/scheduler/summary/remote-recover-connection.summary similarity index 100% rename from cts/scheduler/remote-recover-connection.summary rename to cts/scheduler/summary/remote-recover-connection.summary diff --git a/cts/scheduler/remote-recover-fail.summary b/cts/scheduler/summary/remote-recover-fail.summary similarity index 100% rename from cts/scheduler/remote-recover-fail.summary rename to cts/scheduler/summary/remote-recover-fail.summary diff --git a/cts/scheduler/remote-recover-no-resources.summary b/cts/scheduler/summary/remote-recover-no-resources.summary similarity index 100% rename from cts/scheduler/remote-recover-no-resources.summary rename to cts/scheduler/summary/remote-recover-no-resources.summary diff --git a/cts/scheduler/remote-recover-unknown.summary b/cts/scheduler/summary/remote-recover-unknown.summary similarity index 100% rename from cts/scheduler/remote-recover-unknown.summary rename to cts/scheduler/summary/remote-recover-unknown.summary diff --git a/cts/scheduler/remote-recover.summary b/cts/scheduler/summary/remote-recover.summary similarity index 100% rename from cts/scheduler/remote-recover.summary rename to cts/scheduler/summary/remote-recover.summary diff --git a/cts/scheduler/remote-recovery.summary b/cts/scheduler/summary/remote-recovery.summary similarity index 100% rename from cts/scheduler/remote-recovery.summary rename to cts/scheduler/summary/remote-recovery.summary diff --git a/cts/scheduler/remote-stale-node-entry.summary b/cts/scheduler/summary/remote-stale-node-entry.summary similarity index 100% rename from cts/scheduler/remote-stale-node-entry.summary rename to cts/scheduler/summary/remote-stale-node-entry.summary diff --git a/cts/scheduler/remote-start-fail.summary b/cts/scheduler/summary/remote-start-fail.summary similarity index 100% rename from cts/scheduler/remote-start-fail.summary rename to cts/scheduler/summary/remote-start-fail.summary diff --git a/cts/scheduler/remote-startup-probes.summary b/cts/scheduler/summary/remote-startup-probes.summary similarity index 100% rename from cts/scheduler/remote-startup-probes.summary rename to cts/scheduler/summary/remote-startup-probes.summary diff --git a/cts/scheduler/remote-startup.summary b/cts/scheduler/summary/remote-startup.summary similarity index 100% rename from cts/scheduler/remote-startup.summary rename to cts/scheduler/summary/remote-startup.summary diff --git a/cts/scheduler/remote-unclean2.summary b/cts/scheduler/summary/remote-unclean2.summary similarity index 100% rename from cts/scheduler/remote-unclean2.summary rename to cts/scheduler/summary/remote-unclean2.summary diff --git a/cts/scheduler/reprobe-target_rc.summary b/cts/scheduler/summary/reprobe-target_rc.summary similarity index 100% rename from cts/scheduler/reprobe-target_rc.summary rename to cts/scheduler/summary/reprobe-target_rc.summary diff --git a/cts/scheduler/resource-discovery.summary b/cts/scheduler/summary/resource-discovery.summary similarity index 100% rename from cts/scheduler/resource-discovery.summary rename to cts/scheduler/summary/resource-discovery.summary diff --git a/cts/scheduler/restart-versioned.summary b/cts/scheduler/summary/restart-versioned.summary similarity index 100% rename from cts/scheduler/restart-versioned.summary rename to cts/scheduler/summary/restart-versioned.summary diff --git a/cts/scheduler/route-remote-notify.summary b/cts/scheduler/summary/route-remote-notify.summary similarity index 100% rename from cts/scheduler/route-remote-notify.summary rename to cts/scheduler/summary/route-remote-notify.summary diff --git a/cts/scheduler/rsc-defaults-2.summary b/cts/scheduler/summary/rsc-defaults-2.summary similarity index 100% rename from cts/scheduler/rsc-defaults-2.summary rename to cts/scheduler/summary/rsc-defaults-2.summary diff --git a/cts/scheduler/rsc-defaults.summary b/cts/scheduler/summary/rsc-defaults.summary similarity index 100% rename from cts/scheduler/rsc-defaults.summary rename to cts/scheduler/summary/rsc-defaults.summary diff --git a/cts/scheduler/rsc-discovery-per-node.summary b/cts/scheduler/summary/rsc-discovery-per-node.summary similarity index 100% rename from cts/scheduler/rsc-discovery-per-node.summary rename to cts/scheduler/summary/rsc-discovery-per-node.summary diff --git a/cts/scheduler/rsc-maintenance.summary b/cts/scheduler/summary/rsc-maintenance.summary similarity index 100% rename from cts/scheduler/rsc-maintenance.summary rename to cts/scheduler/summary/rsc-maintenance.summary diff --git a/cts/scheduler/rsc-sets-clone-1.summary b/cts/scheduler/summary/rsc-sets-clone-1.summary similarity index 100% rename from cts/scheduler/rsc-sets-clone-1.summary rename to cts/scheduler/summary/rsc-sets-clone-1.summary diff --git a/cts/scheduler/rsc-sets-clone.summary b/cts/scheduler/summary/rsc-sets-clone.summary similarity index 100% rename from cts/scheduler/rsc-sets-clone.summary rename to cts/scheduler/summary/rsc-sets-clone.summary diff --git a/cts/scheduler/rsc-sets-master.summary b/cts/scheduler/summary/rsc-sets-master.summary similarity index 100% rename from cts/scheduler/rsc-sets-master.summary rename to cts/scheduler/summary/rsc-sets-master.summary diff --git a/cts/scheduler/rsc-sets-seq-false.summary b/cts/scheduler/summary/rsc-sets-seq-false.summary similarity index 100% rename from cts/scheduler/rsc-sets-seq-false.summary rename to cts/scheduler/summary/rsc-sets-seq-false.summary diff --git a/cts/scheduler/rsc-sets-seq-true.summary b/cts/scheduler/summary/rsc-sets-seq-true.summary similarity index 100% rename from cts/scheduler/rsc-sets-seq-true.summary rename to cts/scheduler/summary/rsc-sets-seq-true.summary diff --git a/cts/scheduler/rsc_dep1.summary b/cts/scheduler/summary/rsc_dep1.summary similarity index 100% rename from cts/scheduler/rsc_dep1.summary rename to cts/scheduler/summary/rsc_dep1.summary diff --git a/cts/scheduler/rsc_dep10.summary b/cts/scheduler/summary/rsc_dep10.summary similarity index 100% rename from cts/scheduler/rsc_dep10.summary rename to cts/scheduler/summary/rsc_dep10.summary diff --git a/cts/scheduler/rsc_dep2.summary b/cts/scheduler/summary/rsc_dep2.summary similarity index 100% rename from cts/scheduler/rsc_dep2.summary rename to cts/scheduler/summary/rsc_dep2.summary diff --git a/cts/scheduler/rsc_dep3.summary b/cts/scheduler/summary/rsc_dep3.summary similarity index 100% rename from cts/scheduler/rsc_dep3.summary rename to cts/scheduler/summary/rsc_dep3.summary diff --git a/cts/scheduler/rsc_dep4.summary b/cts/scheduler/summary/rsc_dep4.summary similarity index 100% rename from cts/scheduler/rsc_dep4.summary rename to cts/scheduler/summary/rsc_dep4.summary diff --git a/cts/scheduler/rsc_dep5.summary b/cts/scheduler/summary/rsc_dep5.summary similarity index 100% rename from cts/scheduler/rsc_dep5.summary rename to cts/scheduler/summary/rsc_dep5.summary diff --git a/cts/scheduler/rsc_dep7.summary b/cts/scheduler/summary/rsc_dep7.summary similarity index 100% rename from cts/scheduler/rsc_dep7.summary rename to cts/scheduler/summary/rsc_dep7.summary diff --git a/cts/scheduler/rsc_dep8.summary b/cts/scheduler/summary/rsc_dep8.summary similarity index 100% rename from cts/scheduler/rsc_dep8.summary rename to cts/scheduler/summary/rsc_dep8.summary diff --git a/cts/scheduler/rule-dbl-as-auto-number-match.summary b/cts/scheduler/summary/rule-dbl-as-auto-number-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-match.summary rename to cts/scheduler/summary/rule-dbl-as-auto-number-match.summary diff --git a/cts/scheduler/rule-dbl-as-auto-number-no-match.summary b/cts/scheduler/summary/rule-dbl-as-auto-number-no-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-no-match.summary rename to cts/scheduler/summary/rule-dbl-as-auto-number-no-match.summary diff --git a/cts/scheduler/rule-dbl-as-integer-match.summary b/cts/scheduler/summary/rule-dbl-as-integer-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-match.summary rename to cts/scheduler/summary/rule-dbl-as-integer-match.summary diff --git a/cts/scheduler/rule-dbl-as-integer-no-match.summary b/cts/scheduler/summary/rule-dbl-as-integer-no-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-no-match.summary rename to cts/scheduler/summary/rule-dbl-as-integer-no-match.summary diff --git a/cts/scheduler/rule-dbl-as-number-match.summary b/cts/scheduler/summary/rule-dbl-as-number-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-as-number-match.summary rename to cts/scheduler/summary/rule-dbl-as-number-match.summary diff --git a/cts/scheduler/rule-dbl-as-number-no-match.summary b/cts/scheduler/summary/rule-dbl-as-number-no-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-as-number-no-match.summary rename to cts/scheduler/summary/rule-dbl-as-number-no-match.summary diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-match.summary b/cts/scheduler/summary/rule-dbl-parse-fail-default-str-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-match.summary rename to cts/scheduler/summary/rule-dbl-parse-fail-default-str-match.summary diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-no-match.summary b/cts/scheduler/summary/rule-dbl-parse-fail-default-str-no-match.summary similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-no-match.summary rename to cts/scheduler/summary/rule-dbl-parse-fail-default-str-no-match.summary diff --git a/cts/scheduler/rule-int-as-auto-integer-match.summary b/cts/scheduler/summary/rule-int-as-auto-integer-match.summary similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-match.summary rename to cts/scheduler/summary/rule-int-as-auto-integer-match.summary diff --git a/cts/scheduler/rule-int-as-auto-integer-no-match.summary b/cts/scheduler/summary/rule-int-as-auto-integer-no-match.summary similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-no-match.summary rename to cts/scheduler/summary/rule-int-as-auto-integer-no-match.summary diff --git a/cts/scheduler/rule-int-as-integer-match.summary b/cts/scheduler/summary/rule-int-as-integer-match.summary similarity index 100% rename from cts/scheduler/rule-int-as-integer-match.summary rename to cts/scheduler/summary/rule-int-as-integer-match.summary diff --git a/cts/scheduler/rule-int-as-integer-no-match.summary b/cts/scheduler/summary/rule-int-as-integer-no-match.summary similarity index 100% rename from cts/scheduler/rule-int-as-integer-no-match.summary rename to cts/scheduler/summary/rule-int-as-integer-no-match.summary diff --git a/cts/scheduler/rule-int-as-number-match.summary b/cts/scheduler/summary/rule-int-as-number-match.summary similarity index 100% rename from cts/scheduler/rule-int-as-number-match.summary rename to cts/scheduler/summary/rule-int-as-number-match.summary diff --git a/cts/scheduler/rule-int-as-number-no-match.summary b/cts/scheduler/summary/rule-int-as-number-no-match.summary similarity index 100% rename from cts/scheduler/rule-int-as-number-no-match.summary rename to cts/scheduler/summary/rule-int-as-number-no-match.summary diff --git a/cts/scheduler/rule-int-parse-fail-default-str-match.summary b/cts/scheduler/summary/rule-int-parse-fail-default-str-match.summary similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-match.summary rename to cts/scheduler/summary/rule-int-parse-fail-default-str-match.summary diff --git a/cts/scheduler/rule-int-parse-fail-default-str-no-match.summary b/cts/scheduler/summary/rule-int-parse-fail-default-str-no-match.summary similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-no-match.summary rename to cts/scheduler/summary/rule-int-parse-fail-default-str-no-match.summary diff --git a/cts/scheduler/shutdown-lock-expiration.summary b/cts/scheduler/summary/shutdown-lock-expiration.summary similarity index 100% rename from cts/scheduler/shutdown-lock-expiration.summary rename to cts/scheduler/summary/shutdown-lock-expiration.summary diff --git a/cts/scheduler/shutdown-lock.summary b/cts/scheduler/summary/shutdown-lock.summary similarity index 100% rename from cts/scheduler/shutdown-lock.summary rename to cts/scheduler/summary/shutdown-lock.summary diff --git a/cts/scheduler/shutdown-maintenance-node.summary b/cts/scheduler/summary/shutdown-maintenance-node.summary similarity index 100% rename from cts/scheduler/shutdown-maintenance-node.summary rename to cts/scheduler/summary/shutdown-maintenance-node.summary diff --git a/cts/scheduler/simple1.summary b/cts/scheduler/summary/simple1.summary similarity index 100% rename from cts/scheduler/simple1.summary rename to cts/scheduler/summary/simple1.summary diff --git a/cts/scheduler/simple11.summary b/cts/scheduler/summary/simple11.summary similarity index 100% rename from cts/scheduler/simple11.summary rename to cts/scheduler/summary/simple11.summary diff --git a/cts/scheduler/simple12.summary b/cts/scheduler/summary/simple12.summary similarity index 100% rename from cts/scheduler/simple12.summary rename to cts/scheduler/summary/simple12.summary diff --git a/cts/scheduler/simple2.summary b/cts/scheduler/summary/simple2.summary similarity index 100% rename from cts/scheduler/simple2.summary rename to cts/scheduler/summary/simple2.summary diff --git a/cts/scheduler/simple3.summary b/cts/scheduler/summary/simple3.summary similarity index 100% rename from cts/scheduler/simple3.summary rename to cts/scheduler/summary/simple3.summary diff --git a/cts/scheduler/simple4.summary b/cts/scheduler/summary/simple4.summary similarity index 100% rename from cts/scheduler/simple4.summary rename to cts/scheduler/summary/simple4.summary diff --git a/cts/scheduler/simple6.summary b/cts/scheduler/summary/simple6.summary similarity index 100% rename from cts/scheduler/simple6.summary rename to cts/scheduler/summary/simple6.summary diff --git a/cts/scheduler/simple7.summary b/cts/scheduler/summary/simple7.summary similarity index 100% rename from cts/scheduler/simple7.summary rename to cts/scheduler/summary/simple7.summary diff --git a/cts/scheduler/simple8.summary b/cts/scheduler/summary/simple8.summary similarity index 100% rename from cts/scheduler/simple8.summary rename to cts/scheduler/summary/simple8.summary diff --git a/cts/scheduler/site-specific-params.summary b/cts/scheduler/summary/site-specific-params.summary similarity index 100% rename from cts/scheduler/site-specific-params.summary rename to cts/scheduler/summary/site-specific-params.summary diff --git a/cts/scheduler/standby.summary b/cts/scheduler/summary/standby.summary similarity index 100% rename from cts/scheduler/standby.summary rename to cts/scheduler/summary/standby.summary diff --git a/cts/scheduler/start-then-stop-with-unfence.summary b/cts/scheduler/summary/start-then-stop-with-unfence.summary similarity index 100% rename from cts/scheduler/start-then-stop-with-unfence.summary rename to cts/scheduler/summary/start-then-stop-with-unfence.summary diff --git a/cts/scheduler/stonith-0.summary b/cts/scheduler/summary/stonith-0.summary similarity index 100% rename from cts/scheduler/stonith-0.summary rename to cts/scheduler/summary/stonith-0.summary diff --git a/cts/scheduler/stonith-1.summary b/cts/scheduler/summary/stonith-1.summary similarity index 100% rename from cts/scheduler/stonith-1.summary rename to cts/scheduler/summary/stonith-1.summary diff --git a/cts/scheduler/stonith-2.summary b/cts/scheduler/summary/stonith-2.summary similarity index 100% rename from cts/scheduler/stonith-2.summary rename to cts/scheduler/summary/stonith-2.summary diff --git a/cts/scheduler/stonith-3.summary b/cts/scheduler/summary/stonith-3.summary similarity index 100% rename from cts/scheduler/stonith-3.summary rename to cts/scheduler/summary/stonith-3.summary diff --git a/cts/scheduler/stonith-4.summary b/cts/scheduler/summary/stonith-4.summary similarity index 100% rename from cts/scheduler/stonith-4.summary rename to cts/scheduler/summary/stonith-4.summary diff --git a/cts/scheduler/stop-all-resources.summary b/cts/scheduler/summary/stop-all-resources.summary similarity index 100% rename from cts/scheduler/stop-all-resources.summary rename to cts/scheduler/summary/stop-all-resources.summary diff --git a/cts/scheduler/stop-failure-no-fencing.summary b/cts/scheduler/summary/stop-failure-no-fencing.summary similarity index 100% rename from cts/scheduler/stop-failure-no-fencing.summary rename to cts/scheduler/summary/stop-failure-no-fencing.summary diff --git a/cts/scheduler/stop-failure-no-quorum.summary b/cts/scheduler/summary/stop-failure-no-quorum.summary similarity index 100% rename from cts/scheduler/stop-failure-no-quorum.summary rename to cts/scheduler/summary/stop-failure-no-quorum.summary diff --git a/cts/scheduler/stop-failure-with-fencing.summary b/cts/scheduler/summary/stop-failure-with-fencing.summary similarity index 100% rename from cts/scheduler/stop-failure-with-fencing.summary rename to cts/scheduler/summary/stop-failure-with-fencing.summary diff --git a/cts/scheduler/stopped-monitor-00.summary b/cts/scheduler/summary/stopped-monitor-00.summary similarity index 100% rename from cts/scheduler/stopped-monitor-00.summary rename to cts/scheduler/summary/stopped-monitor-00.summary diff --git a/cts/scheduler/stopped-monitor-01.summary b/cts/scheduler/summary/stopped-monitor-01.summary similarity index 100% rename from cts/scheduler/stopped-monitor-01.summary rename to cts/scheduler/summary/stopped-monitor-01.summary diff --git a/cts/scheduler/stopped-monitor-02.summary b/cts/scheduler/summary/stopped-monitor-02.summary similarity index 100% rename from cts/scheduler/stopped-monitor-02.summary rename to cts/scheduler/summary/stopped-monitor-02.summary diff --git a/cts/scheduler/stopped-monitor-03.summary b/cts/scheduler/summary/stopped-monitor-03.summary similarity index 100% rename from cts/scheduler/stopped-monitor-03.summary rename to cts/scheduler/summary/stopped-monitor-03.summary diff --git a/cts/scheduler/stopped-monitor-04.summary b/cts/scheduler/summary/stopped-monitor-04.summary similarity index 100% rename from cts/scheduler/stopped-monitor-04.summary rename to cts/scheduler/summary/stopped-monitor-04.summary diff --git a/cts/scheduler/stopped-monitor-05.summary b/cts/scheduler/summary/stopped-monitor-05.summary similarity index 100% rename from cts/scheduler/stopped-monitor-05.summary rename to cts/scheduler/summary/stopped-monitor-05.summary diff --git a/cts/scheduler/stopped-monitor-06.summary b/cts/scheduler/summary/stopped-monitor-06.summary similarity index 100% rename from cts/scheduler/stopped-monitor-06.summary rename to cts/scheduler/summary/stopped-monitor-06.summary diff --git a/cts/scheduler/stopped-monitor-07.summary b/cts/scheduler/summary/stopped-monitor-07.summary similarity index 100% rename from cts/scheduler/stopped-monitor-07.summary rename to cts/scheduler/summary/stopped-monitor-07.summary diff --git a/cts/scheduler/stopped-monitor-08.summary b/cts/scheduler/summary/stopped-monitor-08.summary similarity index 100% rename from cts/scheduler/stopped-monitor-08.summary rename to cts/scheduler/summary/stopped-monitor-08.summary diff --git a/cts/scheduler/stopped-monitor-09.summary b/cts/scheduler/summary/stopped-monitor-09.summary similarity index 100% rename from cts/scheduler/stopped-monitor-09.summary rename to cts/scheduler/summary/stopped-monitor-09.summary diff --git a/cts/scheduler/stopped-monitor-10.summary b/cts/scheduler/summary/stopped-monitor-10.summary similarity index 100% rename from cts/scheduler/stopped-monitor-10.summary rename to cts/scheduler/summary/stopped-monitor-10.summary diff --git a/cts/scheduler/stopped-monitor-11.summary b/cts/scheduler/summary/stopped-monitor-11.summary similarity index 100% rename from cts/scheduler/stopped-monitor-11.summary rename to cts/scheduler/summary/stopped-monitor-11.summary diff --git a/cts/scheduler/stopped-monitor-12.summary b/cts/scheduler/summary/stopped-monitor-12.summary similarity index 100% rename from cts/scheduler/stopped-monitor-12.summary rename to cts/scheduler/summary/stopped-monitor-12.summary diff --git a/cts/scheduler/stopped-monitor-20.summary b/cts/scheduler/summary/stopped-monitor-20.summary similarity index 100% rename from cts/scheduler/stopped-monitor-20.summary rename to cts/scheduler/summary/stopped-monitor-20.summary diff --git a/cts/scheduler/stopped-monitor-21.summary b/cts/scheduler/summary/stopped-monitor-21.summary similarity index 100% rename from cts/scheduler/stopped-monitor-21.summary rename to cts/scheduler/summary/stopped-monitor-21.summary diff --git a/cts/scheduler/stopped-monitor-22.summary b/cts/scheduler/summary/stopped-monitor-22.summary similarity index 100% rename from cts/scheduler/stopped-monitor-22.summary rename to cts/scheduler/summary/stopped-monitor-22.summary diff --git a/cts/scheduler/stopped-monitor-23.summary b/cts/scheduler/summary/stopped-monitor-23.summary similarity index 100% rename from cts/scheduler/stopped-monitor-23.summary rename to cts/scheduler/summary/stopped-monitor-23.summary diff --git a/cts/scheduler/stopped-monitor-24.summary b/cts/scheduler/summary/stopped-monitor-24.summary similarity index 100% rename from cts/scheduler/stopped-monitor-24.summary rename to cts/scheduler/summary/stopped-monitor-24.summary diff --git a/cts/scheduler/stopped-monitor-25.summary b/cts/scheduler/summary/stopped-monitor-25.summary similarity index 100% rename from cts/scheduler/stopped-monitor-25.summary rename to cts/scheduler/summary/stopped-monitor-25.summary diff --git a/cts/scheduler/stopped-monitor-26.summary b/cts/scheduler/summary/stopped-monitor-26.summary similarity index 100% rename from cts/scheduler/stopped-monitor-26.summary rename to cts/scheduler/summary/stopped-monitor-26.summary diff --git a/cts/scheduler/stopped-monitor-27.summary b/cts/scheduler/summary/stopped-monitor-27.summary similarity index 100% rename from cts/scheduler/stopped-monitor-27.summary rename to cts/scheduler/summary/stopped-monitor-27.summary diff --git a/cts/scheduler/stopped-monitor-30.summary b/cts/scheduler/summary/stopped-monitor-30.summary similarity index 100% rename from cts/scheduler/stopped-monitor-30.summary rename to cts/scheduler/summary/stopped-monitor-30.summary diff --git a/cts/scheduler/stopped-monitor-31.summary b/cts/scheduler/summary/stopped-monitor-31.summary similarity index 100% rename from cts/scheduler/stopped-monitor-31.summary rename to cts/scheduler/summary/stopped-monitor-31.summary diff --git a/cts/scheduler/suicide-needed-inquorate.summary b/cts/scheduler/summary/suicide-needed-inquorate.summary similarity index 100% rename from cts/scheduler/suicide-needed-inquorate.summary rename to cts/scheduler/summary/suicide-needed-inquorate.summary diff --git a/cts/scheduler/suicide-not-needed-initial-quorum.summary b/cts/scheduler/summary/suicide-not-needed-initial-quorum.summary similarity index 100% rename from cts/scheduler/suicide-not-needed-initial-quorum.summary rename to cts/scheduler/summary/suicide-not-needed-initial-quorum.summary diff --git a/cts/scheduler/suicide-not-needed-never-quorate.summary b/cts/scheduler/summary/suicide-not-needed-never-quorate.summary similarity index 100% rename from cts/scheduler/suicide-not-needed-never-quorate.summary rename to cts/scheduler/summary/suicide-not-needed-never-quorate.summary diff --git a/cts/scheduler/suicide-not-needed-quorate.summary b/cts/scheduler/summary/suicide-not-needed-quorate.summary similarity index 100% rename from cts/scheduler/suicide-not-needed-quorate.summary rename to cts/scheduler/summary/suicide-not-needed-quorate.summary diff --git a/cts/scheduler/systemhealth1.summary b/cts/scheduler/summary/systemhealth1.summary similarity index 100% rename from cts/scheduler/systemhealth1.summary rename to cts/scheduler/summary/systemhealth1.summary diff --git a/cts/scheduler/systemhealth2.summary b/cts/scheduler/summary/systemhealth2.summary similarity index 100% rename from cts/scheduler/systemhealth2.summary rename to cts/scheduler/summary/systemhealth2.summary diff --git a/cts/scheduler/systemhealth3.summary b/cts/scheduler/summary/systemhealth3.summary similarity index 100% rename from cts/scheduler/systemhealth3.summary rename to cts/scheduler/summary/systemhealth3.summary diff --git a/cts/scheduler/systemhealthm1.summary b/cts/scheduler/summary/systemhealthm1.summary similarity index 100% rename from cts/scheduler/systemhealthm1.summary rename to cts/scheduler/summary/systemhealthm1.summary diff --git a/cts/scheduler/systemhealthm2.summary b/cts/scheduler/summary/systemhealthm2.summary similarity index 100% rename from cts/scheduler/systemhealthm2.summary rename to cts/scheduler/summary/systemhealthm2.summary diff --git a/cts/scheduler/systemhealthm3.summary b/cts/scheduler/summary/systemhealthm3.summary similarity index 100% rename from cts/scheduler/systemhealthm3.summary rename to cts/scheduler/summary/systemhealthm3.summary diff --git a/cts/scheduler/systemhealthn1.summary b/cts/scheduler/summary/systemhealthn1.summary similarity index 100% rename from cts/scheduler/systemhealthn1.summary rename to cts/scheduler/summary/systemhealthn1.summary diff --git a/cts/scheduler/systemhealthn2.summary b/cts/scheduler/summary/systemhealthn2.summary similarity index 100% rename from cts/scheduler/systemhealthn2.summary rename to cts/scheduler/summary/systemhealthn2.summary diff --git a/cts/scheduler/systemhealthn3.summary b/cts/scheduler/summary/systemhealthn3.summary similarity index 100% rename from cts/scheduler/systemhealthn3.summary rename to cts/scheduler/summary/systemhealthn3.summary diff --git a/cts/scheduler/systemhealtho1.summary b/cts/scheduler/summary/systemhealtho1.summary similarity index 100% rename from cts/scheduler/systemhealtho1.summary rename to cts/scheduler/summary/systemhealtho1.summary diff --git a/cts/scheduler/systemhealtho2.summary b/cts/scheduler/summary/systemhealtho2.summary similarity index 100% rename from cts/scheduler/systemhealtho2.summary rename to cts/scheduler/summary/systemhealtho2.summary diff --git a/cts/scheduler/systemhealtho3.summary b/cts/scheduler/summary/systemhealtho3.summary similarity index 100% rename from cts/scheduler/systemhealtho3.summary rename to cts/scheduler/summary/systemhealtho3.summary diff --git a/cts/scheduler/systemhealthp1.summary b/cts/scheduler/summary/systemhealthp1.summary similarity index 100% rename from cts/scheduler/systemhealthp1.summary rename to cts/scheduler/summary/systemhealthp1.summary diff --git a/cts/scheduler/systemhealthp2.summary b/cts/scheduler/summary/systemhealthp2.summary similarity index 100% rename from cts/scheduler/systemhealthp2.summary rename to cts/scheduler/summary/systemhealthp2.summary diff --git a/cts/scheduler/systemhealthp3.summary b/cts/scheduler/summary/systemhealthp3.summary similarity index 100% rename from cts/scheduler/systemhealthp3.summary rename to cts/scheduler/summary/systemhealthp3.summary diff --git a/cts/scheduler/tags-coloc-order-1.summary b/cts/scheduler/summary/tags-coloc-order-1.summary similarity index 100% rename from cts/scheduler/tags-coloc-order-1.summary rename to cts/scheduler/summary/tags-coloc-order-1.summary diff --git a/cts/scheduler/tags-coloc-order-2.summary b/cts/scheduler/summary/tags-coloc-order-2.summary similarity index 100% rename from cts/scheduler/tags-coloc-order-2.summary rename to cts/scheduler/summary/tags-coloc-order-2.summary diff --git a/cts/scheduler/tags-location.summary b/cts/scheduler/summary/tags-location.summary similarity index 100% rename from cts/scheduler/tags-location.summary rename to cts/scheduler/summary/tags-location.summary diff --git a/cts/scheduler/tags-ticket.summary b/cts/scheduler/summary/tags-ticket.summary similarity index 100% rename from cts/scheduler/tags-ticket.summary rename to cts/scheduler/summary/tags-ticket.summary diff --git a/cts/scheduler/target-0.summary b/cts/scheduler/summary/target-0.summary similarity index 100% rename from cts/scheduler/target-0.summary rename to cts/scheduler/summary/target-0.summary diff --git a/cts/scheduler/target-1.summary b/cts/scheduler/summary/target-1.summary similarity index 100% rename from cts/scheduler/target-1.summary rename to cts/scheduler/summary/target-1.summary diff --git a/cts/scheduler/target-2.summary b/cts/scheduler/summary/target-2.summary similarity index 100% rename from cts/scheduler/target-2.summary rename to cts/scheduler/summary/target-2.summary diff --git a/cts/scheduler/template-1.summary b/cts/scheduler/summary/template-1.summary similarity index 100% rename from cts/scheduler/template-1.summary rename to cts/scheduler/summary/template-1.summary diff --git a/cts/scheduler/template-2.summary b/cts/scheduler/summary/template-2.summary similarity index 100% rename from cts/scheduler/template-2.summary rename to cts/scheduler/summary/template-2.summary diff --git a/cts/scheduler/template-3.summary b/cts/scheduler/summary/template-3.summary similarity index 100% rename from cts/scheduler/template-3.summary rename to cts/scheduler/summary/template-3.summary diff --git a/cts/scheduler/template-clone-group.summary b/cts/scheduler/summary/template-clone-group.summary similarity index 100% rename from cts/scheduler/template-clone-group.summary rename to cts/scheduler/summary/template-clone-group.summary diff --git a/cts/scheduler/template-clone-primitive.summary b/cts/scheduler/summary/template-clone-primitive.summary similarity index 100% rename from cts/scheduler/template-clone-primitive.summary rename to cts/scheduler/summary/template-clone-primitive.summary diff --git a/cts/scheduler/template-coloc-1.summary b/cts/scheduler/summary/template-coloc-1.summary similarity index 100% rename from cts/scheduler/template-coloc-1.summary rename to cts/scheduler/summary/template-coloc-1.summary diff --git a/cts/scheduler/template-coloc-2.summary b/cts/scheduler/summary/template-coloc-2.summary similarity index 100% rename from cts/scheduler/template-coloc-2.summary rename to cts/scheduler/summary/template-coloc-2.summary diff --git a/cts/scheduler/template-coloc-3.summary b/cts/scheduler/summary/template-coloc-3.summary similarity index 100% rename from cts/scheduler/template-coloc-3.summary rename to cts/scheduler/summary/template-coloc-3.summary diff --git a/cts/scheduler/template-order-1.summary b/cts/scheduler/summary/template-order-1.summary similarity index 100% rename from cts/scheduler/template-order-1.summary rename to cts/scheduler/summary/template-order-1.summary diff --git a/cts/scheduler/template-order-2.summary b/cts/scheduler/summary/template-order-2.summary similarity index 100% rename from cts/scheduler/template-order-2.summary rename to cts/scheduler/summary/template-order-2.summary diff --git a/cts/scheduler/template-order-3.summary b/cts/scheduler/summary/template-order-3.summary similarity index 100% rename from cts/scheduler/template-order-3.summary rename to cts/scheduler/summary/template-order-3.summary diff --git a/cts/scheduler/template-rsc-sets-1.summary b/cts/scheduler/summary/template-rsc-sets-1.summary similarity index 100% rename from cts/scheduler/template-rsc-sets-1.summary rename to cts/scheduler/summary/template-rsc-sets-1.summary diff --git a/cts/scheduler/template-rsc-sets-2.summary b/cts/scheduler/summary/template-rsc-sets-2.summary similarity index 100% rename from cts/scheduler/template-rsc-sets-2.summary rename to cts/scheduler/summary/template-rsc-sets-2.summary diff --git a/cts/scheduler/template-rsc-sets-3.summary b/cts/scheduler/summary/template-rsc-sets-3.summary similarity index 100% rename from cts/scheduler/template-rsc-sets-3.summary rename to cts/scheduler/summary/template-rsc-sets-3.summary diff --git a/cts/scheduler/template-rsc-sets-4.summary b/cts/scheduler/summary/template-rsc-sets-4.summary similarity index 100% rename from cts/scheduler/template-rsc-sets-4.summary rename to cts/scheduler/summary/template-rsc-sets-4.summary diff --git a/cts/scheduler/template-ticket.summary b/cts/scheduler/summary/template-ticket.summary similarity index 100% rename from cts/scheduler/template-ticket.summary rename to cts/scheduler/summary/template-ticket.summary diff --git a/cts/scheduler/ticket-clone-1.summary b/cts/scheduler/summary/ticket-clone-1.summary similarity index 100% rename from cts/scheduler/ticket-clone-1.summary rename to cts/scheduler/summary/ticket-clone-1.summary diff --git a/cts/scheduler/ticket-clone-10.summary b/cts/scheduler/summary/ticket-clone-10.summary similarity index 100% rename from cts/scheduler/ticket-clone-10.summary rename to cts/scheduler/summary/ticket-clone-10.summary diff --git a/cts/scheduler/ticket-clone-11.summary b/cts/scheduler/summary/ticket-clone-11.summary similarity index 100% rename from cts/scheduler/ticket-clone-11.summary rename to cts/scheduler/summary/ticket-clone-11.summary diff --git a/cts/scheduler/ticket-clone-12.summary b/cts/scheduler/summary/ticket-clone-12.summary similarity index 100% rename from cts/scheduler/ticket-clone-12.summary rename to cts/scheduler/summary/ticket-clone-12.summary diff --git a/cts/scheduler/ticket-clone-13.summary b/cts/scheduler/summary/ticket-clone-13.summary similarity index 100% rename from cts/scheduler/ticket-clone-13.summary rename to cts/scheduler/summary/ticket-clone-13.summary diff --git a/cts/scheduler/ticket-clone-14.summary b/cts/scheduler/summary/ticket-clone-14.summary similarity index 100% rename from cts/scheduler/ticket-clone-14.summary rename to cts/scheduler/summary/ticket-clone-14.summary diff --git a/cts/scheduler/ticket-clone-15.summary b/cts/scheduler/summary/ticket-clone-15.summary similarity index 100% rename from cts/scheduler/ticket-clone-15.summary rename to cts/scheduler/summary/ticket-clone-15.summary diff --git a/cts/scheduler/ticket-clone-16.summary b/cts/scheduler/summary/ticket-clone-16.summary similarity index 100% rename from cts/scheduler/ticket-clone-16.summary rename to cts/scheduler/summary/ticket-clone-16.summary diff --git a/cts/scheduler/ticket-clone-17.summary b/cts/scheduler/summary/ticket-clone-17.summary similarity index 100% rename from cts/scheduler/ticket-clone-17.summary rename to cts/scheduler/summary/ticket-clone-17.summary diff --git a/cts/scheduler/ticket-clone-18.summary b/cts/scheduler/summary/ticket-clone-18.summary similarity index 100% rename from cts/scheduler/ticket-clone-18.summary rename to cts/scheduler/summary/ticket-clone-18.summary diff --git a/cts/scheduler/ticket-clone-19.summary b/cts/scheduler/summary/ticket-clone-19.summary similarity index 100% rename from cts/scheduler/ticket-clone-19.summary rename to cts/scheduler/summary/ticket-clone-19.summary diff --git a/cts/scheduler/ticket-clone-2.summary b/cts/scheduler/summary/ticket-clone-2.summary similarity index 100% rename from cts/scheduler/ticket-clone-2.summary rename to cts/scheduler/summary/ticket-clone-2.summary diff --git a/cts/scheduler/ticket-clone-20.summary b/cts/scheduler/summary/ticket-clone-20.summary similarity index 100% rename from cts/scheduler/ticket-clone-20.summary rename to cts/scheduler/summary/ticket-clone-20.summary diff --git a/cts/scheduler/ticket-clone-21.summary b/cts/scheduler/summary/ticket-clone-21.summary similarity index 100% rename from cts/scheduler/ticket-clone-21.summary rename to cts/scheduler/summary/ticket-clone-21.summary diff --git a/cts/scheduler/ticket-clone-22.summary b/cts/scheduler/summary/ticket-clone-22.summary similarity index 100% rename from cts/scheduler/ticket-clone-22.summary rename to cts/scheduler/summary/ticket-clone-22.summary diff --git a/cts/scheduler/ticket-clone-23.summary b/cts/scheduler/summary/ticket-clone-23.summary similarity index 100% rename from cts/scheduler/ticket-clone-23.summary rename to cts/scheduler/summary/ticket-clone-23.summary diff --git a/cts/scheduler/ticket-clone-24.summary b/cts/scheduler/summary/ticket-clone-24.summary similarity index 100% rename from cts/scheduler/ticket-clone-24.summary rename to cts/scheduler/summary/ticket-clone-24.summary diff --git a/cts/scheduler/ticket-clone-3.summary b/cts/scheduler/summary/ticket-clone-3.summary similarity index 100% rename from cts/scheduler/ticket-clone-3.summary rename to cts/scheduler/summary/ticket-clone-3.summary diff --git a/cts/scheduler/ticket-clone-4.summary b/cts/scheduler/summary/ticket-clone-4.summary similarity index 100% rename from cts/scheduler/ticket-clone-4.summary rename to cts/scheduler/summary/ticket-clone-4.summary diff --git a/cts/scheduler/ticket-clone-5.summary b/cts/scheduler/summary/ticket-clone-5.summary similarity index 100% rename from cts/scheduler/ticket-clone-5.summary rename to cts/scheduler/summary/ticket-clone-5.summary diff --git a/cts/scheduler/ticket-clone-6.summary b/cts/scheduler/summary/ticket-clone-6.summary similarity index 100% rename from cts/scheduler/ticket-clone-6.summary rename to cts/scheduler/summary/ticket-clone-6.summary diff --git a/cts/scheduler/ticket-clone-7.summary b/cts/scheduler/summary/ticket-clone-7.summary similarity index 100% rename from cts/scheduler/ticket-clone-7.summary rename to cts/scheduler/summary/ticket-clone-7.summary diff --git a/cts/scheduler/ticket-clone-8.summary b/cts/scheduler/summary/ticket-clone-8.summary similarity index 100% rename from cts/scheduler/ticket-clone-8.summary rename to cts/scheduler/summary/ticket-clone-8.summary diff --git a/cts/scheduler/ticket-clone-9.summary b/cts/scheduler/summary/ticket-clone-9.summary similarity index 100% rename from cts/scheduler/ticket-clone-9.summary rename to cts/scheduler/summary/ticket-clone-9.summary diff --git a/cts/scheduler/ticket-group-1.summary b/cts/scheduler/summary/ticket-group-1.summary similarity index 100% rename from cts/scheduler/ticket-group-1.summary rename to cts/scheduler/summary/ticket-group-1.summary diff --git a/cts/scheduler/ticket-group-10.summary b/cts/scheduler/summary/ticket-group-10.summary similarity index 100% rename from cts/scheduler/ticket-group-10.summary rename to cts/scheduler/summary/ticket-group-10.summary diff --git a/cts/scheduler/ticket-group-11.summary b/cts/scheduler/summary/ticket-group-11.summary similarity index 100% rename from cts/scheduler/ticket-group-11.summary rename to cts/scheduler/summary/ticket-group-11.summary diff --git a/cts/scheduler/ticket-group-12.summary b/cts/scheduler/summary/ticket-group-12.summary similarity index 100% rename from cts/scheduler/ticket-group-12.summary rename to cts/scheduler/summary/ticket-group-12.summary diff --git a/cts/scheduler/ticket-group-13.summary b/cts/scheduler/summary/ticket-group-13.summary similarity index 100% rename from cts/scheduler/ticket-group-13.summary rename to cts/scheduler/summary/ticket-group-13.summary diff --git a/cts/scheduler/ticket-group-14.summary b/cts/scheduler/summary/ticket-group-14.summary similarity index 100% rename from cts/scheduler/ticket-group-14.summary rename to cts/scheduler/summary/ticket-group-14.summary diff --git a/cts/scheduler/ticket-group-15.summary b/cts/scheduler/summary/ticket-group-15.summary similarity index 100% rename from cts/scheduler/ticket-group-15.summary rename to cts/scheduler/summary/ticket-group-15.summary diff --git a/cts/scheduler/ticket-group-16.summary b/cts/scheduler/summary/ticket-group-16.summary similarity index 100% rename from cts/scheduler/ticket-group-16.summary rename to cts/scheduler/summary/ticket-group-16.summary diff --git a/cts/scheduler/ticket-group-17.summary b/cts/scheduler/summary/ticket-group-17.summary similarity index 100% rename from cts/scheduler/ticket-group-17.summary rename to cts/scheduler/summary/ticket-group-17.summary diff --git a/cts/scheduler/ticket-group-18.summary b/cts/scheduler/summary/ticket-group-18.summary similarity index 100% rename from cts/scheduler/ticket-group-18.summary rename to cts/scheduler/summary/ticket-group-18.summary diff --git a/cts/scheduler/ticket-group-19.summary b/cts/scheduler/summary/ticket-group-19.summary similarity index 100% rename from cts/scheduler/ticket-group-19.summary rename to cts/scheduler/summary/ticket-group-19.summary diff --git a/cts/scheduler/ticket-group-2.summary b/cts/scheduler/summary/ticket-group-2.summary similarity index 100% rename from cts/scheduler/ticket-group-2.summary rename to cts/scheduler/summary/ticket-group-2.summary diff --git a/cts/scheduler/ticket-group-20.summary b/cts/scheduler/summary/ticket-group-20.summary similarity index 100% rename from cts/scheduler/ticket-group-20.summary rename to cts/scheduler/summary/ticket-group-20.summary diff --git a/cts/scheduler/ticket-group-21.summary b/cts/scheduler/summary/ticket-group-21.summary similarity index 100% rename from cts/scheduler/ticket-group-21.summary rename to cts/scheduler/summary/ticket-group-21.summary diff --git a/cts/scheduler/ticket-group-22.summary b/cts/scheduler/summary/ticket-group-22.summary similarity index 100% rename from cts/scheduler/ticket-group-22.summary rename to cts/scheduler/summary/ticket-group-22.summary diff --git a/cts/scheduler/ticket-group-23.summary b/cts/scheduler/summary/ticket-group-23.summary similarity index 100% rename from cts/scheduler/ticket-group-23.summary rename to cts/scheduler/summary/ticket-group-23.summary diff --git a/cts/scheduler/ticket-group-24.summary b/cts/scheduler/summary/ticket-group-24.summary similarity index 100% rename from cts/scheduler/ticket-group-24.summary rename to cts/scheduler/summary/ticket-group-24.summary diff --git a/cts/scheduler/ticket-group-3.summary b/cts/scheduler/summary/ticket-group-3.summary similarity index 100% rename from cts/scheduler/ticket-group-3.summary rename to cts/scheduler/summary/ticket-group-3.summary diff --git a/cts/scheduler/ticket-group-4.summary b/cts/scheduler/summary/ticket-group-4.summary similarity index 100% rename from cts/scheduler/ticket-group-4.summary rename to cts/scheduler/summary/ticket-group-4.summary diff --git a/cts/scheduler/ticket-group-5.summary b/cts/scheduler/summary/ticket-group-5.summary similarity index 100% rename from cts/scheduler/ticket-group-5.summary rename to cts/scheduler/summary/ticket-group-5.summary diff --git a/cts/scheduler/ticket-group-6.summary b/cts/scheduler/summary/ticket-group-6.summary similarity index 100% rename from cts/scheduler/ticket-group-6.summary rename to cts/scheduler/summary/ticket-group-6.summary diff --git a/cts/scheduler/ticket-group-7.summary b/cts/scheduler/summary/ticket-group-7.summary similarity index 100% rename from cts/scheduler/ticket-group-7.summary rename to cts/scheduler/summary/ticket-group-7.summary diff --git a/cts/scheduler/ticket-group-8.summary b/cts/scheduler/summary/ticket-group-8.summary similarity index 100% rename from cts/scheduler/ticket-group-8.summary rename to cts/scheduler/summary/ticket-group-8.summary diff --git a/cts/scheduler/ticket-group-9.summary b/cts/scheduler/summary/ticket-group-9.summary similarity index 100% rename from cts/scheduler/ticket-group-9.summary rename to cts/scheduler/summary/ticket-group-9.summary diff --git a/cts/scheduler/ticket-master-1.summary b/cts/scheduler/summary/ticket-master-1.summary similarity index 100% rename from cts/scheduler/ticket-master-1.summary rename to cts/scheduler/summary/ticket-master-1.summary diff --git a/cts/scheduler/ticket-master-10.summary b/cts/scheduler/summary/ticket-master-10.summary similarity index 100% rename from cts/scheduler/ticket-master-10.summary rename to cts/scheduler/summary/ticket-master-10.summary diff --git a/cts/scheduler/ticket-master-11.summary b/cts/scheduler/summary/ticket-master-11.summary similarity index 100% rename from cts/scheduler/ticket-master-11.summary rename to cts/scheduler/summary/ticket-master-11.summary diff --git a/cts/scheduler/ticket-master-12.summary b/cts/scheduler/summary/ticket-master-12.summary similarity index 100% rename from cts/scheduler/ticket-master-12.summary rename to cts/scheduler/summary/ticket-master-12.summary diff --git a/cts/scheduler/ticket-master-13.summary b/cts/scheduler/summary/ticket-master-13.summary similarity index 100% rename from cts/scheduler/ticket-master-13.summary rename to cts/scheduler/summary/ticket-master-13.summary diff --git a/cts/scheduler/ticket-master-14.summary b/cts/scheduler/summary/ticket-master-14.summary similarity index 100% rename from cts/scheduler/ticket-master-14.summary rename to cts/scheduler/summary/ticket-master-14.summary diff --git a/cts/scheduler/ticket-master-15.summary b/cts/scheduler/summary/ticket-master-15.summary similarity index 100% rename from cts/scheduler/ticket-master-15.summary rename to cts/scheduler/summary/ticket-master-15.summary diff --git a/cts/scheduler/ticket-master-16.summary b/cts/scheduler/summary/ticket-master-16.summary similarity index 100% rename from cts/scheduler/ticket-master-16.summary rename to cts/scheduler/summary/ticket-master-16.summary diff --git a/cts/scheduler/ticket-master-17.summary b/cts/scheduler/summary/ticket-master-17.summary similarity index 100% rename from cts/scheduler/ticket-master-17.summary rename to cts/scheduler/summary/ticket-master-17.summary diff --git a/cts/scheduler/ticket-master-18.summary b/cts/scheduler/summary/ticket-master-18.summary similarity index 100% rename from cts/scheduler/ticket-master-18.summary rename to cts/scheduler/summary/ticket-master-18.summary diff --git a/cts/scheduler/ticket-master-19.summary b/cts/scheduler/summary/ticket-master-19.summary similarity index 100% rename from cts/scheduler/ticket-master-19.summary rename to cts/scheduler/summary/ticket-master-19.summary diff --git a/cts/scheduler/ticket-master-2.summary b/cts/scheduler/summary/ticket-master-2.summary similarity index 100% rename from cts/scheduler/ticket-master-2.summary rename to cts/scheduler/summary/ticket-master-2.summary diff --git a/cts/scheduler/ticket-master-20.summary b/cts/scheduler/summary/ticket-master-20.summary similarity index 100% rename from cts/scheduler/ticket-master-20.summary rename to cts/scheduler/summary/ticket-master-20.summary diff --git a/cts/scheduler/ticket-master-21.summary b/cts/scheduler/summary/ticket-master-21.summary similarity index 100% rename from cts/scheduler/ticket-master-21.summary rename to cts/scheduler/summary/ticket-master-21.summary diff --git a/cts/scheduler/ticket-master-22.summary b/cts/scheduler/summary/ticket-master-22.summary similarity index 100% rename from cts/scheduler/ticket-master-22.summary rename to cts/scheduler/summary/ticket-master-22.summary diff --git a/cts/scheduler/ticket-master-23.summary b/cts/scheduler/summary/ticket-master-23.summary similarity index 100% rename from cts/scheduler/ticket-master-23.summary rename to cts/scheduler/summary/ticket-master-23.summary diff --git a/cts/scheduler/ticket-master-24.summary b/cts/scheduler/summary/ticket-master-24.summary similarity index 100% rename from cts/scheduler/ticket-master-24.summary rename to cts/scheduler/summary/ticket-master-24.summary diff --git a/cts/scheduler/ticket-master-3.summary b/cts/scheduler/summary/ticket-master-3.summary similarity index 100% rename from cts/scheduler/ticket-master-3.summary rename to cts/scheduler/summary/ticket-master-3.summary diff --git a/cts/scheduler/ticket-master-4.summary b/cts/scheduler/summary/ticket-master-4.summary similarity index 100% rename from cts/scheduler/ticket-master-4.summary rename to cts/scheduler/summary/ticket-master-4.summary diff --git a/cts/scheduler/ticket-master-5.summary b/cts/scheduler/summary/ticket-master-5.summary similarity index 100% rename from cts/scheduler/ticket-master-5.summary rename to cts/scheduler/summary/ticket-master-5.summary diff --git a/cts/scheduler/ticket-master-6.summary b/cts/scheduler/summary/ticket-master-6.summary similarity index 100% rename from cts/scheduler/ticket-master-6.summary rename to cts/scheduler/summary/ticket-master-6.summary diff --git a/cts/scheduler/ticket-master-7.summary b/cts/scheduler/summary/ticket-master-7.summary similarity index 100% rename from cts/scheduler/ticket-master-7.summary rename to cts/scheduler/summary/ticket-master-7.summary diff --git a/cts/scheduler/ticket-master-8.summary b/cts/scheduler/summary/ticket-master-8.summary similarity index 100% rename from cts/scheduler/ticket-master-8.summary rename to cts/scheduler/summary/ticket-master-8.summary diff --git a/cts/scheduler/ticket-master-9.summary b/cts/scheduler/summary/ticket-master-9.summary similarity index 100% rename from cts/scheduler/ticket-master-9.summary rename to cts/scheduler/summary/ticket-master-9.summary diff --git a/cts/scheduler/ticket-primitive-1.summary b/cts/scheduler/summary/ticket-primitive-1.summary similarity index 100% rename from cts/scheduler/ticket-primitive-1.summary rename to cts/scheduler/summary/ticket-primitive-1.summary diff --git a/cts/scheduler/ticket-primitive-10.summary b/cts/scheduler/summary/ticket-primitive-10.summary similarity index 100% rename from cts/scheduler/ticket-primitive-10.summary rename to cts/scheduler/summary/ticket-primitive-10.summary diff --git a/cts/scheduler/ticket-primitive-11.summary b/cts/scheduler/summary/ticket-primitive-11.summary similarity index 100% rename from cts/scheduler/ticket-primitive-11.summary rename to cts/scheduler/summary/ticket-primitive-11.summary diff --git a/cts/scheduler/ticket-primitive-12.summary b/cts/scheduler/summary/ticket-primitive-12.summary similarity index 100% rename from cts/scheduler/ticket-primitive-12.summary rename to cts/scheduler/summary/ticket-primitive-12.summary diff --git a/cts/scheduler/ticket-primitive-13.summary b/cts/scheduler/summary/ticket-primitive-13.summary similarity index 100% rename from cts/scheduler/ticket-primitive-13.summary rename to cts/scheduler/summary/ticket-primitive-13.summary diff --git a/cts/scheduler/ticket-primitive-14.summary b/cts/scheduler/summary/ticket-primitive-14.summary similarity index 100% rename from cts/scheduler/ticket-primitive-14.summary rename to cts/scheduler/summary/ticket-primitive-14.summary diff --git a/cts/scheduler/ticket-primitive-15.summary b/cts/scheduler/summary/ticket-primitive-15.summary similarity index 100% rename from cts/scheduler/ticket-primitive-15.summary rename to cts/scheduler/summary/ticket-primitive-15.summary diff --git a/cts/scheduler/ticket-primitive-16.summary b/cts/scheduler/summary/ticket-primitive-16.summary similarity index 100% rename from cts/scheduler/ticket-primitive-16.summary rename to cts/scheduler/summary/ticket-primitive-16.summary diff --git a/cts/scheduler/ticket-primitive-17.summary b/cts/scheduler/summary/ticket-primitive-17.summary similarity index 100% rename from cts/scheduler/ticket-primitive-17.summary rename to cts/scheduler/summary/ticket-primitive-17.summary diff --git a/cts/scheduler/ticket-primitive-18.summary b/cts/scheduler/summary/ticket-primitive-18.summary similarity index 100% rename from cts/scheduler/ticket-primitive-18.summary rename to cts/scheduler/summary/ticket-primitive-18.summary diff --git a/cts/scheduler/ticket-primitive-19.summary b/cts/scheduler/summary/ticket-primitive-19.summary similarity index 100% rename from cts/scheduler/ticket-primitive-19.summary rename to cts/scheduler/summary/ticket-primitive-19.summary diff --git a/cts/scheduler/ticket-primitive-2.summary b/cts/scheduler/summary/ticket-primitive-2.summary similarity index 100% rename from cts/scheduler/ticket-primitive-2.summary rename to cts/scheduler/summary/ticket-primitive-2.summary diff --git a/cts/scheduler/ticket-primitive-20.summary b/cts/scheduler/summary/ticket-primitive-20.summary similarity index 100% rename from cts/scheduler/ticket-primitive-20.summary rename to cts/scheduler/summary/ticket-primitive-20.summary diff --git a/cts/scheduler/ticket-primitive-21.summary b/cts/scheduler/summary/ticket-primitive-21.summary similarity index 100% rename from cts/scheduler/ticket-primitive-21.summary rename to cts/scheduler/summary/ticket-primitive-21.summary diff --git a/cts/scheduler/ticket-primitive-22.summary b/cts/scheduler/summary/ticket-primitive-22.summary similarity index 100% rename from cts/scheduler/ticket-primitive-22.summary rename to cts/scheduler/summary/ticket-primitive-22.summary diff --git a/cts/scheduler/ticket-primitive-23.summary b/cts/scheduler/summary/ticket-primitive-23.summary similarity index 100% rename from cts/scheduler/ticket-primitive-23.summary rename to cts/scheduler/summary/ticket-primitive-23.summary diff --git a/cts/scheduler/ticket-primitive-24.summary b/cts/scheduler/summary/ticket-primitive-24.summary similarity index 100% rename from cts/scheduler/ticket-primitive-24.summary rename to cts/scheduler/summary/ticket-primitive-24.summary diff --git a/cts/scheduler/ticket-primitive-3.summary b/cts/scheduler/summary/ticket-primitive-3.summary similarity index 100% rename from cts/scheduler/ticket-primitive-3.summary rename to cts/scheduler/summary/ticket-primitive-3.summary diff --git a/cts/scheduler/ticket-primitive-4.summary b/cts/scheduler/summary/ticket-primitive-4.summary similarity index 100% rename from cts/scheduler/ticket-primitive-4.summary rename to cts/scheduler/summary/ticket-primitive-4.summary diff --git a/cts/scheduler/ticket-primitive-5.summary b/cts/scheduler/summary/ticket-primitive-5.summary similarity index 100% rename from cts/scheduler/ticket-primitive-5.summary rename to cts/scheduler/summary/ticket-primitive-5.summary diff --git a/cts/scheduler/ticket-primitive-6.summary b/cts/scheduler/summary/ticket-primitive-6.summary similarity index 100% rename from cts/scheduler/ticket-primitive-6.summary rename to cts/scheduler/summary/ticket-primitive-6.summary diff --git a/cts/scheduler/ticket-primitive-7.summary b/cts/scheduler/summary/ticket-primitive-7.summary similarity index 100% rename from cts/scheduler/ticket-primitive-7.summary rename to cts/scheduler/summary/ticket-primitive-7.summary diff --git a/cts/scheduler/ticket-primitive-8.summary b/cts/scheduler/summary/ticket-primitive-8.summary similarity index 100% rename from cts/scheduler/ticket-primitive-8.summary rename to cts/scheduler/summary/ticket-primitive-8.summary diff --git a/cts/scheduler/ticket-primitive-9.summary b/cts/scheduler/summary/ticket-primitive-9.summary similarity index 100% rename from cts/scheduler/ticket-primitive-9.summary rename to cts/scheduler/summary/ticket-primitive-9.summary diff --git a/cts/scheduler/ticket-rsc-sets-1.summary b/cts/scheduler/summary/ticket-rsc-sets-1.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-1.summary rename to cts/scheduler/summary/ticket-rsc-sets-1.summary diff --git a/cts/scheduler/ticket-rsc-sets-10.summary b/cts/scheduler/summary/ticket-rsc-sets-10.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-10.summary rename to cts/scheduler/summary/ticket-rsc-sets-10.summary diff --git a/cts/scheduler/ticket-rsc-sets-11.summary b/cts/scheduler/summary/ticket-rsc-sets-11.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-11.summary rename to cts/scheduler/summary/ticket-rsc-sets-11.summary diff --git a/cts/scheduler/ticket-rsc-sets-12.summary b/cts/scheduler/summary/ticket-rsc-sets-12.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-12.summary rename to cts/scheduler/summary/ticket-rsc-sets-12.summary diff --git a/cts/scheduler/ticket-rsc-sets-13.summary b/cts/scheduler/summary/ticket-rsc-sets-13.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-13.summary rename to cts/scheduler/summary/ticket-rsc-sets-13.summary diff --git a/cts/scheduler/ticket-rsc-sets-14.summary b/cts/scheduler/summary/ticket-rsc-sets-14.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-14.summary rename to cts/scheduler/summary/ticket-rsc-sets-14.summary diff --git a/cts/scheduler/ticket-rsc-sets-2.summary b/cts/scheduler/summary/ticket-rsc-sets-2.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-2.summary rename to cts/scheduler/summary/ticket-rsc-sets-2.summary diff --git a/cts/scheduler/ticket-rsc-sets-3.summary b/cts/scheduler/summary/ticket-rsc-sets-3.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-3.summary rename to cts/scheduler/summary/ticket-rsc-sets-3.summary diff --git a/cts/scheduler/ticket-rsc-sets-4.summary b/cts/scheduler/summary/ticket-rsc-sets-4.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-4.summary rename to cts/scheduler/summary/ticket-rsc-sets-4.summary diff --git a/cts/scheduler/ticket-rsc-sets-5.summary b/cts/scheduler/summary/ticket-rsc-sets-5.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-5.summary rename to cts/scheduler/summary/ticket-rsc-sets-5.summary diff --git a/cts/scheduler/ticket-rsc-sets-6.summary b/cts/scheduler/summary/ticket-rsc-sets-6.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-6.summary rename to cts/scheduler/summary/ticket-rsc-sets-6.summary diff --git a/cts/scheduler/ticket-rsc-sets-7.summary b/cts/scheduler/summary/ticket-rsc-sets-7.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-7.summary rename to cts/scheduler/summary/ticket-rsc-sets-7.summary diff --git a/cts/scheduler/ticket-rsc-sets-8.summary b/cts/scheduler/summary/ticket-rsc-sets-8.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-8.summary rename to cts/scheduler/summary/ticket-rsc-sets-8.summary diff --git a/cts/scheduler/ticket-rsc-sets-9.summary b/cts/scheduler/summary/ticket-rsc-sets-9.summary similarity index 100% rename from cts/scheduler/ticket-rsc-sets-9.summary rename to cts/scheduler/summary/ticket-rsc-sets-9.summary diff --git a/cts/scheduler/unfence-definition.summary b/cts/scheduler/summary/unfence-definition.summary similarity index 100% rename from cts/scheduler/unfence-definition.summary rename to cts/scheduler/summary/unfence-definition.summary diff --git a/cts/scheduler/unfence-device.summary b/cts/scheduler/summary/unfence-device.summary similarity index 100% rename from cts/scheduler/unfence-device.summary rename to cts/scheduler/summary/unfence-device.summary diff --git a/cts/scheduler/unfence-parameters.summary b/cts/scheduler/summary/unfence-parameters.summary similarity index 100% rename from cts/scheduler/unfence-parameters.summary rename to cts/scheduler/summary/unfence-parameters.summary diff --git a/cts/scheduler/unfence-startup.summary b/cts/scheduler/summary/unfence-startup.summary similarity index 100% rename from cts/scheduler/unfence-startup.summary rename to cts/scheduler/summary/unfence-startup.summary diff --git a/cts/scheduler/unmanaged-block-restart.summary b/cts/scheduler/summary/unmanaged-block-restart.summary similarity index 100% rename from cts/scheduler/unmanaged-block-restart.summary rename to cts/scheduler/summary/unmanaged-block-restart.summary diff --git a/cts/scheduler/unmanaged-master.summary b/cts/scheduler/summary/unmanaged-master.summary similarity index 100% rename from cts/scheduler/unmanaged-master.summary rename to cts/scheduler/summary/unmanaged-master.summary diff --git a/cts/scheduler/unmanaged-stop-1.summary b/cts/scheduler/summary/unmanaged-stop-1.summary similarity index 100% rename from cts/scheduler/unmanaged-stop-1.summary rename to cts/scheduler/summary/unmanaged-stop-1.summary diff --git a/cts/scheduler/unmanaged-stop-2.summary b/cts/scheduler/summary/unmanaged-stop-2.summary similarity index 100% rename from cts/scheduler/unmanaged-stop-2.summary rename to cts/scheduler/summary/unmanaged-stop-2.summary diff --git a/cts/scheduler/unmanaged-stop-3.summary b/cts/scheduler/summary/unmanaged-stop-3.summary similarity index 100% rename from cts/scheduler/unmanaged-stop-3.summary rename to cts/scheduler/summary/unmanaged-stop-3.summary diff --git a/cts/scheduler/unmanaged-stop-4.summary b/cts/scheduler/summary/unmanaged-stop-4.summary similarity index 100% rename from cts/scheduler/unmanaged-stop-4.summary rename to cts/scheduler/summary/unmanaged-stop-4.summary diff --git a/cts/scheduler/unrunnable-1.summary b/cts/scheduler/summary/unrunnable-1.summary similarity index 100% rename from cts/scheduler/unrunnable-1.summary rename to cts/scheduler/summary/unrunnable-1.summary diff --git a/cts/scheduler/unrunnable-2.summary b/cts/scheduler/summary/unrunnable-2.summary similarity index 100% rename from cts/scheduler/unrunnable-2.summary rename to cts/scheduler/summary/unrunnable-2.summary diff --git a/cts/scheduler/use-after-free-merge.summary b/cts/scheduler/summary/use-after-free-merge.summary similarity index 100% rename from cts/scheduler/use-after-free-merge.summary rename to cts/scheduler/summary/use-after-free-merge.summary diff --git a/cts/scheduler/utilization-check-allowed-nodes.summary b/cts/scheduler/summary/utilization-check-allowed-nodes.summary similarity index 100% rename from cts/scheduler/utilization-check-allowed-nodes.summary rename to cts/scheduler/summary/utilization-check-allowed-nodes.summary diff --git a/cts/scheduler/utilization-order1.summary b/cts/scheduler/summary/utilization-order1.summary similarity index 100% rename from cts/scheduler/utilization-order1.summary rename to cts/scheduler/summary/utilization-order1.summary diff --git a/cts/scheduler/utilization-order2.summary b/cts/scheduler/summary/utilization-order2.summary similarity index 100% rename from cts/scheduler/utilization-order2.summary rename to cts/scheduler/summary/utilization-order2.summary diff --git a/cts/scheduler/utilization-order3.summary b/cts/scheduler/summary/utilization-order3.summary similarity index 100% rename from cts/scheduler/utilization-order3.summary rename to cts/scheduler/summary/utilization-order3.summary diff --git a/cts/scheduler/utilization-order4.summary b/cts/scheduler/summary/utilization-order4.summary similarity index 100% rename from cts/scheduler/utilization-order4.summary rename to cts/scheduler/summary/utilization-order4.summary diff --git a/cts/scheduler/utilization-shuffle.summary b/cts/scheduler/summary/utilization-shuffle.summary similarity index 100% rename from cts/scheduler/utilization-shuffle.summary rename to cts/scheduler/summary/utilization-shuffle.summary diff --git a/cts/scheduler/utilization.summary b/cts/scheduler/summary/utilization.summary similarity index 100% rename from cts/scheduler/utilization.summary rename to cts/scheduler/summary/utilization.summary diff --git a/cts/scheduler/value-source.summary b/cts/scheduler/summary/value-source.summary similarity index 100% rename from cts/scheduler/value-source.summary rename to cts/scheduler/summary/value-source.summary diff --git a/cts/scheduler/versioned-operations-1.summary b/cts/scheduler/summary/versioned-operations-1.summary similarity index 100% rename from cts/scheduler/versioned-operations-1.summary rename to cts/scheduler/summary/versioned-operations-1.summary diff --git a/cts/scheduler/versioned-operations-2.summary b/cts/scheduler/summary/versioned-operations-2.summary similarity index 100% rename from cts/scheduler/versioned-operations-2.summary rename to cts/scheduler/summary/versioned-operations-2.summary diff --git a/cts/scheduler/versioned-operations-3.summary b/cts/scheduler/summary/versioned-operations-3.summary similarity index 100% rename from cts/scheduler/versioned-operations-3.summary rename to cts/scheduler/summary/versioned-operations-3.summary diff --git a/cts/scheduler/versioned-operations-4.summary b/cts/scheduler/summary/versioned-operations-4.summary similarity index 100% rename from cts/scheduler/versioned-operations-4.summary rename to cts/scheduler/summary/versioned-operations-4.summary diff --git a/cts/scheduler/versioned-resources.summary b/cts/scheduler/summary/versioned-resources.summary similarity index 100% rename from cts/scheduler/versioned-resources.summary rename to cts/scheduler/summary/versioned-resources.summary diff --git a/cts/scheduler/whitebox-asymmetric.summary b/cts/scheduler/summary/whitebox-asymmetric.summary similarity index 100% rename from cts/scheduler/whitebox-asymmetric.summary rename to cts/scheduler/summary/whitebox-asymmetric.summary diff --git a/cts/scheduler/whitebox-fail1.summary b/cts/scheduler/summary/whitebox-fail1.summary similarity index 100% rename from cts/scheduler/whitebox-fail1.summary rename to cts/scheduler/summary/whitebox-fail1.summary diff --git a/cts/scheduler/whitebox-fail2.summary b/cts/scheduler/summary/whitebox-fail2.summary similarity index 100% rename from cts/scheduler/whitebox-fail2.summary rename to cts/scheduler/summary/whitebox-fail2.summary diff --git a/cts/scheduler/whitebox-fail3.summary b/cts/scheduler/summary/whitebox-fail3.summary similarity index 100% rename from cts/scheduler/whitebox-fail3.summary rename to cts/scheduler/summary/whitebox-fail3.summary diff --git a/cts/scheduler/whitebox-imply-stop-on-fence.summary b/cts/scheduler/summary/whitebox-imply-stop-on-fence.summary similarity index 100% rename from cts/scheduler/whitebox-imply-stop-on-fence.summary rename to cts/scheduler/summary/whitebox-imply-stop-on-fence.summary diff --git a/cts/scheduler/whitebox-migrate1.summary b/cts/scheduler/summary/whitebox-migrate1.summary similarity index 100% rename from cts/scheduler/whitebox-migrate1.summary rename to cts/scheduler/summary/whitebox-migrate1.summary diff --git a/cts/scheduler/whitebox-move.summary b/cts/scheduler/summary/whitebox-move.summary similarity index 100% rename from cts/scheduler/whitebox-move.summary rename to cts/scheduler/summary/whitebox-move.summary diff --git a/cts/scheduler/whitebox-ms-ordering-move.summary b/cts/scheduler/summary/whitebox-ms-ordering-move.summary similarity index 100% rename from cts/scheduler/whitebox-ms-ordering-move.summary rename to cts/scheduler/summary/whitebox-ms-ordering-move.summary diff --git a/cts/scheduler/whitebox-ms-ordering.summary b/cts/scheduler/summary/whitebox-ms-ordering.summary similarity index 100% rename from cts/scheduler/whitebox-ms-ordering.summary rename to cts/scheduler/summary/whitebox-ms-ordering.summary diff --git a/cts/scheduler/whitebox-nested-group.summary b/cts/scheduler/summary/whitebox-nested-group.summary similarity index 100% rename from cts/scheduler/whitebox-nested-group.summary rename to cts/scheduler/summary/whitebox-nested-group.summary diff --git a/cts/scheduler/whitebox-orphan-ms.summary b/cts/scheduler/summary/whitebox-orphan-ms.summary similarity index 100% rename from cts/scheduler/whitebox-orphan-ms.summary rename to cts/scheduler/summary/whitebox-orphan-ms.summary diff --git a/cts/scheduler/whitebox-orphaned.summary b/cts/scheduler/summary/whitebox-orphaned.summary similarity index 100% rename from cts/scheduler/whitebox-orphaned.summary rename to cts/scheduler/summary/whitebox-orphaned.summary diff --git a/cts/scheduler/whitebox-start.summary b/cts/scheduler/summary/whitebox-start.summary similarity index 100% rename from cts/scheduler/whitebox-start.summary rename to cts/scheduler/summary/whitebox-start.summary diff --git a/cts/scheduler/whitebox-stop.summary b/cts/scheduler/summary/whitebox-stop.summary similarity index 100% rename from cts/scheduler/whitebox-stop.summary rename to cts/scheduler/summary/whitebox-stop.summary diff --git a/cts/scheduler/whitebox-unexpectedly-running.summary b/cts/scheduler/summary/whitebox-unexpectedly-running.summary similarity index 100% rename from cts/scheduler/whitebox-unexpectedly-running.summary rename to cts/scheduler/summary/whitebox-unexpectedly-running.summary diff --git a/cts/scheduler/year-2038.summary b/cts/scheduler/summary/year-2038.summary similarity index 100% rename from cts/scheduler/year-2038.summary rename to cts/scheduler/summary/year-2038.summary diff --git a/cts/scheduler/1-a-then-bm-move-b.xml b/cts/scheduler/xml/1-a-then-bm-move-b.xml similarity index 100% rename from cts/scheduler/1-a-then-bm-move-b.xml rename to cts/scheduler/xml/1-a-then-bm-move-b.xml diff --git a/cts/scheduler/10-a-then-bm-b-move-a-clone.xml b/cts/scheduler/xml/10-a-then-bm-b-move-a-clone.xml similarity index 100% rename from cts/scheduler/10-a-then-bm-b-move-a-clone.xml rename to cts/scheduler/xml/10-a-then-bm-b-move-a-clone.xml diff --git a/cts/scheduler/11-a-then-bm-b-move-a-clone-starting.xml b/cts/scheduler/xml/11-a-then-bm-b-move-a-clone-starting.xml similarity index 100% rename from cts/scheduler/11-a-then-bm-b-move-a-clone-starting.xml rename to cts/scheduler/xml/11-a-then-bm-b-move-a-clone-starting.xml diff --git a/cts/scheduler/1360.xml b/cts/scheduler/xml/1360.xml similarity index 100% rename from cts/scheduler/1360.xml rename to cts/scheduler/xml/1360.xml diff --git a/cts/scheduler/1484.xml b/cts/scheduler/xml/1484.xml similarity index 100% rename from cts/scheduler/1484.xml rename to cts/scheduler/xml/1484.xml diff --git a/cts/scheduler/1494.xml b/cts/scheduler/xml/1494.xml similarity index 100% rename from cts/scheduler/1494.xml rename to cts/scheduler/xml/1494.xml diff --git a/cts/scheduler/2-am-then-b-move-a.xml b/cts/scheduler/xml/2-am-then-b-move-a.xml similarity index 100% rename from cts/scheduler/2-am-then-b-move-a.xml rename to cts/scheduler/xml/2-am-then-b-move-a.xml diff --git a/cts/scheduler/3-am-then-bm-both-migrate.xml b/cts/scheduler/xml/3-am-then-bm-both-migrate.xml similarity index 100% rename from cts/scheduler/3-am-then-bm-both-migrate.xml rename to cts/scheduler/xml/3-am-then-bm-both-migrate.xml diff --git a/cts/scheduler/4-am-then-bm-b-not-migratable.xml b/cts/scheduler/xml/4-am-then-bm-b-not-migratable.xml similarity index 100% rename from cts/scheduler/4-am-then-bm-b-not-migratable.xml rename to cts/scheduler/xml/4-am-then-bm-b-not-migratable.xml diff --git a/cts/scheduler/5-am-then-bm-a-not-migratable.xml b/cts/scheduler/xml/5-am-then-bm-a-not-migratable.xml similarity index 100% rename from cts/scheduler/5-am-then-bm-a-not-migratable.xml rename to cts/scheduler/xml/5-am-then-bm-a-not-migratable.xml diff --git a/cts/scheduler/594.xml b/cts/scheduler/xml/594.xml similarity index 100% rename from cts/scheduler/594.xml rename to cts/scheduler/xml/594.xml diff --git a/cts/scheduler/6-migrate-group.xml b/cts/scheduler/xml/6-migrate-group.xml similarity index 100% rename from cts/scheduler/6-migrate-group.xml rename to cts/scheduler/xml/6-migrate-group.xml diff --git a/cts/scheduler/662.xml b/cts/scheduler/xml/662.xml similarity index 100% rename from cts/scheduler/662.xml rename to cts/scheduler/xml/662.xml diff --git a/cts/scheduler/696.xml b/cts/scheduler/xml/696.xml similarity index 100% rename from cts/scheduler/696.xml rename to cts/scheduler/xml/696.xml diff --git a/cts/scheduler/7-migrate-group-one-unmigratable.xml b/cts/scheduler/xml/7-migrate-group-one-unmigratable.xml similarity index 100% rename from cts/scheduler/7-migrate-group-one-unmigratable.xml rename to cts/scheduler/xml/7-migrate-group-one-unmigratable.xml diff --git a/cts/scheduler/726.xml b/cts/scheduler/xml/726.xml similarity index 100% rename from cts/scheduler/726.xml rename to cts/scheduler/xml/726.xml diff --git a/cts/scheduler/735.xml b/cts/scheduler/xml/735.xml similarity index 100% rename from cts/scheduler/735.xml rename to cts/scheduler/xml/735.xml diff --git a/cts/scheduler/764.xml b/cts/scheduler/xml/764.xml similarity index 100% rename from cts/scheduler/764.xml rename to cts/scheduler/xml/764.xml diff --git a/cts/scheduler/797.xml b/cts/scheduler/xml/797.xml similarity index 100% rename from cts/scheduler/797.xml rename to cts/scheduler/xml/797.xml diff --git a/cts/scheduler/8-am-then-bm-a-migrating-b-stopping.xml b/cts/scheduler/xml/8-am-then-bm-a-migrating-b-stopping.xml similarity index 100% rename from cts/scheduler/8-am-then-bm-a-migrating-b-stopping.xml rename to cts/scheduler/xml/8-am-then-bm-a-migrating-b-stopping.xml diff --git a/cts/scheduler/829.xml b/cts/scheduler/xml/829.xml similarity index 100% rename from cts/scheduler/829.xml rename to cts/scheduler/xml/829.xml diff --git a/cts/scheduler/9-am-then-bm-b-migrating-a-stopping.xml b/cts/scheduler/xml/9-am-then-bm-b-migrating-a-stopping.xml similarity index 100% rename from cts/scheduler/9-am-then-bm-b-migrating-a-stopping.xml rename to cts/scheduler/xml/9-am-then-bm-b-migrating-a-stopping.xml diff --git a/cts/scheduler/994-2.xml b/cts/scheduler/xml/994-2.xml similarity index 100% rename from cts/scheduler/994-2.xml rename to cts/scheduler/xml/994-2.xml diff --git a/cts/scheduler/994.xml b/cts/scheduler/xml/994.xml similarity index 100% rename from cts/scheduler/994.xml rename to cts/scheduler/xml/994.xml diff --git a/cts/scheduler/xml/Makefile.am b/cts/scheduler/xml/Makefile.am new file mode 100644 index 0000000000..4757fb4549 --- /dev/null +++ b/cts/scheduler/xml/Makefile.am @@ -0,0 +1,12 @@ +# +# Copyright 2001-2021 the Pacemaker project contributors +# +# The version control history for this file may have further details. +# +# This source code is licensed under the GNU General Public License version 2 +# or later (GPLv2+) WITHOUT ANY WARRANTY. +# +MAINTAINERCLEANFILES = Makefile.in + +xmldir = $(datadir)/$(PACKAGE)/tests/scheduler/xml +dist_xml_DATA = $(wildcard *.xml) diff --git a/cts/scheduler/a-demote-then-b-migrate.xml b/cts/scheduler/xml/a-demote-then-b-migrate.xml similarity index 100% rename from cts/scheduler/a-demote-then-b-migrate.xml rename to cts/scheduler/xml/a-demote-then-b-migrate.xml diff --git a/cts/scheduler/a-promote-then-b-migrate.xml b/cts/scheduler/xml/a-promote-then-b-migrate.xml similarity index 100% rename from cts/scheduler/a-promote-then-b-migrate.xml rename to cts/scheduler/xml/a-promote-then-b-migrate.xml diff --git a/cts/scheduler/anon-instance-pending.xml b/cts/scheduler/xml/anon-instance-pending.xml similarity index 100% rename from cts/scheduler/anon-instance-pending.xml rename to cts/scheduler/xml/anon-instance-pending.xml diff --git a/cts/scheduler/anti-colocation-master.xml b/cts/scheduler/xml/anti-colocation-master.xml similarity index 100% rename from cts/scheduler/anti-colocation-master.xml rename to cts/scheduler/xml/anti-colocation-master.xml diff --git a/cts/scheduler/anti-colocation-order.xml b/cts/scheduler/xml/anti-colocation-order.xml similarity index 100% rename from cts/scheduler/anti-colocation-order.xml rename to cts/scheduler/xml/anti-colocation-order.xml diff --git a/cts/scheduler/anti-colocation-slave.xml b/cts/scheduler/xml/anti-colocation-slave.xml similarity index 100% rename from cts/scheduler/anti-colocation-slave.xml rename to cts/scheduler/xml/anti-colocation-slave.xml diff --git a/cts/scheduler/asymmetric.xml b/cts/scheduler/xml/asymmetric.xml similarity index 100% rename from cts/scheduler/asymmetric.xml rename to cts/scheduler/xml/asymmetric.xml diff --git a/cts/scheduler/asymmetrical-order-move.xml b/cts/scheduler/xml/asymmetrical-order-move.xml similarity index 100% rename from cts/scheduler/asymmetrical-order-move.xml rename to cts/scheduler/xml/asymmetrical-order-move.xml diff --git a/cts/scheduler/asymmetrical-order-restart.xml b/cts/scheduler/xml/asymmetrical-order-restart.xml similarity index 100% rename from cts/scheduler/asymmetrical-order-restart.xml rename to cts/scheduler/xml/asymmetrical-order-restart.xml diff --git a/cts/scheduler/attrs1.xml b/cts/scheduler/xml/attrs1.xml similarity index 100% rename from cts/scheduler/attrs1.xml rename to cts/scheduler/xml/attrs1.xml diff --git a/cts/scheduler/attrs2.xml b/cts/scheduler/xml/attrs2.xml similarity index 100% rename from cts/scheduler/attrs2.xml rename to cts/scheduler/xml/attrs2.xml diff --git a/cts/scheduler/attrs3.xml b/cts/scheduler/xml/attrs3.xml similarity index 100% rename from cts/scheduler/attrs3.xml rename to cts/scheduler/xml/attrs3.xml diff --git a/cts/scheduler/attrs4.xml b/cts/scheduler/xml/attrs4.xml similarity index 100% rename from cts/scheduler/attrs4.xml rename to cts/scheduler/xml/attrs4.xml diff --git a/cts/scheduler/attrs5.xml b/cts/scheduler/xml/attrs5.xml similarity index 100% rename from cts/scheduler/attrs5.xml rename to cts/scheduler/xml/attrs5.xml diff --git a/cts/scheduler/attrs6.xml b/cts/scheduler/xml/attrs6.xml similarity index 100% rename from cts/scheduler/attrs6.xml rename to cts/scheduler/xml/attrs6.xml diff --git a/cts/scheduler/attrs7.xml b/cts/scheduler/xml/attrs7.xml similarity index 100% rename from cts/scheduler/attrs7.xml rename to cts/scheduler/xml/attrs7.xml diff --git a/cts/scheduler/attrs8.xml b/cts/scheduler/xml/attrs8.xml similarity index 100% rename from cts/scheduler/attrs8.xml rename to cts/scheduler/xml/attrs8.xml diff --git a/cts/scheduler/balanced.xml b/cts/scheduler/xml/balanced.xml similarity index 100% rename from cts/scheduler/balanced.xml rename to cts/scheduler/xml/balanced.xml diff --git a/cts/scheduler/base-score.xml b/cts/scheduler/xml/base-score.xml similarity index 100% rename from cts/scheduler/base-score.xml rename to cts/scheduler/xml/base-score.xml diff --git a/cts/scheduler/bnc-515172.xml b/cts/scheduler/xml/bnc-515172.xml similarity index 100% rename from cts/scheduler/bnc-515172.xml rename to cts/scheduler/xml/bnc-515172.xml diff --git a/cts/scheduler/bug-1572-1.xml b/cts/scheduler/xml/bug-1572-1.xml similarity index 100% rename from cts/scheduler/bug-1572-1.xml rename to cts/scheduler/xml/bug-1572-1.xml diff --git a/cts/scheduler/bug-1572-2.xml b/cts/scheduler/xml/bug-1572-2.xml similarity index 100% rename from cts/scheduler/bug-1572-2.xml rename to cts/scheduler/xml/bug-1572-2.xml diff --git a/cts/scheduler/bug-1573.xml b/cts/scheduler/xml/bug-1573.xml similarity index 100% rename from cts/scheduler/bug-1573.xml rename to cts/scheduler/xml/bug-1573.xml diff --git a/cts/scheduler/bug-1685.xml b/cts/scheduler/xml/bug-1685.xml similarity index 100% rename from cts/scheduler/bug-1685.xml rename to cts/scheduler/xml/bug-1685.xml diff --git a/cts/scheduler/bug-1718.xml b/cts/scheduler/xml/bug-1718.xml similarity index 100% rename from cts/scheduler/bug-1718.xml rename to cts/scheduler/xml/bug-1718.xml diff --git a/cts/scheduler/bug-1765.xml b/cts/scheduler/xml/bug-1765.xml similarity index 100% rename from cts/scheduler/bug-1765.xml rename to cts/scheduler/xml/bug-1765.xml diff --git a/cts/scheduler/bug-1820-1.xml b/cts/scheduler/xml/bug-1820-1.xml similarity index 100% rename from cts/scheduler/bug-1820-1.xml rename to cts/scheduler/xml/bug-1820-1.xml diff --git a/cts/scheduler/bug-1820.xml b/cts/scheduler/xml/bug-1820.xml similarity index 100% rename from cts/scheduler/bug-1820.xml rename to cts/scheduler/xml/bug-1820.xml diff --git a/cts/scheduler/bug-1822.xml b/cts/scheduler/xml/bug-1822.xml similarity index 100% rename from cts/scheduler/bug-1822.xml rename to cts/scheduler/xml/bug-1822.xml diff --git a/cts/scheduler/bug-5007-masterslave_colocation.xml b/cts/scheduler/xml/bug-5007-masterslave_colocation.xml similarity index 100% rename from cts/scheduler/bug-5007-masterslave_colocation.xml rename to cts/scheduler/xml/bug-5007-masterslave_colocation.xml diff --git a/cts/scheduler/bug-5014-A-start-B-start.xml b/cts/scheduler/xml/bug-5014-A-start-B-start.xml similarity index 100% rename from cts/scheduler/bug-5014-A-start-B-start.xml rename to cts/scheduler/xml/bug-5014-A-start-B-start.xml diff --git a/cts/scheduler/bug-5014-A-stop-B-started.xml b/cts/scheduler/xml/bug-5014-A-stop-B-started.xml similarity index 100% rename from cts/scheduler/bug-5014-A-stop-B-started.xml rename to cts/scheduler/xml/bug-5014-A-stop-B-started.xml diff --git a/cts/scheduler/bug-5014-A-stopped-B-stopped.xml b/cts/scheduler/xml/bug-5014-A-stopped-B-stopped.xml similarity index 100% rename from cts/scheduler/bug-5014-A-stopped-B-stopped.xml rename to cts/scheduler/xml/bug-5014-A-stopped-B-stopped.xml diff --git a/cts/scheduler/bug-5014-CLONE-A-start-B-start.xml b/cts/scheduler/xml/bug-5014-CLONE-A-start-B-start.xml similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-start-B-start.xml rename to cts/scheduler/xml/bug-5014-CLONE-A-start-B-start.xml diff --git a/cts/scheduler/bug-5014-CLONE-A-stop-B-started.xml b/cts/scheduler/xml/bug-5014-CLONE-A-stop-B-started.xml similarity index 100% rename from cts/scheduler/bug-5014-CLONE-A-stop-B-started.xml rename to cts/scheduler/xml/bug-5014-CLONE-A-stop-B-started.xml diff --git a/cts/scheduler/bug-5014-CthenAthenB-C-stopped.xml b/cts/scheduler/xml/bug-5014-CthenAthenB-C-stopped.xml similarity index 100% rename from cts/scheduler/bug-5014-CthenAthenB-C-stopped.xml rename to cts/scheduler/xml/bug-5014-CthenAthenB-C-stopped.xml diff --git a/cts/scheduler/bug-5014-GROUP-A-start-B-start.xml b/cts/scheduler/xml/bug-5014-GROUP-A-start-B-start.xml similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-start-B-start.xml rename to cts/scheduler/xml/bug-5014-GROUP-A-start-B-start.xml diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-started.xml b/cts/scheduler/xml/bug-5014-GROUP-A-stopped-B-started.xml similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-started.xml rename to cts/scheduler/xml/bug-5014-GROUP-A-stopped-B-started.xml diff --git a/cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.xml b/cts/scheduler/xml/bug-5014-GROUP-A-stopped-B-stopped.xml similarity index 100% rename from cts/scheduler/bug-5014-GROUP-A-stopped-B-stopped.xml rename to cts/scheduler/xml/bug-5014-GROUP-A-stopped-B-stopped.xml diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-false.xml b/cts/scheduler/xml/bug-5014-ordered-set-symmetrical-false.xml similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-false.xml rename to cts/scheduler/xml/bug-5014-ordered-set-symmetrical-false.xml diff --git a/cts/scheduler/bug-5014-ordered-set-symmetrical-true.xml b/cts/scheduler/xml/bug-5014-ordered-set-symmetrical-true.xml similarity index 100% rename from cts/scheduler/bug-5014-ordered-set-symmetrical-true.xml rename to cts/scheduler/xml/bug-5014-ordered-set-symmetrical-true.xml diff --git a/cts/scheduler/bug-5025-1.xml b/cts/scheduler/xml/bug-5025-1.xml similarity index 100% rename from cts/scheduler/bug-5025-1.xml rename to cts/scheduler/xml/bug-5025-1.xml diff --git a/cts/scheduler/bug-5025-2.xml b/cts/scheduler/xml/bug-5025-2.xml similarity index 100% rename from cts/scheduler/bug-5025-2.xml rename to cts/scheduler/xml/bug-5025-2.xml diff --git a/cts/scheduler/bug-5025-3.xml b/cts/scheduler/xml/bug-5025-3.xml similarity index 100% rename from cts/scheduler/bug-5025-3.xml rename to cts/scheduler/xml/bug-5025-3.xml diff --git a/cts/scheduler/bug-5025-4.xml b/cts/scheduler/xml/bug-5025-4.xml similarity index 100% rename from cts/scheduler/bug-5025-4.xml rename to cts/scheduler/xml/bug-5025-4.xml diff --git a/cts/scheduler/bug-5028-bottom.xml b/cts/scheduler/xml/bug-5028-bottom.xml similarity index 100% rename from cts/scheduler/bug-5028-bottom.xml rename to cts/scheduler/xml/bug-5028-bottom.xml diff --git a/cts/scheduler/bug-5028-detach.xml b/cts/scheduler/xml/bug-5028-detach.xml similarity index 100% rename from cts/scheduler/bug-5028-detach.xml rename to cts/scheduler/xml/bug-5028-detach.xml diff --git a/cts/scheduler/bug-5028.xml b/cts/scheduler/xml/bug-5028.xml similarity index 100% rename from cts/scheduler/bug-5028.xml rename to cts/scheduler/xml/bug-5028.xml diff --git a/cts/scheduler/bug-5038.xml b/cts/scheduler/xml/bug-5038.xml similarity index 100% rename from cts/scheduler/bug-5038.xml rename to cts/scheduler/xml/bug-5038.xml diff --git a/cts/scheduler/bug-5059.xml b/cts/scheduler/xml/bug-5059.xml similarity index 100% rename from cts/scheduler/bug-5059.xml rename to cts/scheduler/xml/bug-5059.xml diff --git a/cts/scheduler/bug-5069-op-disabled.xml b/cts/scheduler/xml/bug-5069-op-disabled.xml similarity index 100% rename from cts/scheduler/bug-5069-op-disabled.xml rename to cts/scheduler/xml/bug-5069-op-disabled.xml diff --git a/cts/scheduler/bug-5069-op-enabled.xml b/cts/scheduler/xml/bug-5069-op-enabled.xml similarity index 100% rename from cts/scheduler/bug-5069-op-enabled.xml rename to cts/scheduler/xml/bug-5069-op-enabled.xml diff --git a/cts/scheduler/bug-5140-require-all-false.xml b/cts/scheduler/xml/bug-5140-require-all-false.xml similarity index 100% rename from cts/scheduler/bug-5140-require-all-false.xml rename to cts/scheduler/xml/bug-5140-require-all-false.xml diff --git a/cts/scheduler/bug-5143-ms-shuffle.xml b/cts/scheduler/xml/bug-5143-ms-shuffle.xml similarity index 100% rename from cts/scheduler/bug-5143-ms-shuffle.xml rename to cts/scheduler/xml/bug-5143-ms-shuffle.xml diff --git a/cts/scheduler/bug-5186-partial-migrate.xml b/cts/scheduler/xml/bug-5186-partial-migrate.xml similarity index 100% rename from cts/scheduler/bug-5186-partial-migrate.xml rename to cts/scheduler/xml/bug-5186-partial-migrate.xml diff --git a/cts/scheduler/bug-cl-5168.xml b/cts/scheduler/xml/bug-cl-5168.xml similarity index 100% rename from cts/scheduler/bug-cl-5168.xml rename to cts/scheduler/xml/bug-cl-5168.xml diff --git a/cts/scheduler/bug-cl-5170.xml b/cts/scheduler/xml/bug-cl-5170.xml similarity index 100% rename from cts/scheduler/bug-cl-5170.xml rename to cts/scheduler/xml/bug-cl-5170.xml diff --git a/cts/scheduler/bug-cl-5212.xml b/cts/scheduler/xml/bug-cl-5212.xml similarity index 100% rename from cts/scheduler/bug-cl-5212.xml rename to cts/scheduler/xml/bug-cl-5212.xml diff --git a/cts/scheduler/bug-cl-5213.xml b/cts/scheduler/xml/bug-cl-5213.xml similarity index 100% rename from cts/scheduler/bug-cl-5213.xml rename to cts/scheduler/xml/bug-cl-5213.xml diff --git a/cts/scheduler/bug-cl-5219.xml b/cts/scheduler/xml/bug-cl-5219.xml similarity index 100% rename from cts/scheduler/bug-cl-5219.xml rename to cts/scheduler/xml/bug-cl-5219.xml diff --git a/cts/scheduler/bug-cl-5247.xml b/cts/scheduler/xml/bug-cl-5247.xml similarity index 100% rename from cts/scheduler/bug-cl-5247.xml rename to cts/scheduler/xml/bug-cl-5247.xml diff --git a/cts/scheduler/bug-lf-1852.xml b/cts/scheduler/xml/bug-lf-1852.xml similarity index 100% rename from cts/scheduler/bug-lf-1852.xml rename to cts/scheduler/xml/bug-lf-1852.xml diff --git a/cts/scheduler/bug-lf-1920.xml b/cts/scheduler/xml/bug-lf-1920.xml similarity index 100% rename from cts/scheduler/bug-lf-1920.xml rename to cts/scheduler/xml/bug-lf-1920.xml diff --git a/cts/scheduler/bug-lf-2106.xml b/cts/scheduler/xml/bug-lf-2106.xml similarity index 100% rename from cts/scheduler/bug-lf-2106.xml rename to cts/scheduler/xml/bug-lf-2106.xml diff --git a/cts/scheduler/bug-lf-2153.xml b/cts/scheduler/xml/bug-lf-2153.xml similarity index 100% rename from cts/scheduler/bug-lf-2153.xml rename to cts/scheduler/xml/bug-lf-2153.xml diff --git a/cts/scheduler/bug-lf-2160.xml b/cts/scheduler/xml/bug-lf-2160.xml similarity index 100% rename from cts/scheduler/bug-lf-2160.xml rename to cts/scheduler/xml/bug-lf-2160.xml diff --git a/cts/scheduler/bug-lf-2171.xml b/cts/scheduler/xml/bug-lf-2171.xml similarity index 100% rename from cts/scheduler/bug-lf-2171.xml rename to cts/scheduler/xml/bug-lf-2171.xml diff --git a/cts/scheduler/bug-lf-2213.xml b/cts/scheduler/xml/bug-lf-2213.xml similarity index 100% rename from cts/scheduler/bug-lf-2213.xml rename to cts/scheduler/xml/bug-lf-2213.xml diff --git a/cts/scheduler/bug-lf-2317.xml b/cts/scheduler/xml/bug-lf-2317.xml similarity index 100% rename from cts/scheduler/bug-lf-2317.xml rename to cts/scheduler/xml/bug-lf-2317.xml diff --git a/cts/scheduler/bug-lf-2358.xml b/cts/scheduler/xml/bug-lf-2358.xml similarity index 100% rename from cts/scheduler/bug-lf-2358.xml rename to cts/scheduler/xml/bug-lf-2358.xml diff --git a/cts/scheduler/bug-lf-2361.xml b/cts/scheduler/xml/bug-lf-2361.xml similarity index 100% rename from cts/scheduler/bug-lf-2361.xml rename to cts/scheduler/xml/bug-lf-2361.xml diff --git a/cts/scheduler/bug-lf-2422.xml b/cts/scheduler/xml/bug-lf-2422.xml similarity index 100% rename from cts/scheduler/bug-lf-2422.xml rename to cts/scheduler/xml/bug-lf-2422.xml diff --git a/cts/scheduler/bug-lf-2435.xml b/cts/scheduler/xml/bug-lf-2435.xml similarity index 100% rename from cts/scheduler/bug-lf-2435.xml rename to cts/scheduler/xml/bug-lf-2435.xml diff --git a/cts/scheduler/bug-lf-2445.xml b/cts/scheduler/xml/bug-lf-2445.xml similarity index 100% rename from cts/scheduler/bug-lf-2445.xml rename to cts/scheduler/xml/bug-lf-2445.xml diff --git a/cts/scheduler/bug-lf-2453.xml b/cts/scheduler/xml/bug-lf-2453.xml similarity index 100% rename from cts/scheduler/bug-lf-2453.xml rename to cts/scheduler/xml/bug-lf-2453.xml diff --git a/cts/scheduler/bug-lf-2474.xml b/cts/scheduler/xml/bug-lf-2474.xml similarity index 100% rename from cts/scheduler/bug-lf-2474.xml rename to cts/scheduler/xml/bug-lf-2474.xml diff --git a/cts/scheduler/bug-lf-2493.xml b/cts/scheduler/xml/bug-lf-2493.xml similarity index 100% rename from cts/scheduler/bug-lf-2493.xml rename to cts/scheduler/xml/bug-lf-2493.xml diff --git a/cts/scheduler/bug-lf-2508.xml b/cts/scheduler/xml/bug-lf-2508.xml similarity index 100% rename from cts/scheduler/bug-lf-2508.xml rename to cts/scheduler/xml/bug-lf-2508.xml diff --git a/cts/scheduler/bug-lf-2544.xml b/cts/scheduler/xml/bug-lf-2544.xml similarity index 100% rename from cts/scheduler/bug-lf-2544.xml rename to cts/scheduler/xml/bug-lf-2544.xml diff --git a/cts/scheduler/bug-lf-2551.xml b/cts/scheduler/xml/bug-lf-2551.xml similarity index 100% rename from cts/scheduler/bug-lf-2551.xml rename to cts/scheduler/xml/bug-lf-2551.xml diff --git a/cts/scheduler/bug-lf-2574.xml b/cts/scheduler/xml/bug-lf-2574.xml similarity index 100% rename from cts/scheduler/bug-lf-2574.xml rename to cts/scheduler/xml/bug-lf-2574.xml diff --git a/cts/scheduler/bug-lf-2581.xml b/cts/scheduler/xml/bug-lf-2581.xml similarity index 100% rename from cts/scheduler/bug-lf-2581.xml rename to cts/scheduler/xml/bug-lf-2581.xml diff --git a/cts/scheduler/bug-lf-2606.xml b/cts/scheduler/xml/bug-lf-2606.xml similarity index 100% rename from cts/scheduler/bug-lf-2606.xml rename to cts/scheduler/xml/bug-lf-2606.xml diff --git a/cts/scheduler/bug-lf-2613.xml b/cts/scheduler/xml/bug-lf-2613.xml similarity index 100% rename from cts/scheduler/bug-lf-2613.xml rename to cts/scheduler/xml/bug-lf-2613.xml diff --git a/cts/scheduler/bug-lf-2619.xml b/cts/scheduler/xml/bug-lf-2619.xml similarity index 100% rename from cts/scheduler/bug-lf-2619.xml rename to cts/scheduler/xml/bug-lf-2619.xml diff --git a/cts/scheduler/bug-n-385265-2.xml b/cts/scheduler/xml/bug-n-385265-2.xml similarity index 100% rename from cts/scheduler/bug-n-385265-2.xml rename to cts/scheduler/xml/bug-n-385265-2.xml diff --git a/cts/scheduler/bug-n-385265.xml b/cts/scheduler/xml/bug-n-385265.xml similarity index 100% rename from cts/scheduler/bug-n-385265.xml rename to cts/scheduler/xml/bug-n-385265.xml diff --git a/cts/scheduler/bug-n-387749.xml b/cts/scheduler/xml/bug-n-387749.xml similarity index 100% rename from cts/scheduler/bug-n-387749.xml rename to cts/scheduler/xml/bug-n-387749.xml diff --git a/cts/scheduler/bug-pm-11.xml b/cts/scheduler/xml/bug-pm-11.xml similarity index 100% rename from cts/scheduler/bug-pm-11.xml rename to cts/scheduler/xml/bug-pm-11.xml diff --git a/cts/scheduler/bug-pm-12.xml b/cts/scheduler/xml/bug-pm-12.xml similarity index 100% rename from cts/scheduler/bug-pm-12.xml rename to cts/scheduler/xml/bug-pm-12.xml diff --git a/cts/scheduler/bug-rh-1097457.xml b/cts/scheduler/xml/bug-rh-1097457.xml similarity index 100% rename from cts/scheduler/bug-rh-1097457.xml rename to cts/scheduler/xml/bug-rh-1097457.xml diff --git a/cts/scheduler/bug-rh-880249.xml b/cts/scheduler/xml/bug-rh-880249.xml similarity index 100% rename from cts/scheduler/bug-rh-880249.xml rename to cts/scheduler/xml/bug-rh-880249.xml diff --git a/cts/scheduler/bug-suse-707150.xml b/cts/scheduler/xml/bug-suse-707150.xml similarity index 100% rename from cts/scheduler/bug-suse-707150.xml rename to cts/scheduler/xml/bug-suse-707150.xml diff --git a/cts/scheduler/bundle-nested-colocation.xml b/cts/scheduler/xml/bundle-nested-colocation.xml similarity index 100% rename from cts/scheduler/bundle-nested-colocation.xml rename to cts/scheduler/xml/bundle-nested-colocation.xml diff --git a/cts/scheduler/bundle-order-fencing.xml b/cts/scheduler/xml/bundle-order-fencing.xml similarity index 100% rename from cts/scheduler/bundle-order-fencing.xml rename to cts/scheduler/xml/bundle-order-fencing.xml diff --git a/cts/scheduler/bundle-order-partial-start-2.xml b/cts/scheduler/xml/bundle-order-partial-start-2.xml similarity index 100% rename from cts/scheduler/bundle-order-partial-start-2.xml rename to cts/scheduler/xml/bundle-order-partial-start-2.xml diff --git a/cts/scheduler/bundle-order-partial-start.xml b/cts/scheduler/xml/bundle-order-partial-start.xml similarity index 100% rename from cts/scheduler/bundle-order-partial-start.xml rename to cts/scheduler/xml/bundle-order-partial-start.xml diff --git a/cts/scheduler/bundle-order-partial-stop.xml b/cts/scheduler/xml/bundle-order-partial-stop.xml similarity index 100% rename from cts/scheduler/bundle-order-partial-stop.xml rename to cts/scheduler/xml/bundle-order-partial-stop.xml diff --git a/cts/scheduler/bundle-order-partial.xml b/cts/scheduler/xml/bundle-order-partial.xml similarity index 100% rename from cts/scheduler/bundle-order-partial.xml rename to cts/scheduler/xml/bundle-order-partial.xml diff --git a/cts/scheduler/bundle-order-startup-clone-2.xml b/cts/scheduler/xml/bundle-order-startup-clone-2.xml similarity index 100% rename from cts/scheduler/bundle-order-startup-clone-2.xml rename to cts/scheduler/xml/bundle-order-startup-clone-2.xml diff --git a/cts/scheduler/bundle-order-startup-clone.xml b/cts/scheduler/xml/bundle-order-startup-clone.xml similarity index 100% rename from cts/scheduler/bundle-order-startup-clone.xml rename to cts/scheduler/xml/bundle-order-startup-clone.xml diff --git a/cts/scheduler/bundle-order-startup.xml b/cts/scheduler/xml/bundle-order-startup.xml similarity index 100% rename from cts/scheduler/bundle-order-startup.xml rename to cts/scheduler/xml/bundle-order-startup.xml diff --git a/cts/scheduler/bundle-order-stop-clone.xml b/cts/scheduler/xml/bundle-order-stop-clone.xml similarity index 100% rename from cts/scheduler/bundle-order-stop-clone.xml rename to cts/scheduler/xml/bundle-order-stop-clone.xml diff --git a/cts/scheduler/bundle-order-stop-on-remote.xml b/cts/scheduler/xml/bundle-order-stop-on-remote.xml similarity index 100% rename from cts/scheduler/bundle-order-stop-on-remote.xml rename to cts/scheduler/xml/bundle-order-stop-on-remote.xml diff --git a/cts/scheduler/bundle-order-stop.xml b/cts/scheduler/xml/bundle-order-stop.xml similarity index 100% rename from cts/scheduler/bundle-order-stop.xml rename to cts/scheduler/xml/bundle-order-stop.xml diff --git a/cts/scheduler/bundle-probe-order-1.xml b/cts/scheduler/xml/bundle-probe-order-1.xml similarity index 100% rename from cts/scheduler/bundle-probe-order-1.xml rename to cts/scheduler/xml/bundle-probe-order-1.xml diff --git a/cts/scheduler/bundle-probe-order-2.xml b/cts/scheduler/xml/bundle-probe-order-2.xml similarity index 100% rename from cts/scheduler/bundle-probe-order-2.xml rename to cts/scheduler/xml/bundle-probe-order-2.xml diff --git a/cts/scheduler/bundle-probe-order-3.xml b/cts/scheduler/xml/bundle-probe-order-3.xml similarity index 100% rename from cts/scheduler/bundle-probe-order-3.xml rename to cts/scheduler/xml/bundle-probe-order-3.xml diff --git a/cts/scheduler/bundle-probe-remotes.xml b/cts/scheduler/xml/bundle-probe-remotes.xml similarity index 100% rename from cts/scheduler/bundle-probe-remotes.xml rename to cts/scheduler/xml/bundle-probe-remotes.xml diff --git a/cts/scheduler/bundle-replicas-change.xml b/cts/scheduler/xml/bundle-replicas-change.xml similarity index 100% rename from cts/scheduler/bundle-replicas-change.xml rename to cts/scheduler/xml/bundle-replicas-change.xml diff --git a/cts/scheduler/cancel-behind-moving-remote.xml b/cts/scheduler/xml/cancel-behind-moving-remote.xml similarity index 100% rename from cts/scheduler/cancel-behind-moving-remote.xml rename to cts/scheduler/xml/cancel-behind-moving-remote.xml diff --git a/cts/scheduler/clone-anon-dup.xml b/cts/scheduler/xml/clone-anon-dup.xml similarity index 100% rename from cts/scheduler/clone-anon-dup.xml rename to cts/scheduler/xml/clone-anon-dup.xml diff --git a/cts/scheduler/clone-anon-failcount.xml b/cts/scheduler/xml/clone-anon-failcount.xml similarity index 100% rename from cts/scheduler/clone-anon-failcount.xml rename to cts/scheduler/xml/clone-anon-failcount.xml diff --git a/cts/scheduler/clone-anon-probe-1.xml b/cts/scheduler/xml/clone-anon-probe-1.xml similarity index 100% rename from cts/scheduler/clone-anon-probe-1.xml rename to cts/scheduler/xml/clone-anon-probe-1.xml diff --git a/cts/scheduler/clone-anon-probe-2.xml b/cts/scheduler/xml/clone-anon-probe-2.xml similarity index 100% rename from cts/scheduler/clone-anon-probe-2.xml rename to cts/scheduler/xml/clone-anon-probe-2.xml diff --git a/cts/scheduler/clone-colocate-instance-1.xml b/cts/scheduler/xml/clone-colocate-instance-1.xml similarity index 100% rename from cts/scheduler/clone-colocate-instance-1.xml rename to cts/scheduler/xml/clone-colocate-instance-1.xml diff --git a/cts/scheduler/clone-colocate-instance-2.xml b/cts/scheduler/xml/clone-colocate-instance-2.xml similarity index 100% rename from cts/scheduler/clone-colocate-instance-2.xml rename to cts/scheduler/xml/clone-colocate-instance-2.xml diff --git a/cts/scheduler/clone-fail-block-colocation.xml b/cts/scheduler/xml/clone-fail-block-colocation.xml similarity index 100% rename from cts/scheduler/clone-fail-block-colocation.xml rename to cts/scheduler/xml/clone-fail-block-colocation.xml diff --git a/cts/scheduler/clone-interleave-1.xml b/cts/scheduler/xml/clone-interleave-1.xml similarity index 100% rename from cts/scheduler/clone-interleave-1.xml rename to cts/scheduler/xml/clone-interleave-1.xml diff --git a/cts/scheduler/clone-interleave-2.xml b/cts/scheduler/xml/clone-interleave-2.xml similarity index 100% rename from cts/scheduler/clone-interleave-2.xml rename to cts/scheduler/xml/clone-interleave-2.xml diff --git a/cts/scheduler/clone-interleave-3.xml b/cts/scheduler/xml/clone-interleave-3.xml similarity index 100% rename from cts/scheduler/clone-interleave-3.xml rename to cts/scheduler/xml/clone-interleave-3.xml diff --git a/cts/scheduler/clone-max-zero.xml b/cts/scheduler/xml/clone-max-zero.xml similarity index 100% rename from cts/scheduler/clone-max-zero.xml rename to cts/scheduler/xml/clone-max-zero.xml diff --git a/cts/scheduler/clone-no-shuffle.xml b/cts/scheduler/xml/clone-no-shuffle.xml similarity index 100% rename from cts/scheduler/clone-no-shuffle.xml rename to cts/scheduler/xml/clone-no-shuffle.xml diff --git a/cts/scheduler/clone-order-16instances.xml b/cts/scheduler/xml/clone-order-16instances.xml similarity index 100% rename from cts/scheduler/clone-order-16instances.xml rename to cts/scheduler/xml/clone-order-16instances.xml diff --git a/cts/scheduler/clone-order-instance.xml b/cts/scheduler/xml/clone-order-instance.xml similarity index 100% rename from cts/scheduler/clone-order-instance.xml rename to cts/scheduler/xml/clone-order-instance.xml diff --git a/cts/scheduler/clone-order-primitive.xml b/cts/scheduler/xml/clone-order-primitive.xml similarity index 100% rename from cts/scheduler/clone-order-primitive.xml rename to cts/scheduler/xml/clone-order-primitive.xml diff --git a/cts/scheduler/clone-require-all-1.xml b/cts/scheduler/xml/clone-require-all-1.xml similarity index 100% rename from cts/scheduler/clone-require-all-1.xml rename to cts/scheduler/xml/clone-require-all-1.xml diff --git a/cts/scheduler/clone-require-all-2.xml b/cts/scheduler/xml/clone-require-all-2.xml similarity index 100% rename from cts/scheduler/clone-require-all-2.xml rename to cts/scheduler/xml/clone-require-all-2.xml diff --git a/cts/scheduler/clone-require-all-3.xml b/cts/scheduler/xml/clone-require-all-3.xml similarity index 100% rename from cts/scheduler/clone-require-all-3.xml rename to cts/scheduler/xml/clone-require-all-3.xml diff --git a/cts/scheduler/clone-require-all-4.xml b/cts/scheduler/xml/clone-require-all-4.xml similarity index 100% rename from cts/scheduler/clone-require-all-4.xml rename to cts/scheduler/xml/clone-require-all-4.xml diff --git a/cts/scheduler/clone-require-all-5.xml b/cts/scheduler/xml/clone-require-all-5.xml similarity index 100% rename from cts/scheduler/clone-require-all-5.xml rename to cts/scheduler/xml/clone-require-all-5.xml diff --git a/cts/scheduler/clone-require-all-6.xml b/cts/scheduler/xml/clone-require-all-6.xml similarity index 100% rename from cts/scheduler/clone-require-all-6.xml rename to cts/scheduler/xml/clone-require-all-6.xml diff --git a/cts/scheduler/clone-require-all-7.xml b/cts/scheduler/xml/clone-require-all-7.xml similarity index 100% rename from cts/scheduler/clone-require-all-7.xml rename to cts/scheduler/xml/clone-require-all-7.xml diff --git a/cts/scheduler/clone-require-all-no-interleave-1.xml b/cts/scheduler/xml/clone-require-all-no-interleave-1.xml similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-1.xml rename to cts/scheduler/xml/clone-require-all-no-interleave-1.xml diff --git a/cts/scheduler/clone-require-all-no-interleave-2.xml b/cts/scheduler/xml/clone-require-all-no-interleave-2.xml similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-2.xml rename to cts/scheduler/xml/clone-require-all-no-interleave-2.xml diff --git a/cts/scheduler/clone-require-all-no-interleave-3.xml b/cts/scheduler/xml/clone-require-all-no-interleave-3.xml similarity index 100% rename from cts/scheduler/clone-require-all-no-interleave-3.xml rename to cts/scheduler/xml/clone-require-all-no-interleave-3.xml diff --git a/cts/scheduler/clone-requires-quorum-recovery.xml b/cts/scheduler/xml/clone-requires-quorum-recovery.xml similarity index 100% rename from cts/scheduler/clone-requires-quorum-recovery.xml rename to cts/scheduler/xml/clone-requires-quorum-recovery.xml diff --git a/cts/scheduler/clone-requires-quorum.xml b/cts/scheduler/xml/clone-requires-quorum.xml similarity index 100% rename from cts/scheduler/clone-requires-quorum.xml rename to cts/scheduler/xml/clone-requires-quorum.xml diff --git a/cts/scheduler/clone_min_interleave_start_one.xml b/cts/scheduler/xml/clone_min_interleave_start_one.xml similarity index 100% rename from cts/scheduler/clone_min_interleave_start_one.xml rename to cts/scheduler/xml/clone_min_interleave_start_one.xml diff --git a/cts/scheduler/clone_min_interleave_start_two.xml b/cts/scheduler/xml/clone_min_interleave_start_two.xml similarity index 100% rename from cts/scheduler/clone_min_interleave_start_two.xml rename to cts/scheduler/xml/clone_min_interleave_start_two.xml diff --git a/cts/scheduler/clone_min_interleave_stop_one.xml b/cts/scheduler/xml/clone_min_interleave_stop_one.xml similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_one.xml rename to cts/scheduler/xml/clone_min_interleave_stop_one.xml diff --git a/cts/scheduler/clone_min_interleave_stop_two.xml b/cts/scheduler/xml/clone_min_interleave_stop_two.xml similarity index 100% rename from cts/scheduler/clone_min_interleave_stop_two.xml rename to cts/scheduler/xml/clone_min_interleave_stop_two.xml diff --git a/cts/scheduler/clone_min_start_one.xml b/cts/scheduler/xml/clone_min_start_one.xml similarity index 100% rename from cts/scheduler/clone_min_start_one.xml rename to cts/scheduler/xml/clone_min_start_one.xml diff --git a/cts/scheduler/clone_min_start_two.xml b/cts/scheduler/xml/clone_min_start_two.xml similarity index 100% rename from cts/scheduler/clone_min_start_two.xml rename to cts/scheduler/xml/clone_min_start_two.xml diff --git a/cts/scheduler/clone_min_stop_all.xml b/cts/scheduler/xml/clone_min_stop_all.xml similarity index 100% rename from cts/scheduler/clone_min_stop_all.xml rename to cts/scheduler/xml/clone_min_stop_all.xml diff --git a/cts/scheduler/clone_min_stop_one.xml b/cts/scheduler/xml/clone_min_stop_one.xml similarity index 100% rename from cts/scheduler/clone_min_stop_one.xml rename to cts/scheduler/xml/clone_min_stop_one.xml diff --git a/cts/scheduler/clone_min_stop_two.xml b/cts/scheduler/xml/clone_min_stop_two.xml similarity index 100% rename from cts/scheduler/clone_min_stop_two.xml rename to cts/scheduler/xml/clone_min_stop_two.xml diff --git a/cts/scheduler/cloned-group-stop.xml b/cts/scheduler/xml/cloned-group-stop.xml similarity index 100% rename from cts/scheduler/cloned-group-stop.xml rename to cts/scheduler/xml/cloned-group-stop.xml diff --git a/cts/scheduler/cloned-group.xml b/cts/scheduler/xml/cloned-group.xml similarity index 100% rename from cts/scheduler/cloned-group.xml rename to cts/scheduler/xml/cloned-group.xml diff --git a/cts/scheduler/cloned_start_one.xml b/cts/scheduler/xml/cloned_start_one.xml similarity index 100% rename from cts/scheduler/cloned_start_one.xml rename to cts/scheduler/xml/cloned_start_one.xml diff --git a/cts/scheduler/cloned_start_two.xml b/cts/scheduler/xml/cloned_start_two.xml similarity index 100% rename from cts/scheduler/cloned_start_two.xml rename to cts/scheduler/xml/cloned_start_two.xml diff --git a/cts/scheduler/cloned_stop_one.xml b/cts/scheduler/xml/cloned_stop_one.xml similarity index 100% rename from cts/scheduler/cloned_stop_one.xml rename to cts/scheduler/xml/cloned_stop_one.xml diff --git a/cts/scheduler/cloned_stop_two.xml b/cts/scheduler/xml/cloned_stop_two.xml similarity index 100% rename from cts/scheduler/cloned_stop_two.xml rename to cts/scheduler/xml/cloned_stop_two.xml diff --git a/cts/scheduler/cluster-specific-params.xml b/cts/scheduler/xml/cluster-specific-params.xml similarity index 100% rename from cts/scheduler/cluster-specific-params.xml rename to cts/scheduler/xml/cluster-specific-params.xml diff --git a/cts/scheduler/colo_master_w_native.xml b/cts/scheduler/xml/colo_master_w_native.xml similarity index 100% rename from cts/scheduler/colo_master_w_native.xml rename to cts/scheduler/xml/colo_master_w_native.xml diff --git a/cts/scheduler/colo_slave_w_native.xml b/cts/scheduler/xml/colo_slave_w_native.xml similarity index 100% rename from cts/scheduler/colo_slave_w_native.xml rename to cts/scheduler/xml/colo_slave_w_native.xml diff --git a/cts/scheduler/coloc-attr.xml b/cts/scheduler/xml/coloc-attr.xml similarity index 100% rename from cts/scheduler/coloc-attr.xml rename to cts/scheduler/xml/coloc-attr.xml diff --git a/cts/scheduler/coloc-clone-stays-active.xml b/cts/scheduler/xml/coloc-clone-stays-active.xml similarity index 100% rename from cts/scheduler/coloc-clone-stays-active.xml rename to cts/scheduler/xml/coloc-clone-stays-active.xml diff --git a/cts/scheduler/coloc-dependee-should-move.xml b/cts/scheduler/xml/coloc-dependee-should-move.xml similarity index 100% rename from cts/scheduler/coloc-dependee-should-move.xml rename to cts/scheduler/xml/coloc-dependee-should-move.xml diff --git a/cts/scheduler/coloc-dependee-should-stay.xml b/cts/scheduler/xml/coloc-dependee-should-stay.xml similarity index 100% rename from cts/scheduler/coloc-dependee-should-stay.xml rename to cts/scheduler/xml/coloc-dependee-should-stay.xml diff --git a/cts/scheduler/coloc-group.xml b/cts/scheduler/xml/coloc-group.xml similarity index 100% rename from cts/scheduler/coloc-group.xml rename to cts/scheduler/xml/coloc-group.xml diff --git a/cts/scheduler/coloc-intra-set.xml b/cts/scheduler/xml/coloc-intra-set.xml similarity index 100% rename from cts/scheduler/coloc-intra-set.xml rename to cts/scheduler/xml/coloc-intra-set.xml diff --git a/cts/scheduler/coloc-list.xml b/cts/scheduler/xml/coloc-list.xml similarity index 100% rename from cts/scheduler/coloc-list.xml rename to cts/scheduler/xml/coloc-list.xml diff --git a/cts/scheduler/coloc-loop.xml b/cts/scheduler/xml/coloc-loop.xml similarity index 100% rename from cts/scheduler/coloc-loop.xml rename to cts/scheduler/xml/coloc-loop.xml diff --git a/cts/scheduler/coloc-many-one.xml b/cts/scheduler/xml/coloc-many-one.xml similarity index 100% rename from cts/scheduler/coloc-many-one.xml rename to cts/scheduler/xml/coloc-many-one.xml diff --git a/cts/scheduler/coloc-negative-group.xml b/cts/scheduler/xml/coloc-negative-group.xml similarity index 100% rename from cts/scheduler/coloc-negative-group.xml rename to cts/scheduler/xml/coloc-negative-group.xml diff --git a/cts/scheduler/coloc-slave-anti.xml b/cts/scheduler/xml/coloc-slave-anti.xml similarity index 100% rename from cts/scheduler/coloc-slave-anti.xml rename to cts/scheduler/xml/coloc-slave-anti.xml diff --git a/cts/scheduler/coloc_fp_logic.xml b/cts/scheduler/xml/coloc_fp_logic.xml similarity index 100% rename from cts/scheduler/coloc_fp_logic.xml rename to cts/scheduler/xml/coloc_fp_logic.xml diff --git a/cts/scheduler/colocate-primitive-with-clone.xml b/cts/scheduler/xml/colocate-primitive-with-clone.xml similarity index 100% rename from cts/scheduler/colocate-primitive-with-clone.xml rename to cts/scheduler/xml/colocate-primitive-with-clone.xml diff --git a/cts/scheduler/colocated-utilization-clone.xml b/cts/scheduler/xml/colocated-utilization-clone.xml similarity index 100% rename from cts/scheduler/colocated-utilization-clone.xml rename to cts/scheduler/xml/colocated-utilization-clone.xml diff --git a/cts/scheduler/colocated-utilization-group.xml b/cts/scheduler/xml/colocated-utilization-group.xml similarity index 100% rename from cts/scheduler/colocated-utilization-group.xml rename to cts/scheduler/xml/colocated-utilization-group.xml diff --git a/cts/scheduler/colocated-utilization-primitive-1.xml b/cts/scheduler/xml/colocated-utilization-primitive-1.xml similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-1.xml rename to cts/scheduler/xml/colocated-utilization-primitive-1.xml diff --git a/cts/scheduler/colocated-utilization-primitive-2.xml b/cts/scheduler/xml/colocated-utilization-primitive-2.xml similarity index 100% rename from cts/scheduler/colocated-utilization-primitive-2.xml rename to cts/scheduler/xml/colocated-utilization-primitive-2.xml diff --git a/cts/scheduler/colocation-influence.xml b/cts/scheduler/xml/colocation-influence.xml similarity index 100% rename from cts/scheduler/colocation-influence.xml rename to cts/scheduler/xml/colocation-influence.xml diff --git a/cts/scheduler/colocation_constraint_stops_master.xml b/cts/scheduler/xml/colocation_constraint_stops_master.xml similarity index 100% rename from cts/scheduler/colocation_constraint_stops_master.xml rename to cts/scheduler/xml/colocation_constraint_stops_master.xml diff --git a/cts/scheduler/colocation_constraint_stops_slave.xml b/cts/scheduler/xml/colocation_constraint_stops_slave.xml similarity index 100% rename from cts/scheduler/colocation_constraint_stops_slave.xml rename to cts/scheduler/xml/colocation_constraint_stops_slave.xml diff --git a/cts/scheduler/comments.xml b/cts/scheduler/xml/comments.xml similarity index 100% rename from cts/scheduler/comments.xml rename to cts/scheduler/xml/comments.xml diff --git a/cts/scheduler/complex_enforce_colo.xml b/cts/scheduler/xml/complex_enforce_colo.xml similarity index 100% rename from cts/scheduler/complex_enforce_colo.xml rename to cts/scheduler/xml/complex_enforce_colo.xml diff --git a/cts/scheduler/concurrent-fencing.xml b/cts/scheduler/xml/concurrent-fencing.xml similarity index 100% rename from cts/scheduler/concurrent-fencing.xml rename to cts/scheduler/xml/concurrent-fencing.xml diff --git a/cts/scheduler/container-1.xml b/cts/scheduler/xml/container-1.xml similarity index 100% rename from cts/scheduler/container-1.xml rename to cts/scheduler/xml/container-1.xml diff --git a/cts/scheduler/container-2.xml b/cts/scheduler/xml/container-2.xml similarity index 100% rename from cts/scheduler/container-2.xml rename to cts/scheduler/xml/container-2.xml diff --git a/cts/scheduler/container-3.xml b/cts/scheduler/xml/container-3.xml similarity index 100% rename from cts/scheduler/container-3.xml rename to cts/scheduler/xml/container-3.xml diff --git a/cts/scheduler/container-4.xml b/cts/scheduler/xml/container-4.xml similarity index 100% rename from cts/scheduler/container-4.xml rename to cts/scheduler/xml/container-4.xml diff --git a/cts/scheduler/container-group-1.xml b/cts/scheduler/xml/container-group-1.xml similarity index 100% rename from cts/scheduler/container-group-1.xml rename to cts/scheduler/xml/container-group-1.xml diff --git a/cts/scheduler/container-group-2.xml b/cts/scheduler/xml/container-group-2.xml similarity index 100% rename from cts/scheduler/container-group-2.xml rename to cts/scheduler/xml/container-group-2.xml diff --git a/cts/scheduler/container-group-3.xml b/cts/scheduler/xml/container-group-3.xml similarity index 100% rename from cts/scheduler/container-group-3.xml rename to cts/scheduler/xml/container-group-3.xml diff --git a/cts/scheduler/container-group-4.xml b/cts/scheduler/xml/container-group-4.xml similarity index 100% rename from cts/scheduler/container-group-4.xml rename to cts/scheduler/xml/container-group-4.xml diff --git a/cts/scheduler/container-is-remote-node.xml b/cts/scheduler/xml/container-is-remote-node.xml similarity index 100% rename from cts/scheduler/container-is-remote-node.xml rename to cts/scheduler/xml/container-is-remote-node.xml diff --git a/cts/scheduler/date-1.xml b/cts/scheduler/xml/date-1.xml similarity index 100% rename from cts/scheduler/date-1.xml rename to cts/scheduler/xml/date-1.xml diff --git a/cts/scheduler/date-2.xml b/cts/scheduler/xml/date-2.xml similarity index 100% rename from cts/scheduler/date-2.xml rename to cts/scheduler/xml/date-2.xml diff --git a/cts/scheduler/date-3.xml b/cts/scheduler/xml/date-3.xml similarity index 100% rename from cts/scheduler/date-3.xml rename to cts/scheduler/xml/date-3.xml diff --git a/cts/scheduler/dc-fence-ordering.xml b/cts/scheduler/xml/dc-fence-ordering.xml similarity index 100% rename from cts/scheduler/dc-fence-ordering.xml rename to cts/scheduler/xml/dc-fence-ordering.xml diff --git a/cts/scheduler/enforce-colo1.xml b/cts/scheduler/xml/enforce-colo1.xml similarity index 100% rename from cts/scheduler/enforce-colo1.xml rename to cts/scheduler/xml/enforce-colo1.xml diff --git a/cts/scheduler/expire-non-blocked-failure.xml b/cts/scheduler/xml/expire-non-blocked-failure.xml similarity index 100% rename from cts/scheduler/expire-non-blocked-failure.xml rename to cts/scheduler/xml/expire-non-blocked-failure.xml diff --git a/cts/scheduler/failcount-block.xml b/cts/scheduler/xml/failcount-block.xml similarity index 100% rename from cts/scheduler/failcount-block.xml rename to cts/scheduler/xml/failcount-block.xml diff --git a/cts/scheduler/failcount.xml b/cts/scheduler/xml/failcount.xml similarity index 100% rename from cts/scheduler/failcount.xml rename to cts/scheduler/xml/failcount.xml diff --git a/cts/scheduler/failed-demote-recovery-master.xml b/cts/scheduler/xml/failed-demote-recovery-master.xml similarity index 100% rename from cts/scheduler/failed-demote-recovery-master.xml rename to cts/scheduler/xml/failed-demote-recovery-master.xml diff --git a/cts/scheduler/failed-demote-recovery.xml b/cts/scheduler/xml/failed-demote-recovery.xml similarity index 100% rename from cts/scheduler/failed-demote-recovery.xml rename to cts/scheduler/xml/failed-demote-recovery.xml diff --git a/cts/scheduler/force-anon-clone-max.xml b/cts/scheduler/xml/force-anon-clone-max.xml similarity index 100% rename from cts/scheduler/force-anon-clone-max.xml rename to cts/scheduler/xml/force-anon-clone-max.xml diff --git a/cts/scheduler/group-dependents.xml b/cts/scheduler/xml/group-dependents.xml similarity index 100% rename from cts/scheduler/group-dependents.xml rename to cts/scheduler/xml/group-dependents.xml diff --git a/cts/scheduler/group-fail.xml b/cts/scheduler/xml/group-fail.xml similarity index 100% rename from cts/scheduler/group-fail.xml rename to cts/scheduler/xml/group-fail.xml diff --git a/cts/scheduler/group-stop-ordering.xml b/cts/scheduler/xml/group-stop-ordering.xml similarity index 100% rename from cts/scheduler/group-stop-ordering.xml rename to cts/scheduler/xml/group-stop-ordering.xml diff --git a/cts/scheduler/group-unmanaged-stopped.xml b/cts/scheduler/xml/group-unmanaged-stopped.xml similarity index 100% rename from cts/scheduler/group-unmanaged-stopped.xml rename to cts/scheduler/xml/group-unmanaged-stopped.xml diff --git a/cts/scheduler/group-unmanaged.xml b/cts/scheduler/xml/group-unmanaged.xml similarity index 100% rename from cts/scheduler/group-unmanaged.xml rename to cts/scheduler/xml/group-unmanaged.xml diff --git a/cts/scheduler/group1.xml b/cts/scheduler/xml/group1.xml similarity index 100% rename from cts/scheduler/group1.xml rename to cts/scheduler/xml/group1.xml diff --git a/cts/scheduler/group10.xml b/cts/scheduler/xml/group10.xml similarity index 100% rename from cts/scheduler/group10.xml rename to cts/scheduler/xml/group10.xml diff --git a/cts/scheduler/group11.xml b/cts/scheduler/xml/group11.xml similarity index 100% rename from cts/scheduler/group11.xml rename to cts/scheduler/xml/group11.xml diff --git a/cts/scheduler/group13.xml b/cts/scheduler/xml/group13.xml similarity index 100% rename from cts/scheduler/group13.xml rename to cts/scheduler/xml/group13.xml diff --git a/cts/scheduler/group14.xml b/cts/scheduler/xml/group14.xml similarity index 100% rename from cts/scheduler/group14.xml rename to cts/scheduler/xml/group14.xml diff --git a/cts/scheduler/group15.xml b/cts/scheduler/xml/group15.xml similarity index 100% rename from cts/scheduler/group15.xml rename to cts/scheduler/xml/group15.xml diff --git a/cts/scheduler/group2.xml b/cts/scheduler/xml/group2.xml similarity index 100% rename from cts/scheduler/group2.xml rename to cts/scheduler/xml/group2.xml diff --git a/cts/scheduler/group3.xml b/cts/scheduler/xml/group3.xml similarity index 100% rename from cts/scheduler/group3.xml rename to cts/scheduler/xml/group3.xml diff --git a/cts/scheduler/group4.xml b/cts/scheduler/xml/group4.xml similarity index 100% rename from cts/scheduler/group4.xml rename to cts/scheduler/xml/group4.xml diff --git a/cts/scheduler/group5.xml b/cts/scheduler/xml/group5.xml similarity index 100% rename from cts/scheduler/group5.xml rename to cts/scheduler/xml/group5.xml diff --git a/cts/scheduler/group6.xml b/cts/scheduler/xml/group6.xml similarity index 100% rename from cts/scheduler/group6.xml rename to cts/scheduler/xml/group6.xml diff --git a/cts/scheduler/group7.xml b/cts/scheduler/xml/group7.xml similarity index 100% rename from cts/scheduler/group7.xml rename to cts/scheduler/xml/group7.xml diff --git a/cts/scheduler/group8.xml b/cts/scheduler/xml/group8.xml similarity index 100% rename from cts/scheduler/group8.xml rename to cts/scheduler/xml/group8.xml diff --git a/cts/scheduler/group9.xml b/cts/scheduler/xml/group9.xml similarity index 100% rename from cts/scheduler/group9.xml rename to cts/scheduler/xml/group9.xml diff --git a/cts/scheduler/guest-host-not-fenceable.xml b/cts/scheduler/xml/guest-host-not-fenceable.xml similarity index 100% rename from cts/scheduler/guest-host-not-fenceable.xml rename to cts/scheduler/xml/guest-host-not-fenceable.xml diff --git a/cts/scheduler/guest-node-cleanup.xml b/cts/scheduler/xml/guest-node-cleanup.xml similarity index 100% rename from cts/scheduler/guest-node-cleanup.xml rename to cts/scheduler/xml/guest-node-cleanup.xml diff --git a/cts/scheduler/guest-node-host-dies.xml b/cts/scheduler/xml/guest-node-host-dies.xml similarity index 100% rename from cts/scheduler/guest-node-host-dies.xml rename to cts/scheduler/xml/guest-node-host-dies.xml diff --git a/cts/scheduler/history-1.xml b/cts/scheduler/xml/history-1.xml similarity index 100% rename from cts/scheduler/history-1.xml rename to cts/scheduler/xml/history-1.xml diff --git a/cts/scheduler/honor_stonith_rsc_order1.xml b/cts/scheduler/xml/honor_stonith_rsc_order1.xml similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order1.xml rename to cts/scheduler/xml/honor_stonith_rsc_order1.xml diff --git a/cts/scheduler/honor_stonith_rsc_order2.xml b/cts/scheduler/xml/honor_stonith_rsc_order2.xml similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order2.xml rename to cts/scheduler/xml/honor_stonith_rsc_order2.xml diff --git a/cts/scheduler/honor_stonith_rsc_order3.xml b/cts/scheduler/xml/honor_stonith_rsc_order3.xml similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order3.xml rename to cts/scheduler/xml/honor_stonith_rsc_order3.xml diff --git a/cts/scheduler/honor_stonith_rsc_order4.xml b/cts/scheduler/xml/honor_stonith_rsc_order4.xml similarity index 100% rename from cts/scheduler/honor_stonith_rsc_order4.xml rename to cts/scheduler/xml/honor_stonith_rsc_order4.xml diff --git a/cts/scheduler/ignore_stonith_rsc_order1.xml b/cts/scheduler/xml/ignore_stonith_rsc_order1.xml similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order1.xml rename to cts/scheduler/xml/ignore_stonith_rsc_order1.xml diff --git a/cts/scheduler/ignore_stonith_rsc_order2.xml b/cts/scheduler/xml/ignore_stonith_rsc_order2.xml similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order2.xml rename to cts/scheduler/xml/ignore_stonith_rsc_order2.xml diff --git a/cts/scheduler/ignore_stonith_rsc_order3.xml b/cts/scheduler/xml/ignore_stonith_rsc_order3.xml similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order3.xml rename to cts/scheduler/xml/ignore_stonith_rsc_order3.xml diff --git a/cts/scheduler/ignore_stonith_rsc_order4.xml b/cts/scheduler/xml/ignore_stonith_rsc_order4.xml similarity index 100% rename from cts/scheduler/ignore_stonith_rsc_order4.xml rename to cts/scheduler/xml/ignore_stonith_rsc_order4.xml diff --git a/cts/scheduler/inc0.xml b/cts/scheduler/xml/inc0.xml similarity index 100% rename from cts/scheduler/inc0.xml rename to cts/scheduler/xml/inc0.xml diff --git a/cts/scheduler/inc1.xml b/cts/scheduler/xml/inc1.xml similarity index 100% rename from cts/scheduler/inc1.xml rename to cts/scheduler/xml/inc1.xml diff --git a/cts/scheduler/inc10.xml b/cts/scheduler/xml/inc10.xml similarity index 100% rename from cts/scheduler/inc10.xml rename to cts/scheduler/xml/inc10.xml diff --git a/cts/scheduler/inc11.xml b/cts/scheduler/xml/inc11.xml similarity index 100% rename from cts/scheduler/inc11.xml rename to cts/scheduler/xml/inc11.xml diff --git a/cts/scheduler/inc12.xml b/cts/scheduler/xml/inc12.xml similarity index 100% rename from cts/scheduler/inc12.xml rename to cts/scheduler/xml/inc12.xml diff --git a/cts/scheduler/inc2.xml b/cts/scheduler/xml/inc2.xml similarity index 100% rename from cts/scheduler/inc2.xml rename to cts/scheduler/xml/inc2.xml diff --git a/cts/scheduler/inc3.xml b/cts/scheduler/xml/inc3.xml similarity index 100% rename from cts/scheduler/inc3.xml rename to cts/scheduler/xml/inc3.xml diff --git a/cts/scheduler/inc4.xml b/cts/scheduler/xml/inc4.xml similarity index 100% rename from cts/scheduler/inc4.xml rename to cts/scheduler/xml/inc4.xml diff --git a/cts/scheduler/inc5.xml b/cts/scheduler/xml/inc5.xml similarity index 100% rename from cts/scheduler/inc5.xml rename to cts/scheduler/xml/inc5.xml diff --git a/cts/scheduler/inc6.xml b/cts/scheduler/xml/inc6.xml similarity index 100% rename from cts/scheduler/inc6.xml rename to cts/scheduler/xml/inc6.xml diff --git a/cts/scheduler/inc7.xml b/cts/scheduler/xml/inc7.xml similarity index 100% rename from cts/scheduler/inc7.xml rename to cts/scheduler/xml/inc7.xml diff --git a/cts/scheduler/inc8.xml b/cts/scheduler/xml/inc8.xml similarity index 100% rename from cts/scheduler/inc8.xml rename to cts/scheduler/xml/inc8.xml diff --git a/cts/scheduler/inc9.xml b/cts/scheduler/xml/inc9.xml similarity index 100% rename from cts/scheduler/inc9.xml rename to cts/scheduler/xml/inc9.xml diff --git a/cts/scheduler/interleave-0.xml b/cts/scheduler/xml/interleave-0.xml similarity index 100% rename from cts/scheduler/interleave-0.xml rename to cts/scheduler/xml/interleave-0.xml diff --git a/cts/scheduler/interleave-1.xml b/cts/scheduler/xml/interleave-1.xml similarity index 100% rename from cts/scheduler/interleave-1.xml rename to cts/scheduler/xml/interleave-1.xml diff --git a/cts/scheduler/interleave-2.xml b/cts/scheduler/xml/interleave-2.xml similarity index 100% rename from cts/scheduler/interleave-2.xml rename to cts/scheduler/xml/interleave-2.xml diff --git a/cts/scheduler/interleave-3.xml b/cts/scheduler/xml/interleave-3.xml similarity index 100% rename from cts/scheduler/interleave-3.xml rename to cts/scheduler/xml/interleave-3.xml diff --git a/cts/scheduler/interleave-pseudo-stop.xml b/cts/scheduler/xml/interleave-pseudo-stop.xml similarity index 100% rename from cts/scheduler/interleave-pseudo-stop.xml rename to cts/scheduler/xml/interleave-pseudo-stop.xml diff --git a/cts/scheduler/interleave-restart.xml b/cts/scheduler/xml/interleave-restart.xml similarity index 100% rename from cts/scheduler/interleave-restart.xml rename to cts/scheduler/xml/interleave-restart.xml diff --git a/cts/scheduler/interleave-stop.xml b/cts/scheduler/xml/interleave-stop.xml similarity index 100% rename from cts/scheduler/interleave-stop.xml rename to cts/scheduler/xml/interleave-stop.xml diff --git a/cts/scheduler/intervals.xml b/cts/scheduler/xml/intervals.xml similarity index 100% rename from cts/scheduler/intervals.xml rename to cts/scheduler/xml/intervals.xml diff --git a/cts/scheduler/load-stopped-loop-2.xml b/cts/scheduler/xml/load-stopped-loop-2.xml similarity index 100% rename from cts/scheduler/load-stopped-loop-2.xml rename to cts/scheduler/xml/load-stopped-loop-2.xml diff --git a/cts/scheduler/load-stopped-loop.xml b/cts/scheduler/xml/load-stopped-loop.xml similarity index 100% rename from cts/scheduler/load-stopped-loop.xml rename to cts/scheduler/xml/load-stopped-loop.xml diff --git a/cts/scheduler/location-date-rules-1.xml b/cts/scheduler/xml/location-date-rules-1.xml similarity index 100% rename from cts/scheduler/location-date-rules-1.xml rename to cts/scheduler/xml/location-date-rules-1.xml diff --git a/cts/scheduler/location-date-rules-2.xml b/cts/scheduler/xml/location-date-rules-2.xml similarity index 100% rename from cts/scheduler/location-date-rules-2.xml rename to cts/scheduler/xml/location-date-rules-2.xml diff --git a/cts/scheduler/location-sets-templates.xml b/cts/scheduler/xml/location-sets-templates.xml similarity index 100% rename from cts/scheduler/location-sets-templates.xml rename to cts/scheduler/xml/location-sets-templates.xml diff --git a/cts/scheduler/managed-0.xml b/cts/scheduler/xml/managed-0.xml similarity index 100% rename from cts/scheduler/managed-0.xml rename to cts/scheduler/xml/managed-0.xml diff --git a/cts/scheduler/managed-1.xml b/cts/scheduler/xml/managed-1.xml similarity index 100% rename from cts/scheduler/managed-1.xml rename to cts/scheduler/xml/managed-1.xml diff --git a/cts/scheduler/managed-2.xml b/cts/scheduler/xml/managed-2.xml similarity index 100% rename from cts/scheduler/managed-2.xml rename to cts/scheduler/xml/managed-2.xml diff --git a/cts/scheduler/master-0.xml b/cts/scheduler/xml/master-0.xml similarity index 100% rename from cts/scheduler/master-0.xml rename to cts/scheduler/xml/master-0.xml diff --git a/cts/scheduler/master-1.xml b/cts/scheduler/xml/master-1.xml similarity index 100% rename from cts/scheduler/master-1.xml rename to cts/scheduler/xml/master-1.xml diff --git a/cts/scheduler/master-10.xml b/cts/scheduler/xml/master-10.xml similarity index 100% rename from cts/scheduler/master-10.xml rename to cts/scheduler/xml/master-10.xml diff --git a/cts/scheduler/master-11.xml b/cts/scheduler/xml/master-11.xml similarity index 100% rename from cts/scheduler/master-11.xml rename to cts/scheduler/xml/master-11.xml diff --git a/cts/scheduler/master-12.xml b/cts/scheduler/xml/master-12.xml similarity index 100% rename from cts/scheduler/master-12.xml rename to cts/scheduler/xml/master-12.xml diff --git a/cts/scheduler/master-13.xml b/cts/scheduler/xml/master-13.xml similarity index 100% rename from cts/scheduler/master-13.xml rename to cts/scheduler/xml/master-13.xml diff --git a/cts/scheduler/master-2.xml b/cts/scheduler/xml/master-2.xml similarity index 100% rename from cts/scheduler/master-2.xml rename to cts/scheduler/xml/master-2.xml diff --git a/cts/scheduler/master-3.xml b/cts/scheduler/xml/master-3.xml similarity index 100% rename from cts/scheduler/master-3.xml rename to cts/scheduler/xml/master-3.xml diff --git a/cts/scheduler/master-4.xml b/cts/scheduler/xml/master-4.xml similarity index 100% rename from cts/scheduler/master-4.xml rename to cts/scheduler/xml/master-4.xml diff --git a/cts/scheduler/master-5.xml b/cts/scheduler/xml/master-5.xml similarity index 100% rename from cts/scheduler/master-5.xml rename to cts/scheduler/xml/master-5.xml diff --git a/cts/scheduler/master-6.xml b/cts/scheduler/xml/master-6.xml similarity index 100% rename from cts/scheduler/master-6.xml rename to cts/scheduler/xml/master-6.xml diff --git a/cts/scheduler/master-7.xml b/cts/scheduler/xml/master-7.xml similarity index 100% rename from cts/scheduler/master-7.xml rename to cts/scheduler/xml/master-7.xml diff --git a/cts/scheduler/master-8.xml b/cts/scheduler/xml/master-8.xml similarity index 100% rename from cts/scheduler/master-8.xml rename to cts/scheduler/xml/master-8.xml diff --git a/cts/scheduler/master-9.xml b/cts/scheduler/xml/master-9.xml similarity index 100% rename from cts/scheduler/master-9.xml rename to cts/scheduler/xml/master-9.xml diff --git a/cts/scheduler/master-allow-start.xml b/cts/scheduler/xml/master-allow-start.xml similarity index 100% rename from cts/scheduler/master-allow-start.xml rename to cts/scheduler/xml/master-allow-start.xml diff --git a/cts/scheduler/master-asymmetrical-order.xml b/cts/scheduler/xml/master-asymmetrical-order.xml similarity index 100% rename from cts/scheduler/master-asymmetrical-order.xml rename to cts/scheduler/xml/master-asymmetrical-order.xml diff --git a/cts/scheduler/master-colocation.xml b/cts/scheduler/xml/master-colocation.xml similarity index 100% rename from cts/scheduler/master-colocation.xml rename to cts/scheduler/xml/master-colocation.xml diff --git a/cts/scheduler/master-demote-2.xml b/cts/scheduler/xml/master-demote-2.xml similarity index 100% rename from cts/scheduler/master-demote-2.xml rename to cts/scheduler/xml/master-demote-2.xml diff --git a/cts/scheduler/master-demote-block.xml b/cts/scheduler/xml/master-demote-block.xml similarity index 100% rename from cts/scheduler/master-demote-block.xml rename to cts/scheduler/xml/master-demote-block.xml diff --git a/cts/scheduler/master-demote.xml b/cts/scheduler/xml/master-demote.xml similarity index 100% rename from cts/scheduler/master-demote.xml rename to cts/scheduler/xml/master-demote.xml diff --git a/cts/scheduler/master-depend.xml b/cts/scheduler/xml/master-depend.xml similarity index 100% rename from cts/scheduler/master-depend.xml rename to cts/scheduler/xml/master-depend.xml diff --git a/cts/scheduler/master-dependent-ban.xml b/cts/scheduler/xml/master-dependent-ban.xml similarity index 100% rename from cts/scheduler/master-dependent-ban.xml rename to cts/scheduler/xml/master-dependent-ban.xml diff --git a/cts/scheduler/master-failed-demote-2.xml b/cts/scheduler/xml/master-failed-demote-2.xml similarity index 100% rename from cts/scheduler/master-failed-demote-2.xml rename to cts/scheduler/xml/master-failed-demote-2.xml diff --git a/cts/scheduler/master-failed-demote.xml b/cts/scheduler/xml/master-failed-demote.xml similarity index 100% rename from cts/scheduler/master-failed-demote.xml rename to cts/scheduler/xml/master-failed-demote.xml diff --git a/cts/scheduler/master-group.xml b/cts/scheduler/xml/master-group.xml similarity index 100% rename from cts/scheduler/master-group.xml rename to cts/scheduler/xml/master-group.xml diff --git a/cts/scheduler/master-move.xml b/cts/scheduler/xml/master-move.xml similarity index 100% rename from cts/scheduler/master-move.xml rename to cts/scheduler/xml/master-move.xml diff --git a/cts/scheduler/master-notify.xml b/cts/scheduler/xml/master-notify.xml similarity index 100% rename from cts/scheduler/master-notify.xml rename to cts/scheduler/xml/master-notify.xml diff --git a/cts/scheduler/master-ordering.xml b/cts/scheduler/xml/master-ordering.xml similarity index 100% rename from cts/scheduler/master-ordering.xml rename to cts/scheduler/xml/master-ordering.xml diff --git a/cts/scheduler/master-partially-demoted-group.xml b/cts/scheduler/xml/master-partially-demoted-group.xml similarity index 100% rename from cts/scheduler/master-partially-demoted-group.xml rename to cts/scheduler/xml/master-partially-demoted-group.xml diff --git a/cts/scheduler/master-probed-score.xml b/cts/scheduler/xml/master-probed-score.xml similarity index 100% rename from cts/scheduler/master-probed-score.xml rename to cts/scheduler/xml/master-probed-score.xml diff --git a/cts/scheduler/master-promotion-constraint.xml b/cts/scheduler/xml/master-promotion-constraint.xml similarity index 100% rename from cts/scheduler/master-promotion-constraint.xml rename to cts/scheduler/xml/master-promotion-constraint.xml diff --git a/cts/scheduler/master-pseudo.xml b/cts/scheduler/xml/master-pseudo.xml similarity index 100% rename from cts/scheduler/master-pseudo.xml rename to cts/scheduler/xml/master-pseudo.xml diff --git a/cts/scheduler/master-reattach.xml b/cts/scheduler/xml/master-reattach.xml similarity index 100% rename from cts/scheduler/master-reattach.xml rename to cts/scheduler/xml/master-reattach.xml diff --git a/cts/scheduler/master-role.xml b/cts/scheduler/xml/master-role.xml similarity index 100% rename from cts/scheduler/master-role.xml rename to cts/scheduler/xml/master-role.xml diff --git a/cts/scheduler/master-score-startup.xml b/cts/scheduler/xml/master-score-startup.xml similarity index 100% rename from cts/scheduler/master-score-startup.xml rename to cts/scheduler/xml/master-score-startup.xml diff --git a/cts/scheduler/master-stop.xml b/cts/scheduler/xml/master-stop.xml similarity index 100% rename from cts/scheduler/master-stop.xml rename to cts/scheduler/xml/master-stop.xml diff --git a/cts/scheduler/master-unmanaged-monitor.xml b/cts/scheduler/xml/master-unmanaged-monitor.xml similarity index 100% rename from cts/scheduler/master-unmanaged-monitor.xml rename to cts/scheduler/xml/master-unmanaged-monitor.xml diff --git a/cts/scheduler/master_monitor_restart.xml b/cts/scheduler/xml/master_monitor_restart.xml similarity index 100% rename from cts/scheduler/master_monitor_restart.xml rename to cts/scheduler/xml/master_monitor_restart.xml diff --git a/cts/scheduler/migrate-1.xml b/cts/scheduler/xml/migrate-1.xml similarity index 100% rename from cts/scheduler/migrate-1.xml rename to cts/scheduler/xml/migrate-1.xml diff --git a/cts/scheduler/migrate-2.xml b/cts/scheduler/xml/migrate-2.xml similarity index 100% rename from cts/scheduler/migrate-2.xml rename to cts/scheduler/xml/migrate-2.xml diff --git a/cts/scheduler/migrate-3.xml b/cts/scheduler/xml/migrate-3.xml similarity index 100% rename from cts/scheduler/migrate-3.xml rename to cts/scheduler/xml/migrate-3.xml diff --git a/cts/scheduler/migrate-4.xml b/cts/scheduler/xml/migrate-4.xml similarity index 100% rename from cts/scheduler/migrate-4.xml rename to cts/scheduler/xml/migrate-4.xml diff --git a/cts/scheduler/migrate-5.xml b/cts/scheduler/xml/migrate-5.xml similarity index 100% rename from cts/scheduler/migrate-5.xml rename to cts/scheduler/xml/migrate-5.xml diff --git a/cts/scheduler/migrate-begin.xml b/cts/scheduler/xml/migrate-begin.xml similarity index 100% rename from cts/scheduler/migrate-begin.xml rename to cts/scheduler/xml/migrate-begin.xml diff --git a/cts/scheduler/migrate-both-vms.xml b/cts/scheduler/xml/migrate-both-vms.xml similarity index 100% rename from cts/scheduler/migrate-both-vms.xml rename to cts/scheduler/xml/migrate-both-vms.xml diff --git a/cts/scheduler/migrate-fail-2.xml b/cts/scheduler/xml/migrate-fail-2.xml similarity index 100% rename from cts/scheduler/migrate-fail-2.xml rename to cts/scheduler/xml/migrate-fail-2.xml diff --git a/cts/scheduler/migrate-fail-3.xml b/cts/scheduler/xml/migrate-fail-3.xml similarity index 100% rename from cts/scheduler/migrate-fail-3.xml rename to cts/scheduler/xml/migrate-fail-3.xml diff --git a/cts/scheduler/migrate-fail-4.xml b/cts/scheduler/xml/migrate-fail-4.xml similarity index 100% rename from cts/scheduler/migrate-fail-4.xml rename to cts/scheduler/xml/migrate-fail-4.xml diff --git a/cts/scheduler/migrate-fail-5.xml b/cts/scheduler/xml/migrate-fail-5.xml similarity index 100% rename from cts/scheduler/migrate-fail-5.xml rename to cts/scheduler/xml/migrate-fail-5.xml diff --git a/cts/scheduler/migrate-fail-6.xml b/cts/scheduler/xml/migrate-fail-6.xml similarity index 100% rename from cts/scheduler/migrate-fail-6.xml rename to cts/scheduler/xml/migrate-fail-6.xml diff --git a/cts/scheduler/migrate-fail-7.xml b/cts/scheduler/xml/migrate-fail-7.xml similarity index 100% rename from cts/scheduler/migrate-fail-7.xml rename to cts/scheduler/xml/migrate-fail-7.xml diff --git a/cts/scheduler/migrate-fail-8.xml b/cts/scheduler/xml/migrate-fail-8.xml similarity index 100% rename from cts/scheduler/migrate-fail-8.xml rename to cts/scheduler/xml/migrate-fail-8.xml diff --git a/cts/scheduler/migrate-fail-9.xml b/cts/scheduler/xml/migrate-fail-9.xml similarity index 100% rename from cts/scheduler/migrate-fail-9.xml rename to cts/scheduler/xml/migrate-fail-9.xml diff --git a/cts/scheduler/migrate-fencing.xml b/cts/scheduler/xml/migrate-fencing.xml similarity index 100% rename from cts/scheduler/migrate-fencing.xml rename to cts/scheduler/xml/migrate-fencing.xml diff --git a/cts/scheduler/migrate-partial-1.xml b/cts/scheduler/xml/migrate-partial-1.xml similarity index 100% rename from cts/scheduler/migrate-partial-1.xml rename to cts/scheduler/xml/migrate-partial-1.xml diff --git a/cts/scheduler/migrate-partial-2.xml b/cts/scheduler/xml/migrate-partial-2.xml similarity index 100% rename from cts/scheduler/migrate-partial-2.xml rename to cts/scheduler/xml/migrate-partial-2.xml diff --git a/cts/scheduler/migrate-partial-3.xml b/cts/scheduler/xml/migrate-partial-3.xml similarity index 100% rename from cts/scheduler/migrate-partial-3.xml rename to cts/scheduler/xml/migrate-partial-3.xml diff --git a/cts/scheduler/migrate-partial-4.xml b/cts/scheduler/xml/migrate-partial-4.xml similarity index 100% rename from cts/scheduler/migrate-partial-4.xml rename to cts/scheduler/xml/migrate-partial-4.xml diff --git a/cts/scheduler/migrate-shutdown.xml b/cts/scheduler/xml/migrate-shutdown.xml similarity index 100% rename from cts/scheduler/migrate-shutdown.xml rename to cts/scheduler/xml/migrate-shutdown.xml diff --git a/cts/scheduler/migrate-start-complex.xml b/cts/scheduler/xml/migrate-start-complex.xml similarity index 100% rename from cts/scheduler/migrate-start-complex.xml rename to cts/scheduler/xml/migrate-start-complex.xml diff --git a/cts/scheduler/migrate-start.xml b/cts/scheduler/xml/migrate-start.xml similarity index 100% rename from cts/scheduler/migrate-start.xml rename to cts/scheduler/xml/migrate-start.xml diff --git a/cts/scheduler/migrate-stop-complex.xml b/cts/scheduler/xml/migrate-stop-complex.xml similarity index 100% rename from cts/scheduler/migrate-stop-complex.xml rename to cts/scheduler/xml/migrate-stop-complex.xml diff --git a/cts/scheduler/migrate-stop-start-complex.xml b/cts/scheduler/xml/migrate-stop-start-complex.xml similarity index 100% rename from cts/scheduler/migrate-stop-start-complex.xml rename to cts/scheduler/xml/migrate-stop-start-complex.xml diff --git a/cts/scheduler/migrate-stop.xml b/cts/scheduler/xml/migrate-stop.xml similarity index 100% rename from cts/scheduler/migrate-stop.xml rename to cts/scheduler/xml/migrate-stop.xml diff --git a/cts/scheduler/migrate-stop_start.xml b/cts/scheduler/xml/migrate-stop_start.xml similarity index 100% rename from cts/scheduler/migrate-stop_start.xml rename to cts/scheduler/xml/migrate-stop_start.xml diff --git a/cts/scheduler/migrate-success.xml b/cts/scheduler/xml/migrate-success.xml similarity index 100% rename from cts/scheduler/migrate-success.xml rename to cts/scheduler/xml/migrate-success.xml diff --git a/cts/scheduler/migrate-versioned.xml b/cts/scheduler/xml/migrate-versioned.xml similarity index 100% rename from cts/scheduler/migrate-versioned.xml rename to cts/scheduler/xml/migrate-versioned.xml diff --git a/cts/scheduler/migration-behind-migrating-remote.xml b/cts/scheduler/xml/migration-behind-migrating-remote.xml similarity index 100% rename from cts/scheduler/migration-behind-migrating-remote.xml rename to cts/scheduler/xml/migration-behind-migrating-remote.xml diff --git a/cts/scheduler/migration-ping-pong.xml b/cts/scheduler/xml/migration-ping-pong.xml similarity index 100% rename from cts/scheduler/migration-ping-pong.xml rename to cts/scheduler/xml/migration-ping-pong.xml diff --git a/cts/scheduler/minimal.xml b/cts/scheduler/xml/minimal.xml similarity index 100% rename from cts/scheduler/minimal.xml rename to cts/scheduler/xml/minimal.xml diff --git a/cts/scheduler/mon-rsc-1.xml b/cts/scheduler/xml/mon-rsc-1.xml similarity index 100% rename from cts/scheduler/mon-rsc-1.xml rename to cts/scheduler/xml/mon-rsc-1.xml diff --git a/cts/scheduler/mon-rsc-2.xml b/cts/scheduler/xml/mon-rsc-2.xml similarity index 100% rename from cts/scheduler/mon-rsc-2.xml rename to cts/scheduler/xml/mon-rsc-2.xml diff --git a/cts/scheduler/mon-rsc-3.xml b/cts/scheduler/xml/mon-rsc-3.xml similarity index 100% rename from cts/scheduler/mon-rsc-3.xml rename to cts/scheduler/xml/mon-rsc-3.xml diff --git a/cts/scheduler/mon-rsc-4.xml b/cts/scheduler/xml/mon-rsc-4.xml similarity index 100% rename from cts/scheduler/mon-rsc-4.xml rename to cts/scheduler/xml/mon-rsc-4.xml diff --git a/cts/scheduler/monitor-onfail-restart.xml b/cts/scheduler/xml/monitor-onfail-restart.xml similarity index 100% rename from cts/scheduler/monitor-onfail-restart.xml rename to cts/scheduler/xml/monitor-onfail-restart.xml diff --git a/cts/scheduler/monitor-onfail-stop.xml b/cts/scheduler/xml/monitor-onfail-stop.xml similarity index 100% rename from cts/scheduler/monitor-onfail-stop.xml rename to cts/scheduler/xml/monitor-onfail-stop.xml diff --git a/cts/scheduler/monitor-recovery.xml b/cts/scheduler/xml/monitor-recovery.xml similarity index 100% rename from cts/scheduler/monitor-recovery.xml rename to cts/scheduler/xml/monitor-recovery.xml diff --git a/cts/scheduler/multi1.xml b/cts/scheduler/xml/multi1.xml similarity index 100% rename from cts/scheduler/multi1.xml rename to cts/scheduler/xml/multi1.xml diff --git a/cts/scheduler/multiple-active-block-group.xml b/cts/scheduler/xml/multiple-active-block-group.xml similarity index 100% rename from cts/scheduler/multiple-active-block-group.xml rename to cts/scheduler/xml/multiple-active-block-group.xml diff --git a/cts/scheduler/multiple-monitor-one-failed.xml b/cts/scheduler/xml/multiple-monitor-one-failed.xml similarity index 100% rename from cts/scheduler/multiple-monitor-one-failed.xml rename to cts/scheduler/xml/multiple-monitor-one-failed.xml diff --git a/cts/scheduler/multiply-active-stonith.xml b/cts/scheduler/xml/multiply-active-stonith.xml similarity index 100% rename from cts/scheduler/multiply-active-stonith.xml rename to cts/scheduler/xml/multiply-active-stonith.xml diff --git a/cts/scheduler/nested-remote-recovery.xml b/cts/scheduler/xml/nested-remote-recovery.xml similarity index 100% rename from cts/scheduler/nested-remote-recovery.xml rename to cts/scheduler/xml/nested-remote-recovery.xml diff --git a/cts/scheduler/no-promote-on-unrunnable-guest.xml b/cts/scheduler/xml/no-promote-on-unrunnable-guest.xml similarity index 100% rename from cts/scheduler/no-promote-on-unrunnable-guest.xml rename to cts/scheduler/xml/no-promote-on-unrunnable-guest.xml diff --git a/cts/scheduler/no_quorum_demote.xml b/cts/scheduler/xml/no_quorum_demote.xml similarity index 100% rename from cts/scheduler/no_quorum_demote.xml rename to cts/scheduler/xml/no_quorum_demote.xml diff --git a/cts/scheduler/node-maintenance-1.xml b/cts/scheduler/xml/node-maintenance-1.xml similarity index 100% rename from cts/scheduler/node-maintenance-1.xml rename to cts/scheduler/xml/node-maintenance-1.xml diff --git a/cts/scheduler/node-maintenance-2.xml b/cts/scheduler/xml/node-maintenance-2.xml similarity index 100% rename from cts/scheduler/node-maintenance-2.xml rename to cts/scheduler/xml/node-maintenance-2.xml diff --git a/cts/scheduler/not-installed-agent.xml b/cts/scheduler/xml/not-installed-agent.xml similarity index 100% rename from cts/scheduler/not-installed-agent.xml rename to cts/scheduler/xml/not-installed-agent.xml diff --git a/cts/scheduler/not-installed-tools.xml b/cts/scheduler/xml/not-installed-tools.xml similarity index 100% rename from cts/scheduler/not-installed-tools.xml rename to cts/scheduler/xml/not-installed-tools.xml diff --git a/cts/scheduler/not-reschedule-unneeded-monitor.xml b/cts/scheduler/xml/not-reschedule-unneeded-monitor.xml similarity index 100% rename from cts/scheduler/not-reschedule-unneeded-monitor.xml rename to cts/scheduler/xml/not-reschedule-unneeded-monitor.xml diff --git a/cts/scheduler/notifs-for-unrunnable.xml b/cts/scheduler/xml/notifs-for-unrunnable.xml similarity index 100% rename from cts/scheduler/notifs-for-unrunnable.xml rename to cts/scheduler/xml/notifs-for-unrunnable.xml diff --git a/cts/scheduler/notify-0.xml b/cts/scheduler/xml/notify-0.xml similarity index 100% rename from cts/scheduler/notify-0.xml rename to cts/scheduler/xml/notify-0.xml diff --git a/cts/scheduler/notify-1.xml b/cts/scheduler/xml/notify-1.xml similarity index 100% rename from cts/scheduler/notify-1.xml rename to cts/scheduler/xml/notify-1.xml diff --git a/cts/scheduler/notify-2.xml b/cts/scheduler/xml/notify-2.xml similarity index 100% rename from cts/scheduler/notify-2.xml rename to cts/scheduler/xml/notify-2.xml diff --git a/cts/scheduler/notify-3.xml b/cts/scheduler/xml/notify-3.xml similarity index 100% rename from cts/scheduler/notify-3.xml rename to cts/scheduler/xml/notify-3.xml diff --git a/cts/scheduler/notify-behind-stopping-remote.xml b/cts/scheduler/xml/notify-behind-stopping-remote.xml similarity index 100% rename from cts/scheduler/notify-behind-stopping-remote.xml rename to cts/scheduler/xml/notify-behind-stopping-remote.xml diff --git a/cts/scheduler/novell-239079.xml b/cts/scheduler/xml/novell-239079.xml similarity index 100% rename from cts/scheduler/novell-239079.xml rename to cts/scheduler/xml/novell-239079.xml diff --git a/cts/scheduler/novell-239082.xml b/cts/scheduler/xml/novell-239082.xml similarity index 100% rename from cts/scheduler/novell-239082.xml rename to cts/scheduler/xml/novell-239082.xml diff --git a/cts/scheduler/novell-239087.xml b/cts/scheduler/xml/novell-239087.xml similarity index 100% rename from cts/scheduler/novell-239087.xml rename to cts/scheduler/xml/novell-239087.xml diff --git a/cts/scheduler/novell-251689.xml b/cts/scheduler/xml/novell-251689.xml similarity index 100% rename from cts/scheduler/novell-251689.xml rename to cts/scheduler/xml/novell-251689.xml diff --git a/cts/scheduler/novell-252693-2.xml b/cts/scheduler/xml/novell-252693-2.xml similarity index 100% rename from cts/scheduler/novell-252693-2.xml rename to cts/scheduler/xml/novell-252693-2.xml diff --git a/cts/scheduler/novell-252693-3.xml b/cts/scheduler/xml/novell-252693-3.xml similarity index 100% rename from cts/scheduler/novell-252693-3.xml rename to cts/scheduler/xml/novell-252693-3.xml diff --git a/cts/scheduler/novell-252693.xml b/cts/scheduler/xml/novell-252693.xml similarity index 100% rename from cts/scheduler/novell-252693.xml rename to cts/scheduler/xml/novell-252693.xml diff --git a/cts/scheduler/nvpair-date-rules-1.xml b/cts/scheduler/xml/nvpair-date-rules-1.xml similarity index 100% rename from cts/scheduler/nvpair-date-rules-1.xml rename to cts/scheduler/xml/nvpair-date-rules-1.xml diff --git a/cts/scheduler/nvpair-id-ref.xml b/cts/scheduler/xml/nvpair-id-ref.xml similarity index 100% rename from cts/scheduler/nvpair-id-ref.xml rename to cts/scheduler/xml/nvpair-id-ref.xml diff --git a/cts/scheduler/obsolete-lrm-resource.xml b/cts/scheduler/xml/obsolete-lrm-resource.xml similarity index 100% rename from cts/scheduler/obsolete-lrm-resource.xml rename to cts/scheduler/xml/obsolete-lrm-resource.xml diff --git a/cts/scheduler/ocf_degraded-remap-ocf_ok.xml b/cts/scheduler/xml/ocf_degraded-remap-ocf_ok.xml similarity index 100% rename from cts/scheduler/ocf_degraded-remap-ocf_ok.xml rename to cts/scheduler/xml/ocf_degraded-remap-ocf_ok.xml diff --git a/cts/scheduler/ocf_degraded_master-remap-ocf_ok.xml b/cts/scheduler/xml/ocf_degraded_master-remap-ocf_ok.xml similarity index 100% rename from cts/scheduler/ocf_degraded_master-remap-ocf_ok.xml rename to cts/scheduler/xml/ocf_degraded_master-remap-ocf_ok.xml diff --git a/cts/scheduler/on-fail-ignore.xml b/cts/scheduler/xml/on-fail-ignore.xml similarity index 100% rename from cts/scheduler/on-fail-ignore.xml rename to cts/scheduler/xml/on-fail-ignore.xml diff --git a/cts/scheduler/on_fail_demote1.xml b/cts/scheduler/xml/on_fail_demote1.xml similarity index 100% rename from cts/scheduler/on_fail_demote1.xml rename to cts/scheduler/xml/on_fail_demote1.xml diff --git a/cts/scheduler/on_fail_demote2.xml b/cts/scheduler/xml/on_fail_demote2.xml similarity index 100% rename from cts/scheduler/on_fail_demote2.xml rename to cts/scheduler/xml/on_fail_demote2.xml diff --git a/cts/scheduler/on_fail_demote3.xml b/cts/scheduler/xml/on_fail_demote3.xml similarity index 100% rename from cts/scheduler/on_fail_demote3.xml rename to cts/scheduler/xml/on_fail_demote3.xml diff --git a/cts/scheduler/on_fail_demote4.xml b/cts/scheduler/xml/on_fail_demote4.xml similarity index 100% rename from cts/scheduler/on_fail_demote4.xml rename to cts/scheduler/xml/on_fail_demote4.xml diff --git a/cts/scheduler/one-or-more-0.xml b/cts/scheduler/xml/one-or-more-0.xml similarity index 100% rename from cts/scheduler/one-or-more-0.xml rename to cts/scheduler/xml/one-or-more-0.xml diff --git a/cts/scheduler/one-or-more-1.xml b/cts/scheduler/xml/one-or-more-1.xml similarity index 100% rename from cts/scheduler/one-or-more-1.xml rename to cts/scheduler/xml/one-or-more-1.xml diff --git a/cts/scheduler/one-or-more-2.xml b/cts/scheduler/xml/one-or-more-2.xml similarity index 100% rename from cts/scheduler/one-or-more-2.xml rename to cts/scheduler/xml/one-or-more-2.xml diff --git a/cts/scheduler/one-or-more-3.xml b/cts/scheduler/xml/one-or-more-3.xml similarity index 100% rename from cts/scheduler/one-or-more-3.xml rename to cts/scheduler/xml/one-or-more-3.xml diff --git a/cts/scheduler/one-or-more-4.xml b/cts/scheduler/xml/one-or-more-4.xml similarity index 100% rename from cts/scheduler/one-or-more-4.xml rename to cts/scheduler/xml/one-or-more-4.xml diff --git a/cts/scheduler/one-or-more-5.xml b/cts/scheduler/xml/one-or-more-5.xml similarity index 100% rename from cts/scheduler/one-or-more-5.xml rename to cts/scheduler/xml/one-or-more-5.xml diff --git a/cts/scheduler/one-or-more-6.xml b/cts/scheduler/xml/one-or-more-6.xml similarity index 100% rename from cts/scheduler/one-or-more-6.xml rename to cts/scheduler/xml/one-or-more-6.xml diff --git a/cts/scheduler/one-or-more-7.xml b/cts/scheduler/xml/one-or-more-7.xml similarity index 100% rename from cts/scheduler/one-or-more-7.xml rename to cts/scheduler/xml/one-or-more-7.xml diff --git a/cts/scheduler/one-or-more-unrunnable-instances.xml b/cts/scheduler/xml/one-or-more-unrunnable-instances.xml similarity index 100% rename from cts/scheduler/one-or-more-unrunnable-instances.xml rename to cts/scheduler/xml/one-or-more-unrunnable-instances.xml diff --git a/cts/scheduler/op-defaults-2.xml b/cts/scheduler/xml/op-defaults-2.xml similarity index 100% rename from cts/scheduler/op-defaults-2.xml rename to cts/scheduler/xml/op-defaults-2.xml diff --git a/cts/scheduler/op-defaults-3.xml b/cts/scheduler/xml/op-defaults-3.xml similarity index 100% rename from cts/scheduler/op-defaults-3.xml rename to cts/scheduler/xml/op-defaults-3.xml diff --git a/cts/scheduler/op-defaults.xml b/cts/scheduler/xml/op-defaults.xml similarity index 100% rename from cts/scheduler/op-defaults.xml rename to cts/scheduler/xml/op-defaults.xml diff --git a/cts/scheduler/order-clone.xml b/cts/scheduler/xml/order-clone.xml similarity index 100% rename from cts/scheduler/order-clone.xml rename to cts/scheduler/xml/order-clone.xml diff --git a/cts/scheduler/order-expired-failure.xml b/cts/scheduler/xml/order-expired-failure.xml similarity index 100% rename from cts/scheduler/order-expired-failure.xml rename to cts/scheduler/xml/order-expired-failure.xml diff --git a/cts/scheduler/order-first-probes.xml b/cts/scheduler/xml/order-first-probes.xml similarity index 100% rename from cts/scheduler/order-first-probes.xml rename to cts/scheduler/xml/order-first-probes.xml diff --git a/cts/scheduler/order-mandatory.xml b/cts/scheduler/xml/order-mandatory.xml similarity index 100% rename from cts/scheduler/order-mandatory.xml rename to cts/scheduler/xml/order-mandatory.xml diff --git a/cts/scheduler/order-optional-keyword.xml b/cts/scheduler/xml/order-optional-keyword.xml similarity index 100% rename from cts/scheduler/order-optional-keyword.xml rename to cts/scheduler/xml/order-optional-keyword.xml diff --git a/cts/scheduler/order-optional.xml b/cts/scheduler/xml/order-optional.xml similarity index 100% rename from cts/scheduler/order-optional.xml rename to cts/scheduler/xml/order-optional.xml diff --git a/cts/scheduler/order-required.xml b/cts/scheduler/xml/order-required.xml similarity index 100% rename from cts/scheduler/order-required.xml rename to cts/scheduler/xml/order-required.xml diff --git a/cts/scheduler/order-serialize-set.xml b/cts/scheduler/xml/order-serialize-set.xml similarity index 100% rename from cts/scheduler/order-serialize-set.xml rename to cts/scheduler/xml/order-serialize-set.xml diff --git a/cts/scheduler/order-serialize.xml b/cts/scheduler/xml/order-serialize.xml similarity index 100% rename from cts/scheduler/order-serialize.xml rename to cts/scheduler/xml/order-serialize.xml diff --git a/cts/scheduler/order-sets.xml b/cts/scheduler/xml/order-sets.xml similarity index 100% rename from cts/scheduler/order-sets.xml rename to cts/scheduler/xml/order-sets.xml diff --git a/cts/scheduler/order-wrong-kind.xml b/cts/scheduler/xml/order-wrong-kind.xml similarity index 100% rename from cts/scheduler/order-wrong-kind.xml rename to cts/scheduler/xml/order-wrong-kind.xml diff --git a/cts/scheduler/order1.xml b/cts/scheduler/xml/order1.xml similarity index 100% rename from cts/scheduler/order1.xml rename to cts/scheduler/xml/order1.xml diff --git a/cts/scheduler/order2.xml b/cts/scheduler/xml/order2.xml similarity index 100% rename from cts/scheduler/order2.xml rename to cts/scheduler/xml/order2.xml diff --git a/cts/scheduler/order3.xml b/cts/scheduler/xml/order3.xml similarity index 100% rename from cts/scheduler/order3.xml rename to cts/scheduler/xml/order3.xml diff --git a/cts/scheduler/order4.xml b/cts/scheduler/xml/order4.xml similarity index 100% rename from cts/scheduler/order4.xml rename to cts/scheduler/xml/order4.xml diff --git a/cts/scheduler/order5.xml b/cts/scheduler/xml/order5.xml similarity index 100% rename from cts/scheduler/order5.xml rename to cts/scheduler/xml/order5.xml diff --git a/cts/scheduler/order6.xml b/cts/scheduler/xml/order6.xml similarity index 100% rename from cts/scheduler/order6.xml rename to cts/scheduler/xml/order6.xml diff --git a/cts/scheduler/order7.xml b/cts/scheduler/xml/order7.xml similarity index 100% rename from cts/scheduler/order7.xml rename to cts/scheduler/xml/order7.xml diff --git a/cts/scheduler/order_constraint_stops_master.xml b/cts/scheduler/xml/order_constraint_stops_master.xml similarity index 100% rename from cts/scheduler/order_constraint_stops_master.xml rename to cts/scheduler/xml/order_constraint_stops_master.xml diff --git a/cts/scheduler/order_constraint_stops_slave.xml b/cts/scheduler/xml/order_constraint_stops_slave.xml similarity index 100% rename from cts/scheduler/order_constraint_stops_slave.xml rename to cts/scheduler/xml/order_constraint_stops_slave.xml diff --git a/cts/scheduler/ordered-set-basic-startup.xml b/cts/scheduler/xml/ordered-set-basic-startup.xml similarity index 100% rename from cts/scheduler/ordered-set-basic-startup.xml rename to cts/scheduler/xml/ordered-set-basic-startup.xml diff --git a/cts/scheduler/ordered-set-natural.xml b/cts/scheduler/xml/ordered-set-natural.xml similarity index 100% rename from cts/scheduler/ordered-set-natural.xml rename to cts/scheduler/xml/ordered-set-natural.xml diff --git a/cts/scheduler/origin.xml b/cts/scheduler/xml/origin.xml similarity index 100% rename from cts/scheduler/origin.xml rename to cts/scheduler/xml/origin.xml diff --git a/cts/scheduler/orphan-0.xml b/cts/scheduler/xml/orphan-0.xml similarity index 100% rename from cts/scheduler/orphan-0.xml rename to cts/scheduler/xml/orphan-0.xml diff --git a/cts/scheduler/orphan-1.xml b/cts/scheduler/xml/orphan-1.xml similarity index 100% rename from cts/scheduler/orphan-1.xml rename to cts/scheduler/xml/orphan-1.xml diff --git a/cts/scheduler/orphan-2.xml b/cts/scheduler/xml/orphan-2.xml similarity index 100% rename from cts/scheduler/orphan-2.xml rename to cts/scheduler/xml/orphan-2.xml diff --git a/cts/scheduler/params-0.xml b/cts/scheduler/xml/params-0.xml similarity index 100% rename from cts/scheduler/params-0.xml rename to cts/scheduler/xml/params-0.xml diff --git a/cts/scheduler/params-1.xml b/cts/scheduler/xml/params-1.xml similarity index 100% rename from cts/scheduler/params-1.xml rename to cts/scheduler/xml/params-1.xml diff --git a/cts/scheduler/params-2.xml b/cts/scheduler/xml/params-2.xml similarity index 100% rename from cts/scheduler/params-2.xml rename to cts/scheduler/xml/params-2.xml diff --git a/cts/scheduler/params-3.xml b/cts/scheduler/xml/params-3.xml similarity index 100% rename from cts/scheduler/params-3.xml rename to cts/scheduler/xml/params-3.xml diff --git a/cts/scheduler/params-4.xml b/cts/scheduler/xml/params-4.xml similarity index 100% rename from cts/scheduler/params-4.xml rename to cts/scheduler/xml/params-4.xml diff --git a/cts/scheduler/params-5.xml b/cts/scheduler/xml/params-5.xml similarity index 100% rename from cts/scheduler/params-5.xml rename to cts/scheduler/xml/params-5.xml diff --git a/cts/scheduler/params-6.xml b/cts/scheduler/xml/params-6.xml similarity index 100% rename from cts/scheduler/params-6.xml rename to cts/scheduler/xml/params-6.xml diff --git a/cts/scheduler/per-node-attrs.xml b/cts/scheduler/xml/per-node-attrs.xml similarity index 100% rename from cts/scheduler/per-node-attrs.xml rename to cts/scheduler/xml/per-node-attrs.xml diff --git a/cts/scheduler/per-op-failcount.xml b/cts/scheduler/xml/per-op-failcount.xml similarity index 100% rename from cts/scheduler/per-op-failcount.xml rename to cts/scheduler/xml/per-op-failcount.xml diff --git a/cts/scheduler/placement-capacity.xml b/cts/scheduler/xml/placement-capacity.xml similarity index 100% rename from cts/scheduler/placement-capacity.xml rename to cts/scheduler/xml/placement-capacity.xml diff --git a/cts/scheduler/placement-location.xml b/cts/scheduler/xml/placement-location.xml similarity index 100% rename from cts/scheduler/placement-location.xml rename to cts/scheduler/xml/placement-location.xml diff --git a/cts/scheduler/placement-priority.xml b/cts/scheduler/xml/placement-priority.xml similarity index 100% rename from cts/scheduler/placement-priority.xml rename to cts/scheduler/xml/placement-priority.xml diff --git a/cts/scheduler/placement-stickiness.xml b/cts/scheduler/xml/placement-stickiness.xml similarity index 100% rename from cts/scheduler/placement-stickiness.xml rename to cts/scheduler/xml/placement-stickiness.xml diff --git a/cts/scheduler/priority-fencing-delay.xml b/cts/scheduler/xml/priority-fencing-delay.xml similarity index 100% rename from cts/scheduler/priority-fencing-delay.xml rename to cts/scheduler/xml/priority-fencing-delay.xml diff --git a/cts/scheduler/probe-0.xml b/cts/scheduler/xml/probe-0.xml similarity index 100% rename from cts/scheduler/probe-0.xml rename to cts/scheduler/xml/probe-0.xml diff --git a/cts/scheduler/probe-1.xml b/cts/scheduler/xml/probe-1.xml similarity index 100% rename from cts/scheduler/probe-1.xml rename to cts/scheduler/xml/probe-1.xml diff --git a/cts/scheduler/probe-2.xml b/cts/scheduler/xml/probe-2.xml similarity index 100% rename from cts/scheduler/probe-2.xml rename to cts/scheduler/xml/probe-2.xml diff --git a/cts/scheduler/probe-3.xml b/cts/scheduler/xml/probe-3.xml similarity index 100% rename from cts/scheduler/probe-3.xml rename to cts/scheduler/xml/probe-3.xml diff --git a/cts/scheduler/probe-4.xml b/cts/scheduler/xml/probe-4.xml similarity index 100% rename from cts/scheduler/probe-4.xml rename to cts/scheduler/xml/probe-4.xml diff --git a/cts/scheduler/probe-timeout.xml b/cts/scheduler/xml/probe-timeout.xml similarity index 100% rename from cts/scheduler/probe-timeout.xml rename to cts/scheduler/xml/probe-timeout.xml diff --git a/cts/scheduler/quorum-1.xml b/cts/scheduler/xml/quorum-1.xml similarity index 100% rename from cts/scheduler/quorum-1.xml rename to cts/scheduler/xml/quorum-1.xml diff --git a/cts/scheduler/quorum-2.xml b/cts/scheduler/xml/quorum-2.xml similarity index 100% rename from cts/scheduler/quorum-2.xml rename to cts/scheduler/xml/quorum-2.xml diff --git a/cts/scheduler/quorum-3.xml b/cts/scheduler/xml/quorum-3.xml similarity index 100% rename from cts/scheduler/quorum-3.xml rename to cts/scheduler/xml/quorum-3.xml diff --git a/cts/scheduler/quorum-4.xml b/cts/scheduler/xml/quorum-4.xml similarity index 100% rename from cts/scheduler/quorum-4.xml rename to cts/scheduler/xml/quorum-4.xml diff --git a/cts/scheduler/quorum-5.xml b/cts/scheduler/xml/quorum-5.xml similarity index 100% rename from cts/scheduler/quorum-5.xml rename to cts/scheduler/xml/quorum-5.xml diff --git a/cts/scheduler/quorum-6.xml b/cts/scheduler/xml/quorum-6.xml similarity index 100% rename from cts/scheduler/quorum-6.xml rename to cts/scheduler/xml/quorum-6.xml diff --git a/cts/scheduler/rebalance-unique-clones.xml b/cts/scheduler/xml/rebalance-unique-clones.xml similarity index 100% rename from cts/scheduler/rebalance-unique-clones.xml rename to cts/scheduler/xml/rebalance-unique-clones.xml diff --git a/cts/scheduler/rec-node-1.xml b/cts/scheduler/xml/rec-node-1.xml similarity index 100% rename from cts/scheduler/rec-node-1.xml rename to cts/scheduler/xml/rec-node-1.xml diff --git a/cts/scheduler/rec-node-10.xml b/cts/scheduler/xml/rec-node-10.xml similarity index 100% rename from cts/scheduler/rec-node-10.xml rename to cts/scheduler/xml/rec-node-10.xml diff --git a/cts/scheduler/rec-node-11.xml b/cts/scheduler/xml/rec-node-11.xml similarity index 100% rename from cts/scheduler/rec-node-11.xml rename to cts/scheduler/xml/rec-node-11.xml diff --git a/cts/scheduler/rec-node-12.xml b/cts/scheduler/xml/rec-node-12.xml similarity index 100% rename from cts/scheduler/rec-node-12.xml rename to cts/scheduler/xml/rec-node-12.xml diff --git a/cts/scheduler/rec-node-13.xml b/cts/scheduler/xml/rec-node-13.xml similarity index 100% rename from cts/scheduler/rec-node-13.xml rename to cts/scheduler/xml/rec-node-13.xml diff --git a/cts/scheduler/rec-node-14.xml b/cts/scheduler/xml/rec-node-14.xml similarity index 100% rename from cts/scheduler/rec-node-14.xml rename to cts/scheduler/xml/rec-node-14.xml diff --git a/cts/scheduler/rec-node-15.xml b/cts/scheduler/xml/rec-node-15.xml similarity index 100% rename from cts/scheduler/rec-node-15.xml rename to cts/scheduler/xml/rec-node-15.xml diff --git a/cts/scheduler/rec-node-2.xml b/cts/scheduler/xml/rec-node-2.xml similarity index 100% rename from cts/scheduler/rec-node-2.xml rename to cts/scheduler/xml/rec-node-2.xml diff --git a/cts/scheduler/rec-node-3.xml b/cts/scheduler/xml/rec-node-3.xml similarity index 100% rename from cts/scheduler/rec-node-3.xml rename to cts/scheduler/xml/rec-node-3.xml diff --git a/cts/scheduler/rec-node-4.xml b/cts/scheduler/xml/rec-node-4.xml similarity index 100% rename from cts/scheduler/rec-node-4.xml rename to cts/scheduler/xml/rec-node-4.xml diff --git a/cts/scheduler/rec-node-5.xml b/cts/scheduler/xml/rec-node-5.xml similarity index 100% rename from cts/scheduler/rec-node-5.xml rename to cts/scheduler/xml/rec-node-5.xml diff --git a/cts/scheduler/rec-node-6.xml b/cts/scheduler/xml/rec-node-6.xml similarity index 100% rename from cts/scheduler/rec-node-6.xml rename to cts/scheduler/xml/rec-node-6.xml diff --git a/cts/scheduler/rec-node-7.xml b/cts/scheduler/xml/rec-node-7.xml similarity index 100% rename from cts/scheduler/rec-node-7.xml rename to cts/scheduler/xml/rec-node-7.xml diff --git a/cts/scheduler/rec-node-8.xml b/cts/scheduler/xml/rec-node-8.xml similarity index 100% rename from cts/scheduler/rec-node-8.xml rename to cts/scheduler/xml/rec-node-8.xml diff --git a/cts/scheduler/rec-node-9.xml b/cts/scheduler/xml/rec-node-9.xml similarity index 100% rename from cts/scheduler/rec-node-9.xml rename to cts/scheduler/xml/rec-node-9.xml diff --git a/cts/scheduler/rec-rsc-0.xml b/cts/scheduler/xml/rec-rsc-0.xml similarity index 100% rename from cts/scheduler/rec-rsc-0.xml rename to cts/scheduler/xml/rec-rsc-0.xml diff --git a/cts/scheduler/rec-rsc-1.xml b/cts/scheduler/xml/rec-rsc-1.xml similarity index 100% rename from cts/scheduler/rec-rsc-1.xml rename to cts/scheduler/xml/rec-rsc-1.xml diff --git a/cts/scheduler/rec-rsc-2.xml b/cts/scheduler/xml/rec-rsc-2.xml similarity index 100% rename from cts/scheduler/rec-rsc-2.xml rename to cts/scheduler/xml/rec-rsc-2.xml diff --git a/cts/scheduler/rec-rsc-3.xml b/cts/scheduler/xml/rec-rsc-3.xml similarity index 100% rename from cts/scheduler/rec-rsc-3.xml rename to cts/scheduler/xml/rec-rsc-3.xml diff --git a/cts/scheduler/rec-rsc-4.xml b/cts/scheduler/xml/rec-rsc-4.xml similarity index 100% rename from cts/scheduler/rec-rsc-4.xml rename to cts/scheduler/xml/rec-rsc-4.xml diff --git a/cts/scheduler/rec-rsc-5.xml b/cts/scheduler/xml/rec-rsc-5.xml similarity index 100% rename from cts/scheduler/rec-rsc-5.xml rename to cts/scheduler/xml/rec-rsc-5.xml diff --git a/cts/scheduler/rec-rsc-6.xml b/cts/scheduler/xml/rec-rsc-6.xml similarity index 100% rename from cts/scheduler/rec-rsc-6.xml rename to cts/scheduler/xml/rec-rsc-6.xml diff --git a/cts/scheduler/rec-rsc-7.xml b/cts/scheduler/xml/rec-rsc-7.xml similarity index 100% rename from cts/scheduler/rec-rsc-7.xml rename to cts/scheduler/xml/rec-rsc-7.xml diff --git a/cts/scheduler/rec-rsc-8.xml b/cts/scheduler/xml/rec-rsc-8.xml similarity index 100% rename from cts/scheduler/rec-rsc-8.xml rename to cts/scheduler/xml/rec-rsc-8.xml diff --git a/cts/scheduler/rec-rsc-9.xml b/cts/scheduler/xml/rec-rsc-9.xml similarity index 100% rename from cts/scheduler/rec-rsc-9.xml rename to cts/scheduler/xml/rec-rsc-9.xml diff --git a/cts/scheduler/reload-becomes-restart.xml b/cts/scheduler/xml/reload-becomes-restart.xml similarity index 100% rename from cts/scheduler/reload-becomes-restart.xml rename to cts/scheduler/xml/reload-becomes-restart.xml diff --git a/cts/scheduler/reload-versioned.xml b/cts/scheduler/xml/reload-versioned.xml similarity index 100% rename from cts/scheduler/reload-versioned.xml rename to cts/scheduler/xml/reload-versioned.xml diff --git a/cts/scheduler/remote-connection-shutdown.xml b/cts/scheduler/xml/remote-connection-shutdown.xml similarity index 100% rename from cts/scheduler/remote-connection-shutdown.xml rename to cts/scheduler/xml/remote-connection-shutdown.xml diff --git a/cts/scheduler/remote-connection-unrecoverable.xml b/cts/scheduler/xml/remote-connection-unrecoverable.xml similarity index 100% rename from cts/scheduler/remote-connection-unrecoverable.xml rename to cts/scheduler/xml/remote-connection-unrecoverable.xml diff --git a/cts/scheduler/remote-disable.xml b/cts/scheduler/xml/remote-disable.xml similarity index 100% rename from cts/scheduler/remote-disable.xml rename to cts/scheduler/xml/remote-disable.xml diff --git a/cts/scheduler/remote-fence-before-reconnect.xml b/cts/scheduler/xml/remote-fence-before-reconnect.xml similarity index 100% rename from cts/scheduler/remote-fence-before-reconnect.xml rename to cts/scheduler/xml/remote-fence-before-reconnect.xml diff --git a/cts/scheduler/remote-fence-unclean-3.xml b/cts/scheduler/xml/remote-fence-unclean-3.xml similarity index 100% rename from cts/scheduler/remote-fence-unclean-3.xml rename to cts/scheduler/xml/remote-fence-unclean-3.xml diff --git a/cts/scheduler/remote-fence-unclean.xml b/cts/scheduler/xml/remote-fence-unclean.xml similarity index 100% rename from cts/scheduler/remote-fence-unclean.xml rename to cts/scheduler/xml/remote-fence-unclean.xml diff --git a/cts/scheduler/remote-fence-unclean2.xml b/cts/scheduler/xml/remote-fence-unclean2.xml similarity index 100% rename from cts/scheduler/remote-fence-unclean2.xml rename to cts/scheduler/xml/remote-fence-unclean2.xml diff --git a/cts/scheduler/remote-move.xml b/cts/scheduler/xml/remote-move.xml similarity index 100% rename from cts/scheduler/remote-move.xml rename to cts/scheduler/xml/remote-move.xml diff --git a/cts/scheduler/remote-orphaned.xml b/cts/scheduler/xml/remote-orphaned.xml similarity index 100% rename from cts/scheduler/remote-orphaned.xml rename to cts/scheduler/xml/remote-orphaned.xml diff --git a/cts/scheduler/remote-orphaned2.xml b/cts/scheduler/xml/remote-orphaned2.xml similarity index 100% rename from cts/scheduler/remote-orphaned2.xml rename to cts/scheduler/xml/remote-orphaned2.xml diff --git a/cts/scheduler/remote-partial-migrate.xml b/cts/scheduler/xml/remote-partial-migrate.xml similarity index 100% rename from cts/scheduler/remote-partial-migrate.xml rename to cts/scheduler/xml/remote-partial-migrate.xml diff --git a/cts/scheduler/remote-partial-migrate2.xml b/cts/scheduler/xml/remote-partial-migrate2.xml similarity index 100% rename from cts/scheduler/remote-partial-migrate2.xml rename to cts/scheduler/xml/remote-partial-migrate2.xml diff --git a/cts/scheduler/remote-probe-disable.xml b/cts/scheduler/xml/remote-probe-disable.xml similarity index 100% rename from cts/scheduler/remote-probe-disable.xml rename to cts/scheduler/xml/remote-probe-disable.xml diff --git a/cts/scheduler/remote-reconnect-delay.xml b/cts/scheduler/xml/remote-reconnect-delay.xml similarity index 100% rename from cts/scheduler/remote-reconnect-delay.xml rename to cts/scheduler/xml/remote-reconnect-delay.xml diff --git a/cts/scheduler/remote-recover-all.xml b/cts/scheduler/xml/remote-recover-all.xml similarity index 100% rename from cts/scheduler/remote-recover-all.xml rename to cts/scheduler/xml/remote-recover-all.xml diff --git a/cts/scheduler/remote-recover-connection.xml b/cts/scheduler/xml/remote-recover-connection.xml similarity index 100% rename from cts/scheduler/remote-recover-connection.xml rename to cts/scheduler/xml/remote-recover-connection.xml diff --git a/cts/scheduler/remote-recover-fail.xml b/cts/scheduler/xml/remote-recover-fail.xml similarity index 100% rename from cts/scheduler/remote-recover-fail.xml rename to cts/scheduler/xml/remote-recover-fail.xml diff --git a/cts/scheduler/remote-recover-no-resources.xml b/cts/scheduler/xml/remote-recover-no-resources.xml similarity index 100% rename from cts/scheduler/remote-recover-no-resources.xml rename to cts/scheduler/xml/remote-recover-no-resources.xml diff --git a/cts/scheduler/remote-recover-unknown.xml b/cts/scheduler/xml/remote-recover-unknown.xml similarity index 100% rename from cts/scheduler/remote-recover-unknown.xml rename to cts/scheduler/xml/remote-recover-unknown.xml diff --git a/cts/scheduler/remote-recover.xml b/cts/scheduler/xml/remote-recover.xml similarity index 100% rename from cts/scheduler/remote-recover.xml rename to cts/scheduler/xml/remote-recover.xml diff --git a/cts/scheduler/remote-recovery.xml b/cts/scheduler/xml/remote-recovery.xml similarity index 100% rename from cts/scheduler/remote-recovery.xml rename to cts/scheduler/xml/remote-recovery.xml diff --git a/cts/scheduler/remote-stale-node-entry.xml b/cts/scheduler/xml/remote-stale-node-entry.xml similarity index 100% rename from cts/scheduler/remote-stale-node-entry.xml rename to cts/scheduler/xml/remote-stale-node-entry.xml diff --git a/cts/scheduler/remote-start-fail.xml b/cts/scheduler/xml/remote-start-fail.xml similarity index 100% rename from cts/scheduler/remote-start-fail.xml rename to cts/scheduler/xml/remote-start-fail.xml diff --git a/cts/scheduler/remote-startup-probes.xml b/cts/scheduler/xml/remote-startup-probes.xml similarity index 100% rename from cts/scheduler/remote-startup-probes.xml rename to cts/scheduler/xml/remote-startup-probes.xml diff --git a/cts/scheduler/remote-startup.xml b/cts/scheduler/xml/remote-startup.xml similarity index 100% rename from cts/scheduler/remote-startup.xml rename to cts/scheduler/xml/remote-startup.xml diff --git a/cts/scheduler/remote-unclean2.xml b/cts/scheduler/xml/remote-unclean2.xml similarity index 100% rename from cts/scheduler/remote-unclean2.xml rename to cts/scheduler/xml/remote-unclean2.xml diff --git a/cts/scheduler/reprobe-target_rc.xml b/cts/scheduler/xml/reprobe-target_rc.xml similarity index 100% rename from cts/scheduler/reprobe-target_rc.xml rename to cts/scheduler/xml/reprobe-target_rc.xml diff --git a/cts/scheduler/resource-discovery.xml b/cts/scheduler/xml/resource-discovery.xml similarity index 100% rename from cts/scheduler/resource-discovery.xml rename to cts/scheduler/xml/resource-discovery.xml diff --git a/cts/scheduler/restart-versioned.xml b/cts/scheduler/xml/restart-versioned.xml similarity index 100% rename from cts/scheduler/restart-versioned.xml rename to cts/scheduler/xml/restart-versioned.xml diff --git a/cts/scheduler/route-remote-notify.xml b/cts/scheduler/xml/route-remote-notify.xml similarity index 100% rename from cts/scheduler/route-remote-notify.xml rename to cts/scheduler/xml/route-remote-notify.xml diff --git a/cts/scheduler/rsc-defaults-2.xml b/cts/scheduler/xml/rsc-defaults-2.xml similarity index 100% rename from cts/scheduler/rsc-defaults-2.xml rename to cts/scheduler/xml/rsc-defaults-2.xml diff --git a/cts/scheduler/rsc-defaults.xml b/cts/scheduler/xml/rsc-defaults.xml similarity index 100% rename from cts/scheduler/rsc-defaults.xml rename to cts/scheduler/xml/rsc-defaults.xml diff --git a/cts/scheduler/rsc-discovery-per-node.xml b/cts/scheduler/xml/rsc-discovery-per-node.xml similarity index 100% rename from cts/scheduler/rsc-discovery-per-node.xml rename to cts/scheduler/xml/rsc-discovery-per-node.xml diff --git a/cts/scheduler/rsc-maintenance.xml b/cts/scheduler/xml/rsc-maintenance.xml similarity index 100% rename from cts/scheduler/rsc-maintenance.xml rename to cts/scheduler/xml/rsc-maintenance.xml diff --git a/cts/scheduler/rsc-sets-clone-1.xml b/cts/scheduler/xml/rsc-sets-clone-1.xml similarity index 100% rename from cts/scheduler/rsc-sets-clone-1.xml rename to cts/scheduler/xml/rsc-sets-clone-1.xml diff --git a/cts/scheduler/rsc-sets-clone.xml b/cts/scheduler/xml/rsc-sets-clone.xml similarity index 100% rename from cts/scheduler/rsc-sets-clone.xml rename to cts/scheduler/xml/rsc-sets-clone.xml diff --git a/cts/scheduler/rsc-sets-master.xml b/cts/scheduler/xml/rsc-sets-master.xml similarity index 100% rename from cts/scheduler/rsc-sets-master.xml rename to cts/scheduler/xml/rsc-sets-master.xml diff --git a/cts/scheduler/rsc-sets-seq-false.xml b/cts/scheduler/xml/rsc-sets-seq-false.xml similarity index 100% rename from cts/scheduler/rsc-sets-seq-false.xml rename to cts/scheduler/xml/rsc-sets-seq-false.xml diff --git a/cts/scheduler/rsc-sets-seq-true.xml b/cts/scheduler/xml/rsc-sets-seq-true.xml similarity index 100% rename from cts/scheduler/rsc-sets-seq-true.xml rename to cts/scheduler/xml/rsc-sets-seq-true.xml diff --git a/cts/scheduler/rsc_dep1.xml b/cts/scheduler/xml/rsc_dep1.xml similarity index 100% rename from cts/scheduler/rsc_dep1.xml rename to cts/scheduler/xml/rsc_dep1.xml diff --git a/cts/scheduler/rsc_dep10.xml b/cts/scheduler/xml/rsc_dep10.xml similarity index 100% rename from cts/scheduler/rsc_dep10.xml rename to cts/scheduler/xml/rsc_dep10.xml diff --git a/cts/scheduler/rsc_dep2.xml b/cts/scheduler/xml/rsc_dep2.xml similarity index 100% rename from cts/scheduler/rsc_dep2.xml rename to cts/scheduler/xml/rsc_dep2.xml diff --git a/cts/scheduler/rsc_dep3.xml b/cts/scheduler/xml/rsc_dep3.xml similarity index 100% rename from cts/scheduler/rsc_dep3.xml rename to cts/scheduler/xml/rsc_dep3.xml diff --git a/cts/scheduler/rsc_dep4.xml b/cts/scheduler/xml/rsc_dep4.xml similarity index 100% rename from cts/scheduler/rsc_dep4.xml rename to cts/scheduler/xml/rsc_dep4.xml diff --git a/cts/scheduler/rsc_dep5.xml b/cts/scheduler/xml/rsc_dep5.xml similarity index 100% rename from cts/scheduler/rsc_dep5.xml rename to cts/scheduler/xml/rsc_dep5.xml diff --git a/cts/scheduler/rsc_dep7.xml b/cts/scheduler/xml/rsc_dep7.xml similarity index 100% rename from cts/scheduler/rsc_dep7.xml rename to cts/scheduler/xml/rsc_dep7.xml diff --git a/cts/scheduler/rsc_dep8.xml b/cts/scheduler/xml/rsc_dep8.xml similarity index 100% rename from cts/scheduler/rsc_dep8.xml rename to cts/scheduler/xml/rsc_dep8.xml diff --git a/cts/scheduler/rule-dbl-as-auto-number-match.xml b/cts/scheduler/xml/rule-dbl-as-auto-number-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-match.xml rename to cts/scheduler/xml/rule-dbl-as-auto-number-match.xml diff --git a/cts/scheduler/rule-dbl-as-auto-number-no-match.xml b/cts/scheduler/xml/rule-dbl-as-auto-number-no-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-as-auto-number-no-match.xml rename to cts/scheduler/xml/rule-dbl-as-auto-number-no-match.xml diff --git a/cts/scheduler/rule-dbl-as-integer-match.xml b/cts/scheduler/xml/rule-dbl-as-integer-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-match.xml rename to cts/scheduler/xml/rule-dbl-as-integer-match.xml diff --git a/cts/scheduler/rule-dbl-as-integer-no-match.xml b/cts/scheduler/xml/rule-dbl-as-integer-no-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-as-integer-no-match.xml rename to cts/scheduler/xml/rule-dbl-as-integer-no-match.xml diff --git a/cts/scheduler/rule-dbl-as-number-match.xml b/cts/scheduler/xml/rule-dbl-as-number-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-as-number-match.xml rename to cts/scheduler/xml/rule-dbl-as-number-match.xml diff --git a/cts/scheduler/rule-dbl-as-number-no-match.xml b/cts/scheduler/xml/rule-dbl-as-number-no-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-as-number-no-match.xml rename to cts/scheduler/xml/rule-dbl-as-number-no-match.xml diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-match.xml b/cts/scheduler/xml/rule-dbl-parse-fail-default-str-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-match.xml rename to cts/scheduler/xml/rule-dbl-parse-fail-default-str-match.xml diff --git a/cts/scheduler/rule-dbl-parse-fail-default-str-no-match.xml b/cts/scheduler/xml/rule-dbl-parse-fail-default-str-no-match.xml similarity index 100% rename from cts/scheduler/rule-dbl-parse-fail-default-str-no-match.xml rename to cts/scheduler/xml/rule-dbl-parse-fail-default-str-no-match.xml diff --git a/cts/scheduler/rule-int-as-auto-integer-match.xml b/cts/scheduler/xml/rule-int-as-auto-integer-match.xml similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-match.xml rename to cts/scheduler/xml/rule-int-as-auto-integer-match.xml diff --git a/cts/scheduler/rule-int-as-auto-integer-no-match.xml b/cts/scheduler/xml/rule-int-as-auto-integer-no-match.xml similarity index 100% rename from cts/scheduler/rule-int-as-auto-integer-no-match.xml rename to cts/scheduler/xml/rule-int-as-auto-integer-no-match.xml diff --git a/cts/scheduler/rule-int-as-integer-match.xml b/cts/scheduler/xml/rule-int-as-integer-match.xml similarity index 100% rename from cts/scheduler/rule-int-as-integer-match.xml rename to cts/scheduler/xml/rule-int-as-integer-match.xml diff --git a/cts/scheduler/rule-int-as-integer-no-match.xml b/cts/scheduler/xml/rule-int-as-integer-no-match.xml similarity index 100% rename from cts/scheduler/rule-int-as-integer-no-match.xml rename to cts/scheduler/xml/rule-int-as-integer-no-match.xml diff --git a/cts/scheduler/rule-int-as-number-match.xml b/cts/scheduler/xml/rule-int-as-number-match.xml similarity index 100% rename from cts/scheduler/rule-int-as-number-match.xml rename to cts/scheduler/xml/rule-int-as-number-match.xml diff --git a/cts/scheduler/rule-int-as-number-no-match.xml b/cts/scheduler/xml/rule-int-as-number-no-match.xml similarity index 100% rename from cts/scheduler/rule-int-as-number-no-match.xml rename to cts/scheduler/xml/rule-int-as-number-no-match.xml diff --git a/cts/scheduler/rule-int-parse-fail-default-str-match.xml b/cts/scheduler/xml/rule-int-parse-fail-default-str-match.xml similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-match.xml rename to cts/scheduler/xml/rule-int-parse-fail-default-str-match.xml diff --git a/cts/scheduler/rule-int-parse-fail-default-str-no-match.xml b/cts/scheduler/xml/rule-int-parse-fail-default-str-no-match.xml similarity index 100% rename from cts/scheduler/rule-int-parse-fail-default-str-no-match.xml rename to cts/scheduler/xml/rule-int-parse-fail-default-str-no-match.xml diff --git a/cts/scheduler/shutdown-lock-expiration.xml b/cts/scheduler/xml/shutdown-lock-expiration.xml similarity index 100% rename from cts/scheduler/shutdown-lock-expiration.xml rename to cts/scheduler/xml/shutdown-lock-expiration.xml diff --git a/cts/scheduler/shutdown-lock.xml b/cts/scheduler/xml/shutdown-lock.xml similarity index 100% rename from cts/scheduler/shutdown-lock.xml rename to cts/scheduler/xml/shutdown-lock.xml diff --git a/cts/scheduler/shutdown-maintenance-node.xml b/cts/scheduler/xml/shutdown-maintenance-node.xml similarity index 100% rename from cts/scheduler/shutdown-maintenance-node.xml rename to cts/scheduler/xml/shutdown-maintenance-node.xml diff --git a/cts/scheduler/simple1.xml b/cts/scheduler/xml/simple1.xml similarity index 100% rename from cts/scheduler/simple1.xml rename to cts/scheduler/xml/simple1.xml diff --git a/cts/scheduler/simple11.xml b/cts/scheduler/xml/simple11.xml similarity index 100% rename from cts/scheduler/simple11.xml rename to cts/scheduler/xml/simple11.xml diff --git a/cts/scheduler/simple12.xml b/cts/scheduler/xml/simple12.xml similarity index 100% rename from cts/scheduler/simple12.xml rename to cts/scheduler/xml/simple12.xml diff --git a/cts/scheduler/simple2.xml b/cts/scheduler/xml/simple2.xml similarity index 100% rename from cts/scheduler/simple2.xml rename to cts/scheduler/xml/simple2.xml diff --git a/cts/scheduler/simple3.xml b/cts/scheduler/xml/simple3.xml similarity index 100% rename from cts/scheduler/simple3.xml rename to cts/scheduler/xml/simple3.xml diff --git a/cts/scheduler/simple4.xml b/cts/scheduler/xml/simple4.xml similarity index 100% rename from cts/scheduler/simple4.xml rename to cts/scheduler/xml/simple4.xml diff --git a/cts/scheduler/simple6.xml b/cts/scheduler/xml/simple6.xml similarity index 100% rename from cts/scheduler/simple6.xml rename to cts/scheduler/xml/simple6.xml diff --git a/cts/scheduler/simple7.xml b/cts/scheduler/xml/simple7.xml similarity index 100% rename from cts/scheduler/simple7.xml rename to cts/scheduler/xml/simple7.xml diff --git a/cts/scheduler/simple8.xml b/cts/scheduler/xml/simple8.xml similarity index 100% rename from cts/scheduler/simple8.xml rename to cts/scheduler/xml/simple8.xml diff --git a/cts/scheduler/site-specific-params.xml b/cts/scheduler/xml/site-specific-params.xml similarity index 100% rename from cts/scheduler/site-specific-params.xml rename to cts/scheduler/xml/site-specific-params.xml diff --git a/cts/scheduler/standby.xml b/cts/scheduler/xml/standby.xml similarity index 100% rename from cts/scheduler/standby.xml rename to cts/scheduler/xml/standby.xml diff --git a/cts/scheduler/start-then-stop-with-unfence.xml b/cts/scheduler/xml/start-then-stop-with-unfence.xml similarity index 100% rename from cts/scheduler/start-then-stop-with-unfence.xml rename to cts/scheduler/xml/start-then-stop-with-unfence.xml diff --git a/cts/scheduler/stonith-0.xml b/cts/scheduler/xml/stonith-0.xml similarity index 100% rename from cts/scheduler/stonith-0.xml rename to cts/scheduler/xml/stonith-0.xml diff --git a/cts/scheduler/stonith-1.xml b/cts/scheduler/xml/stonith-1.xml similarity index 100% rename from cts/scheduler/stonith-1.xml rename to cts/scheduler/xml/stonith-1.xml diff --git a/cts/scheduler/stonith-2.xml b/cts/scheduler/xml/stonith-2.xml similarity index 100% rename from cts/scheduler/stonith-2.xml rename to cts/scheduler/xml/stonith-2.xml diff --git a/cts/scheduler/stonith-3.xml b/cts/scheduler/xml/stonith-3.xml similarity index 100% rename from cts/scheduler/stonith-3.xml rename to cts/scheduler/xml/stonith-3.xml diff --git a/cts/scheduler/stonith-4.xml b/cts/scheduler/xml/stonith-4.xml similarity index 100% rename from cts/scheduler/stonith-4.xml rename to cts/scheduler/xml/stonith-4.xml diff --git a/cts/scheduler/stop-all-resources.xml b/cts/scheduler/xml/stop-all-resources.xml similarity index 100% rename from cts/scheduler/stop-all-resources.xml rename to cts/scheduler/xml/stop-all-resources.xml diff --git a/cts/scheduler/stop-failure-no-fencing.xml b/cts/scheduler/xml/stop-failure-no-fencing.xml similarity index 100% rename from cts/scheduler/stop-failure-no-fencing.xml rename to cts/scheduler/xml/stop-failure-no-fencing.xml diff --git a/cts/scheduler/stop-failure-no-quorum.xml b/cts/scheduler/xml/stop-failure-no-quorum.xml similarity index 100% rename from cts/scheduler/stop-failure-no-quorum.xml rename to cts/scheduler/xml/stop-failure-no-quorum.xml diff --git a/cts/scheduler/stop-failure-with-fencing.xml b/cts/scheduler/xml/stop-failure-with-fencing.xml similarity index 100% rename from cts/scheduler/stop-failure-with-fencing.xml rename to cts/scheduler/xml/stop-failure-with-fencing.xml diff --git a/cts/scheduler/stopped-monitor-00.xml b/cts/scheduler/xml/stopped-monitor-00.xml similarity index 100% rename from cts/scheduler/stopped-monitor-00.xml rename to cts/scheduler/xml/stopped-monitor-00.xml diff --git a/cts/scheduler/stopped-monitor-01.xml b/cts/scheduler/xml/stopped-monitor-01.xml similarity index 100% rename from cts/scheduler/stopped-monitor-01.xml rename to cts/scheduler/xml/stopped-monitor-01.xml diff --git a/cts/scheduler/stopped-monitor-02.xml b/cts/scheduler/xml/stopped-monitor-02.xml similarity index 100% rename from cts/scheduler/stopped-monitor-02.xml rename to cts/scheduler/xml/stopped-monitor-02.xml diff --git a/cts/scheduler/stopped-monitor-03.xml b/cts/scheduler/xml/stopped-monitor-03.xml similarity index 100% rename from cts/scheduler/stopped-monitor-03.xml rename to cts/scheduler/xml/stopped-monitor-03.xml diff --git a/cts/scheduler/stopped-monitor-04.xml b/cts/scheduler/xml/stopped-monitor-04.xml similarity index 100% rename from cts/scheduler/stopped-monitor-04.xml rename to cts/scheduler/xml/stopped-monitor-04.xml diff --git a/cts/scheduler/stopped-monitor-05.xml b/cts/scheduler/xml/stopped-monitor-05.xml similarity index 100% rename from cts/scheduler/stopped-monitor-05.xml rename to cts/scheduler/xml/stopped-monitor-05.xml diff --git a/cts/scheduler/stopped-monitor-06.xml b/cts/scheduler/xml/stopped-monitor-06.xml similarity index 100% rename from cts/scheduler/stopped-monitor-06.xml rename to cts/scheduler/xml/stopped-monitor-06.xml diff --git a/cts/scheduler/stopped-monitor-07.xml b/cts/scheduler/xml/stopped-monitor-07.xml similarity index 100% rename from cts/scheduler/stopped-monitor-07.xml rename to cts/scheduler/xml/stopped-monitor-07.xml diff --git a/cts/scheduler/stopped-monitor-08.xml b/cts/scheduler/xml/stopped-monitor-08.xml similarity index 100% rename from cts/scheduler/stopped-monitor-08.xml rename to cts/scheduler/xml/stopped-monitor-08.xml diff --git a/cts/scheduler/stopped-monitor-09.xml b/cts/scheduler/xml/stopped-monitor-09.xml similarity index 100% rename from cts/scheduler/stopped-monitor-09.xml rename to cts/scheduler/xml/stopped-monitor-09.xml diff --git a/cts/scheduler/stopped-monitor-10.xml b/cts/scheduler/xml/stopped-monitor-10.xml similarity index 100% rename from cts/scheduler/stopped-monitor-10.xml rename to cts/scheduler/xml/stopped-monitor-10.xml diff --git a/cts/scheduler/stopped-monitor-11.xml b/cts/scheduler/xml/stopped-monitor-11.xml similarity index 100% rename from cts/scheduler/stopped-monitor-11.xml rename to cts/scheduler/xml/stopped-monitor-11.xml diff --git a/cts/scheduler/stopped-monitor-12.xml b/cts/scheduler/xml/stopped-monitor-12.xml similarity index 100% rename from cts/scheduler/stopped-monitor-12.xml rename to cts/scheduler/xml/stopped-monitor-12.xml diff --git a/cts/scheduler/stopped-monitor-20.xml b/cts/scheduler/xml/stopped-monitor-20.xml similarity index 100% rename from cts/scheduler/stopped-monitor-20.xml rename to cts/scheduler/xml/stopped-monitor-20.xml diff --git a/cts/scheduler/stopped-monitor-21.xml b/cts/scheduler/xml/stopped-monitor-21.xml similarity index 100% rename from cts/scheduler/stopped-monitor-21.xml rename to cts/scheduler/xml/stopped-monitor-21.xml diff --git a/cts/scheduler/stopped-monitor-22.xml b/cts/scheduler/xml/stopped-monitor-22.xml similarity index 100% rename from cts/scheduler/stopped-monitor-22.xml rename to cts/scheduler/xml/stopped-monitor-22.xml diff --git a/cts/scheduler/stopped-monitor-23.xml b/cts/scheduler/xml/stopped-monitor-23.xml similarity index 100% rename from cts/scheduler/stopped-monitor-23.xml rename to cts/scheduler/xml/stopped-monitor-23.xml diff --git a/cts/scheduler/stopped-monitor-24.xml b/cts/scheduler/xml/stopped-monitor-24.xml similarity index 100% rename from cts/scheduler/stopped-monitor-24.xml rename to cts/scheduler/xml/stopped-monitor-24.xml diff --git a/cts/scheduler/stopped-monitor-25.xml b/cts/scheduler/xml/stopped-monitor-25.xml similarity index 100% rename from cts/scheduler/stopped-monitor-25.xml rename to cts/scheduler/xml/stopped-monitor-25.xml diff --git a/cts/scheduler/stopped-monitor-26.xml b/cts/scheduler/xml/stopped-monitor-26.xml similarity index 100% rename from cts/scheduler/stopped-monitor-26.xml rename to cts/scheduler/xml/stopped-monitor-26.xml diff --git a/cts/scheduler/stopped-monitor-27.xml b/cts/scheduler/xml/stopped-monitor-27.xml similarity index 100% rename from cts/scheduler/stopped-monitor-27.xml rename to cts/scheduler/xml/stopped-monitor-27.xml diff --git a/cts/scheduler/stopped-monitor-30.xml b/cts/scheduler/xml/stopped-monitor-30.xml similarity index 100% rename from cts/scheduler/stopped-monitor-30.xml rename to cts/scheduler/xml/stopped-monitor-30.xml diff --git a/cts/scheduler/stopped-monitor-31.xml b/cts/scheduler/xml/stopped-monitor-31.xml similarity index 100% rename from cts/scheduler/stopped-monitor-31.xml rename to cts/scheduler/xml/stopped-monitor-31.xml diff --git a/cts/scheduler/suicide-needed-inquorate.xml b/cts/scheduler/xml/suicide-needed-inquorate.xml similarity index 100% rename from cts/scheduler/suicide-needed-inquorate.xml rename to cts/scheduler/xml/suicide-needed-inquorate.xml diff --git a/cts/scheduler/suicide-not-needed-initial-quorum.xml b/cts/scheduler/xml/suicide-not-needed-initial-quorum.xml similarity index 100% rename from cts/scheduler/suicide-not-needed-initial-quorum.xml rename to cts/scheduler/xml/suicide-not-needed-initial-quorum.xml diff --git a/cts/scheduler/suicide-not-needed-never-quorate.xml b/cts/scheduler/xml/suicide-not-needed-never-quorate.xml similarity index 100% rename from cts/scheduler/suicide-not-needed-never-quorate.xml rename to cts/scheduler/xml/suicide-not-needed-never-quorate.xml diff --git a/cts/scheduler/suicide-not-needed-quorate.xml b/cts/scheduler/xml/suicide-not-needed-quorate.xml similarity index 100% rename from cts/scheduler/suicide-not-needed-quorate.xml rename to cts/scheduler/xml/suicide-not-needed-quorate.xml diff --git a/cts/scheduler/systemhealth1.xml b/cts/scheduler/xml/systemhealth1.xml similarity index 100% rename from cts/scheduler/systemhealth1.xml rename to cts/scheduler/xml/systemhealth1.xml diff --git a/cts/scheduler/systemhealth2.xml b/cts/scheduler/xml/systemhealth2.xml similarity index 100% rename from cts/scheduler/systemhealth2.xml rename to cts/scheduler/xml/systemhealth2.xml diff --git a/cts/scheduler/systemhealth3.xml b/cts/scheduler/xml/systemhealth3.xml similarity index 100% rename from cts/scheduler/systemhealth3.xml rename to cts/scheduler/xml/systemhealth3.xml diff --git a/cts/scheduler/systemhealthm1.xml b/cts/scheduler/xml/systemhealthm1.xml similarity index 100% rename from cts/scheduler/systemhealthm1.xml rename to cts/scheduler/xml/systemhealthm1.xml diff --git a/cts/scheduler/systemhealthm2.xml b/cts/scheduler/xml/systemhealthm2.xml similarity index 100% rename from cts/scheduler/systemhealthm2.xml rename to cts/scheduler/xml/systemhealthm2.xml diff --git a/cts/scheduler/systemhealthm3.xml b/cts/scheduler/xml/systemhealthm3.xml similarity index 100% rename from cts/scheduler/systemhealthm3.xml rename to cts/scheduler/xml/systemhealthm3.xml diff --git a/cts/scheduler/systemhealthn1.xml b/cts/scheduler/xml/systemhealthn1.xml similarity index 100% rename from cts/scheduler/systemhealthn1.xml rename to cts/scheduler/xml/systemhealthn1.xml diff --git a/cts/scheduler/systemhealthn2.xml b/cts/scheduler/xml/systemhealthn2.xml similarity index 100% rename from cts/scheduler/systemhealthn2.xml rename to cts/scheduler/xml/systemhealthn2.xml diff --git a/cts/scheduler/systemhealthn3.xml b/cts/scheduler/xml/systemhealthn3.xml similarity index 100% rename from cts/scheduler/systemhealthn3.xml rename to cts/scheduler/xml/systemhealthn3.xml diff --git a/cts/scheduler/systemhealtho1.xml b/cts/scheduler/xml/systemhealtho1.xml similarity index 100% rename from cts/scheduler/systemhealtho1.xml rename to cts/scheduler/xml/systemhealtho1.xml diff --git a/cts/scheduler/systemhealtho2.xml b/cts/scheduler/xml/systemhealtho2.xml similarity index 100% rename from cts/scheduler/systemhealtho2.xml rename to cts/scheduler/xml/systemhealtho2.xml diff --git a/cts/scheduler/systemhealtho3.xml b/cts/scheduler/xml/systemhealtho3.xml similarity index 100% rename from cts/scheduler/systemhealtho3.xml rename to cts/scheduler/xml/systemhealtho3.xml diff --git a/cts/scheduler/systemhealthp1.xml b/cts/scheduler/xml/systemhealthp1.xml similarity index 100% rename from cts/scheduler/systemhealthp1.xml rename to cts/scheduler/xml/systemhealthp1.xml diff --git a/cts/scheduler/systemhealthp2.xml b/cts/scheduler/xml/systemhealthp2.xml similarity index 100% rename from cts/scheduler/systemhealthp2.xml rename to cts/scheduler/xml/systemhealthp2.xml diff --git a/cts/scheduler/systemhealthp3.xml b/cts/scheduler/xml/systemhealthp3.xml similarity index 100% rename from cts/scheduler/systemhealthp3.xml rename to cts/scheduler/xml/systemhealthp3.xml diff --git a/cts/scheduler/tags-coloc-order-1.xml b/cts/scheduler/xml/tags-coloc-order-1.xml similarity index 100% rename from cts/scheduler/tags-coloc-order-1.xml rename to cts/scheduler/xml/tags-coloc-order-1.xml diff --git a/cts/scheduler/tags-coloc-order-2.xml b/cts/scheduler/xml/tags-coloc-order-2.xml similarity index 100% rename from cts/scheduler/tags-coloc-order-2.xml rename to cts/scheduler/xml/tags-coloc-order-2.xml diff --git a/cts/scheduler/tags-location.xml b/cts/scheduler/xml/tags-location.xml similarity index 100% rename from cts/scheduler/tags-location.xml rename to cts/scheduler/xml/tags-location.xml diff --git a/cts/scheduler/tags-ticket.xml b/cts/scheduler/xml/tags-ticket.xml similarity index 100% rename from cts/scheduler/tags-ticket.xml rename to cts/scheduler/xml/tags-ticket.xml diff --git a/cts/scheduler/target-0.xml b/cts/scheduler/xml/target-0.xml similarity index 100% rename from cts/scheduler/target-0.xml rename to cts/scheduler/xml/target-0.xml diff --git a/cts/scheduler/target-1.xml b/cts/scheduler/xml/target-1.xml similarity index 100% rename from cts/scheduler/target-1.xml rename to cts/scheduler/xml/target-1.xml diff --git a/cts/scheduler/target-2.xml b/cts/scheduler/xml/target-2.xml similarity index 100% rename from cts/scheduler/target-2.xml rename to cts/scheduler/xml/target-2.xml diff --git a/cts/scheduler/template-1.xml b/cts/scheduler/xml/template-1.xml similarity index 100% rename from cts/scheduler/template-1.xml rename to cts/scheduler/xml/template-1.xml diff --git a/cts/scheduler/template-2.xml b/cts/scheduler/xml/template-2.xml similarity index 100% rename from cts/scheduler/template-2.xml rename to cts/scheduler/xml/template-2.xml diff --git a/cts/scheduler/template-3.xml b/cts/scheduler/xml/template-3.xml similarity index 100% rename from cts/scheduler/template-3.xml rename to cts/scheduler/xml/template-3.xml diff --git a/cts/scheduler/template-clone-group.xml b/cts/scheduler/xml/template-clone-group.xml similarity index 100% rename from cts/scheduler/template-clone-group.xml rename to cts/scheduler/xml/template-clone-group.xml diff --git a/cts/scheduler/template-clone-primitive.xml b/cts/scheduler/xml/template-clone-primitive.xml similarity index 100% rename from cts/scheduler/template-clone-primitive.xml rename to cts/scheduler/xml/template-clone-primitive.xml diff --git a/cts/scheduler/template-coloc-1.xml b/cts/scheduler/xml/template-coloc-1.xml similarity index 100% rename from cts/scheduler/template-coloc-1.xml rename to cts/scheduler/xml/template-coloc-1.xml diff --git a/cts/scheduler/template-coloc-2.xml b/cts/scheduler/xml/template-coloc-2.xml similarity index 100% rename from cts/scheduler/template-coloc-2.xml rename to cts/scheduler/xml/template-coloc-2.xml diff --git a/cts/scheduler/template-coloc-3.xml b/cts/scheduler/xml/template-coloc-3.xml similarity index 100% rename from cts/scheduler/template-coloc-3.xml rename to cts/scheduler/xml/template-coloc-3.xml diff --git a/cts/scheduler/template-order-1.xml b/cts/scheduler/xml/template-order-1.xml similarity index 100% rename from cts/scheduler/template-order-1.xml rename to cts/scheduler/xml/template-order-1.xml diff --git a/cts/scheduler/template-order-2.xml b/cts/scheduler/xml/template-order-2.xml similarity index 100% rename from cts/scheduler/template-order-2.xml rename to cts/scheduler/xml/template-order-2.xml diff --git a/cts/scheduler/template-order-3.xml b/cts/scheduler/xml/template-order-3.xml similarity index 100% rename from cts/scheduler/template-order-3.xml rename to cts/scheduler/xml/template-order-3.xml diff --git a/cts/scheduler/template-rsc-sets-1.xml b/cts/scheduler/xml/template-rsc-sets-1.xml similarity index 100% rename from cts/scheduler/template-rsc-sets-1.xml rename to cts/scheduler/xml/template-rsc-sets-1.xml diff --git a/cts/scheduler/template-rsc-sets-2.xml b/cts/scheduler/xml/template-rsc-sets-2.xml similarity index 100% rename from cts/scheduler/template-rsc-sets-2.xml rename to cts/scheduler/xml/template-rsc-sets-2.xml diff --git a/cts/scheduler/template-rsc-sets-3.xml b/cts/scheduler/xml/template-rsc-sets-3.xml similarity index 100% rename from cts/scheduler/template-rsc-sets-3.xml rename to cts/scheduler/xml/template-rsc-sets-3.xml diff --git a/cts/scheduler/template-rsc-sets-4.xml b/cts/scheduler/xml/template-rsc-sets-4.xml similarity index 100% rename from cts/scheduler/template-rsc-sets-4.xml rename to cts/scheduler/xml/template-rsc-sets-4.xml diff --git a/cts/scheduler/template-ticket.xml b/cts/scheduler/xml/template-ticket.xml similarity index 100% rename from cts/scheduler/template-ticket.xml rename to cts/scheduler/xml/template-ticket.xml diff --git a/cts/scheduler/ticket-clone-1.xml b/cts/scheduler/xml/ticket-clone-1.xml similarity index 100% rename from cts/scheduler/ticket-clone-1.xml rename to cts/scheduler/xml/ticket-clone-1.xml diff --git a/cts/scheduler/ticket-clone-10.xml b/cts/scheduler/xml/ticket-clone-10.xml similarity index 100% rename from cts/scheduler/ticket-clone-10.xml rename to cts/scheduler/xml/ticket-clone-10.xml diff --git a/cts/scheduler/ticket-clone-11.xml b/cts/scheduler/xml/ticket-clone-11.xml similarity index 100% rename from cts/scheduler/ticket-clone-11.xml rename to cts/scheduler/xml/ticket-clone-11.xml diff --git a/cts/scheduler/ticket-clone-12.xml b/cts/scheduler/xml/ticket-clone-12.xml similarity index 100% rename from cts/scheduler/ticket-clone-12.xml rename to cts/scheduler/xml/ticket-clone-12.xml diff --git a/cts/scheduler/ticket-clone-13.xml b/cts/scheduler/xml/ticket-clone-13.xml similarity index 100% rename from cts/scheduler/ticket-clone-13.xml rename to cts/scheduler/xml/ticket-clone-13.xml diff --git a/cts/scheduler/ticket-clone-14.xml b/cts/scheduler/xml/ticket-clone-14.xml similarity index 100% rename from cts/scheduler/ticket-clone-14.xml rename to cts/scheduler/xml/ticket-clone-14.xml diff --git a/cts/scheduler/ticket-clone-15.xml b/cts/scheduler/xml/ticket-clone-15.xml similarity index 100% rename from cts/scheduler/ticket-clone-15.xml rename to cts/scheduler/xml/ticket-clone-15.xml diff --git a/cts/scheduler/ticket-clone-16.xml b/cts/scheduler/xml/ticket-clone-16.xml similarity index 100% rename from cts/scheduler/ticket-clone-16.xml rename to cts/scheduler/xml/ticket-clone-16.xml diff --git a/cts/scheduler/ticket-clone-17.xml b/cts/scheduler/xml/ticket-clone-17.xml similarity index 100% rename from cts/scheduler/ticket-clone-17.xml rename to cts/scheduler/xml/ticket-clone-17.xml diff --git a/cts/scheduler/ticket-clone-18.xml b/cts/scheduler/xml/ticket-clone-18.xml similarity index 100% rename from cts/scheduler/ticket-clone-18.xml rename to cts/scheduler/xml/ticket-clone-18.xml diff --git a/cts/scheduler/ticket-clone-19.xml b/cts/scheduler/xml/ticket-clone-19.xml similarity index 100% rename from cts/scheduler/ticket-clone-19.xml rename to cts/scheduler/xml/ticket-clone-19.xml diff --git a/cts/scheduler/ticket-clone-2.xml b/cts/scheduler/xml/ticket-clone-2.xml similarity index 100% rename from cts/scheduler/ticket-clone-2.xml rename to cts/scheduler/xml/ticket-clone-2.xml diff --git a/cts/scheduler/ticket-clone-20.xml b/cts/scheduler/xml/ticket-clone-20.xml similarity index 100% rename from cts/scheduler/ticket-clone-20.xml rename to cts/scheduler/xml/ticket-clone-20.xml diff --git a/cts/scheduler/ticket-clone-21.xml b/cts/scheduler/xml/ticket-clone-21.xml similarity index 100% rename from cts/scheduler/ticket-clone-21.xml rename to cts/scheduler/xml/ticket-clone-21.xml diff --git a/cts/scheduler/ticket-clone-22.xml b/cts/scheduler/xml/ticket-clone-22.xml similarity index 100% rename from cts/scheduler/ticket-clone-22.xml rename to cts/scheduler/xml/ticket-clone-22.xml diff --git a/cts/scheduler/ticket-clone-23.xml b/cts/scheduler/xml/ticket-clone-23.xml similarity index 100% rename from cts/scheduler/ticket-clone-23.xml rename to cts/scheduler/xml/ticket-clone-23.xml diff --git a/cts/scheduler/ticket-clone-24.xml b/cts/scheduler/xml/ticket-clone-24.xml similarity index 100% rename from cts/scheduler/ticket-clone-24.xml rename to cts/scheduler/xml/ticket-clone-24.xml diff --git a/cts/scheduler/ticket-clone-3.xml b/cts/scheduler/xml/ticket-clone-3.xml similarity index 100% rename from cts/scheduler/ticket-clone-3.xml rename to cts/scheduler/xml/ticket-clone-3.xml diff --git a/cts/scheduler/ticket-clone-4.xml b/cts/scheduler/xml/ticket-clone-4.xml similarity index 100% rename from cts/scheduler/ticket-clone-4.xml rename to cts/scheduler/xml/ticket-clone-4.xml diff --git a/cts/scheduler/ticket-clone-5.xml b/cts/scheduler/xml/ticket-clone-5.xml similarity index 100% rename from cts/scheduler/ticket-clone-5.xml rename to cts/scheduler/xml/ticket-clone-5.xml diff --git a/cts/scheduler/ticket-clone-6.xml b/cts/scheduler/xml/ticket-clone-6.xml similarity index 100% rename from cts/scheduler/ticket-clone-6.xml rename to cts/scheduler/xml/ticket-clone-6.xml diff --git a/cts/scheduler/ticket-clone-7.xml b/cts/scheduler/xml/ticket-clone-7.xml similarity index 100% rename from cts/scheduler/ticket-clone-7.xml rename to cts/scheduler/xml/ticket-clone-7.xml diff --git a/cts/scheduler/ticket-clone-8.xml b/cts/scheduler/xml/ticket-clone-8.xml similarity index 100% rename from cts/scheduler/ticket-clone-8.xml rename to cts/scheduler/xml/ticket-clone-8.xml diff --git a/cts/scheduler/ticket-clone-9.xml b/cts/scheduler/xml/ticket-clone-9.xml similarity index 100% rename from cts/scheduler/ticket-clone-9.xml rename to cts/scheduler/xml/ticket-clone-9.xml diff --git a/cts/scheduler/ticket-group-1.xml b/cts/scheduler/xml/ticket-group-1.xml similarity index 100% rename from cts/scheduler/ticket-group-1.xml rename to cts/scheduler/xml/ticket-group-1.xml diff --git a/cts/scheduler/ticket-group-10.xml b/cts/scheduler/xml/ticket-group-10.xml similarity index 100% rename from cts/scheduler/ticket-group-10.xml rename to cts/scheduler/xml/ticket-group-10.xml diff --git a/cts/scheduler/ticket-group-11.xml b/cts/scheduler/xml/ticket-group-11.xml similarity index 100% rename from cts/scheduler/ticket-group-11.xml rename to cts/scheduler/xml/ticket-group-11.xml diff --git a/cts/scheduler/ticket-group-12.xml b/cts/scheduler/xml/ticket-group-12.xml similarity index 100% rename from cts/scheduler/ticket-group-12.xml rename to cts/scheduler/xml/ticket-group-12.xml diff --git a/cts/scheduler/ticket-group-13.xml b/cts/scheduler/xml/ticket-group-13.xml similarity index 100% rename from cts/scheduler/ticket-group-13.xml rename to cts/scheduler/xml/ticket-group-13.xml diff --git a/cts/scheduler/ticket-group-14.xml b/cts/scheduler/xml/ticket-group-14.xml similarity index 100% rename from cts/scheduler/ticket-group-14.xml rename to cts/scheduler/xml/ticket-group-14.xml diff --git a/cts/scheduler/ticket-group-15.xml b/cts/scheduler/xml/ticket-group-15.xml similarity index 100% rename from cts/scheduler/ticket-group-15.xml rename to cts/scheduler/xml/ticket-group-15.xml diff --git a/cts/scheduler/ticket-group-16.xml b/cts/scheduler/xml/ticket-group-16.xml similarity index 100% rename from cts/scheduler/ticket-group-16.xml rename to cts/scheduler/xml/ticket-group-16.xml diff --git a/cts/scheduler/ticket-group-17.xml b/cts/scheduler/xml/ticket-group-17.xml similarity index 100% rename from cts/scheduler/ticket-group-17.xml rename to cts/scheduler/xml/ticket-group-17.xml diff --git a/cts/scheduler/ticket-group-18.xml b/cts/scheduler/xml/ticket-group-18.xml similarity index 100% rename from cts/scheduler/ticket-group-18.xml rename to cts/scheduler/xml/ticket-group-18.xml diff --git a/cts/scheduler/ticket-group-19.xml b/cts/scheduler/xml/ticket-group-19.xml similarity index 100% rename from cts/scheduler/ticket-group-19.xml rename to cts/scheduler/xml/ticket-group-19.xml diff --git a/cts/scheduler/ticket-group-2.xml b/cts/scheduler/xml/ticket-group-2.xml similarity index 100% rename from cts/scheduler/ticket-group-2.xml rename to cts/scheduler/xml/ticket-group-2.xml diff --git a/cts/scheduler/ticket-group-20.xml b/cts/scheduler/xml/ticket-group-20.xml similarity index 100% rename from cts/scheduler/ticket-group-20.xml rename to cts/scheduler/xml/ticket-group-20.xml diff --git a/cts/scheduler/ticket-group-21.xml b/cts/scheduler/xml/ticket-group-21.xml similarity index 100% rename from cts/scheduler/ticket-group-21.xml rename to cts/scheduler/xml/ticket-group-21.xml diff --git a/cts/scheduler/ticket-group-22.xml b/cts/scheduler/xml/ticket-group-22.xml similarity index 100% rename from cts/scheduler/ticket-group-22.xml rename to cts/scheduler/xml/ticket-group-22.xml diff --git a/cts/scheduler/ticket-group-23.xml b/cts/scheduler/xml/ticket-group-23.xml similarity index 100% rename from cts/scheduler/ticket-group-23.xml rename to cts/scheduler/xml/ticket-group-23.xml diff --git a/cts/scheduler/ticket-group-24.xml b/cts/scheduler/xml/ticket-group-24.xml similarity index 100% rename from cts/scheduler/ticket-group-24.xml rename to cts/scheduler/xml/ticket-group-24.xml diff --git a/cts/scheduler/ticket-group-3.xml b/cts/scheduler/xml/ticket-group-3.xml similarity index 100% rename from cts/scheduler/ticket-group-3.xml rename to cts/scheduler/xml/ticket-group-3.xml diff --git a/cts/scheduler/ticket-group-4.xml b/cts/scheduler/xml/ticket-group-4.xml similarity index 100% rename from cts/scheduler/ticket-group-4.xml rename to cts/scheduler/xml/ticket-group-4.xml diff --git a/cts/scheduler/ticket-group-5.xml b/cts/scheduler/xml/ticket-group-5.xml similarity index 100% rename from cts/scheduler/ticket-group-5.xml rename to cts/scheduler/xml/ticket-group-5.xml diff --git a/cts/scheduler/ticket-group-6.xml b/cts/scheduler/xml/ticket-group-6.xml similarity index 100% rename from cts/scheduler/ticket-group-6.xml rename to cts/scheduler/xml/ticket-group-6.xml diff --git a/cts/scheduler/ticket-group-7.xml b/cts/scheduler/xml/ticket-group-7.xml similarity index 100% rename from cts/scheduler/ticket-group-7.xml rename to cts/scheduler/xml/ticket-group-7.xml diff --git a/cts/scheduler/ticket-group-8.xml b/cts/scheduler/xml/ticket-group-8.xml similarity index 100% rename from cts/scheduler/ticket-group-8.xml rename to cts/scheduler/xml/ticket-group-8.xml diff --git a/cts/scheduler/ticket-group-9.xml b/cts/scheduler/xml/ticket-group-9.xml similarity index 100% rename from cts/scheduler/ticket-group-9.xml rename to cts/scheduler/xml/ticket-group-9.xml diff --git a/cts/scheduler/ticket-master-1.xml b/cts/scheduler/xml/ticket-master-1.xml similarity index 100% rename from cts/scheduler/ticket-master-1.xml rename to cts/scheduler/xml/ticket-master-1.xml diff --git a/cts/scheduler/ticket-master-10.xml b/cts/scheduler/xml/ticket-master-10.xml similarity index 100% rename from cts/scheduler/ticket-master-10.xml rename to cts/scheduler/xml/ticket-master-10.xml diff --git a/cts/scheduler/ticket-master-11.xml b/cts/scheduler/xml/ticket-master-11.xml similarity index 100% rename from cts/scheduler/ticket-master-11.xml rename to cts/scheduler/xml/ticket-master-11.xml diff --git a/cts/scheduler/ticket-master-12.xml b/cts/scheduler/xml/ticket-master-12.xml similarity index 100% rename from cts/scheduler/ticket-master-12.xml rename to cts/scheduler/xml/ticket-master-12.xml diff --git a/cts/scheduler/ticket-master-13.xml b/cts/scheduler/xml/ticket-master-13.xml similarity index 100% rename from cts/scheduler/ticket-master-13.xml rename to cts/scheduler/xml/ticket-master-13.xml diff --git a/cts/scheduler/ticket-master-14.xml b/cts/scheduler/xml/ticket-master-14.xml similarity index 100% rename from cts/scheduler/ticket-master-14.xml rename to cts/scheduler/xml/ticket-master-14.xml diff --git a/cts/scheduler/ticket-master-15.xml b/cts/scheduler/xml/ticket-master-15.xml similarity index 100% rename from cts/scheduler/ticket-master-15.xml rename to cts/scheduler/xml/ticket-master-15.xml diff --git a/cts/scheduler/ticket-master-16.xml b/cts/scheduler/xml/ticket-master-16.xml similarity index 100% rename from cts/scheduler/ticket-master-16.xml rename to cts/scheduler/xml/ticket-master-16.xml diff --git a/cts/scheduler/ticket-master-17.xml b/cts/scheduler/xml/ticket-master-17.xml similarity index 100% rename from cts/scheduler/ticket-master-17.xml rename to cts/scheduler/xml/ticket-master-17.xml diff --git a/cts/scheduler/ticket-master-18.xml b/cts/scheduler/xml/ticket-master-18.xml similarity index 100% rename from cts/scheduler/ticket-master-18.xml rename to cts/scheduler/xml/ticket-master-18.xml diff --git a/cts/scheduler/ticket-master-19.xml b/cts/scheduler/xml/ticket-master-19.xml similarity index 100% rename from cts/scheduler/ticket-master-19.xml rename to cts/scheduler/xml/ticket-master-19.xml diff --git a/cts/scheduler/ticket-master-2.xml b/cts/scheduler/xml/ticket-master-2.xml similarity index 100% rename from cts/scheduler/ticket-master-2.xml rename to cts/scheduler/xml/ticket-master-2.xml diff --git a/cts/scheduler/ticket-master-20.xml b/cts/scheduler/xml/ticket-master-20.xml similarity index 100% rename from cts/scheduler/ticket-master-20.xml rename to cts/scheduler/xml/ticket-master-20.xml diff --git a/cts/scheduler/ticket-master-21.xml b/cts/scheduler/xml/ticket-master-21.xml similarity index 100% rename from cts/scheduler/ticket-master-21.xml rename to cts/scheduler/xml/ticket-master-21.xml diff --git a/cts/scheduler/ticket-master-22.xml b/cts/scheduler/xml/ticket-master-22.xml similarity index 100% rename from cts/scheduler/ticket-master-22.xml rename to cts/scheduler/xml/ticket-master-22.xml diff --git a/cts/scheduler/ticket-master-23.xml b/cts/scheduler/xml/ticket-master-23.xml similarity index 100% rename from cts/scheduler/ticket-master-23.xml rename to cts/scheduler/xml/ticket-master-23.xml diff --git a/cts/scheduler/ticket-master-24.xml b/cts/scheduler/xml/ticket-master-24.xml similarity index 100% rename from cts/scheduler/ticket-master-24.xml rename to cts/scheduler/xml/ticket-master-24.xml diff --git a/cts/scheduler/ticket-master-3.xml b/cts/scheduler/xml/ticket-master-3.xml similarity index 100% rename from cts/scheduler/ticket-master-3.xml rename to cts/scheduler/xml/ticket-master-3.xml diff --git a/cts/scheduler/ticket-master-4.xml b/cts/scheduler/xml/ticket-master-4.xml similarity index 100% rename from cts/scheduler/ticket-master-4.xml rename to cts/scheduler/xml/ticket-master-4.xml diff --git a/cts/scheduler/ticket-master-5.xml b/cts/scheduler/xml/ticket-master-5.xml similarity index 100% rename from cts/scheduler/ticket-master-5.xml rename to cts/scheduler/xml/ticket-master-5.xml diff --git a/cts/scheduler/ticket-master-6.xml b/cts/scheduler/xml/ticket-master-6.xml similarity index 100% rename from cts/scheduler/ticket-master-6.xml rename to cts/scheduler/xml/ticket-master-6.xml diff --git a/cts/scheduler/ticket-master-7.xml b/cts/scheduler/xml/ticket-master-7.xml similarity index 100% rename from cts/scheduler/ticket-master-7.xml rename to cts/scheduler/xml/ticket-master-7.xml diff --git a/cts/scheduler/ticket-master-8.xml b/cts/scheduler/xml/ticket-master-8.xml similarity index 100% rename from cts/scheduler/ticket-master-8.xml rename to cts/scheduler/xml/ticket-master-8.xml diff --git a/cts/scheduler/ticket-master-9.xml b/cts/scheduler/xml/ticket-master-9.xml similarity index 100% rename from cts/scheduler/ticket-master-9.xml rename to cts/scheduler/xml/ticket-master-9.xml diff --git a/cts/scheduler/ticket-primitive-1.xml b/cts/scheduler/xml/ticket-primitive-1.xml similarity index 100% rename from cts/scheduler/ticket-primitive-1.xml rename to cts/scheduler/xml/ticket-primitive-1.xml diff --git a/cts/scheduler/ticket-primitive-10.xml b/cts/scheduler/xml/ticket-primitive-10.xml similarity index 100% rename from cts/scheduler/ticket-primitive-10.xml rename to cts/scheduler/xml/ticket-primitive-10.xml diff --git a/cts/scheduler/ticket-primitive-11.xml b/cts/scheduler/xml/ticket-primitive-11.xml similarity index 100% rename from cts/scheduler/ticket-primitive-11.xml rename to cts/scheduler/xml/ticket-primitive-11.xml diff --git a/cts/scheduler/ticket-primitive-12.xml b/cts/scheduler/xml/ticket-primitive-12.xml similarity index 100% rename from cts/scheduler/ticket-primitive-12.xml rename to cts/scheduler/xml/ticket-primitive-12.xml diff --git a/cts/scheduler/ticket-primitive-13.xml b/cts/scheduler/xml/ticket-primitive-13.xml similarity index 100% rename from cts/scheduler/ticket-primitive-13.xml rename to cts/scheduler/xml/ticket-primitive-13.xml diff --git a/cts/scheduler/ticket-primitive-14.xml b/cts/scheduler/xml/ticket-primitive-14.xml similarity index 100% rename from cts/scheduler/ticket-primitive-14.xml rename to cts/scheduler/xml/ticket-primitive-14.xml diff --git a/cts/scheduler/ticket-primitive-15.xml b/cts/scheduler/xml/ticket-primitive-15.xml similarity index 100% rename from cts/scheduler/ticket-primitive-15.xml rename to cts/scheduler/xml/ticket-primitive-15.xml diff --git a/cts/scheduler/ticket-primitive-16.xml b/cts/scheduler/xml/ticket-primitive-16.xml similarity index 100% rename from cts/scheduler/ticket-primitive-16.xml rename to cts/scheduler/xml/ticket-primitive-16.xml diff --git a/cts/scheduler/ticket-primitive-17.xml b/cts/scheduler/xml/ticket-primitive-17.xml similarity index 100% rename from cts/scheduler/ticket-primitive-17.xml rename to cts/scheduler/xml/ticket-primitive-17.xml diff --git a/cts/scheduler/ticket-primitive-18.xml b/cts/scheduler/xml/ticket-primitive-18.xml similarity index 100% rename from cts/scheduler/ticket-primitive-18.xml rename to cts/scheduler/xml/ticket-primitive-18.xml diff --git a/cts/scheduler/ticket-primitive-19.xml b/cts/scheduler/xml/ticket-primitive-19.xml similarity index 100% rename from cts/scheduler/ticket-primitive-19.xml rename to cts/scheduler/xml/ticket-primitive-19.xml diff --git a/cts/scheduler/ticket-primitive-2.xml b/cts/scheduler/xml/ticket-primitive-2.xml similarity index 100% rename from cts/scheduler/ticket-primitive-2.xml rename to cts/scheduler/xml/ticket-primitive-2.xml diff --git a/cts/scheduler/ticket-primitive-20.xml b/cts/scheduler/xml/ticket-primitive-20.xml similarity index 100% rename from cts/scheduler/ticket-primitive-20.xml rename to cts/scheduler/xml/ticket-primitive-20.xml diff --git a/cts/scheduler/ticket-primitive-21.xml b/cts/scheduler/xml/ticket-primitive-21.xml similarity index 100% rename from cts/scheduler/ticket-primitive-21.xml rename to cts/scheduler/xml/ticket-primitive-21.xml diff --git a/cts/scheduler/ticket-primitive-22.xml b/cts/scheduler/xml/ticket-primitive-22.xml similarity index 100% rename from cts/scheduler/ticket-primitive-22.xml rename to cts/scheduler/xml/ticket-primitive-22.xml diff --git a/cts/scheduler/ticket-primitive-23.xml b/cts/scheduler/xml/ticket-primitive-23.xml similarity index 100% rename from cts/scheduler/ticket-primitive-23.xml rename to cts/scheduler/xml/ticket-primitive-23.xml diff --git a/cts/scheduler/ticket-primitive-24.xml b/cts/scheduler/xml/ticket-primitive-24.xml similarity index 100% rename from cts/scheduler/ticket-primitive-24.xml rename to cts/scheduler/xml/ticket-primitive-24.xml diff --git a/cts/scheduler/ticket-primitive-3.xml b/cts/scheduler/xml/ticket-primitive-3.xml similarity index 100% rename from cts/scheduler/ticket-primitive-3.xml rename to cts/scheduler/xml/ticket-primitive-3.xml diff --git a/cts/scheduler/ticket-primitive-4.xml b/cts/scheduler/xml/ticket-primitive-4.xml similarity index 100% rename from cts/scheduler/ticket-primitive-4.xml rename to cts/scheduler/xml/ticket-primitive-4.xml diff --git a/cts/scheduler/ticket-primitive-5.xml b/cts/scheduler/xml/ticket-primitive-5.xml similarity index 100% rename from cts/scheduler/ticket-primitive-5.xml rename to cts/scheduler/xml/ticket-primitive-5.xml diff --git a/cts/scheduler/ticket-primitive-6.xml b/cts/scheduler/xml/ticket-primitive-6.xml similarity index 100% rename from cts/scheduler/ticket-primitive-6.xml rename to cts/scheduler/xml/ticket-primitive-6.xml diff --git a/cts/scheduler/ticket-primitive-7.xml b/cts/scheduler/xml/ticket-primitive-7.xml similarity index 100% rename from cts/scheduler/ticket-primitive-7.xml rename to cts/scheduler/xml/ticket-primitive-7.xml diff --git a/cts/scheduler/ticket-primitive-8.xml b/cts/scheduler/xml/ticket-primitive-8.xml similarity index 100% rename from cts/scheduler/ticket-primitive-8.xml rename to cts/scheduler/xml/ticket-primitive-8.xml diff --git a/cts/scheduler/ticket-primitive-9.xml b/cts/scheduler/xml/ticket-primitive-9.xml similarity index 100% rename from cts/scheduler/ticket-primitive-9.xml rename to cts/scheduler/xml/ticket-primitive-9.xml diff --git a/cts/scheduler/ticket-rsc-sets-1.xml b/cts/scheduler/xml/ticket-rsc-sets-1.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-1.xml rename to cts/scheduler/xml/ticket-rsc-sets-1.xml diff --git a/cts/scheduler/ticket-rsc-sets-10.xml b/cts/scheduler/xml/ticket-rsc-sets-10.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-10.xml rename to cts/scheduler/xml/ticket-rsc-sets-10.xml diff --git a/cts/scheduler/ticket-rsc-sets-11.xml b/cts/scheduler/xml/ticket-rsc-sets-11.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-11.xml rename to cts/scheduler/xml/ticket-rsc-sets-11.xml diff --git a/cts/scheduler/ticket-rsc-sets-12.xml b/cts/scheduler/xml/ticket-rsc-sets-12.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-12.xml rename to cts/scheduler/xml/ticket-rsc-sets-12.xml diff --git a/cts/scheduler/ticket-rsc-sets-13.xml b/cts/scheduler/xml/ticket-rsc-sets-13.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-13.xml rename to cts/scheduler/xml/ticket-rsc-sets-13.xml diff --git a/cts/scheduler/ticket-rsc-sets-14.xml b/cts/scheduler/xml/ticket-rsc-sets-14.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-14.xml rename to cts/scheduler/xml/ticket-rsc-sets-14.xml diff --git a/cts/scheduler/ticket-rsc-sets-2.xml b/cts/scheduler/xml/ticket-rsc-sets-2.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-2.xml rename to cts/scheduler/xml/ticket-rsc-sets-2.xml diff --git a/cts/scheduler/ticket-rsc-sets-3.xml b/cts/scheduler/xml/ticket-rsc-sets-3.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-3.xml rename to cts/scheduler/xml/ticket-rsc-sets-3.xml diff --git a/cts/scheduler/ticket-rsc-sets-4.xml b/cts/scheduler/xml/ticket-rsc-sets-4.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-4.xml rename to cts/scheduler/xml/ticket-rsc-sets-4.xml diff --git a/cts/scheduler/ticket-rsc-sets-5.xml b/cts/scheduler/xml/ticket-rsc-sets-5.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-5.xml rename to cts/scheduler/xml/ticket-rsc-sets-5.xml diff --git a/cts/scheduler/ticket-rsc-sets-6.xml b/cts/scheduler/xml/ticket-rsc-sets-6.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-6.xml rename to cts/scheduler/xml/ticket-rsc-sets-6.xml diff --git a/cts/scheduler/ticket-rsc-sets-7.xml b/cts/scheduler/xml/ticket-rsc-sets-7.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-7.xml rename to cts/scheduler/xml/ticket-rsc-sets-7.xml diff --git a/cts/scheduler/ticket-rsc-sets-8.xml b/cts/scheduler/xml/ticket-rsc-sets-8.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-8.xml rename to cts/scheduler/xml/ticket-rsc-sets-8.xml diff --git a/cts/scheduler/ticket-rsc-sets-9.xml b/cts/scheduler/xml/ticket-rsc-sets-9.xml similarity index 100% rename from cts/scheduler/ticket-rsc-sets-9.xml rename to cts/scheduler/xml/ticket-rsc-sets-9.xml diff --git a/cts/scheduler/unfence-definition.xml b/cts/scheduler/xml/unfence-definition.xml similarity index 100% rename from cts/scheduler/unfence-definition.xml rename to cts/scheduler/xml/unfence-definition.xml diff --git a/cts/scheduler/unfence-device.xml b/cts/scheduler/xml/unfence-device.xml similarity index 100% rename from cts/scheduler/unfence-device.xml rename to cts/scheduler/xml/unfence-device.xml diff --git a/cts/scheduler/unfence-parameters.xml b/cts/scheduler/xml/unfence-parameters.xml similarity index 100% rename from cts/scheduler/unfence-parameters.xml rename to cts/scheduler/xml/unfence-parameters.xml diff --git a/cts/scheduler/unfence-startup.xml b/cts/scheduler/xml/unfence-startup.xml similarity index 100% rename from cts/scheduler/unfence-startup.xml rename to cts/scheduler/xml/unfence-startup.xml diff --git a/cts/scheduler/unmanaged-block-restart.xml b/cts/scheduler/xml/unmanaged-block-restart.xml similarity index 100% rename from cts/scheduler/unmanaged-block-restart.xml rename to cts/scheduler/xml/unmanaged-block-restart.xml diff --git a/cts/scheduler/unmanaged-master.xml b/cts/scheduler/xml/unmanaged-master.xml similarity index 100% rename from cts/scheduler/unmanaged-master.xml rename to cts/scheduler/xml/unmanaged-master.xml diff --git a/cts/scheduler/unmanaged-stop-1.xml b/cts/scheduler/xml/unmanaged-stop-1.xml similarity index 100% rename from cts/scheduler/unmanaged-stop-1.xml rename to cts/scheduler/xml/unmanaged-stop-1.xml diff --git a/cts/scheduler/unmanaged-stop-2.xml b/cts/scheduler/xml/unmanaged-stop-2.xml similarity index 100% rename from cts/scheduler/unmanaged-stop-2.xml rename to cts/scheduler/xml/unmanaged-stop-2.xml diff --git a/cts/scheduler/unmanaged-stop-3.xml b/cts/scheduler/xml/unmanaged-stop-3.xml similarity index 100% rename from cts/scheduler/unmanaged-stop-3.xml rename to cts/scheduler/xml/unmanaged-stop-3.xml diff --git a/cts/scheduler/unmanaged-stop-4.xml b/cts/scheduler/xml/unmanaged-stop-4.xml similarity index 100% rename from cts/scheduler/unmanaged-stop-4.xml rename to cts/scheduler/xml/unmanaged-stop-4.xml diff --git a/cts/scheduler/unrunnable-1.xml b/cts/scheduler/xml/unrunnable-1.xml similarity index 100% rename from cts/scheduler/unrunnable-1.xml rename to cts/scheduler/xml/unrunnable-1.xml diff --git a/cts/scheduler/unrunnable-2.xml b/cts/scheduler/xml/unrunnable-2.xml similarity index 100% rename from cts/scheduler/unrunnable-2.xml rename to cts/scheduler/xml/unrunnable-2.xml diff --git a/cts/scheduler/use-after-free-merge.xml b/cts/scheduler/xml/use-after-free-merge.xml similarity index 100% rename from cts/scheduler/use-after-free-merge.xml rename to cts/scheduler/xml/use-after-free-merge.xml diff --git a/cts/scheduler/utilization-check-allowed-nodes.xml b/cts/scheduler/xml/utilization-check-allowed-nodes.xml similarity index 100% rename from cts/scheduler/utilization-check-allowed-nodes.xml rename to cts/scheduler/xml/utilization-check-allowed-nodes.xml diff --git a/cts/scheduler/utilization-order1.xml b/cts/scheduler/xml/utilization-order1.xml similarity index 100% rename from cts/scheduler/utilization-order1.xml rename to cts/scheduler/xml/utilization-order1.xml diff --git a/cts/scheduler/utilization-order2.xml b/cts/scheduler/xml/utilization-order2.xml similarity index 100% rename from cts/scheduler/utilization-order2.xml rename to cts/scheduler/xml/utilization-order2.xml diff --git a/cts/scheduler/utilization-order3.xml b/cts/scheduler/xml/utilization-order3.xml similarity index 100% rename from cts/scheduler/utilization-order3.xml rename to cts/scheduler/xml/utilization-order3.xml diff --git a/cts/scheduler/utilization-order4.xml b/cts/scheduler/xml/utilization-order4.xml similarity index 100% rename from cts/scheduler/utilization-order4.xml rename to cts/scheduler/xml/utilization-order4.xml diff --git a/cts/scheduler/utilization-shuffle.xml b/cts/scheduler/xml/utilization-shuffle.xml similarity index 100% rename from cts/scheduler/utilization-shuffle.xml rename to cts/scheduler/xml/utilization-shuffle.xml diff --git a/cts/scheduler/utilization.xml b/cts/scheduler/xml/utilization.xml similarity index 100% rename from cts/scheduler/utilization.xml rename to cts/scheduler/xml/utilization.xml diff --git a/cts/scheduler/value-source.xml b/cts/scheduler/xml/value-source.xml similarity index 100% rename from cts/scheduler/value-source.xml rename to cts/scheduler/xml/value-source.xml diff --git a/cts/scheduler/versioned-operations-1.xml b/cts/scheduler/xml/versioned-operations-1.xml similarity index 100% rename from cts/scheduler/versioned-operations-1.xml rename to cts/scheduler/xml/versioned-operations-1.xml diff --git a/cts/scheduler/versioned-operations-2.xml b/cts/scheduler/xml/versioned-operations-2.xml similarity index 100% rename from cts/scheduler/versioned-operations-2.xml rename to cts/scheduler/xml/versioned-operations-2.xml diff --git a/cts/scheduler/versioned-operations-3.xml b/cts/scheduler/xml/versioned-operations-3.xml similarity index 100% rename from cts/scheduler/versioned-operations-3.xml rename to cts/scheduler/xml/versioned-operations-3.xml diff --git a/cts/scheduler/versioned-operations-4.xml b/cts/scheduler/xml/versioned-operations-4.xml similarity index 100% rename from cts/scheduler/versioned-operations-4.xml rename to cts/scheduler/xml/versioned-operations-4.xml diff --git a/cts/scheduler/versioned-resources.xml b/cts/scheduler/xml/versioned-resources.xml similarity index 100% rename from cts/scheduler/versioned-resources.xml rename to cts/scheduler/xml/versioned-resources.xml diff --git a/cts/scheduler/whitebox-asymmetric.xml b/cts/scheduler/xml/whitebox-asymmetric.xml similarity index 100% rename from cts/scheduler/whitebox-asymmetric.xml rename to cts/scheduler/xml/whitebox-asymmetric.xml diff --git a/cts/scheduler/whitebox-fail1.xml b/cts/scheduler/xml/whitebox-fail1.xml similarity index 100% rename from cts/scheduler/whitebox-fail1.xml rename to cts/scheduler/xml/whitebox-fail1.xml diff --git a/cts/scheduler/whitebox-fail2.xml b/cts/scheduler/xml/whitebox-fail2.xml similarity index 100% rename from cts/scheduler/whitebox-fail2.xml rename to cts/scheduler/xml/whitebox-fail2.xml diff --git a/cts/scheduler/whitebox-fail3.xml b/cts/scheduler/xml/whitebox-fail3.xml similarity index 100% rename from cts/scheduler/whitebox-fail3.xml rename to cts/scheduler/xml/whitebox-fail3.xml diff --git a/cts/scheduler/whitebox-imply-stop-on-fence.xml b/cts/scheduler/xml/whitebox-imply-stop-on-fence.xml similarity index 100% rename from cts/scheduler/whitebox-imply-stop-on-fence.xml rename to cts/scheduler/xml/whitebox-imply-stop-on-fence.xml diff --git a/cts/scheduler/whitebox-migrate1.xml b/cts/scheduler/xml/whitebox-migrate1.xml similarity index 100% rename from cts/scheduler/whitebox-migrate1.xml rename to cts/scheduler/xml/whitebox-migrate1.xml diff --git a/cts/scheduler/whitebox-move.xml b/cts/scheduler/xml/whitebox-move.xml similarity index 100% rename from cts/scheduler/whitebox-move.xml rename to cts/scheduler/xml/whitebox-move.xml diff --git a/cts/scheduler/whitebox-ms-ordering-move.xml b/cts/scheduler/xml/whitebox-ms-ordering-move.xml similarity index 100% rename from cts/scheduler/whitebox-ms-ordering-move.xml rename to cts/scheduler/xml/whitebox-ms-ordering-move.xml diff --git a/cts/scheduler/whitebox-ms-ordering.xml b/cts/scheduler/xml/whitebox-ms-ordering.xml similarity index 100% rename from cts/scheduler/whitebox-ms-ordering.xml rename to cts/scheduler/xml/whitebox-ms-ordering.xml diff --git a/cts/scheduler/whitebox-nested-group.xml b/cts/scheduler/xml/whitebox-nested-group.xml similarity index 100% rename from cts/scheduler/whitebox-nested-group.xml rename to cts/scheduler/xml/whitebox-nested-group.xml diff --git a/cts/scheduler/whitebox-orphan-ms.xml b/cts/scheduler/xml/whitebox-orphan-ms.xml similarity index 100% rename from cts/scheduler/whitebox-orphan-ms.xml rename to cts/scheduler/xml/whitebox-orphan-ms.xml diff --git a/cts/scheduler/whitebox-orphaned.xml b/cts/scheduler/xml/whitebox-orphaned.xml similarity index 100% rename from cts/scheduler/whitebox-orphaned.xml rename to cts/scheduler/xml/whitebox-orphaned.xml diff --git a/cts/scheduler/whitebox-start.xml b/cts/scheduler/xml/whitebox-start.xml similarity index 100% rename from cts/scheduler/whitebox-start.xml rename to cts/scheduler/xml/whitebox-start.xml diff --git a/cts/scheduler/whitebox-stop.xml b/cts/scheduler/xml/whitebox-stop.xml similarity index 100% rename from cts/scheduler/whitebox-stop.xml rename to cts/scheduler/xml/whitebox-stop.xml diff --git a/cts/scheduler/whitebox-unexpectedly-running.xml b/cts/scheduler/xml/whitebox-unexpectedly-running.xml similarity index 100% rename from cts/scheduler/whitebox-unexpectedly-running.xml rename to cts/scheduler/xml/whitebox-unexpectedly-running.xml diff --git a/cts/scheduler/year-2038.xml b/cts/scheduler/xml/year-2038.xml similarity index 100% rename from cts/scheduler/year-2038.xml rename to cts/scheduler/xml/year-2038.xml diff --git a/include/pcmki/pcmki_sched_utils.h b/include/pcmki/pcmki_sched_utils.h index f6ac26332a..b3dc0cfb54 100644 --- a/include/pcmki/pcmki_sched_utils.h +++ b/include/pcmki/pcmki_sched_utils.h @@ -1,102 +1,102 @@ /* * Copyright 2004-2021 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU Lesser General Public License * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. */ #ifndef PENGINE_AUTILS__H # define PENGINE_AUTILS__H #include // bool #include // GList, GHashTable, gboolean, guint #include // GListPtr #include // lrmd_event_data_t #include // cib_t #include #include #include /* Constraint helper functions */ pcmk__colocation_t *invert_constraint(pcmk__colocation_t *constraint); pe__location_t *copy_constraint(pe__location_t *constraint); pe__location_t *rsc2node_new(const char *id, pe_resource_t *rsc, int weight, const char *discovery_mode, pe_node_t *node, pe_working_set_t *data_set); void pcmk__new_colocation(const char *id, const char *node_attr, int score, pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, const char *state_lh, const char *state_rh, bool influence, pe_working_set_t *data_set); extern gboolean rsc_ticket_new(const char *id, pe_resource_t * rsc_lh, pe_ticket_t * ticket, const char *state_lh, const char *loss_policy, pe_working_set_t * data_set); GHashTable *pcmk__copy_node_table(GHashTable *nodes); GList *pcmk__copy_node_list(const GList *list, bool reset); GList *sort_nodes_by_weight(GList *nodes, pe_node_t *active_node, pe_working_set_t *data_set); extern gboolean can_run_resources(const pe_node_t * node); -extern gboolean native_assign_node(pe_resource_t * rsc, GListPtr candidates, pe_node_t * chosen, +extern gboolean native_assign_node(pe_resource_t *rsc, pe_node_t *chosen, gboolean force); void native_deallocate(pe_resource_t * rsc); extern void log_action(unsigned int log_level, const char *pre_text, pe_action_t * action, gboolean details); gboolean can_run_any(GHashTable * nodes); pe_resource_t *find_compatible_child(pe_resource_t *local_child, pe_resource_t *rsc, enum rsc_role_e filter, gboolean current, pe_working_set_t *data_set); pe_resource_t *find_compatible_child_by_node(pe_resource_t * local_child, pe_node_t * local_node, pe_resource_t * rsc, enum rsc_role_e filter, gboolean current); gboolean is_child_compatible(pe_resource_t *child_rsc, pe_node_t * local_node, enum rsc_role_e filter, gboolean current); bool assign_node(pe_resource_t * rsc, pe_node_t * node, gboolean force); enum pe_action_flags summary_action_flags(pe_action_t * action, GListPtr children, pe_node_t * node); enum action_tasks clone_child_action(pe_action_t * action); int copies_per_node(pe_resource_t * rsc); enum filter_colocation_res { influence_nothing = 0, influence_rsc_location, influence_rsc_priority, }; extern enum filter_colocation_res filter_colocation_constraint(pe_resource_t * rsc_lh, pe_resource_t * rsc_rh, pcmk__colocation_t *constraint, gboolean preview); extern int compare_capacity(const pe_node_t * node1, const pe_node_t * node2); extern void calculate_utilization(GHashTable * current_utilization, GHashTable * utilization, gboolean plus); extern void process_utilization(pe_resource_t * rsc, pe_node_t ** prefer, pe_working_set_t * data_set); pe_action_t *create_pseudo_resource_op(pe_resource_t * rsc, const char *task, bool optional, bool runnable, pe_working_set_t *data_set); pe_action_t *pe_cancel_op(pe_resource_t *rsc, const char *name, guint interval_ms, pe_node_t *node, pe_working_set_t *data_set); pe_action_t *sched_shutdown_op(pe_node_t *node, pe_working_set_t *data_set); xmlNode *pcmk__create_history_xml(xmlNode *parent, lrmd_event_data_t *event, const char *caller_version, int target_rc, const char *node, const char *origin, int level); # define LOAD_STOPPED "load_stopped" void modify_configuration( pe_working_set_t * data_set, cib_t *cib, const char *quorum, const char *watchdog, GListPtr node_up, GListPtr node_down, GListPtr node_fail, GListPtr op_inject, GListPtr ticket_grant, GListPtr ticket_revoke, GListPtr ticket_standby, GListPtr ticket_activate); int run_simulation(pe_working_set_t * data_set, cib_t *cib, GListPtr op_fail_list, bool quiet); #endif diff --git a/lib/pacemaker/pcmk_sched_clone.c b/lib/pacemaker/pcmk_sched_clone.c index dd6ff489c6..1ba447a736 100644 --- a/lib/pacemaker/pcmk_sched_clone.c +++ b/lib/pacemaker/pcmk_sched_clone.c @@ -1,1508 +1,1508 @@ /* * Copyright 2004-2021 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU General Public License version 2 * or later (GPLv2+) WITHOUT ANY WARRANTY. */ #include #include #include #define VARIANT_CLONE 1 #include gint sort_clone_instance(gconstpointer a, gconstpointer b, gpointer data_set); static void append_parent_colocation(pe_resource_t * rsc, pe_resource_t * child, gboolean all); static gint sort_rsc_id(gconstpointer a, gconstpointer b) { const pe_resource_t *resource1 = (const pe_resource_t *)a; const pe_resource_t *resource2 = (const pe_resource_t *)b; long num1, num2; CRM_ASSERT(resource1 != NULL); CRM_ASSERT(resource2 != NULL); /* * Sort clone instances numerically by instance number, so instance :10 * comes after :9. */ num1 = strtol(strrchr(resource1->id, ':') + 1, NULL, 10); num2 = strtol(strrchr(resource2->id, ':') + 1, NULL, 10); if (num1 < num2) { return -1; } else if (num1 > num2) { return 1; } return 0; } static pe_node_t * parent_node_instance(const pe_resource_t * rsc, pe_node_t * node) { pe_node_t *ret = NULL; if (node != NULL && rsc->parent) { ret = pe_hash_table_lookup(rsc->parent->allowed_nodes, node->details->id); } else if(node != NULL) { ret = pe_hash_table_lookup(rsc->allowed_nodes, node->details->id); } return ret; } static gboolean did_fail(const pe_resource_t * rsc) { GListPtr gIter = rsc->children; if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { return TRUE; } for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; if (did_fail(child_rsc)) { return TRUE; } } return FALSE; } gint sort_clone_instance(gconstpointer a, gconstpointer b, gpointer data_set) { int rc = 0; pe_node_t *node1 = NULL; pe_node_t *node2 = NULL; pe_node_t *current_node1 = NULL; pe_node_t *current_node2 = NULL; unsigned int nnodes1 = 0; unsigned int nnodes2 = 0; gboolean can1 = TRUE; gboolean can2 = TRUE; const pe_resource_t *resource1 = (const pe_resource_t *)a; const pe_resource_t *resource2 = (const pe_resource_t *)b; CRM_ASSERT(resource1 != NULL); CRM_ASSERT(resource2 != NULL); /* allocation order: * - active instances * - instances running on nodes with the least copies * - active instances on nodes that can't support them or are to be fenced * - failed instances * - inactive instances */ current_node1 = pe__find_active_on(resource1, &nnodes1, NULL); current_node2 = pe__find_active_on(resource2, &nnodes2, NULL); if (nnodes1 && nnodes2) { if (nnodes1 < nnodes2) { crm_trace("%s < %s: running_on", resource1->id, resource2->id); return -1; } else if (nnodes1 > nnodes2) { crm_trace("%s > %s: running_on", resource1->id, resource2->id); return 1; } } node1 = current_node1; node2 = current_node2; if (node1) { pe_node_t *match = pe_hash_table_lookup(resource1->allowed_nodes, node1->details->id); if (match == NULL || match->weight < 0) { crm_trace("%s: current location is unavailable", resource1->id); node1 = NULL; can1 = FALSE; } } if (node2) { pe_node_t *match = pe_hash_table_lookup(resource2->allowed_nodes, node2->details->id); if (match == NULL || match->weight < 0) { crm_trace("%s: current location is unavailable", resource2->id); node2 = NULL; can2 = FALSE; } } if (can1 != can2) { if (can1) { crm_trace("%s < %s: availability of current location", resource1->id, resource2->id); return -1; } crm_trace("%s > %s: availability of current location", resource1->id, resource2->id); return 1; } if (resource1->priority < resource2->priority) { crm_trace("%s < %s: priority", resource1->id, resource2->id); return 1; } else if (resource1->priority > resource2->priority) { crm_trace("%s > %s: priority", resource1->id, resource2->id); return -1; } if (node1 == NULL && node2 == NULL) { crm_trace("%s == %s: not active", resource1->id, resource2->id); return 0; } if (node1 != node2) { if (node1 == NULL) { crm_trace("%s > %s: active", resource1->id, resource2->id); return 1; } else if (node2 == NULL) { crm_trace("%s < %s: active", resource1->id, resource2->id); return -1; } } can1 = can_run_resources(node1); can2 = can_run_resources(node2); if (can1 != can2) { if (can1) { crm_trace("%s < %s: can", resource1->id, resource2->id); return -1; } crm_trace("%s > %s: can", resource1->id, resource2->id); return 1; } node1 = parent_node_instance(resource1, node1); node2 = parent_node_instance(resource2, node2); if (node1 != NULL && node2 == NULL) { crm_trace("%s < %s: not allowed", resource1->id, resource2->id); return -1; } else if (node1 == NULL && node2 != NULL) { crm_trace("%s > %s: not allowed", resource1->id, resource2->id); return 1; } if (node1 == NULL || node2 == NULL) { crm_trace("%s == %s: not allowed", resource1->id, resource2->id); return 0; } if (node1->count < node2->count) { crm_trace("%s < %s: count", resource1->id, resource2->id); return -1; } else if (node1->count > node2->count) { crm_trace("%s > %s: count", resource1->id, resource2->id); return 1; } can1 = did_fail(resource1); can2 = did_fail(resource2); if (can1 != can2) { if (can1) { crm_trace("%s > %s: failed", resource1->id, resource2->id); return 1; } crm_trace("%s < %s: failed", resource1->id, resource2->id); return -1; } if (node1 && node2) { int lpc = 0; int max = 0; pe_node_t *n = NULL; GListPtr gIter = NULL; GListPtr list1 = NULL; GListPtr list2 = NULL; GHashTable *hash1 = g_hash_table_new_full(crm_str_hash, g_str_equal, NULL, free); GHashTable *hash2 = g_hash_table_new_full(crm_str_hash, g_str_equal, NULL, free); n = pe__copy_node(current_node1); g_hash_table_insert(hash1, (gpointer) n->details->id, n); n = pe__copy_node(current_node2); g_hash_table_insert(hash2, (gpointer) n->details->id, n); if(resource1->parent) { for (gIter = resource1->parent->rsc_cons; gIter; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; crm_trace("Applying %s to %s", constraint->id, resource1->id); hash1 = pcmk__native_merge_weights(constraint->rsc_rh, resource1->id, hash1, constraint->node_attribute, constraint->score / (float) INFINITY, 0); } for (gIter = resource1->parent->rsc_cons_lhs; gIter; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; if (!pcmk__colocation_has_influence(constraint, resource1)) { continue; } crm_trace("Applying %s to %s", constraint->id, resource1->id); hash1 = pcmk__native_merge_weights(constraint->rsc_lh, resource1->id, hash1, constraint->node_attribute, constraint->score / (float) INFINITY, pe_weights_positive); } } if(resource2->parent) { for (gIter = resource2->parent->rsc_cons; gIter; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; crm_trace("Applying %s to %s", constraint->id, resource2->id); hash2 = pcmk__native_merge_weights(constraint->rsc_rh, resource2->id, hash2, constraint->node_attribute, constraint->score / (float) INFINITY, 0); } for (gIter = resource2->parent->rsc_cons_lhs; gIter; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; if (!pcmk__colocation_has_influence(constraint, resource2)) { continue; } crm_trace("Applying %s to %s", constraint->id, resource2->id); hash2 = pcmk__native_merge_weights(constraint->rsc_lh, resource2->id, hash2, constraint->node_attribute, constraint->score / (float) INFINITY, pe_weights_positive); } } /* Current location score */ node1 = g_hash_table_lookup(hash1, current_node1->details->id); node2 = g_hash_table_lookup(hash2, current_node2->details->id); if (node1->weight < node2->weight) { if (node1->weight < 0) { crm_trace("%s > %s: current score: %d %d", resource1->id, resource2->id, node1->weight, node2->weight); rc = -1; goto out; } else { crm_trace("%s < %s: current score: %d %d", resource1->id, resource2->id, node1->weight, node2->weight); rc = 1; goto out; } } else if (node1->weight > node2->weight) { crm_trace("%s > %s: current score: %d %d", resource1->id, resource2->id, node1->weight, node2->weight); rc = -1; goto out; } /* All location scores */ list1 = g_hash_table_get_values(hash1); list2 = g_hash_table_get_values(hash2); list1 = sort_nodes_by_weight(list1, current_node1, data_set); list2 = sort_nodes_by_weight(list2, current_node2, data_set); max = g_list_length(list1); if (max < g_list_length(list2)) { max = g_list_length(list2); } for (; lpc < max; lpc++) { node1 = g_list_nth_data(list1, lpc); node2 = g_list_nth_data(list2, lpc); if (node1 == NULL) { crm_trace("%s < %s: colocated score NULL", resource1->id, resource2->id); rc = 1; break; } else if (node2 == NULL) { crm_trace("%s > %s: colocated score NULL", resource1->id, resource2->id); rc = -1; break; } if (node1->weight < node2->weight) { crm_trace("%s < %s: colocated score", resource1->id, resource2->id); rc = 1; break; } else if (node1->weight > node2->weight) { crm_trace("%s > %s: colocated score", resource1->id, resource2->id); rc = -1; break; } } /* Order by reverse uname - same as sort_node_weight() does? */ out: g_hash_table_destroy(hash1); /* Free mem */ g_hash_table_destroy(hash2); /* Free mem */ g_list_free(list1); g_list_free(list2); if (rc != 0) { return rc; } } rc = strcmp(resource1->id, resource2->id); crm_trace("%s %c %s: default", resource1->id, rc < 0 ? '<' : '>', resource2->id); return rc; } static pe_node_t * can_run_instance(pe_resource_t * rsc, pe_node_t * node, int limit) { pe_node_t *local_node = NULL; if (node == NULL && rsc->allowed_nodes) { GHashTableIter iter; g_hash_table_iter_init(&iter, rsc->allowed_nodes); while (g_hash_table_iter_next(&iter, NULL, (void **)&local_node)) { can_run_instance(rsc, local_node, limit); } return NULL; } if (!node) { /* make clang analyzer happy */ goto bail; } else if (can_run_resources(node) == FALSE) { goto bail; } else if (pcmk_is_set(rsc->flags, pe_rsc_orphan)) { goto bail; } local_node = parent_node_instance(rsc, node); if (local_node == NULL) { crm_warn("%s cannot run on %s: node not allowed", rsc->id, node->details->uname); goto bail; } else if (local_node->weight < 0) { common_update_score(rsc, node->details->id, local_node->weight); pe_rsc_trace(rsc, "%s cannot run on %s: Parent node weight doesn't allow it.", rsc->id, node->details->uname); } else if (local_node->count < limit) { pe_rsc_trace(rsc, "%s can run on %s (already running %d)", rsc->id, node->details->uname, local_node->count); return local_node; } else { pe_rsc_trace(rsc, "%s cannot run on %s: node full (%d >= %d)", rsc->id, node->details->uname, local_node->count, limit); } bail: if (node) { common_update_score(rsc, node->details->id, -INFINITY); } return NULL; } static pe_node_t * allocate_instance(pe_resource_t *rsc, pe_node_t *prefer, gboolean all_coloc, int limit, pe_working_set_t *data_set) { pe_node_t *chosen = NULL; GHashTable *backup = NULL; CRM_ASSERT(rsc); pe_rsc_trace(rsc, "Checking allocation of %s (preferring %s, using %s parent colocations)", rsc->id, (prefer? prefer->details->uname: "none"), (all_coloc? "all" : "some")); if (!pcmk_is_set(rsc->flags, pe_rsc_provisional)) { return rsc->fns->location(rsc, NULL, FALSE); } else if (pcmk_is_set(rsc->flags, pe_rsc_allocating)) { pe_rsc_debug(rsc, "Dependency loop detected involving %s", rsc->id); return NULL; } /* Only include positive colocation preferences of dependent resources * if not every node will get a copy of the clone */ append_parent_colocation(rsc->parent, rsc, all_coloc); if (prefer) { pe_node_t *local_prefer = g_hash_table_lookup(rsc->allowed_nodes, prefer->details->id); if (local_prefer == NULL || local_prefer->weight < 0) { pe_rsc_trace(rsc, "Not pre-allocating %s to %s - unavailable", rsc->id, prefer->details->uname); return NULL; } } can_run_instance(rsc, NULL, limit); backup = pcmk__copy_node_table(rsc->allowed_nodes); pe_rsc_trace(rsc, "Allocating instance %s", rsc->id); chosen = rsc->cmds->allocate(rsc, prefer, data_set); if (chosen && prefer && (chosen->details != prefer->details)) { crm_info("Not pre-allocating %s to %s because %s is better", rsc->id, prefer->details->uname, chosen->details->uname); g_hash_table_destroy(rsc->allowed_nodes); rsc->allowed_nodes = backup; native_deallocate(rsc); chosen = NULL; backup = NULL; } if (chosen) { pe_node_t *local_node = parent_node_instance(rsc, chosen); if (local_node) { local_node->count++; } else if (pcmk_is_set(rsc->flags, pe_rsc_managed)) { /* what to do? we can't enforce per-node limits in this case */ pcmk__config_err("%s not found in %s (list of %d)", chosen->details->id, rsc->parent->id, g_hash_table_size(rsc->parent->allowed_nodes)); } } if(backup) { g_hash_table_destroy(backup); } return chosen; } static void append_parent_colocation(pe_resource_t * rsc, pe_resource_t * child, gboolean all) { GListPtr gIter = NULL; gIter = rsc->rsc_cons; for (; gIter != NULL; gIter = gIter->next) { pcmk__colocation_t *cons = (pcmk__colocation_t *) gIter->data; if (all || cons->score < 0 || cons->score == INFINITY) { child->rsc_cons = g_list_prepend(child->rsc_cons, cons); } } gIter = rsc->rsc_cons_lhs; for (; gIter != NULL; gIter = gIter->next) { pcmk__colocation_t *cons = (pcmk__colocation_t *) gIter->data; if (!pcmk__colocation_has_influence(cons, child)) { continue; } if (all || cons->score < 0) { child->rsc_cons_lhs = g_list_prepend(child->rsc_cons_lhs, cons); } } } void distribute_children(pe_resource_t *rsc, GListPtr children, GListPtr nodes, int max, int per_host_max, pe_working_set_t * data_set); void distribute_children(pe_resource_t *rsc, GListPtr children, GListPtr nodes, int max, int per_host_max, pe_working_set_t * data_set) { int loop_max = 0; int allocated = 0; int available_nodes = 0; /* count now tracks the number of clones currently allocated */ for(GListPtr nIter = nodes; nIter != NULL; nIter = nIter->next) { pe_node_t *node = nIter->data; node->count = 0; if (can_run_resources(node)) { available_nodes++; } } if(available_nodes) { loop_max = max / available_nodes; } if (loop_max < 1) { loop_max = 1; } pe_rsc_debug(rsc, "Allocating up to %d %s instances to a possible %d nodes (at most %d per host, %d optimal)", max, rsc->id, available_nodes, per_host_max, loop_max); /* Pre-allocate as many instances as we can to their current location */ for (GListPtr gIter = children; gIter != NULL && allocated < max; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; if (child->running_on && pcmk_is_set(child->flags, pe_rsc_provisional) && !pcmk_is_set(child->flags, pe_rsc_failed)) { pe_node_t *child_node = pe__current_node(child); pe_node_t *local_node = parent_node_instance(child, child_node); pe_rsc_trace(rsc, "Checking pre-allocation of %s to %s (%d remaining of %d)", child->id, child_node->details->uname, max - allocated, max); if (can_run_resources(child_node) == FALSE || child_node->weight < 0) { pe_rsc_trace(rsc, "Not pre-allocating because %s can not run %s", child_node->details->uname, child->id); } else if(local_node && local_node->count >= loop_max) { pe_rsc_trace(rsc, "Not pre-allocating because %s already allocated optimal instances", child_node->details->uname); } else if (allocate_instance(child, child_node, max < available_nodes, per_host_max, data_set)) { pe_rsc_trace(rsc, "Pre-allocated %s to %s", child->id, child_node->details->uname); allocated++; } } } pe_rsc_trace(rsc, "Done pre-allocating (%d of %d)", allocated, max); for (GListPtr gIter = children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; if (child->running_on != NULL) { pe_node_t *child_node = pe__current_node(child); pe_node_t *local_node = parent_node_instance(child, child_node); if (local_node == NULL) { crm_err("%s is running on %s which isn't allowed", child->id, child_node->details->uname); } } if (!pcmk_is_set(child->flags, pe_rsc_provisional)) { } else if (allocated >= max) { pe_rsc_debug(rsc, "Child %s not allocated - limit reached %d %d", child->id, allocated, max); resource_location(child, NULL, -INFINITY, "clone:limit_reached", data_set); } else { if (allocate_instance(child, NULL, max < available_nodes, per_host_max, data_set)) { allocated++; } } } pe_rsc_debug(rsc, "Allocated %d %s instances of a possible %d", allocated, rsc->id, max); } pe_node_t * pcmk__clone_allocate(pe_resource_t *rsc, pe_node_t *prefer, pe_working_set_t *data_set) { GListPtr nodes = NULL; clone_variant_data_t *clone_data = NULL; get_clone_variant_data(clone_data, rsc); if (!pcmk_is_set(rsc->flags, pe_rsc_provisional)) { return NULL; } else if (pcmk_is_set(rsc->flags, pe_rsc_allocating)) { pe_rsc_debug(rsc, "Dependency loop detected involving %s", rsc->id); return NULL; } if (pcmk_is_set(rsc->flags, pe_rsc_promotable)) { apply_master_prefs(rsc); } pe__set_resource_flags(rsc, pe_rsc_allocating); /* this information is used by sort_clone_instance() when deciding in which * order to allocate clone instances */ for (GListPtr gIter = rsc->rsc_cons; gIter != NULL; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; pe_rsc_trace(rsc, "%s: Allocating %s first", rsc->id, constraint->rsc_rh->id); constraint->rsc_rh->cmds->allocate(constraint->rsc_rh, prefer, data_set); } for (GListPtr gIter = rsc->rsc_cons_lhs; gIter != NULL; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; if (!pcmk__colocation_has_influence(constraint, NULL)) { continue; } rsc->allowed_nodes = constraint->rsc_lh->cmds->merge_weights(constraint->rsc_lh, rsc->id, rsc->allowed_nodes, constraint->node_attribute, (float)constraint->score / INFINITY, (pe_weights_rollback | pe_weights_positive)); } pe__show_node_weights(!show_scores, rsc, __func__, rsc->allowed_nodes); nodes = g_hash_table_get_values(rsc->allowed_nodes); nodes = sort_nodes_by_weight(nodes, NULL, data_set); rsc->children = g_list_sort_with_data(rsc->children, sort_clone_instance, data_set); distribute_children(rsc, rsc->children, nodes, clone_data->clone_max, clone_data->clone_node_max, data_set); g_list_free(nodes); if (pcmk_is_set(rsc->flags, pe_rsc_promotable)) { pcmk__set_instance_roles(rsc, data_set); } pe__clear_resource_flags(rsc, pe_rsc_provisional|pe_rsc_allocating); pe_rsc_trace(rsc, "Done allocating %s", rsc->id); return NULL; } static void clone_update_pseudo_status(pe_resource_t * rsc, gboolean * stopping, gboolean * starting, gboolean * active) { GListPtr gIter = NULL; if (rsc->children) { gIter = rsc->children; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; clone_update_pseudo_status(child, stopping, starting, active); } return; } CRM_ASSERT(active != NULL); CRM_ASSERT(starting != NULL); CRM_ASSERT(stopping != NULL); if (rsc->running_on) { *active = TRUE; } gIter = rsc->actions; for (; gIter != NULL; gIter = gIter->next) { pe_action_t *action = (pe_action_t *) gIter->data; if (*starting && *stopping) { return; } else if (pcmk_is_set(action->flags, pe_action_optional)) { pe_rsc_trace(rsc, "Skipping optional: %s", action->uuid); continue; } else if (!pcmk_any_flags_set(action->flags, pe_action_pseudo|pe_action_runnable)) { pe_rsc_trace(rsc, "Skipping unrunnable: %s", action->uuid); continue; } else if (pcmk__str_eq(RSC_STOP, action->task, pcmk__str_casei)) { pe_rsc_trace(rsc, "Stopping due to: %s", action->uuid); *stopping = TRUE; } else if (pcmk__str_eq(RSC_START, action->task, pcmk__str_casei)) { if (!pcmk_is_set(action->flags, pe_action_runnable)) { pe_rsc_trace(rsc, "Skipping pseudo-op: %s run=%d, pseudo=%d", action->uuid, pcmk_is_set(action->flags, pe_action_runnable), pcmk_is_set(action->flags, pe_action_pseudo)); } else { pe_rsc_trace(rsc, "Starting due to: %s", action->uuid); pe_rsc_trace(rsc, "%s run=%d, pseudo=%d", action->uuid, pcmk_is_set(action->flags, pe_action_runnable), pcmk_is_set(action->flags, pe_action_pseudo)); *starting = TRUE; } } } } static pe_action_t * find_rsc_action(pe_resource_t *rsc, const char *task, gboolean active_only, GList **list) { pe_action_t *match = NULL; GListPtr possible = NULL; GListPtr active = NULL; possible = pe__resource_actions(rsc, NULL, task, FALSE); if (active_only) { GListPtr gIter = possible; for (; gIter != NULL; gIter = gIter->next) { pe_action_t *op = (pe_action_t *) gIter->data; if (!pcmk_is_set(op->flags, pe_action_optional)) { active = g_list_prepend(active, op); } } if (active && pcmk__list_of_1(active)) { match = g_list_nth_data(active, 0); } if (list) { *list = active; active = NULL; } } else if (possible && pcmk__list_of_1(possible)) { match = g_list_nth_data(possible, 0); } if (list) { *list = possible; possible = NULL; } if (possible) { g_list_free(possible); } if (active) { g_list_free(active); } return match; } static void child_ordering_constraints(pe_resource_t * rsc, pe_working_set_t * data_set) { pe_action_t *stop = NULL; pe_action_t *start = NULL; pe_action_t *last_stop = NULL; pe_action_t *last_start = NULL; GListPtr gIter = NULL; gboolean active_only = TRUE; /* change to false to get the old behavior */ clone_variant_data_t *clone_data = NULL; get_clone_variant_data(clone_data, rsc); if (clone_data->ordered == FALSE) { return; } /* we have to maintain a consistent sorted child list when building order constraints */ rsc->children = g_list_sort(rsc->children, sort_rsc_id); for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; stop = find_rsc_action(child, RSC_STOP, active_only, NULL); if (stop) { if (last_stop) { /* child/child relative stop */ order_actions(stop, last_stop, pe_order_optional); } last_stop = stop; } start = find_rsc_action(child, RSC_START, active_only, NULL); if (start) { if (last_start) { /* child/child relative start */ order_actions(last_start, start, pe_order_optional); } last_start = start; } } } void clone_create_actions(pe_resource_t *rsc, pe_working_set_t *data_set) { clone_variant_data_t *clone_data = NULL; get_clone_variant_data(clone_data, rsc); clone_create_pseudo_actions(rsc, rsc->children, &clone_data->start_notify, &clone_data->stop_notify,data_set); child_ordering_constraints(rsc, data_set); if (pcmk_is_set(rsc->flags, pe_rsc_promotable)) { create_promotable_actions(rsc, data_set); } } void clone_create_pseudo_actions( pe_resource_t * rsc, GListPtr children, notify_data_t **start_notify, notify_data_t **stop_notify, pe_working_set_t * data_set) { gboolean child_active = FALSE; gboolean child_starting = FALSE; gboolean child_stopping = FALSE; gboolean allow_dependent_migrations = TRUE; pe_action_t *stop = NULL; pe_action_t *stopped = NULL; pe_action_t *start = NULL; pe_action_t *started = NULL; pe_rsc_trace(rsc, "Creating actions for %s", rsc->id); for (GListPtr gIter = children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; gboolean starting = FALSE; gboolean stopping = FALSE; child_rsc->cmds->create_actions(child_rsc, data_set); clone_update_pseudo_status(child_rsc, &stopping, &starting, &child_active); if (stopping && starting) { allow_dependent_migrations = FALSE; } child_stopping |= stopping; child_starting |= starting; } /* start */ start = create_pseudo_resource_op(rsc, RSC_START, !child_starting, TRUE, data_set); started = create_pseudo_resource_op(rsc, RSC_STARTED, !child_starting, FALSE, data_set); started->priority = INFINITY; if (child_active || child_starting) { update_action_flags(started, pe_action_runnable, __func__, __LINE__); } if (start_notify != NULL && *start_notify == NULL) { *start_notify = create_notification_boundaries(rsc, RSC_START, start, started, data_set); } /* stop */ stop = create_pseudo_resource_op(rsc, RSC_STOP, !child_stopping, TRUE, data_set); stopped = create_pseudo_resource_op(rsc, RSC_STOPPED, !child_stopping, TRUE, data_set); stopped->priority = INFINITY; if (allow_dependent_migrations) { update_action_flags(stop, pe_action_migrate_runnable, __func__, __LINE__); } if (stop_notify != NULL && *stop_notify == NULL) { *stop_notify = create_notification_boundaries(rsc, RSC_STOP, stop, stopped, data_set); if (start_notify && *start_notify && *stop_notify) { order_actions((*stop_notify)->post_done, (*start_notify)->pre, pe_order_optional); } } } void clone_internal_constraints(pe_resource_t *rsc, pe_working_set_t *data_set) { pe_resource_t *last_rsc = NULL; GListPtr gIter; clone_variant_data_t *clone_data = NULL; get_clone_variant_data(clone_data, rsc); pe_rsc_trace(rsc, "Internal constraints for %s", rsc->id); new_rsc_order(rsc, RSC_STOPPED, rsc, RSC_START, pe_order_optional, data_set); new_rsc_order(rsc, RSC_START, rsc, RSC_STARTED, pe_order_runnable_left, data_set); new_rsc_order(rsc, RSC_STOP, rsc, RSC_STOPPED, pe_order_runnable_left, data_set); if (pcmk_is_set(rsc->flags, pe_rsc_promotable)) { new_rsc_order(rsc, RSC_DEMOTED, rsc, RSC_STOP, pe_order_optional, data_set); new_rsc_order(rsc, RSC_STARTED, rsc, RSC_PROMOTE, pe_order_runnable_left, data_set); } if (clone_data->ordered) { /* we have to maintain a consistent sorted child list when building order constraints */ rsc->children = g_list_sort(rsc->children, sort_rsc_id); } for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; child_rsc->cmds->internal_constraints(child_rsc, data_set); order_start_start(rsc, child_rsc, pe_order_runnable_left | pe_order_implies_first_printed); new_rsc_order(child_rsc, RSC_START, rsc, RSC_STARTED, pe_order_implies_then_printed, data_set); if (clone_data->ordered && last_rsc) { order_start_start(last_rsc, child_rsc, pe_order_optional); } order_stop_stop(rsc, child_rsc, pe_order_implies_first_printed); new_rsc_order(child_rsc, RSC_STOP, rsc, RSC_STOPPED, pe_order_implies_then_printed, data_set); if (clone_data->ordered && last_rsc) { order_stop_stop(child_rsc, last_rsc, pe_order_optional); } last_rsc = child_rsc; } if (pcmk_is_set(rsc->flags, pe_rsc_promotable)) { promotable_constraints(rsc, data_set); } } bool assign_node(pe_resource_t * rsc, pe_node_t * node, gboolean force) { bool changed = FALSE; if (rsc->children) { for (GListPtr gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; changed |= assign_node(child_rsc, node, force); } return changed; } if (rsc->allocated_to != NULL) { changed = true; } - native_assign_node(rsc, NULL, node, force); + native_assign_node(rsc, node, force); return changed; } gboolean is_child_compatible(pe_resource_t *child_rsc, pe_node_t * local_node, enum rsc_role_e filter, gboolean current) { pe_node_t *node = NULL; enum rsc_role_e next_role = child_rsc->fns->state(child_rsc, current); CRM_CHECK(child_rsc && local_node, return FALSE); if (is_set_recursive(child_rsc, pe_rsc_block, TRUE) == FALSE) { /* We only want instances that haven't failed */ node = child_rsc->fns->location(child_rsc, NULL, current); } if (filter != RSC_ROLE_UNKNOWN && next_role != filter) { crm_trace("Filtered %s", child_rsc->id); return FALSE; } if (node && (node->details == local_node->details)) { return TRUE; } else if (node) { crm_trace("%s - %s vs %s", child_rsc->id, node->details->uname, local_node->details->uname); } else { crm_trace("%s - not allocated %d", child_rsc->id, current); } return FALSE; } pe_resource_t * find_compatible_child(pe_resource_t *local_child, pe_resource_t *rsc, enum rsc_role_e filter, gboolean current, pe_working_set_t *data_set) { pe_resource_t *pair = NULL; GListPtr gIter = NULL; GListPtr scratch = NULL; pe_node_t *local_node = NULL; local_node = local_child->fns->location(local_child, NULL, current); if (local_node) { return find_compatible_child_by_node(local_child, local_node, rsc, filter, current); } scratch = g_hash_table_get_values(local_child->allowed_nodes); scratch = sort_nodes_by_weight(scratch, NULL, data_set); gIter = scratch; for (; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; pair = find_compatible_child_by_node(local_child, node, rsc, filter, current); if (pair) { goto done; } } pe_rsc_debug(rsc, "Can't pair %s with %s", local_child->id, rsc->id); done: g_list_free(scratch); return pair; } void clone_rsc_colocation_lh(pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, pcmk__colocation_t *constraint, pe_working_set_t *data_set) { /* -- Never called -- * * Instead we add the colocation constraints to the child and call from there */ CRM_ASSERT(FALSE); } void clone_rsc_colocation_rh(pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, pcmk__colocation_t *constraint, pe_working_set_t *data_set) { GListPtr gIter = NULL; gboolean do_interleave = FALSE; const char *interleave_s = NULL; CRM_CHECK(constraint != NULL, return); CRM_CHECK(rsc_lh != NULL, pe_err("rsc_lh was NULL for %s", constraint->id); return); CRM_CHECK(rsc_rh != NULL, pe_err("rsc_rh was NULL for %s", constraint->id); return); CRM_CHECK(rsc_lh->variant == pe_native, return); pe_rsc_trace(rsc_rh, "Processing constraint %s: %s -> %s %d", constraint->id, rsc_lh->id, rsc_rh->id, constraint->score); if (pcmk_is_set(rsc_rh->flags, pe_rsc_promotable)) { if (pcmk_is_set(rsc_rh->flags, pe_rsc_provisional)) { pe_rsc_trace(rsc_rh, "%s is still provisional", rsc_rh->id); return; } else if (constraint->role_rh == RSC_ROLE_UNKNOWN) { pe_rsc_trace(rsc_rh, "Handling %s as a clone colocation", constraint->id); } else { promotable_colocation_rh(rsc_lh, rsc_rh, constraint, data_set); return; } } /* only the LHS side needs to be labeled as interleave */ interleave_s = g_hash_table_lookup(constraint->rsc_lh->meta, XML_RSC_ATTR_INTERLEAVE); if(crm_is_true(interleave_s) && constraint->rsc_lh->variant > pe_group) { // TODO: Do we actually care about multiple RH copies sharing a LH copy anymore? if (copies_per_node(constraint->rsc_lh) != copies_per_node(constraint->rsc_rh)) { pcmk__config_err("Cannot interleave %s and %s because they do not " "support the same number of instances per node", constraint->rsc_lh->id, constraint->rsc_rh->id); } else { do_interleave = TRUE; } } if (pcmk_is_set(rsc_rh->flags, pe_rsc_provisional)) { pe_rsc_trace(rsc_rh, "%s is still provisional", rsc_rh->id); return; } else if (do_interleave) { pe_resource_t *rh_child = NULL; rh_child = find_compatible_child(rsc_lh, rsc_rh, RSC_ROLE_UNKNOWN, FALSE, data_set); if (rh_child) { pe_rsc_debug(rsc_rh, "Pairing %s with %s", rsc_lh->id, rh_child->id); rsc_lh->cmds->rsc_colocation_lh(rsc_lh, rh_child, constraint, data_set); } else if (constraint->score >= INFINITY) { crm_notice("Cannot pair %s with instance of %s", rsc_lh->id, rsc_rh->id); assign_node(rsc_lh, NULL, TRUE); } else { pe_rsc_debug(rsc_rh, "Cannot pair %s with instance of %s", rsc_lh->id, rsc_rh->id); } return; } else if (constraint->score >= INFINITY) { GListPtr rhs = NULL; gIter = rsc_rh->children; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; pe_node_t *chosen = child_rsc->fns->location(child_rsc, NULL, FALSE); if (chosen != NULL && is_set_recursive(child_rsc, pe_rsc_block, TRUE) == FALSE) { pe_rsc_trace(rsc_rh, "Allowing %s: %s %d", constraint->id, chosen->details->uname, chosen->weight); rhs = g_list_prepend(rhs, chosen); } } node_list_exclude(rsc_lh->allowed_nodes, rhs, FALSE); g_list_free(rhs); return; } gIter = rsc_rh->children; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; child_rsc->cmds->rsc_colocation_rh(rsc_lh, child_rsc, constraint, data_set); } } enum action_tasks clone_child_action(pe_action_t * action) { enum action_tasks result = no_action; pe_resource_t *child = (pe_resource_t *) action->rsc->children->data; if (pcmk__strcase_any_of(action->task, "notify", "notified", NULL)) { /* Find the action we're notifying about instead */ int stop = 0; char *key = action->uuid; int lpc = strlen(key); for (; lpc > 0; lpc--) { if (key[lpc] == '_' && stop == 0) { stop = lpc; } else if (key[lpc] == '_') { char *task_mutable = NULL; lpc++; task_mutable = strdup(key + lpc); task_mutable[stop - lpc] = 0; crm_trace("Extracted action '%s' from '%s'", task_mutable, key); result = get_complex_task(child, task_mutable, TRUE); free(task_mutable); break; } } } else { result = get_complex_task(child, action->task, TRUE); } return result; } #define pe__clear_action_summary_flags(flags, action, flag) do { \ flags = pcmk__clear_flags_as(__func__, __LINE__, LOG_TRACE, \ "Action summary", action->rsc->id, \ flags, flag, #flag); \ } while (0) enum pe_action_flags summary_action_flags(pe_action_t * action, GListPtr children, pe_node_t * node) { GListPtr gIter = NULL; gboolean any_runnable = FALSE; gboolean check_runnable = TRUE; enum action_tasks task = clone_child_action(action); enum pe_action_flags flags = (pe_action_optional | pe_action_runnable | pe_action_pseudo); const char *task_s = task2text(task); for (gIter = children; gIter != NULL; gIter = gIter->next) { pe_action_t *child_action = NULL; pe_resource_t *child = (pe_resource_t *) gIter->data; child_action = find_first_action(child->actions, NULL, task_s, child->children ? NULL : node); pe_rsc_trace(action->rsc, "Checking for %s in %s on %s (%s)", task_s, child->id, node ? node->details->uname : "none", child_action?child_action->uuid:"NA"); if (child_action) { enum pe_action_flags child_flags = child->cmds->action_flags(child_action, node); if (pcmk_is_set(flags, pe_action_optional) && !pcmk_is_set(child_flags, pe_action_optional)) { pe_rsc_trace(child, "%s is mandatory because of %s", action->uuid, child_action->uuid); pe__clear_action_summary_flags(flags, action, pe_action_optional); pe__clear_action_flags(action, pe_action_optional); } if (pcmk_is_set(child_flags, pe_action_runnable)) { any_runnable = TRUE; } } } if (check_runnable && any_runnable == FALSE) { pe_rsc_trace(action->rsc, "%s is not runnable because no children are", action->uuid); pe__clear_action_summary_flags(flags, action, pe_action_runnable); if (node == NULL) { pe__clear_action_flags(action, pe_action_runnable); } } return flags; } enum pe_action_flags clone_action_flags(pe_action_t * action, pe_node_t * node) { return summary_action_flags(action, action->rsc->children, node); } void clone_rsc_location(pe_resource_t *rsc, pe__location_t *constraint) { GListPtr gIter = rsc->children; pe_rsc_trace(rsc, "Processing location constraint %s for %s", constraint->id, rsc->id); native_rsc_location(rsc, constraint); for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; child_rsc->cmds->rsc_location(child_rsc, constraint); } } void clone_expand(pe_resource_t * rsc, pe_working_set_t * data_set) { GListPtr gIter = NULL; clone_variant_data_t *clone_data = NULL; get_clone_variant_data(clone_data, rsc); gIter = rsc->actions; for (; gIter != NULL; gIter = gIter->next) { pe_action_t *op = (pe_action_t *) gIter->data; rsc->cmds->action_flags(op, NULL); } if (clone_data->start_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->start_notify); pcmk__create_notification_keys(rsc, clone_data->start_notify, data_set); create_notifications(rsc, clone_data->start_notify, data_set); } if (clone_data->stop_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->stop_notify); pcmk__create_notification_keys(rsc, clone_data->stop_notify, data_set); create_notifications(rsc, clone_data->stop_notify, data_set); } if (clone_data->promote_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->promote_notify); pcmk__create_notification_keys(rsc, clone_data->promote_notify, data_set); create_notifications(rsc, clone_data->promote_notify, data_set); } if (clone_data->demote_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->demote_notify); pcmk__create_notification_keys(rsc, clone_data->demote_notify, data_set); create_notifications(rsc, clone_data->demote_notify, data_set); } /* Now that the notifcations have been created we can expand the children */ gIter = rsc->children; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; child_rsc->cmds->expand(child_rsc, data_set); } native_expand(rsc, data_set); /* The notifications are in the graph now, we can destroy the notify_data */ free_notification_data(clone_data->demote_notify); clone_data->demote_notify = NULL; free_notification_data(clone_data->stop_notify); clone_data->stop_notify = NULL; free_notification_data(clone_data->start_notify); clone_data->start_notify = NULL; free_notification_data(clone_data->promote_notify); clone_data->promote_notify = NULL; } // Check whether a resource or any of its children is known on node static bool rsc_known_on(const pe_resource_t *rsc, const pe_node_t *node) { if (rsc->children) { for (GList *child_iter = rsc->children; child_iter != NULL; child_iter = child_iter->next) { pe_resource_t *child = (pe_resource_t *) child_iter->data; if (rsc_known_on(child, node)) { return TRUE; } } } else if (rsc->known_on) { GHashTableIter iter; pe_node_t *known_node = NULL; g_hash_table_iter_init(&iter, rsc->known_on); while (g_hash_table_iter_next(&iter, NULL, (gpointer *) &known_node)) { if (node->details == known_node->details) { return TRUE; } } } return FALSE; } // Look for an instance of clone that is known on node static pe_resource_t * find_instance_on(const pe_resource_t *clone, const pe_node_t *node) { for (GList *gIter = clone->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; if (rsc_known_on(child, node)) { return child; } } return NULL; } // For unique clones, probe each instance separately static gboolean probe_unique_clone(pe_resource_t *rsc, pe_node_t *node, pe_action_t *complete, gboolean force, pe_working_set_t *data_set) { gboolean any_created = FALSE; for (GList *child_iter = rsc->children; child_iter != NULL; child_iter = child_iter->next) { pe_resource_t *child = (pe_resource_t *) child_iter->data; any_created |= child->cmds->create_probe(child, node, complete, force, data_set); } return any_created; } // For anonymous clones, only a single instance needs to be probed static gboolean probe_anonymous_clone(pe_resource_t *rsc, pe_node_t *node, pe_action_t *complete, gboolean force, pe_working_set_t *data_set) { // First, check if we probed an instance on this node last time pe_resource_t *child = find_instance_on(rsc, node); // Otherwise, check if we plan to start an instance on this node if (child == NULL) { for (GList *child_iter = rsc->children; child_iter && !child; child_iter = child_iter->next) { pe_node_t *local_node = NULL; pe_resource_t *child_rsc = (pe_resource_t *) child_iter->data; if (child_rsc) { /* make clang analyzer happy */ local_node = child_rsc->fns->location(child_rsc, NULL, FALSE); if (local_node && (local_node->details == node->details)) { child = child_rsc; } } } } // Otherwise, use the first clone instance if (child == NULL) { child = rsc->children->data; } CRM_ASSERT(child); return child->cmds->create_probe(child, node, complete, force, data_set); } gboolean clone_create_probe(pe_resource_t * rsc, pe_node_t * node, pe_action_t * complete, gboolean force, pe_working_set_t * data_set) { gboolean any_created = FALSE; CRM_ASSERT(rsc); rsc->children = g_list_sort(rsc->children, sort_rsc_id); if (rsc->children == NULL) { pe_warn("Clone %s has no children", rsc->id); return FALSE; } if (rsc->exclusive_discover) { pe_node_t *allowed = g_hash_table_lookup(rsc->allowed_nodes, node->details->id); if (allowed && allowed->rsc_discover_mode != pe_discover_exclusive) { /* exclusive discover is enabled and this node is not marked * as a node this resource should be discovered on * * remove the node from allowed_nodes so that the * notification contains only nodes that we might ever run * on */ g_hash_table_remove(rsc->allowed_nodes, node->details->id); /* Bit of a shortcut - might as well take it */ return FALSE; } } if (pcmk_is_set(rsc->flags, pe_rsc_unique)) { any_created = probe_unique_clone(rsc, node, complete, force, data_set); } else { any_created = probe_anonymous_clone(rsc, node, complete, force, data_set); } return any_created; } void clone_append_meta(pe_resource_t * rsc, xmlNode * xml) { char *name = NULL; clone_variant_data_t *clone_data = NULL; get_clone_variant_data(clone_data, rsc); name = crm_meta_name(XML_RSC_ATTR_UNIQUE); crm_xml_add(xml, name, pe__rsc_bool_str(rsc, pe_rsc_unique)); free(name); name = crm_meta_name(XML_RSC_ATTR_NOTIFY); crm_xml_add(xml, name, pe__rsc_bool_str(rsc, pe_rsc_notify)); free(name); name = crm_meta_name(XML_RSC_ATTR_INCARNATION_MAX); crm_xml_add_int(xml, name, clone_data->clone_max); free(name); name = crm_meta_name(XML_RSC_ATTR_INCARNATION_NODEMAX); crm_xml_add_int(xml, name, clone_data->clone_node_max); free(name); if (pcmk_is_set(rsc->flags, pe_rsc_promotable)) { name = crm_meta_name(XML_RSC_ATTR_PROMOTED_MAX); crm_xml_add_int(xml, name, clone_data->promoted_max); free(name); name = crm_meta_name(XML_RSC_ATTR_PROMOTED_NODEMAX); crm_xml_add_int(xml, name, clone_data->promoted_node_max); free(name); /* @COMPAT Maintain backward compatibility with resource agents that * expect the old names (deprecated since 2.0.0). */ name = crm_meta_name(XML_RSC_ATTR_MASTER_MAX); crm_xml_add_int(xml, name, clone_data->promoted_max); free(name); name = crm_meta_name(XML_RSC_ATTR_MASTER_NODEMAX); crm_xml_add_int(xml, name, clone_data->promoted_node_max); free(name); } } diff --git a/lib/pacemaker/pcmk_sched_native.c b/lib/pacemaker/pcmk_sched_native.c index 1fd7c4f6b8..b47cbb5fcc 100644 --- a/lib/pacemaker/pcmk_sched_native.c +++ b/lib/pacemaker/pcmk_sched_native.c @@ -1,3484 +1,3484 @@ /* * Copyright 2004-2021 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU General Public License version 2 * or later (GPLv2+) WITHOUT ANY WARRANTY. */ #include #include #include #include #include #include #include // The controller removes the resource from the CIB, making this redundant // #define DELETE_THEN_REFRESH 1 #define INFINITY_HACK (INFINITY * -100) #define VARIANT_NATIVE 1 #include static void Recurring(pe_resource_t *rsc, pe_action_t *start, pe_node_t *node, pe_working_set_t *data_set); static void RecurringOp(pe_resource_t *rsc, pe_action_t *start, pe_node_t *node, xmlNode *operation, pe_working_set_t *data_set); static void Recurring_Stopped(pe_resource_t *rsc, pe_action_t *start, pe_node_t *node, pe_working_set_t *data_set); static void RecurringOp_Stopped(pe_resource_t *rsc, pe_action_t *start, pe_node_t *node, xmlNode *operation, pe_working_set_t *data_set); void ReloadRsc(pe_resource_t * rsc, pe_node_t *node, pe_working_set_t * data_set); gboolean DeleteRsc(pe_resource_t * rsc, pe_node_t * node, gboolean optional, pe_working_set_t * data_set); gboolean StopRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set); gboolean StartRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set); gboolean DemoteRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set); gboolean PromoteRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set); gboolean RoleError(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set); gboolean NullOp(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set); /* This array says what the *next* role should be when transitioning from one * role to another. For example going from Stopped to Master, the next role is * RSC_ROLE_SLAVE, because the resource must be started before being promoted. * The current state then becomes Started, which is fed into this array again, * giving a next role of RSC_ROLE_MASTER. */ static enum rsc_role_e rsc_state_matrix[RSC_ROLE_MAX][RSC_ROLE_MAX] = { /* Current state Next state*/ /* Unknown Stopped Started Slave Master */ /* Unknown */ { RSC_ROLE_UNKNOWN, RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, }, /* Stopped */ { RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, RSC_ROLE_STARTED, RSC_ROLE_SLAVE, RSC_ROLE_SLAVE, }, /* Started */ { RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, RSC_ROLE_STARTED, RSC_ROLE_SLAVE, RSC_ROLE_MASTER, }, /* Slave */ { RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, RSC_ROLE_STOPPED, RSC_ROLE_SLAVE, RSC_ROLE_MASTER, }, /* Master */ { RSC_ROLE_STOPPED, RSC_ROLE_SLAVE, RSC_ROLE_SLAVE, RSC_ROLE_SLAVE, RSC_ROLE_MASTER, }, }; typedef gboolean (*rsc_transition_fn)(pe_resource_t *rsc, pe_node_t *next, gboolean optional, pe_working_set_t *data_set); // This array picks the function needed to transition from one role to another static rsc_transition_fn rsc_action_matrix[RSC_ROLE_MAX][RSC_ROLE_MAX] = { /* Current state Next state */ /* Unknown Stopped Started Slave Master */ /* Unknown */ { RoleError, StopRsc, RoleError, RoleError, RoleError, }, /* Stopped */ { RoleError, NullOp, StartRsc, StartRsc, RoleError, }, /* Started */ { RoleError, StopRsc, NullOp, NullOp, PromoteRsc, }, /* Slave */ { RoleError, StopRsc, StopRsc, NullOp, PromoteRsc, }, /* Master */ { RoleError, DemoteRsc, DemoteRsc, DemoteRsc, NullOp , }, }; #define clear_node_weights_flags(nw_flags, nw_rsc, flags_to_clear) do { \ flags = pcmk__clear_flags_as(__func__, __LINE__, LOG_TRACE, \ "Node weight", (nw_rsc)->id, (flags), \ (flags_to_clear), #flags_to_clear); \ } while (0) static gboolean native_choose_node(pe_resource_t * rsc, pe_node_t * prefer, pe_working_set_t * data_set) { GListPtr nodes = NULL; pe_node_t *chosen = NULL; pe_node_t *best = NULL; int multiple = 1; int length = 0; gboolean result = FALSE; process_utilization(rsc, &prefer, data_set); if (!pcmk_is_set(rsc->flags, pe_rsc_provisional)) { return rsc->allocated_to ? TRUE : FALSE; } // Sort allowed nodes by weight if (rsc->allowed_nodes) { length = g_hash_table_size(rsc->allowed_nodes); } if (length > 0) { nodes = g_hash_table_get_values(rsc->allowed_nodes); nodes = sort_nodes_by_weight(nodes, pe__current_node(rsc), data_set); // First node in sorted list has the best score best = g_list_nth_data(nodes, 0); } if (prefer && nodes) { chosen = g_hash_table_lookup(rsc->allowed_nodes, prefer->details->id); if (chosen == NULL) { pe_rsc_trace(rsc, "Preferred node %s for %s was unknown", prefer->details->uname, rsc->id); /* Favor the preferred node as long as its weight is at least as good as * the best allowed node's. * * An alternative would be to favor the preferred node even if the best * node is better, when the best node's weight is less than INFINITY. */ } else if ((chosen->weight < 0) || (chosen->weight < best->weight)) { pe_rsc_trace(rsc, "Preferred node %s for %s was unsuitable", chosen->details->uname, rsc->id); chosen = NULL; } else if (!can_run_resources(chosen)) { pe_rsc_trace(rsc, "Preferred node %s for %s was unavailable", chosen->details->uname, rsc->id); chosen = NULL; } else { pe_rsc_trace(rsc, "Chose preferred node %s for %s (ignoring %d candidates)", chosen->details->uname, rsc->id, length); } } if ((chosen == NULL) && nodes) { /* Either there is no preferred node, or the preferred node is not * available, but there are other nodes allowed to run the resource. */ chosen = best; pe_rsc_trace(rsc, "Chose node %s for %s from %d candidates", chosen ? chosen->details->uname : "", rsc->id, length); if (!pe_rsc_is_unique_clone(rsc->parent) && chosen && (chosen->weight > 0) && can_run_resources(chosen)) { /* If the resource is already running on a node, prefer that node if * it is just as good as the chosen node. * * We don't do this for unique clone instances, because * distribute_children() has already assigned instances to their * running nodes when appropriate, and if we get here, we don't want * remaining unallocated instances to prefer a node that's already * running another instance. */ pe_node_t *running = pe__current_node(rsc); if (running && (can_run_resources(running) == FALSE)) { pe_rsc_trace(rsc, "Current node for %s (%s) can't run resources", rsc->id, running->details->uname); } else if (running) { for (GList *iter = nodes->next; iter; iter = iter->next) { pe_node_t *tmp = (pe_node_t *) iter->data; if (tmp->weight != chosen->weight) { // The nodes are sorted by weight, so no more are equal break; } if (tmp->details == running->details) { // Scores are equal, so prefer the current node chosen = tmp; } multiple++; } } } } if (multiple > 1) { static char score[33]; int log_level = (chosen->weight >= INFINITY)? LOG_WARNING : LOG_INFO; score2char_stack(chosen->weight, score, sizeof(score)); do_crm_log(log_level, "Chose node %s for %s from %d nodes with score %s", chosen->details->uname, rsc->id, multiple, score); } - result = native_assign_node(rsc, nodes, chosen, FALSE); + result = native_assign_node(rsc, chosen, FALSE); g_list_free(nodes); return result; } /*! * \internal * \brief Find score of highest-scored node that matches colocation attribute * * \param[in] rsc Resource whose allowed nodes should be searched * \param[in] attr Colocation attribute name (must not be NULL) * \param[in] value Colocation attribute value to require */ static int best_node_score_matching_attr(const pe_resource_t *rsc, const char *attr, const char *value) { GHashTableIter iter; pe_node_t *node = NULL; int best_score = -INFINITY; const char *best_node = NULL; // Find best allowed node with matching attribute g_hash_table_iter_init(&iter, rsc->allowed_nodes); while (g_hash_table_iter_next(&iter, NULL, (void **) &node)) { if ((node->weight > best_score) && can_run_resources(node) && pcmk__str_eq(value, pe_node_attribute_raw(node, attr), pcmk__str_casei)) { best_score = node->weight; best_node = node->details->uname; } } if (!pcmk__str_eq(attr, CRM_ATTR_UNAME, pcmk__str_casei)) { if (best_node == NULL) { crm_info("No allowed node for %s matches node attribute %s=%s", rsc->id, attr, value); } else { crm_info("Allowed node %s for %s had best score (%d) " "of those matching node attribute %s=%s", best_node, rsc->id, best_score, attr, value); } } return best_score; } /*! * \internal * \brief Add resource's colocation matches to current node allocation scores * * For each node in a given table, if any of a given resource's allowed nodes * have a matching value for the colocation attribute, add the highest of those * nodes' scores to the node's score. * * \param[in,out] nodes Hash table of nodes with allocation scores so far * \param[in] rsc Resource whose allowed nodes should be compared * \param[in] attr Colocation attribute that must match (NULL for default) * \param[in] factor Factor by which to multiply scores being added * \param[in] only_positive Whether to add only positive scores */ static void add_node_scores_matching_attr(GHashTable *nodes, const pe_resource_t *rsc, const char *attr, float factor, bool only_positive) { GHashTableIter iter; pe_node_t *node = NULL; if (attr == NULL) { attr = CRM_ATTR_UNAME; } // Iterate through each node g_hash_table_iter_init(&iter, nodes); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { float weight_f = 0; int weight = 0; int score = 0; int new_score = 0; score = best_node_score_matching_attr(rsc, attr, pe_node_attribute_raw(node, attr)); if ((factor < 0) && (score < 0)) { /* Negative preference for a node with a negative score * should not become a positive preference. * * @TODO Consider filtering only if weight is -INFINITY */ crm_trace("%s: Filtering %d + %f * %d (double negative disallowed)", node->details->uname, node->weight, factor, score); continue; } if (node->weight == INFINITY_HACK) { crm_trace("%s: Filtering %d + %f * %d (node was marked unusable)", node->details->uname, node->weight, factor, score); continue; } weight_f = factor * score; // Round the number; see http://c-faq.com/fp/round.html weight = (int) ((weight_f < 0)? (weight_f - 0.5) : (weight_f + 0.5)); /* Small factors can obliterate the small scores that are often actually * used in configurations. If the score and factor are nonzero, ensure * that the result is nonzero as well. */ if ((weight == 0) && (score != 0)) { if (factor > 0.0) { weight = 1; } else if (factor < 0.0) { weight = -1; } } new_score = pe__add_scores(weight, node->weight); if (only_positive && (new_score < 0) && (node->weight > 0)) { crm_trace("%s: Filtering %d + %f * %d = %d " "(negative disallowed, marking node unusable)", node->details->uname, node->weight, factor, score, new_score); node->weight = INFINITY_HACK; continue; } if (only_positive && (new_score < 0) && (node->weight == 0)) { crm_trace("%s: Filtering %d + %f * %d = %d (negative disallowed)", node->details->uname, node->weight, factor, score, new_score); continue; } crm_trace("%s: %d + %f * %d = %d", node->details->uname, node->weight, factor, score, new_score); node->weight = new_score; } } static inline bool is_nonempty_group(pe_resource_t *rsc) { return rsc && (rsc->variant == pe_group) && (rsc->children != NULL); } /*! * \internal * \brief Incorporate colocation constraint scores into node weights * * \param[in,out] rsc Resource being placed * \param[in] rhs ID of 'with' resource * \param[in,out] nodes Nodes, with scores as of this point * \param[in] attr Colocation attribute (ID by default) * \param[in] factor Incorporate scores multiplied by this factor * \param[in] flags Bitmask of enum pe_weights values * * \return Nodes, with scores modified by this constraint * \note This function assumes ownership of the nodes argument. The caller * should free the returned copy rather than the original. */ GHashTable * pcmk__native_merge_weights(pe_resource_t *rsc, const char *rhs, GHashTable *nodes, const char *attr, float factor, uint32_t flags) { GHashTable *work = NULL; // Avoid infinite recursion if (pcmk_is_set(rsc->flags, pe_rsc_merging)) { pe_rsc_info(rsc, "%s: Breaking dependency loop at %s", rhs, rsc->id); return nodes; } pe__set_resource_flags(rsc, pe_rsc_merging); if (pcmk_is_set(flags, pe_weights_init)) { if (is_nonempty_group(rsc)) { GList *last = g_list_last(rsc->children); pe_resource_t *last_rsc = last->data; pe_rsc_trace(rsc, "%s: Merging scores from group %s " "using last member %s (at %.6f)", rhs, rsc->id, last_rsc->id, factor); work = pcmk__native_merge_weights(last_rsc, rhs, NULL, attr, factor, flags); } else { work = pcmk__copy_node_table(rsc->allowed_nodes); } clear_node_weights_flags(flags, rsc, pe_weights_init); } else if (is_nonempty_group(rsc)) { /* The first member of the group will recursively incorporate any * constraints involving other members (including the group internal * colocation). * * @TODO The indirect colocations from the dependent group's other * members will be incorporated at full strength rather than by * factor, so the group's combined stickiness will be treated as * (factor + (#members - 1)) * stickiness. It is questionable what * the right approach should be. */ pe_rsc_trace(rsc, "%s: Merging scores from first member of group %s " "(at %.6f)", rhs, rsc->id, factor); work = pcmk__copy_node_table(nodes); work = pcmk__native_merge_weights(rsc->children->data, rhs, work, attr, factor, flags); } else { pe_rsc_trace(rsc, "%s: Merging scores from %s (at %.6f)", rhs, rsc->id, factor); work = pcmk__copy_node_table(nodes); add_node_scores_matching_attr(work, rsc, attr, factor, pcmk_is_set(flags, pe_weights_positive)); } if (can_run_any(work)) { GListPtr gIter = NULL; int multiplier = (factor < 0)? -1 : 1; if (pcmk_is_set(flags, pe_weights_forward)) { gIter = rsc->rsc_cons; pe_rsc_trace(rsc, "Checking additional %d optional '%s with' constraints", g_list_length(gIter), rsc->id); } else if (is_nonempty_group(rsc)) { pe_resource_t *last_rsc = g_list_last(rsc->children)->data; gIter = last_rsc->rsc_cons_lhs; pe_rsc_trace(rsc, "Checking additional %d optional 'with group %s' " "constraints using last member %s", g_list_length(gIter), rsc->id, last_rsc->id); } else { gIter = rsc->rsc_cons_lhs; pe_rsc_trace(rsc, "Checking additional %d optional 'with %s' constraints", g_list_length(gIter), rsc->id); } for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *other = NULL; pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; if (pcmk_is_set(flags, pe_weights_forward)) { other = constraint->rsc_rh; } else if (!pcmk__colocation_has_influence(constraint, NULL)) { continue; } else { other = constraint->rsc_lh; } pe_rsc_trace(rsc, "Optionally merging score of '%s' constraint (%s with %s)", constraint->id, constraint->rsc_lh->id, constraint->rsc_rh->id); work = pcmk__native_merge_weights(other, rhs, work, constraint->node_attribute, multiplier * constraint->score / (float) INFINITY, flags|pe_weights_rollback); pe__show_node_weights(true, NULL, rhs, work); } } else if (pcmk_is_set(flags, pe_weights_rollback)) { pe_rsc_info(rsc, "%s: Rolling back optional scores from %s", rhs, rsc->id); g_hash_table_destroy(work); pe__clear_resource_flags(rsc, pe_rsc_merging); return nodes; } if (pcmk_is_set(flags, pe_weights_positive)) { pe_node_t *node = NULL; GHashTableIter iter; g_hash_table_iter_init(&iter, work); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { if (node->weight == INFINITY_HACK) { node->weight = 1; } } } if (nodes) { g_hash_table_destroy(nodes); } pe__clear_resource_flags(rsc, pe_rsc_merging); return work; } static inline bool node_has_been_unfenced(pe_node_t *node) { const char *unfenced = pe_node_attribute_raw(node, CRM_ATTR_UNFENCED); return !pcmk__str_eq(unfenced, "0", pcmk__str_null_matches); } static inline bool is_unfence_device(pe_resource_t *rsc, pe_working_set_t *data_set) { return pcmk_is_set(rsc->flags, pe_rsc_fence_device) && pcmk_is_set(data_set->flags, pe_flag_enable_unfencing); } pe_node_t * pcmk__native_allocate(pe_resource_t *rsc, pe_node_t *prefer, pe_working_set_t *data_set) { GListPtr gIter = NULL; if (rsc->parent && !pcmk_is_set(rsc->parent->flags, pe_rsc_allocating)) { /* never allocate children on their own */ pe_rsc_debug(rsc, "Escalating allocation of %s to its parent: %s", rsc->id, rsc->parent->id); rsc->parent->cmds->allocate(rsc->parent, prefer, data_set); } if (!pcmk_is_set(rsc->flags, pe_rsc_provisional)) { return rsc->allocated_to; } if (pcmk_is_set(rsc->flags, pe_rsc_allocating)) { pe_rsc_debug(rsc, "Dependency loop detected involving %s", rsc->id); return NULL; } pe__set_resource_flags(rsc, pe_rsc_allocating); pe__show_node_weights(true, rsc, "Pre-alloc", rsc->allowed_nodes); for (gIter = rsc->rsc_cons; gIter != NULL; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; GHashTable *archive = NULL; pe_resource_t *rsc_rh = constraint->rsc_rh; if (constraint->role_lh >= RSC_ROLE_MASTER || (constraint->score < 0 && constraint->score > -INFINITY)) { archive = pcmk__copy_node_table(rsc->allowed_nodes); } pe_rsc_trace(rsc, "%s: Allocating %s first (constraint=%s score=%d role=%s)", rsc->id, rsc_rh->id, constraint->id, constraint->score, role2text(constraint->role_lh)); rsc_rh->cmds->allocate(rsc_rh, NULL, data_set); rsc->cmds->rsc_colocation_lh(rsc, rsc_rh, constraint, data_set); if (archive && can_run_any(rsc->allowed_nodes) == FALSE) { pe_rsc_info(rsc, "%s: Rolling back scores from %s", rsc->id, rsc_rh->id); g_hash_table_destroy(rsc->allowed_nodes); rsc->allowed_nodes = archive; archive = NULL; } if (archive) { g_hash_table_destroy(archive); } } pe__show_node_weights(true, rsc, "Post-coloc", rsc->allowed_nodes); for (gIter = rsc->rsc_cons_lhs; gIter != NULL; gIter = gIter->next) { pcmk__colocation_t *constraint = (pcmk__colocation_t *) gIter->data; if (!pcmk__colocation_has_influence(constraint, NULL)) { continue; } pe_rsc_trace(rsc, "Merging score of '%s' constraint (%s with %s)", constraint->id, constraint->rsc_lh->id, constraint->rsc_rh->id); rsc->allowed_nodes = constraint->rsc_lh->cmds->merge_weights(constraint->rsc_lh, rsc->id, rsc->allowed_nodes, constraint->node_attribute, (float)constraint->score / INFINITY, pe_weights_rollback); } if (rsc->next_role == RSC_ROLE_STOPPED) { pe_rsc_trace(rsc, "Making sure %s doesn't get allocated", rsc->id); /* make sure it doesn't come up again */ resource_location(rsc, NULL, -INFINITY, XML_RSC_ATTR_TARGET_ROLE, data_set); } else if(rsc->next_role > rsc->role && !pcmk_is_set(data_set->flags, pe_flag_have_quorum) && data_set->no_quorum_policy == no_quorum_freeze) { crm_notice("Resource %s cannot be elevated from %s to %s: no-quorum-policy=freeze", rsc->id, role2text(rsc->role), role2text(rsc->next_role)); pe__set_next_role(rsc, rsc->role, "no-quorum-policy=freeze"); } pe__show_node_weights(!show_scores, rsc, __func__, rsc->allowed_nodes); if (pcmk_is_set(data_set->flags, pe_flag_stonith_enabled) && !pcmk_is_set(data_set->flags, pe_flag_have_stonith_resource)) { pe__clear_resource_flags(rsc, pe_rsc_managed); } if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { const char *reason = NULL; pe_node_t *assign_to = NULL; pe__set_next_role(rsc, rsc->role, "unmanaged"); assign_to = pe__current_node(rsc); if (assign_to == NULL) { reason = "inactive"; } else if (rsc->role == RSC_ROLE_MASTER) { reason = "master"; } else if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { reason = "failed"; } else { reason = "active"; } pe_rsc_info(rsc, "Unmanaged resource %s allocated to %s: %s", rsc->id, (assign_to? assign_to->details->uname : "no node"), reason); - native_assign_node(rsc, NULL, assign_to, TRUE); + native_assign_node(rsc, assign_to, TRUE); } else if (pcmk_is_set(data_set->flags, pe_flag_stop_everything)) { pe_rsc_debug(rsc, "Forcing %s to stop", rsc->id); - native_assign_node(rsc, NULL, NULL, TRUE); + native_assign_node(rsc, NULL, TRUE); } else if (pcmk_is_set(rsc->flags, pe_rsc_provisional) && native_choose_node(rsc, prefer, data_set)) { pe_rsc_trace(rsc, "Allocated resource %s to %s", rsc->id, rsc->allocated_to->details->uname); } else if (rsc->allocated_to == NULL) { if (!pcmk_is_set(rsc->flags, pe_rsc_orphan)) { pe_rsc_info(rsc, "Resource %s cannot run anywhere", rsc->id); } else if (rsc->running_on != NULL) { pe_rsc_info(rsc, "Stopping orphan resource %s", rsc->id); } } else { pe_rsc_debug(rsc, "Pre-Allocated resource %s to %s", rsc->id, rsc->allocated_to->details->uname); } pe__clear_resource_flags(rsc, pe_rsc_allocating); if (rsc->is_remote_node) { pe_node_t *remote_node = pe_find_node(data_set->nodes, rsc->id); CRM_ASSERT(remote_node != NULL); if (rsc->allocated_to && rsc->next_role != RSC_ROLE_STOPPED) { crm_trace("Setting Pacemaker Remote node %s to ONLINE", remote_node->details->id); remote_node->details->online = TRUE; /* We shouldn't consider an unseen remote-node unclean if we are going * to try and connect to it. Otherwise we get an unnecessary fence */ if (remote_node->details->unseen == TRUE) { remote_node->details->unclean = FALSE; } } else { crm_trace("Setting Pacemaker Remote node %s to SHUTDOWN (next role %s, %sallocated)", remote_node->details->id, role2text(rsc->next_role), (rsc->allocated_to? "" : "un")); remote_node->details->shutdown = TRUE; } } return rsc->allocated_to; } static gboolean is_op_dup(pe_resource_t *rsc, const char *name, guint interval_ms) { gboolean dup = FALSE; const char *id = NULL; const char *value = NULL; xmlNode *operation = NULL; guint interval2_ms = 0; CRM_ASSERT(rsc); for (operation = pcmk__xe_first_child(rsc->ops_xml); operation != NULL; operation = pcmk__xe_next(operation)) { if (pcmk__str_eq((const char *)operation->name, "op", pcmk__str_none)) { value = crm_element_value(operation, "name"); if (!pcmk__str_eq(value, name, pcmk__str_casei)) { continue; } value = crm_element_value(operation, XML_LRM_ATTR_INTERVAL); interval2_ms = crm_parse_interval_spec(value); if (interval_ms != interval2_ms) { continue; } if (id == NULL) { id = ID(operation); } else { pcmk__config_err("Operation %s is duplicate of %s (do not use " "same name and interval combination more " "than once per resource)", ID(operation), id); dup = TRUE; } } } return dup; } static bool op_cannot_recur(const char *name) { return pcmk__strcase_any_of(name, RSC_STOP, RSC_START, RSC_DEMOTE, RSC_PROMOTE, NULL); } static void RecurringOp(pe_resource_t * rsc, pe_action_t * start, pe_node_t * node, xmlNode * operation, pe_working_set_t * data_set) { char *key = NULL; const char *name = NULL; const char *role = NULL; const char *interval_spec = NULL; const char *node_uname = node? node->details->uname : "n/a"; guint interval_ms = 0; pe_action_t *mon = NULL; gboolean is_optional = TRUE; GListPtr possible_matches = NULL; CRM_ASSERT(rsc); /* Only process for the operations without role="Stopped" */ role = crm_element_value(operation, "role"); if (role && text2role(role) == RSC_ROLE_STOPPED) { return; } interval_spec = crm_element_value(operation, XML_LRM_ATTR_INTERVAL); interval_ms = crm_parse_interval_spec(interval_spec); if (interval_ms == 0) { return; } name = crm_element_value(operation, "name"); if (is_op_dup(rsc, name, interval_ms)) { crm_trace("Not creating duplicate recurring action %s for %dms %s", ID(operation), interval_ms, name); return; } if (op_cannot_recur(name)) { pcmk__config_err("Ignoring %s because action '%s' cannot be recurring", ID(operation), name); return; } key = pcmk__op_key(rsc->id, name, interval_ms); if (find_rsc_op_entry(rsc, key) == NULL) { crm_trace("Not creating recurring action %s for disabled resource %s", ID(operation), rsc->id); free(key); return; } pe_rsc_trace(rsc, "Creating recurring action %s for %s in role %s on %s", ID(operation), rsc->id, role2text(rsc->next_role), node_uname); if (start != NULL) { pe_rsc_trace(rsc, "Marking %s %s due to %s", key, pcmk_is_set(start->flags, pe_action_optional)? "optional" : "mandatory", start->uuid); is_optional = (rsc->cmds->action_flags(start, NULL) & pe_action_optional); } else { pe_rsc_trace(rsc, "Marking %s optional", key); is_optional = TRUE; } /* start a monitor for an already active resource */ possible_matches = find_actions_exact(rsc->actions, key, node); if (possible_matches == NULL) { is_optional = FALSE; pe_rsc_trace(rsc, "Marking %s mandatory: not active", key); } else { GListPtr gIter = NULL; for (gIter = possible_matches; gIter != NULL; gIter = gIter->next) { pe_action_t *op = (pe_action_t *) gIter->data; if (pcmk_is_set(op->flags, pe_action_reschedule)) { is_optional = FALSE; break; } } g_list_free(possible_matches); } if ((rsc->next_role == RSC_ROLE_MASTER && role == NULL) || (role != NULL && text2role(role) != rsc->next_role)) { int log_level = LOG_TRACE; const char *result = "Ignoring"; if (is_optional) { char *after_key = NULL; pe_action_t *cancel_op = NULL; // It's running, so cancel it log_level = LOG_INFO; result = "Cancelling"; cancel_op = pe_cancel_op(rsc, name, interval_ms, node, data_set); switch (rsc->role) { case RSC_ROLE_SLAVE: case RSC_ROLE_STARTED: if (rsc->next_role == RSC_ROLE_MASTER) { after_key = promote_key(rsc); } else if (rsc->next_role == RSC_ROLE_STOPPED) { after_key = stop_key(rsc); } break; case RSC_ROLE_MASTER: after_key = demote_key(rsc); break; default: break; } if (after_key) { custom_action_order(rsc, NULL, cancel_op, rsc, after_key, NULL, pe_order_runnable_left, data_set); } } do_crm_log(log_level, "%s action %s (%s vs. %s)", result, key, role ? role : role2text(RSC_ROLE_SLAVE), role2text(rsc->next_role)); free(key); return; } mon = custom_action(rsc, key, name, node, is_optional, TRUE, data_set); key = mon->uuid; if (is_optional) { pe_rsc_trace(rsc, "%s\t %s (optional)", node_uname, mon->uuid); } if ((start == NULL) || !pcmk_is_set(start->flags, pe_action_runnable)) { pe_rsc_debug(rsc, "%s\t %s (cancelled : start un-runnable)", node_uname, mon->uuid); update_action_flags(mon, pe_action_runnable | pe_action_clear, __func__, __LINE__); } else if (node == NULL || node->details->online == FALSE || node->details->unclean) { pe_rsc_debug(rsc, "%s\t %s (cancelled : no node available)", node_uname, mon->uuid); update_action_flags(mon, pe_action_runnable | pe_action_clear, __func__, __LINE__); } else if (!pcmk_is_set(mon->flags, pe_action_optional)) { pe_rsc_info(rsc, " Start recurring %s (%us) for %s on %s", mon->task, interval_ms / 1000, rsc->id, node_uname); } if (rsc->next_role == RSC_ROLE_MASTER) { char *running_master = crm_itoa(PCMK_OCF_RUNNING_MASTER); add_hash_param(mon->meta, XML_ATTR_TE_TARGET_RC, running_master); free(running_master); } if ((node == NULL) || pcmk_is_set(rsc->flags, pe_rsc_managed)) { custom_action_order(rsc, start_key(rsc), NULL, NULL, strdup(key), mon, pe_order_implies_then | pe_order_runnable_left, data_set); custom_action_order(rsc, reload_key(rsc), NULL, NULL, strdup(key), mon, pe_order_implies_then | pe_order_runnable_left, data_set); if (rsc->next_role == RSC_ROLE_MASTER) { custom_action_order(rsc, promote_key(rsc), NULL, rsc, NULL, mon, pe_order_optional | pe_order_runnable_left, data_set); } else if (rsc->role == RSC_ROLE_MASTER) { custom_action_order(rsc, demote_key(rsc), NULL, rsc, NULL, mon, pe_order_optional | pe_order_runnable_left, data_set); } } } static void Recurring(pe_resource_t * rsc, pe_action_t * start, pe_node_t * node, pe_working_set_t * data_set) { if (!pcmk_is_set(rsc->flags, pe_rsc_maintenance) && (node == NULL || node->details->maintenance == FALSE)) { xmlNode *operation = NULL; for (operation = pcmk__xe_first_child(rsc->ops_xml); operation != NULL; operation = pcmk__xe_next(operation)) { if (pcmk__str_eq((const char *)operation->name, "op", pcmk__str_none)) { RecurringOp(rsc, start, node, operation, data_set); } } } } static void RecurringOp_Stopped(pe_resource_t * rsc, pe_action_t * start, pe_node_t * node, xmlNode * operation, pe_working_set_t * data_set) { char *key = NULL; const char *name = NULL; const char *role = NULL; const char *interval_spec = NULL; const char *node_uname = node? node->details->uname : "n/a"; guint interval_ms = 0; GListPtr possible_matches = NULL; GListPtr gIter = NULL; /* Only process for the operations with role="Stopped" */ role = crm_element_value(operation, "role"); if (role == NULL || text2role(role) != RSC_ROLE_STOPPED) { return; } interval_spec = crm_element_value(operation, XML_LRM_ATTR_INTERVAL); interval_ms = crm_parse_interval_spec(interval_spec); if (interval_ms == 0) { return; } name = crm_element_value(operation, "name"); if (is_op_dup(rsc, name, interval_ms)) { crm_trace("Not creating duplicate recurring action %s for %dms %s", ID(operation), interval_ms, name); return; } if (op_cannot_recur(name)) { pcmk__config_err("Ignoring %s because action '%s' cannot be recurring", ID(operation), name); return; } key = pcmk__op_key(rsc->id, name, interval_ms); if (find_rsc_op_entry(rsc, key) == NULL) { crm_trace("Not creating recurring action %s for disabled resource %s", ID(operation), rsc->id); free(key); return; } // @TODO add support if (!pcmk_is_set(rsc->flags, pe_rsc_unique)) { crm_notice("Ignoring %s (recurring monitors for Stopped role are " "not supported for anonymous clones)", ID(operation)); return; } pe_rsc_trace(rsc, "Creating recurring action %s for %s in role %s on nodes where it should not be running", ID(operation), rsc->id, role2text(rsc->next_role)); /* if the monitor exists on the node where the resource will be running, cancel it */ if (node != NULL) { possible_matches = find_actions_exact(rsc->actions, key, node); if (possible_matches) { pe_action_t *cancel_op = NULL; g_list_free(possible_matches); cancel_op = pe_cancel_op(rsc, name, interval_ms, node, data_set); if (rsc->next_role == RSC_ROLE_STARTED || rsc->next_role == RSC_ROLE_SLAVE) { /* rsc->role == RSC_ROLE_STOPPED: cancel the monitor before start */ /* rsc->role == RSC_ROLE_STARTED: for a migration, cancel the monitor on the target node before start */ custom_action_order(rsc, NULL, cancel_op, rsc, start_key(rsc), NULL, pe_order_runnable_left, data_set); } pe_rsc_info(rsc, "Cancel action %s (%s vs. %s) on %s", key, role, role2text(rsc->next_role), node_uname); } } for (gIter = data_set->nodes; gIter != NULL; gIter = gIter->next) { pe_node_t *stop_node = (pe_node_t *) gIter->data; const char *stop_node_uname = stop_node->details->uname; gboolean is_optional = TRUE; gboolean probe_is_optional = TRUE; gboolean stop_is_optional = TRUE; pe_action_t *stopped_mon = NULL; char *rc_inactive = NULL; GListPtr probe_complete_ops = NULL; GListPtr stop_ops = NULL; GListPtr local_gIter = NULL; if (node && pcmk__str_eq(stop_node_uname, node_uname, pcmk__str_casei)) { continue; } pe_rsc_trace(rsc, "Creating recurring action %s for %s on %s", ID(operation), rsc->id, crm_str(stop_node_uname)); /* start a monitor for an already stopped resource */ possible_matches = find_actions_exact(rsc->actions, key, stop_node); if (possible_matches == NULL) { pe_rsc_trace(rsc, "Marking %s mandatory on %s: not active", key, crm_str(stop_node_uname)); is_optional = FALSE; } else { pe_rsc_trace(rsc, "Marking %s optional on %s: already active", key, crm_str(stop_node_uname)); is_optional = TRUE; g_list_free(possible_matches); } stopped_mon = custom_action(rsc, strdup(key), name, stop_node, is_optional, TRUE, data_set); rc_inactive = crm_itoa(PCMK_OCF_NOT_RUNNING); add_hash_param(stopped_mon->meta, XML_ATTR_TE_TARGET_RC, rc_inactive); free(rc_inactive); if (pcmk_is_set(rsc->flags, pe_rsc_managed)) { GList *probes = pe__resource_actions(rsc, stop_node, RSC_STATUS, FALSE); GListPtr pIter = NULL; for (pIter = probes; pIter != NULL; pIter = pIter->next) { pe_action_t *probe = (pe_action_t *) pIter->data; order_actions(probe, stopped_mon, pe_order_runnable_left); crm_trace("%s then %s on %s", probe->uuid, stopped_mon->uuid, stop_node->details->uname); } g_list_free(probes); } if (probe_complete_ops) { g_list_free(probe_complete_ops); } stop_ops = pe__resource_actions(rsc, stop_node, RSC_STOP, TRUE); for (local_gIter = stop_ops; local_gIter != NULL; local_gIter = local_gIter->next) { pe_action_t *stop = (pe_action_t *) local_gIter->data; if (!pcmk_is_set(stop->flags, pe_action_optional)) { stop_is_optional = FALSE; } if (!pcmk_is_set(stop->flags, pe_action_runnable)) { crm_debug("%s\t %s (cancelled : stop un-runnable)", crm_str(stop_node_uname), stopped_mon->uuid); update_action_flags(stopped_mon, pe_action_runnable | pe_action_clear, __func__, __LINE__); } if (pcmk_is_set(rsc->flags, pe_rsc_managed)) { custom_action_order(rsc, stop_key(rsc), stop, NULL, strdup(key), stopped_mon, pe_order_implies_then | pe_order_runnable_left, data_set); } } if (stop_ops) { g_list_free(stop_ops); } if (is_optional == FALSE && probe_is_optional && stop_is_optional && !pcmk_is_set(rsc->flags, pe_rsc_managed)) { pe_rsc_trace(rsc, "Marking %s optional on %s due to unmanaged", key, crm_str(stop_node_uname)); update_action_flags(stopped_mon, pe_action_optional, __func__, __LINE__); } if (pcmk_is_set(stopped_mon->flags, pe_action_optional)) { pe_rsc_trace(rsc, "%s\t %s (optional)", crm_str(stop_node_uname), stopped_mon->uuid); } if (stop_node->details->online == FALSE || stop_node->details->unclean) { pe_rsc_debug(rsc, "%s\t %s (cancelled : no node available)", crm_str(stop_node_uname), stopped_mon->uuid); update_action_flags(stopped_mon, pe_action_runnable | pe_action_clear, __func__, __LINE__); } if (pcmk_is_set(stopped_mon->flags, pe_action_runnable) && !pcmk_is_set(stopped_mon->flags, pe_action_optional)) { crm_notice(" Start recurring %s (%us) for %s on %s", stopped_mon->task, interval_ms / 1000, rsc->id, crm_str(stop_node_uname)); } } free(key); } static void Recurring_Stopped(pe_resource_t * rsc, pe_action_t * start, pe_node_t * node, pe_working_set_t * data_set) { if (!pcmk_is_set(rsc->flags, pe_rsc_maintenance) && (node == NULL || node->details->maintenance == FALSE)) { xmlNode *operation = NULL; for (operation = pcmk__xe_first_child(rsc->ops_xml); operation != NULL; operation = pcmk__xe_next(operation)) { if (pcmk__str_eq((const char *)operation->name, "op", pcmk__str_none)) { RecurringOp_Stopped(rsc, start, node, operation, data_set); } } } } static void handle_migration_actions(pe_resource_t * rsc, pe_node_t *current, pe_node_t *chosen, pe_working_set_t * data_set) { pe_action_t *migrate_to = NULL; pe_action_t *migrate_from = NULL; pe_action_t *start = NULL; pe_action_t *stop = NULL; gboolean partial = rsc->partial_migration_target ? TRUE : FALSE; pe_rsc_trace(rsc, "Processing migration actions %s moving from %s to %s . partial migration = %s", rsc->id, current->details->id, chosen->details->id, partial ? "TRUE" : "FALSE"); start = start_action(rsc, chosen, TRUE); stop = stop_action(rsc, current, TRUE); if (partial == FALSE) { migrate_to = custom_action(rsc, pcmk__op_key(rsc->id, RSC_MIGRATE, 0), RSC_MIGRATE, current, TRUE, TRUE, data_set); } migrate_from = custom_action(rsc, pcmk__op_key(rsc->id, RSC_MIGRATED, 0), RSC_MIGRATED, chosen, TRUE, TRUE, data_set); if ((migrate_to && migrate_from) || (migrate_from && partial)) { pe__set_action_flags(start, pe_action_migrate_runnable); pe__set_action_flags(stop, pe_action_migrate_runnable); // This is easier than trying to delete it from the graph update_action_flags(start, pe_action_pseudo, __func__, __LINE__); /* order probes before migrations */ if (partial) { pe__set_action_flags(migrate_from, pe_action_migrate_runnable); migrate_from->needs = start->needs; custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_STATUS, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_MIGRATED, 0), NULL, pe_order_optional, data_set); } else { pe__set_action_flags(migrate_from, pe_action_migrate_runnable); pe__set_action_flags(migrate_to, pe_action_migrate_runnable); migrate_to->needs = start->needs; custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_STATUS, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_MIGRATE, 0), NULL, pe_order_optional, data_set); custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_MIGRATE, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_MIGRATED, 0), NULL, pe_order_optional|pe_order_implies_first_migratable, data_set); } custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_MIGRATED, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_STOP, 0), NULL, pe_order_optional|pe_order_implies_first_migratable, data_set); custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_MIGRATED, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_START, 0), NULL, pe_order_optional|pe_order_implies_first_migratable|pe_order_pseudo_left, data_set); } if (migrate_to) { add_hash_param(migrate_to->meta, XML_LRM_ATTR_MIGRATE_SOURCE, current->details->uname); add_hash_param(migrate_to->meta, XML_LRM_ATTR_MIGRATE_TARGET, chosen->details->uname); /* Pacemaker Remote connections don't require pending to be recorded in * the CIB. We can reduce CIB writes by not setting PENDING for them. */ if (rsc->is_remote_node == FALSE) { /* migrate_to takes place on the source node, but can * have an effect on the target node depending on how * the agent is written. Because of this, we have to maintain * a record that the migrate_to occurred, in case the source node * loses membership while the migrate_to action is still in-flight. */ add_hash_param(migrate_to->meta, XML_OP_ATTR_PENDING, "true"); } } if (migrate_from) { add_hash_param(migrate_from->meta, XML_LRM_ATTR_MIGRATE_SOURCE, current->details->uname); add_hash_param(migrate_from->meta, XML_LRM_ATTR_MIGRATE_TARGET, chosen->details->uname); } } void native_create_actions(pe_resource_t * rsc, pe_working_set_t * data_set) { pe_action_t *start = NULL; pe_node_t *chosen = NULL; pe_node_t *current = NULL; gboolean need_stop = FALSE; bool need_promote = FALSE; gboolean is_moving = FALSE; gboolean allow_migrate = pcmk_is_set(rsc->flags, pe_rsc_allow_migrate)? TRUE : FALSE; GListPtr gIter = NULL; unsigned int num_all_active = 0; unsigned int num_clean_active = 0; bool multiply_active = FALSE; enum rsc_role_e role = RSC_ROLE_UNKNOWN; enum rsc_role_e next_role = RSC_ROLE_UNKNOWN; CRM_ASSERT(rsc); chosen = rsc->allocated_to; next_role = rsc->next_role; if (next_role == RSC_ROLE_UNKNOWN) { pe__set_next_role(rsc, (chosen == NULL)? RSC_ROLE_STOPPED : RSC_ROLE_STARTED, "allocation"); } pe_rsc_trace(rsc, "Creating all actions for %s transition from %s to %s (%s) on %s", rsc->id, role2text(rsc->role), role2text(rsc->next_role), ((next_role == RSC_ROLE_UNKNOWN)? "implicit" : "explicit"), ((chosen == NULL)? "no node" : chosen->details->uname)); current = pe__find_active_on(rsc, &num_all_active, &num_clean_active); for (gIter = rsc->dangling_migrations; gIter != NULL; gIter = gIter->next) { pe_node_t *dangling_source = (pe_node_t *) gIter->data; pe_action_t *stop = NULL; pe_rsc_trace(rsc, "Creating stop action %sfor %s on %s due to dangling migration", pcmk_is_set(data_set->flags, pe_flag_remove_after_stop)? "and cleanup " : "", rsc->id, dangling_source->details->uname); stop = stop_action(rsc, dangling_source, FALSE); pe__set_action_flags(stop, pe_action_dangle); if (pcmk_is_set(data_set->flags, pe_flag_remove_after_stop)) { DeleteRsc(rsc, dangling_source, FALSE, data_set); } } if ((num_all_active == 2) && (num_clean_active == 2) && chosen && rsc->partial_migration_source && rsc->partial_migration_target && (current->details == rsc->partial_migration_source->details) && (chosen->details == rsc->partial_migration_target->details)) { /* The chosen node is still the migration target from a partial * migration. Attempt to continue the migration instead of recovering * by stopping the resource everywhere and starting it on a single node. */ pe_rsc_trace(rsc, "Will attempt to continue with partial migration " "to target %s from %s", rsc->partial_migration_target->details->id, rsc->partial_migration_source->details->id); } else if (!pcmk_is_set(rsc->flags, pe_rsc_needs_fencing)) { /* If a resource has "requires" set to nothing or quorum, don't consider * it active on unclean nodes (similar to how all resources behave when * stonith-enabled is false). We can start such resources elsewhere * before fencing completes, and if we considered the resource active on * the failed node, we would attempt recovery for being active on * multiple nodes. */ multiply_active = (num_clean_active > 1); } else { multiply_active = (num_all_active > 1); } if (multiply_active) { if (rsc->partial_migration_target && rsc->partial_migration_source) { // Migration was in progress, but we've chosen a different target crm_notice("Resource %s can no longer migrate from %s to %s " "(will stop on both nodes)", rsc->id, rsc->partial_migration_source->details->uname, rsc->partial_migration_target->details->uname); } else { const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); // Resource was incorrectly multiply active pe_proc_err("%s resource %s is active on %u nodes (%s)", crm_str(class), rsc->id, num_all_active, recovery2text(rsc->recovery_type)); crm_notice("See https://wiki.clusterlabs.org/wiki/FAQ#Resource_is_Too_Active for more information"); } if (rsc->recovery_type == recovery_stop_start) { need_stop = TRUE; } /* If by chance a partial migration is in process, but the migration * target is not chosen still, clear all partial migration data. */ rsc->partial_migration_source = rsc->partial_migration_target = NULL; allow_migrate = FALSE; } if (pcmk_is_set(rsc->flags, pe_rsc_start_pending)) { pe_rsc_trace(rsc, "Creating start action for %s to represent already pending start", rsc->id); start = start_action(rsc, chosen, TRUE); pe__set_action_flags(start, pe_action_print_always); } if (current && chosen && current->details != chosen->details) { pe_rsc_trace(rsc, "Moving %s from %s to %s", rsc->id, crm_str(current->details->uname), crm_str(chosen->details->uname)); is_moving = TRUE; need_stop = TRUE; } else if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { if (pcmk_is_set(rsc->flags, pe_rsc_stop)) { need_stop = TRUE; pe_rsc_trace(rsc, "Recovering %s", rsc->id); } else { pe_rsc_trace(rsc, "Recovering %s by demotion", rsc->id); if (rsc->next_role == RSC_ROLE_MASTER) { need_promote = TRUE; } } } else if (pcmk_is_set(rsc->flags, pe_rsc_block)) { pe_rsc_trace(rsc, "Blocking further actions on %s", rsc->id); need_stop = TRUE; } else if (rsc->role > RSC_ROLE_STARTED && current != NULL && chosen != NULL) { pe_rsc_trace(rsc, "Creating start action for promoted resource %s", rsc->id); start = start_action(rsc, chosen, TRUE); if (!pcmk_is_set(start->flags, pe_action_optional)) { // Recovery of a promoted resource pe_rsc_trace(rsc, "%s restart is required for recovery", rsc->id); need_stop = TRUE; } } /* Create any additional actions required when bringing resource down and * back up to same level. */ role = rsc->role; while (role != RSC_ROLE_STOPPED) { next_role = rsc_state_matrix[role][RSC_ROLE_STOPPED]; pe_rsc_trace(rsc, "Creating %s action to take %s down from %s to %s", (need_stop? "required" : "optional"), rsc->id, role2text(role), role2text(next_role)); if (rsc_action_matrix[role][next_role] (rsc, current, !need_stop, data_set) == FALSE) { break; } role = next_role; } while ((rsc->role <= rsc->next_role) && (role != rsc->role) && !pcmk_is_set(rsc->flags, pe_rsc_block)) { bool required = need_stop; next_role = rsc_state_matrix[role][rsc->role]; if ((next_role == RSC_ROLE_MASTER) && need_promote) { required = true; } pe_rsc_trace(rsc, "Creating %s action to take %s up from %s to %s", (required? "required" : "optional"), rsc->id, role2text(role), role2text(next_role)); if (rsc_action_matrix[role][next_role](rsc, chosen, !required, data_set) == FALSE) { break; } role = next_role; } role = rsc->role; /* Required steps from this role to the next */ while (role != rsc->next_role) { next_role = rsc_state_matrix[role][rsc->next_role]; pe_rsc_trace(rsc, "Creating action to take %s from %s to %s (ending at %s)", rsc->id, role2text(role), role2text(next_role), role2text(rsc->next_role)); if (rsc_action_matrix[role][next_role] (rsc, chosen, FALSE, data_set) == FALSE) { break; } role = next_role; } if (pcmk_is_set(rsc->flags, pe_rsc_block)) { pe_rsc_trace(rsc, "Not creating recurring monitors for blocked resource %s", rsc->id); } else if ((rsc->next_role != RSC_ROLE_STOPPED) || !pcmk_is_set(rsc->flags, pe_rsc_managed)) { pe_rsc_trace(rsc, "Creating recurring monitors for %s resource %s", ((rsc->next_role == RSC_ROLE_STOPPED)? "unmanaged" : "active"), rsc->id); start = start_action(rsc, chosen, TRUE); Recurring(rsc, start, chosen, data_set); Recurring_Stopped(rsc, start, chosen, data_set); } else { pe_rsc_trace(rsc, "Creating recurring monitors for inactive resource %s", rsc->id); Recurring_Stopped(rsc, NULL, NULL, data_set); } /* if we are stuck in a partial migration, where the target * of the partial migration no longer matches the chosen target. * A full stop/start is required */ if (rsc->partial_migration_target && (chosen == NULL || rsc->partial_migration_target->details != chosen->details)) { pe_rsc_trace(rsc, "Not allowing partial migration of %s to continue", rsc->id); allow_migrate = FALSE; } else if (!is_moving || !pcmk_is_set(rsc->flags, pe_rsc_managed) || pcmk_any_flags_set(rsc->flags, pe_rsc_failed|pe_rsc_start_pending) || (current && current->details->unclean) || rsc->next_role < RSC_ROLE_STARTED) { allow_migrate = FALSE; } if (allow_migrate) { handle_migration_actions(rsc, current, chosen, data_set); } } static void rsc_avoids_remote_nodes(pe_resource_t *rsc) { GHashTableIter iter; pe_node_t *node = NULL; g_hash_table_iter_init(&iter, rsc->allowed_nodes); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { if (node->details->remote_rsc) { node->weight = -INFINITY; } } } /*! * \internal * \brief Return allowed nodes as (possibly sorted) list * * Convert a resource's hash table of allowed nodes to a list. If printing to * stdout, sort the list, to keep action ID numbers consistent for regression * test output (while avoiding the performance hit on a live cluster). * * \param[in] rsc Resource to check for allowed nodes * \param[in] data_set Cluster working set * * \return List of resource's allowed nodes * \note Callers should take care not to rely on the list being sorted. */ static GList * allowed_nodes_as_list(pe_resource_t *rsc, pe_working_set_t *data_set) { GList *allowed_nodes = NULL; if (rsc->allowed_nodes) { allowed_nodes = g_hash_table_get_values(rsc->allowed_nodes); } if (pcmk_is_set(data_set->flags, pe_flag_stdout)) { allowed_nodes = g_list_sort(allowed_nodes, sort_node_uname); } return allowed_nodes; } void native_internal_constraints(pe_resource_t * rsc, pe_working_set_t * data_set) { /* This function is on the critical path and worth optimizing as much as possible */ pe_resource_t *top = NULL; GList *allowed_nodes = NULL; bool check_unfencing = FALSE; bool check_utilization = FALSE; if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { pe_rsc_trace(rsc, "Skipping native constraints for unmanaged resource: %s", rsc->id); return; } top = uber_parent(rsc); // Whether resource requires unfencing check_unfencing = !pcmk_is_set(rsc->flags, pe_rsc_fence_device) && pcmk_is_set(data_set->flags, pe_flag_enable_unfencing) && pcmk_is_set(rsc->flags, pe_rsc_needs_unfencing); // Whether a non-default placement strategy is used check_utilization = (g_hash_table_size(rsc->utilization) > 0) && !pcmk__str_eq(data_set->placement_strategy, "default", pcmk__str_casei); // Order stops before starts (i.e. restart) custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_STOP, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_START, 0), NULL, pe_order_optional|pe_order_implies_then|pe_order_restart, data_set); // Promotable ordering: demote before stop, start before promote if (pcmk_is_set(top->flags, pe_rsc_promotable) || (rsc->role > RSC_ROLE_SLAVE)) { custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_DEMOTE, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_STOP, 0), NULL, pe_order_implies_first_master, data_set); custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_START, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_PROMOTE, 0), NULL, pe_order_runnable_left, data_set); } // Don't clear resource history if probing on same node custom_action_order(rsc, pcmk__op_key(rsc->id, CRM_OP_LRM_DELETE, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_STATUS, 0), NULL, pe_order_same_node|pe_order_then_cancels_first, data_set); // Certain checks need allowed nodes if (check_unfencing || check_utilization || rsc->container) { allowed_nodes = allowed_nodes_as_list(rsc, data_set); } if (check_unfencing) { /* Check if the node needs to be unfenced first */ for (GList *item = allowed_nodes; item; item = item->next) { pe_node_t *node = item->data; pe_action_t *unfence = pe_fence_op(node, "on", TRUE, NULL, FALSE, data_set); crm_debug("Ordering any stops of %s before %s, and any starts after", rsc->id, unfence->uuid); /* * It would be more efficient to order clone resources once, * rather than order each instance, but ordering the instance * allows us to avoid unnecessary dependencies that might conflict * with user constraints. * * @TODO: This constraint can still produce a transition loop if the * resource has a stop scheduled on the node being unfenced, and * there is a user ordering constraint to start some other resource * (which will be ordered after the unfence) before stopping this * resource. An example is "start some slow-starting cloned service * before stopping an associated virtual IP that may be moving to * it": * stop this -> unfencing -> start that -> stop this */ custom_action_order(rsc, stop_key(rsc), NULL, NULL, strdup(unfence->uuid), unfence, pe_order_optional|pe_order_same_node, data_set); custom_action_order(NULL, strdup(unfence->uuid), unfence, rsc, start_key(rsc), NULL, pe_order_implies_then_on_node|pe_order_same_node, data_set); } } if (check_utilization) { GListPtr gIter = NULL; pe_rsc_trace(rsc, "Creating utilization constraints for %s - strategy: %s", rsc->id, data_set->placement_strategy); for (gIter = rsc->running_on; gIter != NULL; gIter = gIter->next) { pe_node_t *current = (pe_node_t *) gIter->data; char *load_stopped_task = crm_strdup_printf(LOAD_STOPPED "_%s", current->details->uname); pe_action_t *load_stopped = get_pseudo_op(load_stopped_task, data_set); if (load_stopped->node == NULL) { load_stopped->node = pe__copy_node(current); update_action_flags(load_stopped, pe_action_optional | pe_action_clear, __func__, __LINE__); } custom_action_order(rsc, stop_key(rsc), NULL, NULL, load_stopped_task, load_stopped, pe_order_load, data_set); } for (GList *item = allowed_nodes; item; item = item->next) { pe_node_t *next = item->data; char *load_stopped_task = crm_strdup_printf(LOAD_STOPPED "_%s", next->details->uname); pe_action_t *load_stopped = get_pseudo_op(load_stopped_task, data_set); if (load_stopped->node == NULL) { load_stopped->node = pe__copy_node(next); update_action_flags(load_stopped, pe_action_optional | pe_action_clear, __func__, __LINE__); } custom_action_order(NULL, strdup(load_stopped_task), load_stopped, rsc, start_key(rsc), NULL, pe_order_load, data_set); custom_action_order(NULL, strdup(load_stopped_task), load_stopped, rsc, pcmk__op_key(rsc->id, RSC_MIGRATE, 0), NULL, pe_order_load, data_set); free(load_stopped_task); } } if (rsc->container) { pe_resource_t *remote_rsc = NULL; if (rsc->is_remote_node) { // rsc is the implicit remote connection for a guest or bundle node /* Do not allow a guest resource to live on a Pacemaker Remote node, * to avoid nesting remotes. However, allow bundles to run on remote * nodes. */ if (!pcmk_is_set(rsc->flags, pe_rsc_allow_remote_remotes)) { rsc_avoids_remote_nodes(rsc->container); } /* If someone cleans up a guest or bundle node's container, we will * likely schedule a (re-)probe of the container and recovery of the * connection. Order the connection stop after the container probe, * so that if we detect the container running, we will trigger a new * transition and avoid the unnecessary recovery. */ new_rsc_order(rsc->container, RSC_STATUS, rsc, RSC_STOP, pe_order_optional, data_set); /* A user can specify that a resource must start on a Pacemaker Remote * node by explicitly configuring it with the container=NODENAME * meta-attribute. This is of questionable merit, since location * constraints can accomplish the same thing. But we support it, so here * we check whether a resource (that is not itself a remote connection) * has container set to a remote node or guest node resource. */ } else if (rsc->container->is_remote_node) { remote_rsc = rsc->container; } else { remote_rsc = pe__resource_contains_guest_node(data_set, rsc->container); } if (remote_rsc) { /* Force the resource on the Pacemaker Remote node instead of * colocating the resource with the container resource. */ for (GList *item = allowed_nodes; item; item = item->next) { pe_node_t *node = item->data; if (node->details->remote_rsc != remote_rsc) { node->weight = -INFINITY; } } } else { /* This resource is either a filler for a container that does NOT * represent a Pacemaker Remote node, or a Pacemaker Remote * connection resource for a guest node or bundle. */ int score; crm_trace("Order and colocate %s relative to its container %s", rsc->id, rsc->container->id); custom_action_order(rsc->container, pcmk__op_key(rsc->container->id, RSC_START, 0), NULL, rsc, pcmk__op_key(rsc->id, RSC_START, 0), NULL, pe_order_implies_then|pe_order_runnable_left, data_set); custom_action_order(rsc, pcmk__op_key(rsc->id, RSC_STOP, 0), NULL, rsc->container, pcmk__op_key(rsc->container->id, RSC_STOP, 0), NULL, pe_order_implies_first, data_set); if (pcmk_is_set(rsc->flags, pe_rsc_allow_remote_remotes)) { score = 10000; /* Highly preferred but not essential */ } else { score = INFINITY; /* Force them to run on the same host */ } pcmk__new_colocation("resource-with-container", NULL, score, rsc, rsc->container, NULL, NULL, true, data_set); } } if (rsc->is_remote_node || pcmk_is_set(rsc->flags, pe_rsc_fence_device)) { /* don't allow remote nodes to run stonith devices * or remote connection resources.*/ rsc_avoids_remote_nodes(rsc); } g_list_free(allowed_nodes); } void native_rsc_colocation_lh(pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, pcmk__colocation_t *constraint, pe_working_set_t *data_set) { if (rsc_lh == NULL) { pe_err("rsc_lh was NULL for %s", constraint->id); return; } else if (constraint->rsc_rh == NULL) { pe_err("rsc_rh was NULL for %s", constraint->id); return; } pe_rsc_trace(rsc_lh, "Processing colocation constraint between %s and %s", rsc_lh->id, rsc_rh->id); rsc_rh->cmds->rsc_colocation_rh(rsc_lh, rsc_rh, constraint, data_set); } enum filter_colocation_res filter_colocation_constraint(pe_resource_t * rsc_lh, pe_resource_t * rsc_rh, pcmk__colocation_t *constraint, gboolean preview) { /* rh side must be allocated before we can process constraint */ if (!preview && pcmk_is_set(rsc_rh->flags, pe_rsc_provisional)) { return influence_nothing; } if ((constraint->role_lh >= RSC_ROLE_SLAVE) && rsc_lh->parent && pcmk_is_set(rsc_lh->parent->flags, pe_rsc_promotable) && !pcmk_is_set(rsc_lh->flags, pe_rsc_provisional)) { /* LH and RH resources have already been allocated, place the correct * priority on LH rsc for the given promotable clone resource role */ return influence_rsc_priority; } if (!preview && !pcmk_is_set(rsc_lh->flags, pe_rsc_provisional)) { // Log an error if we violated a mandatory colocation constraint const pe_node_t *rh_node = rsc_rh->allocated_to; if (rsc_lh->allocated_to == NULL) { // Dependent resource isn't allocated, so constraint doesn't matter return influence_nothing; } if (constraint->score >= INFINITY) { // Dependent resource must colocate with rh_node if ((rh_node == NULL) || (rh_node->details != rsc_lh->allocated_to->details)) { crm_err("%s must be colocated with %s but is not (%s vs. %s)", rsc_lh->id, rsc_rh->id, rsc_lh->allocated_to->details->uname, (rh_node? rh_node->details->uname : "unallocated")); } } else if (constraint->score <= -INFINITY) { // Dependent resource must anti-colocate with rh_node if ((rh_node != NULL) && (rsc_lh->allocated_to->details == rh_node->details)) { crm_err("%s and %s must be anti-colocated but are allocated " "to the same node (%s)", rsc_lh->id, rsc_rh->id, rh_node->details->uname); } } return influence_nothing; } if (constraint->score > 0 && constraint->role_lh != RSC_ROLE_UNKNOWN && constraint->role_lh != rsc_lh->next_role) { crm_trace("LH: Skipping constraint: \"%s\" state filter nextrole is %s", role2text(constraint->role_lh), role2text(rsc_lh->next_role)); return influence_nothing; } if (constraint->score > 0 && constraint->role_rh != RSC_ROLE_UNKNOWN && constraint->role_rh != rsc_rh->next_role) { crm_trace("RH: Skipping constraint: \"%s\" state filter", role2text(constraint->role_rh)); return influence_nothing; } if (constraint->score < 0 && constraint->role_lh != RSC_ROLE_UNKNOWN && constraint->role_lh == rsc_lh->next_role) { crm_trace("LH: Skipping negative constraint: \"%s\" state filter", role2text(constraint->role_lh)); return influence_nothing; } if (constraint->score < 0 && constraint->role_rh != RSC_ROLE_UNKNOWN && constraint->role_rh == rsc_rh->next_role) { crm_trace("RH: Skipping negative constraint: \"%s\" state filter", role2text(constraint->role_rh)); return influence_nothing; } return influence_rsc_location; } static void influence_priority(pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, pcmk__colocation_t *constraint) { const char *rh_value = NULL; const char *lh_value = NULL; const char *attribute = CRM_ATTR_ID; int score_multiplier = 1; if (!rsc_rh->allocated_to || !rsc_lh->allocated_to) { return; } if (constraint->node_attribute != NULL) { attribute = constraint->node_attribute; } lh_value = pe_node_attribute_raw(rsc_lh->allocated_to, attribute); rh_value = pe_node_attribute_raw(rsc_rh->allocated_to, attribute); if (!pcmk__str_eq(lh_value, rh_value, pcmk__str_casei)) { if(constraint->score == INFINITY && constraint->role_lh == RSC_ROLE_MASTER) { rsc_lh->priority = -INFINITY; } return; } if (constraint->role_rh && (constraint->role_rh != rsc_rh->next_role)) { return; } if (constraint->role_lh == RSC_ROLE_SLAVE) { score_multiplier = -1; } rsc_lh->priority = pe__add_scores(score_multiplier * constraint->score, rsc_lh->priority); } static void colocation_match(pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, pcmk__colocation_t *constraint) { const char *attribute = CRM_ATTR_ID; const char *value = NULL; GHashTable *work = NULL; GHashTableIter iter; pe_node_t *node = NULL; if (constraint->node_attribute != NULL) { attribute = constraint->node_attribute; } if (rsc_rh->allocated_to) { value = pe_node_attribute_raw(rsc_rh->allocated_to, attribute); } else if (constraint->score < 0) { // Nothing to do (anti-colocation with something that is not running) return; } work = pcmk__copy_node_table(rsc_lh->allowed_nodes); g_hash_table_iter_init(&iter, work); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { if (rsc_rh->allocated_to == NULL) { pe_rsc_trace(rsc_lh, "%s: %s@%s -= %d (%s inactive)", constraint->id, rsc_lh->id, node->details->uname, constraint->score, rsc_rh->id); node->weight = pe__add_scores(-constraint->score, node->weight); } else if (pcmk__str_eq(pe_node_attribute_raw(node, attribute), value, pcmk__str_casei)) { if (constraint->score < CRM_SCORE_INFINITY) { pe_rsc_trace(rsc_lh, "%s: %s@%s += %d", constraint->id, rsc_lh->id, node->details->uname, constraint->score); node->weight = pe__add_scores(constraint->score, node->weight); } } else if (constraint->score >= CRM_SCORE_INFINITY) { pe_rsc_trace(rsc_lh, "%s: %s@%s -= %d (%s mismatch)", constraint->id, rsc_lh->id, node->details->uname, constraint->score, attribute); node->weight = pe__add_scores(-constraint->score, node->weight); } } if (can_run_any(work) || constraint->score <= -INFINITY || constraint->score >= INFINITY) { g_hash_table_destroy(rsc_lh->allowed_nodes); rsc_lh->allowed_nodes = work; work = NULL; } else { pe_rsc_info(rsc_lh, "%s: Rolling back scores from %s (no available nodes)", rsc_lh->id, rsc_rh->id); } if (work) { g_hash_table_destroy(work); } } void native_rsc_colocation_rh(pe_resource_t *rsc_lh, pe_resource_t *rsc_rh, pcmk__colocation_t *constraint, pe_working_set_t *data_set) { enum filter_colocation_res filter_results; CRM_ASSERT(rsc_lh); CRM_ASSERT(rsc_rh); filter_results = filter_colocation_constraint(rsc_lh, rsc_rh, constraint, FALSE); pe_rsc_trace(rsc_lh, "%s %s with %s (%s, score=%d, filter=%d)", ((constraint->score > 0)? "Colocating" : "Anti-colocating"), rsc_lh->id, rsc_rh->id, constraint->id, constraint->score, filter_results); switch (filter_results) { case influence_rsc_priority: influence_priority(rsc_lh, rsc_rh, constraint); break; case influence_rsc_location: colocation_match(rsc_lh, rsc_rh, constraint); break; case influence_nothing: default: return; } } static gboolean filter_rsc_ticket(pe_resource_t * rsc_lh, rsc_ticket_t * rsc_ticket) { if (rsc_ticket->role_lh != RSC_ROLE_UNKNOWN && rsc_ticket->role_lh != rsc_lh->role) { pe_rsc_trace(rsc_lh, "LH: Skipping constraint: \"%s\" state filter", role2text(rsc_ticket->role_lh)); return FALSE; } return TRUE; } void rsc_ticket_constraint(pe_resource_t * rsc_lh, rsc_ticket_t * rsc_ticket, pe_working_set_t * data_set) { if (rsc_ticket == NULL) { pe_err("rsc_ticket was NULL"); return; } if (rsc_lh == NULL) { pe_err("rsc_lh was NULL for %s", rsc_ticket->id); return; } if (rsc_ticket->ticket->granted && rsc_ticket->ticket->standby == FALSE) { return; } if (rsc_lh->children) { GListPtr gIter = rsc_lh->children; pe_rsc_trace(rsc_lh, "Processing ticket dependencies from %s", rsc_lh->id); for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; rsc_ticket_constraint(child_rsc, rsc_ticket, data_set); } return; } pe_rsc_trace(rsc_lh, "%s: Processing ticket dependency on %s (%s, %s)", rsc_lh->id, rsc_ticket->ticket->id, rsc_ticket->id, role2text(rsc_ticket->role_lh)); if ((rsc_ticket->ticket->granted == FALSE) && (rsc_lh->running_on != NULL)) { GListPtr gIter = NULL; switch (rsc_ticket->loss_policy) { case loss_ticket_stop: resource_location(rsc_lh, NULL, -INFINITY, "__loss_of_ticket__", data_set); break; case loss_ticket_demote: // Promotion score will be set to -INFINITY in promotion_order() if (rsc_ticket->role_lh != RSC_ROLE_MASTER) { resource_location(rsc_lh, NULL, -INFINITY, "__loss_of_ticket__", data_set); } break; case loss_ticket_fence: if (filter_rsc_ticket(rsc_lh, rsc_ticket) == FALSE) { return; } resource_location(rsc_lh, NULL, -INFINITY, "__loss_of_ticket__", data_set); for (gIter = rsc_lh->running_on; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; pe_fence_node(data_set, node, "deadman ticket was lost", FALSE); } break; case loss_ticket_freeze: if (filter_rsc_ticket(rsc_lh, rsc_ticket) == FALSE) { return; } if (rsc_lh->running_on != NULL) { pe__clear_resource_flags(rsc_lh, pe_rsc_managed); pe__set_resource_flags(rsc_lh, pe_rsc_block); } break; } } else if (rsc_ticket->ticket->granted == FALSE) { if (rsc_ticket->role_lh != RSC_ROLE_MASTER || rsc_ticket->loss_policy == loss_ticket_stop) { resource_location(rsc_lh, NULL, -INFINITY, "__no_ticket__", data_set); } } else if (rsc_ticket->ticket->standby) { if (rsc_ticket->role_lh != RSC_ROLE_MASTER || rsc_ticket->loss_policy == loss_ticket_stop) { resource_location(rsc_lh, NULL, -INFINITY, "__ticket_standby__", data_set); } } } enum pe_action_flags native_action_flags(pe_action_t * action, pe_node_t * node) { return action->flags; } static inline bool is_primitive_action(pe_action_t *action) { return action && action->rsc && (action->rsc->variant == pe_native); } /*! * \internal * \brief Set action bits appropriately when pe_restart_order is used * * \param[in] first 'First' action in an ordering with pe_restart_order * \param[in] then 'Then' action in an ordering with pe_restart_order * \param[in] filter What ordering flags to care about * * \note pe_restart_order is set for "stop resource before starting it" and * "stop later group member before stopping earlier group member" */ static void handle_restart_ordering(pe_action_t *first, pe_action_t *then, enum pe_action_flags filter) { const char *reason = NULL; CRM_ASSERT(is_primitive_action(first)); CRM_ASSERT(is_primitive_action(then)); // We need to update the action in two cases: // ... if 'then' is required if (pcmk_is_set(filter, pe_action_optional) && !pcmk_is_set(then->flags, pe_action_optional)) { reason = "restart"; } /* ... if 'then' is unrunnable start of managed resource (if a resource * should restart but can't start, we still want to stop) */ if (pcmk_is_set(filter, pe_action_runnable) && !pcmk_is_set(then->flags, pe_action_runnable) && pcmk_is_set(then->rsc->flags, pe_rsc_managed) && pcmk__str_eq(then->task, RSC_START, pcmk__str_casei)) { reason = "stop"; } if (reason == NULL) { return; } pe_rsc_trace(first->rsc, "Handling %s -> %s for %s", first->uuid, then->uuid, reason); // Make 'first' required if it is runnable if (pcmk_is_set(first->flags, pe_action_runnable)) { pe_action_implies(first, then, pe_action_optional); } // Make 'first' required if 'then' is required if (!pcmk_is_set(then->flags, pe_action_optional)) { pe_action_implies(first, then, pe_action_optional); } // Make 'first' unmigratable if 'then' is unmigratable if (!pcmk_is_set(then->flags, pe_action_migrate_runnable)) { pe_action_implies(first, then, pe_action_migrate_runnable); } // Make 'then' unrunnable if 'first' is required but unrunnable if (!pcmk_is_set(first->flags, pe_action_optional) && !pcmk_is_set(first->flags, pe_action_runnable)) { pe_action_implies(then, first, pe_action_runnable); } } enum pe_graph_flags native_update_actions(pe_action_t *first, pe_action_t *then, pe_node_t *node, enum pe_action_flags flags, enum pe_action_flags filter, enum pe_ordering type, pe_working_set_t *data_set) { /* flags == get_action_flags(first, then_node) called from update_action() */ enum pe_graph_flags changed = pe_graph_none; enum pe_action_flags then_flags = then->flags; enum pe_action_flags first_flags = first->flags; crm_trace( "Testing %s on %s (0x%.6x) with %s 0x%.6x", first->uuid, first->node ? first->node->details->uname : "[none]", first->flags, then->uuid, then->flags); if (type & pe_order_asymmetrical) { pe_resource_t *then_rsc = then->rsc; enum rsc_role_e then_rsc_role = then_rsc ? then_rsc->fns->state(then_rsc, TRUE) : 0; if (!then_rsc) { /* ignore */ } else if ((then_rsc_role == RSC_ROLE_STOPPED) && pcmk__str_eq(then->task, RSC_STOP, pcmk__str_casei)) { /* ignore... if 'then' is supposed to be stopped after 'first', but * then is already stopped, there is nothing to be done when non-symmetrical. */ } else if ((then_rsc_role >= RSC_ROLE_STARTED) && pcmk__str_eq(then->task, RSC_START, pcmk__str_casei) && pcmk_is_set(then->flags, pe_action_optional) && then->node && pcmk__list_of_1(then_rsc->running_on) && then->node->details == ((pe_node_t *) then_rsc->running_on->data)->details) { /* Ignore. If 'then' is supposed to be started after 'first', but * 'then' is already started, there is nothing to be done when * asymmetrical -- unless the start is mandatory, which indicates * the resource is restarting, and the ordering is still needed. */ } else if (!(first->flags & pe_action_runnable)) { /* prevent 'then' action from happening if 'first' is not runnable and * 'then' has not yet occurred. */ pe_action_implies(then, first, pe_action_optional); pe_action_implies(then, first, pe_action_runnable); pe_rsc_trace(then->rsc, "Unset optional and runnable on %s", then->uuid); } else { /* ignore... then is allowed to start/stop if it wants to. */ } } if (type & pe_order_implies_first) { if (pcmk_is_set(filter, pe_action_optional) && !pcmk_is_set(flags /* Should be then_flags? */, pe_action_optional)) { // Needs pcmk_is_set(first_flags, pe_action_optional) too? pe_rsc_trace(first->rsc, "Unset optional on %s because of %s", first->uuid, then->uuid); pe_action_implies(first, then, pe_action_optional); } if (pcmk_is_set(flags, pe_action_migrate_runnable) && !pcmk_is_set(then->flags, pe_action_migrate_runnable) && !pcmk_is_set(then->flags, pe_action_optional)) { pe_rsc_trace(first->rsc, "Unset migrate runnable on %s because of %s", first->uuid, then->uuid); pe_action_implies(first, then, pe_action_migrate_runnable); } } if (type & pe_order_implies_first_master) { if ((filter & pe_action_optional) && ((then->flags & pe_action_optional) == FALSE) && then->rsc && (then->rsc->role == RSC_ROLE_MASTER)) { pe_action_implies(first, then, pe_action_optional); if (pcmk_is_set(first->flags, pe_action_migrate_runnable) && !pcmk_is_set(then->flags, pe_action_migrate_runnable)) { pe_rsc_trace(first->rsc, "Unset migrate runnable on %s because of %s", first->uuid, then->uuid); pe_action_implies(first, then, pe_action_migrate_runnable); } pe_rsc_trace(then->rsc, "Unset optional on %s because of %s", first->uuid, then->uuid); } } if ((type & pe_order_implies_first_migratable) && pcmk_is_set(filter, pe_action_optional)) { if (((then->flags & pe_action_migrate_runnable) == FALSE) || ((then->flags & pe_action_runnable) == FALSE)) { pe_rsc_trace(then->rsc, "Unset runnable on %s because %s is neither runnable or migratable", first->uuid, then->uuid); pe_action_implies(first, then, pe_action_runnable); } if ((then->flags & pe_action_optional) == 0) { pe_rsc_trace(then->rsc, "Unset optional on %s because %s is not optional", first->uuid, then->uuid); pe_action_implies(first, then, pe_action_optional); } } if ((type & pe_order_pseudo_left) && pcmk_is_set(filter, pe_action_optional)) { if ((first->flags & pe_action_runnable) == FALSE) { pe_action_implies(then, first, pe_action_migrate_runnable); pe__clear_action_flags(then, pe_action_pseudo); pe_rsc_trace(then->rsc, "Unset pseudo on %s because %s is not runnable", then->uuid, first->uuid); } } if (pcmk_is_set(type, pe_order_runnable_left) && pcmk_is_set(filter, pe_action_runnable) && pcmk_is_set(then->flags, pe_action_runnable) && !pcmk_is_set(flags, pe_action_runnable)) { pe_rsc_trace(then->rsc, "Unset runnable on %s because of %s", then->uuid, first->uuid); pe_action_implies(then, first, pe_action_runnable); pe_action_implies(then, first, pe_action_migrate_runnable); } if (pcmk_is_set(type, pe_order_implies_then) && pcmk_is_set(filter, pe_action_optional) && pcmk_is_set(then->flags, pe_action_optional) && !pcmk_is_set(flags, pe_action_optional)) { /* in this case, treat migrate_runnable as if first is optional */ if (!pcmk_is_set(first->flags, pe_action_migrate_runnable)) { pe_rsc_trace(then->rsc, "Unset optional on %s because of %s", then->uuid, first->uuid); pe_action_implies(then, first, pe_action_optional); } } if (pcmk_is_set(type, pe_order_restart)) { handle_restart_ordering(first, then, filter); } if (then_flags != then->flags) { pe__set_graph_flags(changed, first, pe_graph_updated_then); pe_rsc_trace(then->rsc, "Then: Flags for %s on %s are now 0x%.6x (was 0x%.6x) because of %s 0x%.6x", then->uuid, then->node ? then->node->details->uname : "[none]", then->flags, then_flags, first->uuid, first->flags); if(then->rsc && then->rsc->parent) { /* "X_stop then X_start" doesn't get handled for cloned groups unless we do this */ update_action(then, data_set); } } if (first_flags != first->flags) { pe__set_graph_flags(changed, first, pe_graph_updated_first); pe_rsc_trace(first->rsc, "First: Flags for %s on %s are now 0x%.6x (was 0x%.6x) because of %s 0x%.6x", first->uuid, first->node ? first->node->details->uname : "[none]", first->flags, first_flags, then->uuid, then->flags); } return changed; } void native_rsc_location(pe_resource_t *rsc, pe__location_t *constraint) { GListPtr gIter = NULL; bool need_role = false; CRM_CHECK((constraint != NULL) && (rsc != NULL), return); // If a role was specified, ensure constraint is applicable need_role = (constraint->role_filter > RSC_ROLE_UNKNOWN); if (need_role && (constraint->role_filter != rsc->next_role)) { pe_rsc_trace(rsc, "Not applying %s to %s because role will be %s not %s", constraint->id, rsc->id, role2text(rsc->next_role), role2text(constraint->role_filter)); return; } if (constraint->node_list_rh == NULL) { pe_rsc_trace(rsc, "Not applying %s to %s because no nodes match", constraint->id, rsc->id); return; } pe_rsc_trace(rsc, "Applying %s%s%s to %s", constraint->id, (need_role? " for role " : ""), (need_role? role2text(constraint->role_filter) : ""), rsc->id); for (gIter = constraint->node_list_rh; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; pe_node_t *other_node = NULL; other_node = (pe_node_t *) pe_hash_table_lookup(rsc->allowed_nodes, node->details->id); if (other_node != NULL) { pe_rsc_trace(rsc, "* + %d on %s", node->weight, node->details->uname); other_node->weight = pe__add_scores(other_node->weight, node->weight); } else { pe_rsc_trace(rsc, "* = %d on %s", node->weight, node->details->uname); other_node = pe__copy_node(node); g_hash_table_insert(rsc->allowed_nodes, (gpointer) other_node->details->id, other_node); } if (other_node->rsc_discover_mode < constraint->discover_mode) { if (constraint->discover_mode == pe_discover_exclusive) { rsc->exclusive_discover = TRUE; } /* exclusive > never > always... always is default */ other_node->rsc_discover_mode = constraint->discover_mode; } } } void native_expand(pe_resource_t * rsc, pe_working_set_t * data_set) { GListPtr gIter = NULL; CRM_ASSERT(rsc); pe_rsc_trace(rsc, "Processing actions from %s", rsc->id); for (gIter = rsc->actions; gIter != NULL; gIter = gIter->next) { pe_action_t *action = (pe_action_t *) gIter->data; crm_trace("processing action %d for rsc=%s", action->id, rsc->id); graph_element_from_action(action, data_set); } for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; child_rsc->cmds->expand(child_rsc, data_set); } } #define log_change(a, fmt, args...) do { \ if(a && a->reason && terminal) { \ printf(" * "fmt" \tdue to %s\n", ##args, a->reason); \ } else if(a && a->reason) { \ crm_notice(fmt" \tdue to %s", ##args, a->reason); \ } else if(terminal) { \ printf(" * "fmt"\n", ##args); \ } else { \ crm_notice(fmt, ##args); \ } \ } while(0) #define STOP_SANITY_ASSERT(lineno) do { \ if(current && current->details->unclean) { \ /* It will be a pseudo op */ \ } else if(stop == NULL) { \ crm_err("%s:%d: No stop action exists for %s", \ __func__, lineno, rsc->id); \ CRM_ASSERT(stop != NULL); \ } else if (pcmk_is_set(stop->flags, pe_action_optional)) { \ crm_err("%s:%d: Action %s is still optional", \ __func__, lineno, stop->uuid); \ CRM_ASSERT(!pcmk_is_set(stop->flags, pe_action_optional)); \ } \ } while(0) static void LogAction(const char *change, pe_resource_t *rsc, pe_node_t *origin, pe_node_t *destination, pe_action_t *action, pe_action_t *source, gboolean terminal) { int len = 0; char *reason = NULL; char *details = NULL; bool same_host = FALSE; bool same_role = FALSE; bool need_role = FALSE; static int rsc_width = 5; static int detail_width = 5; CRM_ASSERT(action); CRM_ASSERT(destination != NULL || origin != NULL); if(source == NULL) { source = action; } len = strlen(rsc->id); if(len > rsc_width) { rsc_width = len + 2; } if(rsc->role > RSC_ROLE_STARTED || rsc->next_role > RSC_ROLE_SLAVE) { need_role = TRUE; } if(origin != NULL && destination != NULL && origin->details == destination->details) { same_host = TRUE; } if(rsc->role == rsc->next_role) { same_role = TRUE; } if (need_role && (origin == NULL)) { /* Starting and promoting a promotable clone instance */ details = crm_strdup_printf("%s -> %s %s", role2text(rsc->role), role2text(rsc->next_role), destination->details->uname); } else if (origin == NULL) { /* Starting a resource */ details = crm_strdup_printf("%s", destination->details->uname); } else if (need_role && (destination == NULL)) { /* Stopping a promotable clone instance */ details = crm_strdup_printf("%s %s", role2text(rsc->role), origin->details->uname); } else if (destination == NULL) { /* Stopping a resource */ details = crm_strdup_printf("%s", origin->details->uname); } else if (need_role && same_role && same_host) { /* Recovering, restarting or re-promoting a promotable clone instance */ details = crm_strdup_printf("%s %s", role2text(rsc->role), origin->details->uname); } else if (same_role && same_host) { /* Recovering or Restarting a normal resource */ details = crm_strdup_printf("%s", origin->details->uname); } else if (need_role && same_role) { /* Moving a promotable clone instance */ details = crm_strdup_printf("%s -> %s %s", origin->details->uname, destination->details->uname, role2text(rsc->role)); } else if (same_role) { /* Moving a normal resource */ details = crm_strdup_printf("%s -> %s", origin->details->uname, destination->details->uname); } else if (same_host) { /* Promoting or demoting a promotable clone instance */ details = crm_strdup_printf("%s -> %s %s", role2text(rsc->role), role2text(rsc->next_role), origin->details->uname); } else { /* Moving and promoting/demoting */ details = crm_strdup_printf("%s %s -> %s %s", role2text(rsc->role), origin->details->uname, role2text(rsc->next_role), destination->details->uname); } len = strlen(details); if(len > detail_width) { detail_width = len; } if(source->reason && !pcmk_is_set(action->flags, pe_action_runnable)) { reason = crm_strdup_printf(" due to %s (blocked)", source->reason); } else if(source->reason) { reason = crm_strdup_printf(" due to %s", source->reason); } else if (!pcmk_is_set(action->flags, pe_action_runnable)) { reason = strdup(" blocked"); } else { reason = strdup(""); } if(terminal) { printf(" * %-8s %-*s ( %*s ) %s\n", change, rsc_width, rsc->id, detail_width, details, reason); } else { crm_notice(" * %-8s %-*s ( %*s ) %s", change, rsc_width, rsc->id, detail_width, details, reason); } free(details); free(reason); } void LogActions(pe_resource_t * rsc, pe_working_set_t * data_set, gboolean terminal) { pe_node_t *next = NULL; pe_node_t *current = NULL; pe_node_t *start_node = NULL; pe_action_t *stop = NULL; pe_action_t *start = NULL; pe_action_t *demote = NULL; pe_action_t *promote = NULL; char *key = NULL; gboolean moving = FALSE; GListPtr possible_matches = NULL; if(rsc->variant == pe_container) { pcmk__bundle_log_actions(rsc, data_set, terminal); return; } if (rsc->children) { GListPtr gIter = NULL; for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; LogActions(child_rsc, data_set, terminal); } return; } next = rsc->allocated_to; if (rsc->running_on) { current = pe__current_node(rsc); if (rsc->role == RSC_ROLE_STOPPED) { /* * This can occur when resources are being recovered * We fiddle with the current role in native_create_actions() */ rsc->role = RSC_ROLE_STARTED; } } if ((current == NULL) && pcmk_is_set(rsc->flags, pe_rsc_orphan)) { /* Don't log stopped orphans */ return; } if (!pcmk_is_set(rsc->flags, pe_rsc_managed) || (current == NULL && next == NULL)) { pe_rsc_info(rsc, "Leave %s\t(%s%s)", rsc->id, role2text(rsc->role), !pcmk_is_set(rsc->flags, pe_rsc_managed)? " unmanaged" : ""); return; } if (current != NULL && next != NULL && !pcmk__str_eq(current->details->id, next->details->id, pcmk__str_casei)) { moving = TRUE; } possible_matches = pe__resource_actions(rsc, next, RSC_START, FALSE); if (possible_matches) { start = possible_matches->data; g_list_free(possible_matches); } if ((start == NULL) || !pcmk_is_set(start->flags, pe_action_runnable)) { start_node = NULL; } else { start_node = current; } possible_matches = pe__resource_actions(rsc, start_node, RSC_STOP, FALSE); if (possible_matches) { stop = possible_matches->data; g_list_free(possible_matches); } possible_matches = pe__resource_actions(rsc, next, RSC_PROMOTE, FALSE); if (possible_matches) { promote = possible_matches->data; g_list_free(possible_matches); } possible_matches = pe__resource_actions(rsc, next, RSC_DEMOTE, FALSE); if (possible_matches) { demote = possible_matches->data; g_list_free(possible_matches); } if (rsc->role == rsc->next_role) { pe_action_t *migrate_op = NULL; possible_matches = pe__resource_actions(rsc, next, RSC_MIGRATED, FALSE); if (possible_matches) { migrate_op = possible_matches->data; } CRM_CHECK(next != NULL,); if (next == NULL) { } else if ((migrate_op != NULL) && (current != NULL) && pcmk_is_set(migrate_op->flags, pe_action_runnable)) { LogAction("Migrate", rsc, current, next, start, NULL, terminal); } else if (pcmk_is_set(rsc->flags, pe_rsc_reload)) { LogAction("Reload", rsc, current, next, start, NULL, terminal); } else if (start == NULL || pcmk_is_set(start->flags, pe_action_optional)) { if ((demote != NULL) && (promote != NULL) && !pcmk_is_set(demote->flags, pe_action_optional) && !pcmk_is_set(promote->flags, pe_action_optional)) { LogAction("Re-promote", rsc, current, next, promote, demote, terminal); } else { pe_rsc_info(rsc, "Leave %s\t(%s %s)", rsc->id, role2text(rsc->role), next->details->uname); } } else if (!pcmk_is_set(start->flags, pe_action_runnable)) { LogAction("Stop", rsc, current, NULL, stop, (stop && stop->reason)? stop : start, terminal); STOP_SANITY_ASSERT(__LINE__); } else if (moving && current) { LogAction(pcmk_is_set(rsc->flags, pe_rsc_failed)? "Recover" : "Move", rsc, current, next, stop, NULL, terminal); } else if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { LogAction("Recover", rsc, current, NULL, stop, NULL, terminal); STOP_SANITY_ASSERT(__LINE__); } else { LogAction("Restart", rsc, current, next, start, NULL, terminal); /* STOP_SANITY_ASSERT(__LINE__); False positive for migrate-fail-7 */ } g_list_free(possible_matches); return; } if(stop && (rsc->next_role == RSC_ROLE_STOPPED || (start && !pcmk_is_set(start->flags, pe_action_runnable)))) { GListPtr gIter = NULL; key = stop_key(rsc); for (gIter = rsc->running_on; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; pe_action_t *stop_op = NULL; possible_matches = find_actions(rsc->actions, key, node); if (possible_matches) { stop_op = possible_matches->data; g_list_free(possible_matches); } if (stop_op && (stop_op->flags & pe_action_runnable)) { STOP_SANITY_ASSERT(__LINE__); } LogAction("Stop", rsc, node, NULL, stop_op, (stop_op && stop_op->reason)? stop_op : start, terminal); } free(key); } else if ((stop != NULL) && pcmk_all_flags_set(rsc->flags, pe_rsc_failed|pe_rsc_stop)) { /* 'stop' may be NULL if the failure was ignored */ LogAction("Recover", rsc, current, next, stop, start, terminal); STOP_SANITY_ASSERT(__LINE__); } else if (moving) { LogAction("Move", rsc, current, next, stop, NULL, terminal); STOP_SANITY_ASSERT(__LINE__); } else if (pcmk_is_set(rsc->flags, pe_rsc_reload)) { LogAction("Reload", rsc, current, next, start, NULL, terminal); } else if (stop != NULL && !pcmk_is_set(stop->flags, pe_action_optional)) { LogAction("Restart", rsc, current, next, start, NULL, terminal); STOP_SANITY_ASSERT(__LINE__); } else if (rsc->role == RSC_ROLE_MASTER) { CRM_LOG_ASSERT(current != NULL); LogAction("Demote", rsc, current, next, demote, NULL, terminal); } else if(rsc->next_role == RSC_ROLE_MASTER) { CRM_LOG_ASSERT(next); LogAction("Promote", rsc, current, next, promote, NULL, terminal); } else if (rsc->role == RSC_ROLE_STOPPED && rsc->next_role > RSC_ROLE_STOPPED) { LogAction("Start", rsc, current, next, start, NULL, terminal); } } gboolean StopRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set) { GListPtr gIter = NULL; CRM_ASSERT(rsc); pe_rsc_trace(rsc, "%s", rsc->id); for (gIter = rsc->running_on; gIter != NULL; gIter = gIter->next) { pe_node_t *current = (pe_node_t *) gIter->data; pe_action_t *stop; if (rsc->partial_migration_target) { if (rsc->partial_migration_target->details == current->details) { pe_rsc_trace(rsc, "Filtered %s -> %s %s", current->details->uname, next->details->uname, rsc->id); continue; } else { pe_rsc_trace(rsc, "Forced on %s %s", current->details->uname, rsc->id); optional = FALSE; } } pe_rsc_trace(rsc, "%s on %s", rsc->id, current->details->uname); stop = stop_action(rsc, current, optional); if(rsc->allocated_to == NULL) { pe_action_set_reason(stop, "node availability", TRUE); } if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { update_action_flags(stop, pe_action_runnable | pe_action_clear, __func__, __LINE__); } if (pcmk_is_set(data_set->flags, pe_flag_remove_after_stop)) { DeleteRsc(rsc, current, optional, data_set); } if (pcmk_is_set(rsc->flags, pe_rsc_needs_unfencing)) { pe_action_t *unfence = pe_fence_op(current, "on", TRUE, NULL, FALSE, data_set); order_actions(stop, unfence, pe_order_implies_first); if (!node_has_been_unfenced(current)) { pe_proc_err("Stopping %s until %s can be unfenced", rsc->id, current->details->uname); } } } return TRUE; } static void order_after_unfencing(pe_resource_t *rsc, pe_node_t *node, pe_action_t *action, enum pe_ordering order, pe_working_set_t *data_set) { /* When unfencing is in use, we order unfence actions before any probe or * start of resources that require unfencing, and also of fence devices. * * This might seem to violate the principle that fence devices require * only quorum. However, fence agents that unfence often don't have enough * information to even probe or start unless the node is first unfenced. */ if (is_unfence_device(rsc, data_set) || pcmk_is_set(rsc->flags, pe_rsc_needs_unfencing)) { /* Start with an optional ordering. Requiring unfencing would result in * the node being unfenced, and all its resources being stopped, * whenever a new resource is added -- which would be highly suboptimal. */ pe_action_t *unfence = pe_fence_op(node, "on", TRUE, NULL, FALSE, data_set); order_actions(unfence, action, order); if (!node_has_been_unfenced(node)) { // But unfencing is required if it has never been done char *reason = crm_strdup_printf("required by %s %s", rsc->id, action->task); trigger_unfencing(NULL, node, reason, NULL, data_set); free(reason); } } } gboolean StartRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set) { pe_action_t *start = NULL; CRM_ASSERT(rsc); pe_rsc_trace(rsc, "%s on %s %d %d", rsc->id, next ? next->details->uname : "N/A", optional, next ? next->weight : 0); start = start_action(rsc, next, TRUE); order_after_unfencing(rsc, next, start, pe_order_implies_then, data_set); if (pcmk_is_set(start->flags, pe_action_runnable) && !optional) { update_action_flags(start, pe_action_optional | pe_action_clear, __func__, __LINE__); } return TRUE; } gboolean PromoteRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set) { GListPtr gIter = NULL; gboolean runnable = TRUE; GListPtr action_list = NULL; CRM_ASSERT(rsc); CRM_CHECK(next != NULL, return FALSE); pe_rsc_trace(rsc, "%s on %s", rsc->id, next->details->uname); action_list = pe__resource_actions(rsc, next, RSC_START, TRUE); for (gIter = action_list; gIter != NULL; gIter = gIter->next) { pe_action_t *start = (pe_action_t *) gIter->data; if (!pcmk_is_set(start->flags, pe_action_runnable)) { runnable = FALSE; } } g_list_free(action_list); if (runnable) { promote_action(rsc, next, optional); return TRUE; } pe_rsc_debug(rsc, "%s\tPromote %s (canceled)", next->details->uname, rsc->id); action_list = pe__resource_actions(rsc, next, RSC_PROMOTE, TRUE); for (gIter = action_list; gIter != NULL; gIter = gIter->next) { pe_action_t *promote = (pe_action_t *) gIter->data; update_action_flags(promote, pe_action_runnable | pe_action_clear, __func__, __LINE__); } g_list_free(action_list); return TRUE; } gboolean DemoteRsc(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set) { GListPtr gIter = NULL; CRM_ASSERT(rsc); pe_rsc_trace(rsc, "%s", rsc->id); /* CRM_CHECK(rsc->next_role == RSC_ROLE_SLAVE, return FALSE); */ for (gIter = rsc->running_on; gIter != NULL; gIter = gIter->next) { pe_node_t *current = (pe_node_t *) gIter->data; pe_rsc_trace(rsc, "%s on %s", rsc->id, next ? next->details->uname : "N/A"); demote_action(rsc, current, optional); } return TRUE; } gboolean RoleError(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set) { CRM_ASSERT(rsc); crm_err("%s on %s", rsc->id, next ? next->details->uname : "N/A"); CRM_CHECK(FALSE, return FALSE); return FALSE; } gboolean NullOp(pe_resource_t * rsc, pe_node_t * next, gboolean optional, pe_working_set_t * data_set) { CRM_ASSERT(rsc); pe_rsc_trace(rsc, "%s", rsc->id); return FALSE; } gboolean DeleteRsc(pe_resource_t * rsc, pe_node_t * node, gboolean optional, pe_working_set_t * data_set) { if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { pe_rsc_trace(rsc, "Resource %s not deleted from %s: failed", rsc->id, node->details->uname); return FALSE; } else if (node == NULL) { pe_rsc_trace(rsc, "Resource %s not deleted: NULL node", rsc->id); return FALSE; } else if (node->details->unclean || node->details->online == FALSE) { pe_rsc_trace(rsc, "Resource %s not deleted from %s: unrunnable", rsc->id, node->details->uname); return FALSE; } crm_notice("Removing %s from %s", rsc->id, node->details->uname); delete_action(rsc, node, optional); new_rsc_order(rsc, RSC_STOP, rsc, RSC_DELETE, optional ? pe_order_implies_then : pe_order_optional, data_set); new_rsc_order(rsc, RSC_DELETE, rsc, RSC_START, optional ? pe_order_implies_then : pe_order_optional, data_set); return TRUE; } gboolean native_create_probe(pe_resource_t * rsc, pe_node_t * node, pe_action_t * complete, gboolean force, pe_working_set_t * data_set) { enum pe_ordering flags = pe_order_optional; char *key = NULL; pe_action_t *probe = NULL; pe_node_t *running = NULL; pe_node_t *allowed = NULL; pe_resource_t *top = uber_parent(rsc); static const char *rc_master = NULL; static const char *rc_inactive = NULL; if (rc_inactive == NULL) { rc_inactive = crm_itoa(PCMK_OCF_NOT_RUNNING); rc_master = crm_itoa(PCMK_OCF_RUNNING_MASTER); } CRM_CHECK(node != NULL, return FALSE); if (!force && !pcmk_is_set(data_set->flags, pe_flag_startup_probes)) { pe_rsc_trace(rsc, "Skipping active resource detection for %s", rsc->id); return FALSE; } if (pe__is_guest_or_remote_node(node)) { const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_casei)) { pe_rsc_trace(rsc, "Skipping probe for %s on %s because Pacemaker Remote nodes cannot run stonith agents", rsc->id, node->details->id); return FALSE; } else if (pe__is_guest_node(node) && pe__resource_contains_guest_node(data_set, rsc)) { pe_rsc_trace(rsc, "Skipping probe for %s on %s because guest nodes cannot run resources containing guest nodes", rsc->id, node->details->id); return FALSE; } else if (rsc->is_remote_node) { pe_rsc_trace(rsc, "Skipping probe for %s on %s because Pacemaker Remote nodes cannot host remote connections", rsc->id, node->details->id); return FALSE; } } if (rsc->children) { GListPtr gIter = NULL; gboolean any_created = FALSE; for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; any_created = child_rsc->cmds->create_probe(child_rsc, node, complete, force, data_set) || any_created; } return any_created; } else if ((rsc->container) && (!rsc->is_remote_node)) { pe_rsc_trace(rsc, "Skipping %s: it is within container %s", rsc->id, rsc->container->id); return FALSE; } if (pcmk_is_set(rsc->flags, pe_rsc_orphan)) { pe_rsc_trace(rsc, "Skipping orphan: %s", rsc->id); return FALSE; } // Check whether resource is already known on node if (!force && g_hash_table_lookup(rsc->known_on, node->details->id)) { pe_rsc_trace(rsc, "Skipping known: %s on %s", rsc->id, node->details->uname); return FALSE; } allowed = g_hash_table_lookup(rsc->allowed_nodes, node->details->id); if (rsc->exclusive_discover || top->exclusive_discover) { if (allowed == NULL) { /* exclusive discover is enabled and this node is not in the allowed list. */ pe_rsc_trace(rsc, "Skipping probe for %s on node %s, A", rsc->id, node->details->id); return FALSE; } else if (allowed->rsc_discover_mode != pe_discover_exclusive) { /* exclusive discover is enabled and this node is not marked * as a node this resource should be discovered on */ pe_rsc_trace(rsc, "Skipping probe for %s on node %s, B", rsc->id, node->details->id); return FALSE; } } if(allowed == NULL && node->rsc_discover_mode == pe_discover_never) { /* If this node was allowed to host this resource it would * have been explicitly added to the 'allowed_nodes' list. * However it wasn't and the node has discovery disabled, so * no need to probe for this resource. */ pe_rsc_trace(rsc, "Skipping probe for %s on node %s, C", rsc->id, node->details->id); return FALSE; } if (allowed && allowed->rsc_discover_mode == pe_discover_never) { /* this resource is marked as not needing to be discovered on this node */ pe_rsc_trace(rsc, "Skipping probe for %s on node %s, discovery mode", rsc->id, node->details->id); return FALSE; } if (pe__is_guest_node(node)) { pe_resource_t *remote = node->details->remote_rsc->container; if(remote->role == RSC_ROLE_STOPPED) { /* If the container is stopped, then we know anything that * might have been inside it is also stopped and there is * no need to probe. * * If we don't know the container's state on the target * either: * * - the container is running, the transition will abort * and we'll end up in a different case next time, or * * - the container is stopped * * Either way there is no need to probe. * */ if(remote->allocated_to && g_hash_table_lookup(remote->known_on, remote->allocated_to->details->id) == NULL) { /* For safety, we order the 'rsc' start after 'remote' * has been probed. * * Using 'top' helps for groups, but we may need to * follow the start's ordering chain backwards. */ custom_action_order(remote, pcmk__op_key(remote->id, RSC_STATUS, 0), NULL, top, pcmk__op_key(top->id, RSC_START, 0), NULL, pe_order_optional, data_set); } pe_rsc_trace(rsc, "Skipping probe for %s on node %s, %s is stopped", rsc->id, node->details->id, remote->id); return FALSE; /* Here we really we want to check if remote->stop is required, * but that information doesn't exist yet */ } else if(node->details->remote_requires_reset || node->details->unclean || pcmk_is_set(remote->flags, pe_rsc_failed) || remote->next_role == RSC_ROLE_STOPPED || (remote->allocated_to && pe_find_node(remote->running_on, remote->allocated_to->details->uname) == NULL) ) { /* The container is stopping or restarting, don't start * 'rsc' until 'remote' stops as this also implies that * 'rsc' is stopped - avoiding the need to probe */ custom_action_order(remote, pcmk__op_key(remote->id, RSC_STOP, 0), NULL, top, pcmk__op_key(top->id, RSC_START, 0), NULL, pe_order_optional, data_set); pe_rsc_trace(rsc, "Skipping probe for %s on node %s, %s is stopping, restarting or moving", rsc->id, node->details->id, remote->id); return FALSE; /* } else { * The container is running so there is no problem probing it */ } } key = pcmk__op_key(rsc->id, RSC_STATUS, 0); probe = custom_action(rsc, key, RSC_STATUS, node, FALSE, TRUE, data_set); update_action_flags(probe, pe_action_optional | pe_action_clear, __func__, __LINE__); order_after_unfencing(rsc, node, probe, pe_order_optional, data_set); /* * We need to know if it's running_on (not just known_on) this node * to correctly determine the target rc. */ running = pe_find_node_id(rsc->running_on, node->details->id); if (running == NULL) { add_hash_param(probe->meta, XML_ATTR_TE_TARGET_RC, rc_inactive); } else if (rsc->role == RSC_ROLE_MASTER) { add_hash_param(probe->meta, XML_ATTR_TE_TARGET_RC, rc_master); } crm_debug("Probing %s on %s (%s) %d %p", rsc->id, node->details->uname, role2text(rsc->role), pcmk_is_set(probe->flags, pe_action_runnable), rsc->running_on); if (is_unfence_device(rsc, data_set) || !pe_rsc_is_clone(top)) { top = rsc; } else { crm_trace("Probing %s on %s (%s) as %s", rsc->id, node->details->uname, role2text(rsc->role), top->id); } if (!pcmk_is_set(probe->flags, pe_action_runnable) && (rsc->running_on == NULL)) { /* Prevent the start from occurring if rsc isn't active, but * don't cause it to stop if it was active already */ pe__set_order_flags(flags, pe_order_runnable_left); } custom_action_order(rsc, NULL, probe, top, pcmk__op_key(top->id, RSC_START, 0), NULL, flags, data_set); /* Before any reloads, if they exist */ custom_action_order(rsc, NULL, probe, top, reload_key(rsc), NULL, pe_order_optional, data_set); #if 0 // complete is always null currently if (!is_unfence_device(rsc, data_set)) { /* Normally rsc.start depends on probe complete which depends * on rsc.probe. But this can't be the case for fence devices * with unfencing, as it would create graph loops. * * So instead we explicitly order 'rsc.probe then rsc.start' */ order_actions(probe, complete, pe_order_implies_then); } #endif return TRUE; } /*! * \internal * \brief Check whether a resource is known on a particular node * * \param[in] rsc Resource to check * \param[in] node Node to check * * \return TRUE if resource (or parent if an anonymous clone) is known */ static bool rsc_is_known_on(pe_resource_t *rsc, const pe_node_t *node) { if (pe_hash_table_lookup(rsc->known_on, node->details->id)) { return TRUE; } else if ((rsc->variant == pe_native) && pe_rsc_is_anon_clone(rsc->parent) && pe_hash_table_lookup(rsc->parent->known_on, node->details->id)) { /* We check only the parent, not the uber-parent, because we cannot * assume that the resource is known if it is in an anonymously cloned * group (which may be only partially known). */ return TRUE; } return FALSE; } /*! * \internal * \brief Order a resource's start and promote actions relative to fencing * * \param[in] rsc Resource to be ordered * \param[in] stonith_op Fence action * \param[in] data_set Cluster information */ static void native_start_constraints(pe_resource_t * rsc, pe_action_t * stonith_op, pe_working_set_t * data_set) { pe_node_t *target; GListPtr gIter = NULL; CRM_CHECK(stonith_op && stonith_op->node, return); target = stonith_op->node; for (gIter = rsc->actions; gIter != NULL; gIter = gIter->next) { pe_action_t *action = (pe_action_t *) gIter->data; switch (action->needs) { case rsc_req_nothing: // Anything other than start or promote requires nothing break; case rsc_req_stonith: order_actions(stonith_op, action, pe_order_optional); break; case rsc_req_quorum: if (pcmk__str_eq(action->task, RSC_START, pcmk__str_casei) && pe_hash_table_lookup(rsc->allowed_nodes, target->details->id) && !rsc_is_known_on(rsc, target)) { /* If we don't know the status of the resource on the node * we're about to shoot, we have to assume it may be active * there. Order the resource start after the fencing. This * is analogous to waiting for all the probes for a resource * to complete before starting it. * * The most likely explanation is that the DC died and took * its status with it. */ pe_rsc_debug(rsc, "Ordering %s after %s recovery", action->uuid, target->details->uname); order_actions(stonith_op, action, pe_order_optional | pe_order_runnable_left); } break; } } } static void native_stop_constraints(pe_resource_t * rsc, pe_action_t * stonith_op, pe_working_set_t * data_set) { GListPtr gIter = NULL; GListPtr action_list = NULL; bool order_implicit = false; pe_resource_t *top = uber_parent(rsc); pe_action_t *parent_stop = NULL; pe_node_t *target; CRM_CHECK(stonith_op && stonith_op->node, return); target = stonith_op->node; /* Get a list of stop actions potentially implied by the fencing */ action_list = pe__resource_actions(rsc, target, RSC_STOP, FALSE); /* If resource requires fencing, implicit actions must occur after fencing. * * Implied stops and demotes of resources running on guest nodes are always * ordered after fencing, even if the resource does not require fencing, * because guest node "fencing" is actually just a resource stop. */ if (pcmk_is_set(rsc->flags, pe_rsc_needs_fencing) || pe__is_guest_node(target)) { order_implicit = true; } if (action_list && order_implicit) { parent_stop = find_first_action(top->actions, NULL, RSC_STOP, NULL); } for (gIter = action_list; gIter != NULL; gIter = gIter->next) { pe_action_t *action = (pe_action_t *) gIter->data; // The stop would never complete, so convert it into a pseudo-action. update_action_flags(action, pe_action_pseudo|pe_action_runnable, __func__, __LINE__); if (order_implicit) { update_action_flags(action, pe_action_implied_by_stonith, __func__, __LINE__); /* Order the stonith before the parent stop (if any). * * Also order the stonith before the resource stop, unless the * resource is inside a bundle -- that would cause a graph loop. * We can rely on the parent stop's ordering instead. * * User constraints must not order a resource in a guest node * relative to the guest node container resource. The * pe_order_preserve flag marks constraints as generated by the * cluster and thus immune to that check (and is irrelevant if * target is not a guest). */ if (!pe_rsc_is_bundled(rsc)) { order_actions(stonith_op, action, pe_order_preserve); } order_actions(stonith_op, parent_stop, pe_order_preserve); } if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { crm_notice("Stop of failed resource %s is implicit %s %s is fenced", rsc->id, (order_implicit? "after" : "because"), target->details->uname); } else { crm_info("%s is implicit %s %s is fenced", action->uuid, (order_implicit? "after" : "because"), target->details->uname); } if (pcmk_is_set(rsc->flags, pe_rsc_notify)) { /* Create a second notification that will be delivered * immediately after the node is fenced * * Basic problem: * - C is a clone active on the node to be shot and stopping on another * - R is a resource that depends on C * * + C.stop depends on R.stop * + C.stopped depends on STONITH * + C.notify depends on C.stopped * + C.healthy depends on C.notify * + R.stop depends on C.healthy * * The extra notification here changes * + C.healthy depends on C.notify * into: * + C.healthy depends on C.notify' * + C.notify' depends on STONITH' * thus breaking the loop */ create_secondary_notification(action, rsc, stonith_op, data_set); } /* From Bug #1601, successful fencing must be an input to a failed resources stop action. However given group(rA, rB) running on nodeX and B.stop has failed, A := stop healthy resource (rA.stop) B := stop failed resource (pseudo operation B.stop) C := stonith nodeX A requires B, B requires C, C requires A This loop would prevent the cluster from making progress. This block creates the "C requires A" dependency and therefore must (at least for now) be disabled. Instead, run the block above and treat all resources on nodeX as B would be (marked as a pseudo op depending on the STONITH). TODO: Break the "A requires B" dependency in update_action() and re-enable this block } else if(is_stonith == FALSE) { crm_info("Moving healthy resource %s" " off %s before fencing", rsc->id, node->details->uname); * stop healthy resources before the * stonith op * custom_action_order( rsc, stop_key(rsc), NULL, NULL,strdup(CRM_OP_FENCE),stonith_op, pe_order_optional, data_set); */ } g_list_free(action_list); /* Get a list of demote actions potentially implied by the fencing */ action_list = pe__resource_actions(rsc, target, RSC_DEMOTE, FALSE); for (gIter = action_list; gIter != NULL; gIter = gIter->next) { pe_action_t *action = (pe_action_t *) gIter->data; if (action->node->details->online == FALSE || action->node->details->unclean == TRUE || pcmk_is_set(rsc->flags, pe_rsc_failed)) { if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { pe_rsc_info(rsc, "Demote of failed resource %s is implicit after %s is fenced", rsc->id, target->details->uname); } else { pe_rsc_info(rsc, "%s is implicit after %s is fenced", action->uuid, target->details->uname); } /* The demote would never complete and is now implied by the * fencing, so convert it into a pseudo-action. */ update_action_flags(action, pe_action_pseudo|pe_action_runnable, __func__, __LINE__); if (pe_rsc_is_bundled(rsc)) { /* Do nothing, let the recovery be ordered after the parent's implied stop */ } else if (order_implicit) { order_actions(stonith_op, action, pe_order_preserve|pe_order_optional); } } } g_list_free(action_list); } void rsc_stonith_ordering(pe_resource_t * rsc, pe_action_t * stonith_op, pe_working_set_t * data_set) { if (rsc->children) { GListPtr gIter = NULL; for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; rsc_stonith_ordering(child_rsc, stonith_op, data_set); } } else if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { pe_rsc_trace(rsc, "Skipping fencing constraints for unmanaged resource: %s", rsc->id); } else { native_start_constraints(rsc, stonith_op, data_set); native_stop_constraints(rsc, stonith_op, data_set); } } void ReloadRsc(pe_resource_t * rsc, pe_node_t *node, pe_working_set_t * data_set) { GListPtr gIter = NULL; pe_action_t *reload = NULL; if (rsc->children) { for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child_rsc = (pe_resource_t *) gIter->data; ReloadRsc(child_rsc, node, data_set); } return; } else if (rsc->variant > pe_native) { /* Complex resource with no children */ return; } else if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { pe_rsc_trace(rsc, "%s: unmanaged", rsc->id); return; } else if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { /* We don't need to specify any particular actions here, normal failure * recovery will apply. */ pe_rsc_trace(rsc, "%s: preventing reload because failed", rsc->id); return; } else if (pcmk_is_set(rsc->flags, pe_rsc_start_pending)) { /* If a resource's configuration changed while a start was pending, * force a full restart. */ pe_rsc_trace(rsc, "%s: preventing reload because start pending", rsc->id); stop_action(rsc, node, FALSE); return; } else if (node == NULL) { pe_rsc_trace(rsc, "%s: not active", rsc->id); return; } pe_rsc_trace(rsc, "Processing %s", rsc->id); pe__set_resource_flags(rsc, pe_rsc_reload); reload = custom_action( rsc, reload_key(rsc), CRMD_ACTION_RELOAD, node, FALSE, TRUE, data_set); pe_action_set_reason(reload, "resource definition change", FALSE); custom_action_order(NULL, NULL, reload, rsc, stop_key(rsc), NULL, pe_order_optional|pe_order_then_cancels_first, data_set); custom_action_order(NULL, NULL, reload, rsc, demote_key(rsc), NULL, pe_order_optional|pe_order_then_cancels_first, data_set); } void native_append_meta(pe_resource_t * rsc, xmlNode * xml) { char *value = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_INCARNATION); pe_resource_t *parent; if (value) { char *name = NULL; name = crm_meta_name(XML_RSC_ATTR_INCARNATION); crm_xml_add(xml, name, value); free(name); } value = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_REMOTE_NODE); if (value) { char *name = NULL; name = crm_meta_name(XML_RSC_ATTR_REMOTE_NODE); crm_xml_add(xml, name, value); free(name); } for (parent = rsc; parent != NULL; parent = parent->parent) { if (parent->container) { crm_xml_add(xml, CRM_META"_"XML_RSC_ATTR_CONTAINER, parent->container->id); } } } diff --git a/lib/pacemaker/pcmk_sched_utils.c b/lib/pacemaker/pcmk_sched_utils.c index 177f43eb48..6a0b5bc337 100644 --- a/lib/pacemaker/pcmk_sched_utils.c +++ b/lib/pacemaker/pcmk_sched_utils.c @@ -1,767 +1,767 @@ /* * Copyright 2004-2021 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU General Public License version 2 * or later (GPLv2+) WITHOUT ANY WARRANTY. */ #include #include #include // lrmd_event_data_t #include #include pe__location_t * rsc2node_new(const char *id, pe_resource_t *rsc, int node_weight, const char *discover_mode, pe_node_t *foo_node, pe_working_set_t *data_set) { pe__location_t *new_con = NULL; if (rsc == NULL || id == NULL) { pe_err("Invalid constraint %s for rsc=%p", crm_str(id), rsc); return NULL; } else if (foo_node == NULL) { CRM_CHECK(node_weight == 0, return NULL); } new_con = calloc(1, sizeof(pe__location_t)); if (new_con != NULL) { new_con->id = strdup(id); new_con->rsc_lh = rsc; new_con->node_list_rh = NULL; new_con->role_filter = RSC_ROLE_UNKNOWN; if (pcmk__str_eq(discover_mode, "always", pcmk__str_null_matches | pcmk__str_casei)) { new_con->discover_mode = pe_discover_always; } else if (pcmk__str_eq(discover_mode, "never", pcmk__str_casei)) { new_con->discover_mode = pe_discover_never; } else if (pcmk__str_eq(discover_mode, "exclusive", pcmk__str_casei)) { new_con->discover_mode = pe_discover_exclusive; rsc->exclusive_discover = TRUE; } else { pe_err("Invalid %s value %s in location constraint", XML_LOCATION_ATTR_DISCOVERY, discover_mode); } if (foo_node != NULL) { pe_node_t *copy = pe__copy_node(foo_node); copy->weight = node_weight; new_con->node_list_rh = g_list_prepend(NULL, copy); } data_set->placement_constraints = g_list_prepend(data_set->placement_constraints, new_con); rsc->rsc_location = g_list_prepend(rsc->rsc_location, new_con); } return new_con; } gboolean can_run_resources(const pe_node_t * node) { if (node == NULL) { return FALSE; } #if 0 if (node->weight < 0) { return FALSE; } #endif if (node->details->online == FALSE || node->details->shutdown || node->details->unclean || node->details->standby || node->details->maintenance) { crm_trace("%s: online=%d, unclean=%d, standby=%d, maintenance=%d", node->details->uname, node->details->online, node->details->unclean, node->details->standby, node->details->maintenance); return FALSE; } return TRUE; } /*! * \internal * \brief Copy a hash table of node objects * * \param[in] nodes Hash table to copy * * \return New copy of nodes (or NULL if nodes is NULL) */ GHashTable * pcmk__copy_node_table(GHashTable *nodes) { GHashTable *new_table = NULL; GHashTableIter iter; pe_node_t *node = NULL; if (nodes == NULL) { return NULL; } new_table = g_hash_table_new_full(crm_str_hash, g_str_equal, NULL, free); g_hash_table_iter_init(&iter, nodes); while (g_hash_table_iter_next(&iter, NULL, (gpointer *) &node)) { pe_node_t *new_node = pe__copy_node(node); g_hash_table_insert(new_table, (gpointer) new_node->details->id, new_node); } return new_table; } /*! * \internal * \brief Copy a list of node objects * * \param[in] list List to copy * \param[in] reset Set copies' scores to 0 * * \return New list of shallow copies of nodes in original list */ GList * pcmk__copy_node_list(const GList *list, bool reset) { GList *result = NULL; for (const GList *gIter = list; gIter != NULL; gIter = gIter->next) { pe_node_t *new_node = NULL; pe_node_t *this_node = (pe_node_t *) gIter->data; new_node = pe__copy_node(this_node); if (reset) { new_node->weight = 0; } result = g_list_prepend(result, new_node); } return result; } struct node_weight_s { pe_node_t *active; pe_working_set_t *data_set; }; /* return -1 if 'a' is more preferred * return 1 if 'b' is more preferred */ static gint sort_node_weight(gconstpointer a, gconstpointer b, gpointer data) { const pe_node_t *node1 = (const pe_node_t *)a; const pe_node_t *node2 = (const pe_node_t *)b; struct node_weight_s *nw = data; int node1_weight = 0; int node2_weight = 0; int result = 0; if (a == NULL) { return 1; } if (b == NULL) { return -1; } node1_weight = node1->weight; node2_weight = node2->weight; if (can_run_resources(node1) == FALSE) { node1_weight = -INFINITY; } if (can_run_resources(node2) == FALSE) { node2_weight = -INFINITY; } if (node1_weight > node2_weight) { crm_trace("%s (%d) > %s (%d) : weight", node1->details->uname, node1_weight, node2->details->uname, node2_weight); return -1; } if (node1_weight < node2_weight) { crm_trace("%s (%d) < %s (%d) : weight", node1->details->uname, node1_weight, node2->details->uname, node2_weight); return 1; } crm_trace("%s (%d) == %s (%d) : weight", node1->details->uname, node1_weight, node2->details->uname, node2_weight); if (pcmk__str_eq(nw->data_set->placement_strategy, "minimal", pcmk__str_casei)) { goto equal; } if (pcmk__str_eq(nw->data_set->placement_strategy, "balanced", pcmk__str_casei)) { result = compare_capacity(node1, node2); if (result < 0) { crm_trace("%s > %s : capacity (%d)", node1->details->uname, node2->details->uname, result); return -1; } else if (result > 0) { crm_trace("%s < %s : capacity (%d)", node1->details->uname, node2->details->uname, result); return 1; } } /* now try to balance resources across the cluster */ if (node1->details->num_resources < node2->details->num_resources) { crm_trace("%s (%d) > %s (%d) : resources", node1->details->uname, node1->details->num_resources, node2->details->uname, node2->details->num_resources); return -1; } else if (node1->details->num_resources > node2->details->num_resources) { crm_trace("%s (%d) < %s (%d) : resources", node1->details->uname, node1->details->num_resources, node2->details->uname, node2->details->num_resources); return 1; } if (nw->active && nw->active->details == node1->details) { crm_trace("%s (%d) > %s (%d) : active", node1->details->uname, node1->details->num_resources, node2->details->uname, node2->details->num_resources); return -1; } else if (nw->active && nw->active->details == node2->details) { crm_trace("%s (%d) < %s (%d) : active", node1->details->uname, node1->details->num_resources, node2->details->uname, node2->details->num_resources); return 1; } equal: crm_trace("%s = %s", node1->details->uname, node2->details->uname); return strcmp(node1->details->uname, node2->details->uname); } GList * sort_nodes_by_weight(GList *nodes, pe_node_t *active_node, pe_working_set_t *data_set) { struct node_weight_s nw = { active_node, data_set }; return g_list_sort_with_data(nodes, sort_node_weight, &nw); } void native_deallocate(pe_resource_t * rsc) { if (rsc->allocated_to) { pe_node_t *old = rsc->allocated_to; crm_info("Deallocating %s from %s", rsc->id, old->details->uname); pe__set_resource_flags(rsc, pe_rsc_provisional); rsc->allocated_to = NULL; old->details->allocated_rsc = g_list_remove(old->details->allocated_rsc, rsc); old->details->num_resources--; /* old->count--; */ calculate_utilization(old->details->utilization, rsc->utilization, TRUE); free(old); } } gboolean -native_assign_node(pe_resource_t * rsc, GListPtr nodes, pe_node_t * chosen, gboolean force) +native_assign_node(pe_resource_t *rsc, pe_node_t *chosen, gboolean force) { CRM_ASSERT(rsc->variant == pe_native); if (force == FALSE && chosen != NULL) { bool unset = FALSE; if(chosen->weight < 0) { unset = TRUE; // Allow the graph to assume that the remote resource will come up } else if (!can_run_resources(chosen) && !pe__is_guest_node(chosen)) { unset = TRUE; } if(unset) { crm_debug("All nodes for resource %s are unavailable" ", unclean or shutting down (%s: %d, %d)", rsc->id, chosen->details->uname, can_run_resources(chosen), chosen->weight); pe__set_next_role(rsc, RSC_ROLE_STOPPED, "node availability"); chosen = NULL; } } /* todo: update the old node for each resource to reflect its * new resource count */ native_deallocate(rsc); pe__clear_resource_flags(rsc, pe_rsc_provisional); if (chosen == NULL) { GListPtr gIter = NULL; char *rc_inactive = crm_itoa(PCMK_OCF_NOT_RUNNING); crm_debug("Could not allocate a node for %s", rsc->id); pe__set_next_role(rsc, RSC_ROLE_STOPPED, "unable to allocate"); for (gIter = rsc->actions; gIter != NULL; gIter = gIter->next) { pe_action_t *op = (pe_action_t *) gIter->data; const char *interval_ms_s = g_hash_table_lookup(op->meta, XML_LRM_ATTR_INTERVAL_MS); crm_debug("Processing %s", op->uuid); if(pcmk__str_eq(RSC_STOP, op->task, pcmk__str_casei)) { update_action_flags(op, pe_action_optional | pe_action_clear, __func__, __LINE__); } else if(pcmk__str_eq(RSC_START, op->task, pcmk__str_casei)) { update_action_flags(op, pe_action_runnable | pe_action_clear, __func__, __LINE__); //pe__set_resource_flags(rsc, pe_rsc_block); } else if (interval_ms_s && !pcmk__str_eq(interval_ms_s, "0", pcmk__str_casei)) { if(pcmk__str_eq(rc_inactive, g_hash_table_lookup(op->meta, XML_ATTR_TE_TARGET_RC), pcmk__str_casei)) { /* This is a recurring monitor for the stopped state, leave it alone */ } else { /* Normal monitor operation, cancel it */ update_action_flags(op, pe_action_runnable | pe_action_clear, __func__, __LINE__); } } } free(rc_inactive); return FALSE; } crm_debug("Assigning %s to %s", chosen->details->uname, rsc->id); rsc->allocated_to = pe__copy_node(chosen); chosen->details->allocated_rsc = g_list_prepend(chosen->details->allocated_rsc, rsc); chosen->details->num_resources++; chosen->count++; calculate_utilization(chosen->details->utilization, rsc->utilization, FALSE); dump_rsc_utilization((show_utilization? LOG_STDOUT : LOG_TRACE), __func__, rsc, chosen); return TRUE; } void log_action(unsigned int log_level, const char *pre_text, pe_action_t * action, gboolean details) { const char *node_uname = NULL; const char *node_uuid = NULL; const char *desc = NULL; if (action == NULL) { crm_trace("%s%s: ", pre_text == NULL ? "" : pre_text, pre_text == NULL ? "" : ": "); return; } if (pcmk_is_set(action->flags, pe_action_pseudo)) { node_uname = NULL; node_uuid = NULL; } else if (action->node != NULL) { node_uname = action->node->details->uname; node_uuid = action->node->details->id; } else { node_uname = ""; node_uuid = NULL; } switch (text2task(action->task)) { case stonith_node: case shutdown_crm: if (pcmk_is_set(action->flags, pe_action_pseudo)) { desc = "Pseudo "; } else if (pcmk_is_set(action->flags, pe_action_optional)) { desc = "Optional "; } else if (!pcmk_is_set(action->flags, pe_action_runnable)) { desc = "!!Non-Startable!! "; } else if (pcmk_is_set(action->flags, pe_action_processed)) { desc = ""; } else { desc = "(Provisional) "; } crm_trace("%s%s%sAction %d: %s%s%s%s%s%s", ((pre_text == NULL)? "" : pre_text), ((pre_text == NULL)? "" : ": "), desc, action->id, action->uuid, (node_uname? "\ton " : ""), (node_uname? node_uname : ""), (node_uuid? "\t\t(" : ""), (node_uuid? node_uuid : ""), (node_uuid? ")" : "")); break; default: if (pcmk_is_set(action->flags, pe_action_optional)) { desc = "Optional "; } else if (pcmk_is_set(action->flags, pe_action_pseudo)) { desc = "Pseudo "; } else if (!pcmk_is_set(action->flags, pe_action_runnable)) { desc = "!!Non-Startable!! "; } else if (pcmk_is_set(action->flags, pe_action_processed)) { desc = ""; } else { desc = "(Provisional) "; } crm_trace("%s%s%sAction %d: %s %s%s%s%s%s%s", ((pre_text == NULL)? "" : pre_text), ((pre_text == NULL)? "" : ": "), desc, action->id, action->uuid, (action->rsc? action->rsc->id : ""), (node_uname? "\ton " : ""), (node_uname? node_uname : ""), (node_uuid? "\t\t(" : ""), (node_uuid? node_uuid : ""), (node_uuid? ")" : "")); break; } if (details) { GListPtr gIter = NULL; crm_trace("\t\t====== Preceding Actions"); gIter = action->actions_before; for (; gIter != NULL; gIter = gIter->next) { pe_action_wrapper_t *other = (pe_action_wrapper_t *) gIter->data; log_action(log_level + 1, "\t\t", other->action, FALSE); } crm_trace("\t\t====== Subsequent Actions"); gIter = action->actions_after; for (; gIter != NULL; gIter = gIter->next) { pe_action_wrapper_t *other = (pe_action_wrapper_t *) gIter->data; log_action(log_level + 1, "\t\t", other->action, FALSE); } crm_trace("\t\t====== End"); } else { crm_trace("\t\t(before=%d, after=%d)", g_list_length(action->actions_before), g_list_length(action->actions_after)); } } gboolean can_run_any(GHashTable * nodes) { GHashTableIter iter; pe_node_t *node = NULL; if (nodes == NULL) { return FALSE; } g_hash_table_iter_init(&iter, nodes); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { if (can_run_resources(node) && node->weight >= 0) { return TRUE; } } return FALSE; } pe_action_t * create_pseudo_resource_op(pe_resource_t * rsc, const char *task, bool optional, bool runnable, pe_working_set_t *data_set) { pe_action_t *action = custom_action(rsc, pcmk__op_key(rsc->id, task, 0), task, NULL, optional, TRUE, data_set); update_action_flags(action, pe_action_pseudo, __func__, __LINE__); update_action_flags(action, pe_action_runnable, __func__, __LINE__); if(runnable) { update_action_flags(action, pe_action_runnable, __func__, __LINE__); } return action; } /*! * \internal * \brief Create an executor cancel op * * \param[in] rsc Resource of action to cancel * \param[in] task Name of action to cancel * \param[in] interval_ms Interval of action to cancel * \param[in] node Node of action to cancel * \param[in] data_set Working set of cluster * * \return Created op */ pe_action_t * pe_cancel_op(pe_resource_t *rsc, const char *task, guint interval_ms, pe_node_t *node, pe_working_set_t *data_set) { pe_action_t *cancel_op; char *interval_ms_s = crm_strdup_printf("%u", interval_ms); // @TODO dangerous if possible to schedule another action with this key char *key = pcmk__op_key(rsc->id, task, interval_ms); cancel_op = custom_action(rsc, key, RSC_CANCEL, node, FALSE, TRUE, data_set); free(cancel_op->task); cancel_op->task = strdup(RSC_CANCEL); free(cancel_op->cancel_task); cancel_op->cancel_task = strdup(task); add_hash_param(cancel_op->meta, XML_LRM_ATTR_TASK, task); add_hash_param(cancel_op->meta, XML_LRM_ATTR_INTERVAL_MS, interval_ms_s); free(interval_ms_s); return cancel_op; } /*! * \internal * \brief Create a shutdown op for a scheduler transition * * \param[in] node Node being shut down * \param[in] data_set Working set of cluster * * \return Created op */ pe_action_t * sched_shutdown_op(pe_node_t *node, pe_working_set_t *data_set) { char *shutdown_id = crm_strdup_printf("%s-%s", CRM_OP_SHUTDOWN, node->details->uname); pe_action_t *shutdown_op = custom_action(NULL, shutdown_id, CRM_OP_SHUTDOWN, node, FALSE, TRUE, data_set); crm_notice("Scheduling shutdown of node %s", node->details->uname); shutdown_constraints(node, shutdown_op, data_set); add_hash_param(shutdown_op->meta, XML_ATTR_TE_NOWAIT, XML_BOOLEAN_TRUE); return shutdown_op; } static char * generate_transition_magic(const char *transition_key, int op_status, int op_rc) { CRM_CHECK(transition_key != NULL, return NULL); return crm_strdup_printf("%d:%d;%s", op_status, op_rc, transition_key); } static void append_digest(lrmd_event_data_t *op, xmlNode *update, const char *version, const char *magic, int level) { /* this will enable us to later determine that the * resource's parameters have changed and we should force * a restart */ char *digest = NULL; xmlNode *args_xml = NULL; if (op->params == NULL) { return; } args_xml = create_xml_node(NULL, XML_TAG_PARAMS); g_hash_table_foreach(op->params, hash2field, args_xml); pcmk__filter_op_for_digest(args_xml); digest = calculate_operation_digest(args_xml, version); #if 0 if (level < get_crm_log_level() && op->interval_ms == 0 && pcmk__str_eq(op->op_type, CRMD_ACTION_START, pcmk__str_none)) { char *digest_source = dump_xml_unformatted(args_xml); do_crm_log(level, "Calculated digest %s for %s (%s). Source: %s\n", digest, ID(update), magic, digest_source); free(digest_source); } #endif crm_xml_add(update, XML_LRM_ATTR_OP_DIGEST, digest); free_xml(args_xml); free(digest); } #define FAKE_TE_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /*! * \internal * \brief Create XML for resource operation history update * * \param[in,out] parent Parent XML node to add to * \param[in,out] op Operation event data * \param[in] caller_version DC feature set * \param[in] target_rc Expected result of operation * \param[in] node Name of node on which operation was performed * \param[in] origin Arbitrary description of update source * \param[in] level A log message will be logged at this level * * \return Newly created XML node for history update */ xmlNode * pcmk__create_history_xml(xmlNode *parent, lrmd_event_data_t *op, const char *caller_version, int target_rc, const char *node, const char *origin, int level) { char *key = NULL; char *magic = NULL; char *op_id = NULL; char *op_id_additional = NULL; char *local_user_data = NULL; const char *exit_reason = NULL; xmlNode *xml_op = NULL; const char *task = NULL; CRM_CHECK(op != NULL, return NULL); do_crm_log(level, "%s: Updating resource %s after %s op %s (interval=%u)", origin, op->rsc_id, op->op_type, services_lrm_status_str(op->op_status), op->interval_ms); crm_trace("DC version: %s", caller_version); task = op->op_type; /* Record a successful reload as a start, and a failed reload as a monitor, * to make life easier for the scheduler when determining the current state. */ if (pcmk__str_eq(task, "reload", pcmk__str_none)) { if (op->op_status == PCMK_LRM_OP_DONE) { task = CRMD_ACTION_START; } else { task = CRMD_ACTION_STATUS; } } key = pcmk__op_key(op->rsc_id, task, op->interval_ms); if (pcmk__str_eq(task, CRMD_ACTION_NOTIFY, pcmk__str_none)) { const char *n_type = crm_meta_value(op->params, "notify_type"); const char *n_task = crm_meta_value(op->params, "notify_operation"); CRM_LOG_ASSERT(n_type != NULL); CRM_LOG_ASSERT(n_task != NULL); op_id = pcmk__notify_key(op->rsc_id, n_type, n_task); if (op->op_status != PCMK_LRM_OP_PENDING) { /* Ignore notify errors. * * @TODO It might be better to keep the correct result here, and * ignore it in process_graph_event(). */ op->op_status = PCMK_LRM_OP_DONE; op->rc = 0; } } else if (did_rsc_op_fail(op, target_rc)) { op_id = pcmk__op_key(op->rsc_id, "last_failure", 0); if (op->interval_ms == 0) { // Ensure 'last' gets updated, in case record-pending is true op_id_additional = pcmk__op_key(op->rsc_id, "last", 0); } exit_reason = op->exit_reason; } else if (op->interval_ms > 0) { op_id = strdup(key); } else { op_id = pcmk__op_key(op->rsc_id, "last", 0); } again: xml_op = pcmk__xe_match(parent, XML_LRM_TAG_RSC_OP, XML_ATTR_ID, op_id); if (xml_op == NULL) { xml_op = create_xml_node(parent, XML_LRM_TAG_RSC_OP); } if (op->user_data == NULL) { crm_debug("Generating fake transition key for: " PCMK__OP_FMT " %d from %s", op->rsc_id, op->op_type, op->interval_ms, op->call_id, origin); local_user_data = pcmk__transition_key(-1, op->call_id, target_rc, FAKE_TE_ID); op->user_data = local_user_data; } if(magic == NULL) { magic = generate_transition_magic(op->user_data, op->op_status, op->rc); } crm_xml_add(xml_op, XML_ATTR_ID, op_id); crm_xml_add(xml_op, XML_LRM_ATTR_TASK_KEY, key); crm_xml_add(xml_op, XML_LRM_ATTR_TASK, task); crm_xml_add(xml_op, XML_ATTR_ORIGIN, origin); crm_xml_add(xml_op, XML_ATTR_CRM_VERSION, caller_version); crm_xml_add(xml_op, XML_ATTR_TRANSITION_KEY, op->user_data); crm_xml_add(xml_op, XML_ATTR_TRANSITION_MAGIC, magic); crm_xml_add(xml_op, XML_LRM_ATTR_EXIT_REASON, exit_reason == NULL ? "" : exit_reason); crm_xml_add(xml_op, XML_LRM_ATTR_TARGET, node); /* For context during triage */ crm_xml_add_int(xml_op, XML_LRM_ATTR_CALLID, op->call_id); crm_xml_add_int(xml_op, XML_LRM_ATTR_RC, op->rc); crm_xml_add_int(xml_op, XML_LRM_ATTR_OPSTATUS, op->op_status); crm_xml_add_ms(xml_op, XML_LRM_ATTR_INTERVAL_MS, op->interval_ms); if (compare_version("2.1", caller_version) <= 0) { if (op->t_run || op->t_rcchange || op->exec_time || op->queue_time) { crm_trace("Timing data (" PCMK__OP_FMT "): last=%u change=%u exec=%u queue=%u", op->rsc_id, op->op_type, op->interval_ms, op->t_run, op->t_rcchange, op->exec_time, op->queue_time); if (op->interval_ms == 0) { crm_xml_add_ll(xml_op, XML_RSC_OP_LAST_CHANGE, (long long) op->t_run); // @COMPAT last-run is deprecated crm_xml_add_ll(xml_op, XML_RSC_OP_LAST_RUN, (long long) op->t_run); } else if(op->t_rcchange) { /* last-run is not accurate for recurring ops */ crm_xml_add_ll(xml_op, XML_RSC_OP_LAST_CHANGE, (long long) op->t_rcchange); } else { /* ...but is better than nothing otherwise */ crm_xml_add_ll(xml_op, XML_RSC_OP_LAST_CHANGE, (long long) op->t_run); } crm_xml_add_int(xml_op, XML_RSC_OP_T_EXEC, op->exec_time); crm_xml_add_int(xml_op, XML_RSC_OP_T_QUEUE, op->queue_time); } } if (pcmk__str_any_of(op->op_type, CRMD_ACTION_MIGRATE, CRMD_ACTION_MIGRATED, NULL)) { /* * Record migrate_source and migrate_target always for migrate ops. */ const char *name = XML_LRM_ATTR_MIGRATE_SOURCE; crm_xml_add(xml_op, name, crm_meta_value(op->params, name)); name = XML_LRM_ATTR_MIGRATE_TARGET; crm_xml_add(xml_op, name, crm_meta_value(op->params, name)); } append_digest(op, xml_op, caller_version, magic, LOG_DEBUG); if (op_id_additional) { free(op_id); op_id = op_id_additional; op_id_additional = NULL; goto again; } if (local_user_data) { free(local_user_data); op->user_data = NULL; } free(magic); free(op_id); free(key); return xml_op; } diff --git a/lib/pengine/native.c b/lib/pengine/native.c index a75ec7b7cb..5415162fe7 100644 --- a/lib/pengine/native.c +++ b/lib/pengine/native.c @@ -1,1365 +1,1366 @@ /* * Copyright 2004-2021 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU Lesser General Public License * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. */ #include #include #include #include #include #include #include #define VARIANT_NATIVE 1 #include "./variant.h" #ifdef PCMK__COMPAT_2_0 #define PROVIDER_SEP "::" #else #define PROVIDER_SEP ":" #endif /*! * \internal * \brief Check whether a resource is active on multiple nodes */ static bool is_multiply_active(pe_resource_t *rsc) { unsigned int count = 0; if (rsc->variant == pe_native) { pe__find_active_requires(rsc, &count); } return count > 1; } static void native_priority_to_node(pe_resource_t * rsc, pe_node_t * node) { int priority = 0; if (rsc->priority == 0) { return; } if (rsc->role == RSC_ROLE_MASTER) { // Promoted instance takes base priority + 1 priority = rsc->priority + 1; } else { priority = rsc->priority; } node->details->priority += priority; pe_rsc_trace(rsc, "Node '%s' now has priority %d with %s'%s' (priority: %d%s)", node->details->uname, node->details->priority, rsc->role == RSC_ROLE_MASTER ? "promoted " : "", rsc->id, rsc->priority, rsc->role == RSC_ROLE_MASTER ? " + 1" : ""); /* Priority of a resource running on a guest node is added to the cluster * node as well. */ if (node->details->remote_rsc && node->details->remote_rsc->container) { GListPtr gIter = node->details->remote_rsc->container->running_on; for (; gIter != NULL; gIter = gIter->next) { pe_node_t *a_node = gIter->data; a_node->details->priority += priority; pe_rsc_trace(rsc, "Node '%s' now has priority %d with %s'%s' (priority: %d%s) " "from guest node '%s'", a_node->details->uname, a_node->details->priority, rsc->role == RSC_ROLE_MASTER ? "promoted " : "", rsc->id, rsc->priority, rsc->role == RSC_ROLE_MASTER ? " + 1" : "", node->details->uname); } } } void native_add_running(pe_resource_t * rsc, pe_node_t * node, pe_working_set_t * data_set) { GListPtr gIter = rsc->running_on; CRM_CHECK(node != NULL, return); for (; gIter != NULL; gIter = gIter->next) { pe_node_t *a_node = (pe_node_t *) gIter->data; CRM_CHECK(a_node != NULL, return); if (pcmk__str_eq(a_node->details->id, node->details->id, pcmk__str_casei)) { return; } } pe_rsc_trace(rsc, "Adding %s to %s %s", rsc->id, node->details->uname, pcmk_is_set(rsc->flags, pe_rsc_managed)? "" : "(unmanaged)"); rsc->running_on = g_list_append(rsc->running_on, node); if (rsc->variant == pe_native) { node->details->running_rsc = g_list_append(node->details->running_rsc, rsc); native_priority_to_node(rsc, node); } if (rsc->variant == pe_native && node->details->maintenance) { pe__clear_resource_flags(rsc, pe_rsc_managed); } if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { pe_resource_t *p = rsc->parent; pe_rsc_info(rsc, "resource %s isn't managed", rsc->id); resource_location(rsc, node, INFINITY, "not_managed_default", data_set); while(p && node->details->online) { /* add without the additional location constraint */ p->running_on = g_list_append(p->running_on, node); p = p->parent; } return; } if (is_multiply_active(rsc)) { switch (rsc->recovery_type) { case recovery_stop_only: { GHashTableIter gIter; pe_node_t *local_node = NULL; /* make sure it doesn't come up again */ if (rsc->allowed_nodes != NULL) { g_hash_table_destroy(rsc->allowed_nodes); } rsc->allowed_nodes = pe__node_list2table(data_set->nodes); g_hash_table_iter_init(&gIter, rsc->allowed_nodes); while (g_hash_table_iter_next(&gIter, NULL, (void **)&local_node)) { local_node->weight = -INFINITY; } } break; case recovery_stop_start: break; case recovery_block: pe__clear_resource_flags(rsc, pe_rsc_managed); pe__set_resource_flags(rsc, pe_rsc_block); /* If the resource belongs to a group or bundle configured with * multiple-active=block, block the entire entity. */ if (rsc->parent && (rsc->parent->variant == pe_group || rsc->parent->variant == pe_container) && rsc->parent->recovery_type == recovery_block) { GListPtr gIter = rsc->parent->children; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; pe__clear_resource_flags(child, pe_rsc_managed); pe__set_resource_flags(child, pe_rsc_block); } } break; } crm_debug("%s is active on multiple nodes including %s: %s", rsc->id, node->details->uname, recovery2text(rsc->recovery_type)); } else { pe_rsc_trace(rsc, "Resource %s is active on: %s", rsc->id, node->details->uname); } if (rsc->parent != NULL) { native_add_running(rsc->parent, node, data_set); } } static void recursive_clear_unique(pe_resource_t *rsc) { pe__clear_resource_flags(rsc, pe_rsc_unique); add_hash_param(rsc->meta, XML_RSC_ATTR_UNIQUE, XML_BOOLEAN_FALSE); for (GList *child = rsc->children; child != NULL; child = child->next) { recursive_clear_unique((pe_resource_t *) child->data); } } gboolean native_unpack(pe_resource_t * rsc, pe_working_set_t * data_set) { pe_resource_t *parent = uber_parent(rsc); native_variant_data_t *native_data = NULL; const char *standard = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); uint32_t ra_caps = pcmk_get_ra_caps(standard); pe_rsc_trace(rsc, "Processing resource %s...", rsc->id); native_data = calloc(1, sizeof(native_variant_data_t)); rsc->variant_opaque = native_data; // Only some agent standards support unique and promotable clones if (!pcmk_is_set(ra_caps, pcmk_ra_cap_unique) && pcmk_is_set(rsc->flags, pe_rsc_unique) && pe_rsc_is_clone(parent)) { /* @COMPAT We should probably reject this situation as an error (as we * do for promotable below) rather than warn and convert, but that would * be a backward-incompatible change that we should probably do with a * transform at a schema major version bump. */ pe__force_anon(standard, parent, rsc->id, data_set); /* Clear globally-unique on the parent and all its descendents unpacked * so far (clearing the parent should make any future children unpacking * correct). We have to clear this resource explicitly because it isn't * hooked into the parent's children yet. */ recursive_clear_unique(parent); recursive_clear_unique(rsc); } if (!pcmk_is_set(ra_caps, pcmk_ra_cap_promotable) && pcmk_is_set(parent->flags, pe_rsc_promotable)) { pe_err("Resource %s is of type %s and therefore " "cannot be used as a promotable clone resource", rsc->id, standard); return FALSE; } return TRUE; } static bool rsc_is_on_node(pe_resource_t *rsc, const pe_node_t *node, int flags) { pe_rsc_trace(rsc, "Checking whether %s is on %s", rsc->id, node->details->uname); if (pcmk_is_set(flags, pe_find_current) && rsc->running_on) { for (GListPtr iter = rsc->running_on; iter; iter = iter->next) { pe_node_t *loc = (pe_node_t *) iter->data; if (loc->details == node->details) { return TRUE; } } } else if (pcmk_is_set(flags, pe_find_inactive) && (rsc->running_on == NULL)) { return TRUE; } else if (!pcmk_is_set(flags, pe_find_current) && rsc->allocated_to && (rsc->allocated_to->details == node->details)) { return TRUE; } return FALSE; } pe_resource_t * native_find_rsc(pe_resource_t * rsc, const char *id, const pe_node_t *on_node, int flags) { bool match = FALSE; pe_resource_t *result = NULL; CRM_CHECK(id && rsc && rsc->id, return NULL); if (flags & pe_find_clone) { const char *rid = ID(rsc->xml); if (!pe_rsc_is_clone(uber_parent(rsc))) { match = FALSE; } else if (!strcmp(id, rsc->id) || pcmk__str_eq(id, rid, pcmk__str_casei)) { match = TRUE; } } else if (!strcmp(id, rsc->id)) { match = TRUE; } else if (pcmk_is_set(flags, pe_find_renamed) && rsc->clone_name && strcmp(rsc->clone_name, id) == 0) { match = TRUE; } else if (pcmk_is_set(flags, pe_find_any) || (pcmk_is_set(flags, pe_find_anon) && !pcmk_is_set(rsc->flags, pe_rsc_unique))) { match = pe_base_name_eq(rsc, id); } if (match && on_node) { bool match_node = rsc_is_on_node(rsc, on_node, flags); if (match_node == FALSE) { match = FALSE; } } if (match) { return rsc; } for (GListPtr gIter = rsc->children; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; result = rsc->fns->find_rsc(child, id, on_node, flags); if (result) { return result; } } return NULL; } // create is ignored char * native_parameter(pe_resource_t * rsc, pe_node_t * node, gboolean create, const char *name, pe_working_set_t * data_set) { char *value_copy = NULL; const char *value = NULL; GHashTable *params = NULL; CRM_CHECK(rsc != NULL, return NULL); CRM_CHECK(name != NULL && strlen(name) != 0, return NULL); pe_rsc_trace(rsc, "Looking up %s in %s", name, rsc->id); params = pe_rsc_params(rsc, node, data_set); value = g_hash_table_lookup(params, name); if (value == NULL) { /* try meta attributes instead */ value = g_hash_table_lookup(rsc->meta, name); } if (value != NULL) { value_copy = strdup(value); } return value_copy; } gboolean native_active(pe_resource_t * rsc, gboolean all) { for (GList *gIter = rsc->running_on; gIter != NULL; gIter = gIter->next) { pe_node_t *a_node = (pe_node_t *) gIter->data; if (a_node->details->unclean) { pe_rsc_trace(rsc, "Resource %s: node %s is unclean", rsc->id, a_node->details->uname); return TRUE; } else if (a_node->details->online == FALSE) { pe_rsc_trace(rsc, "Resource %s: node %s is offline", rsc->id, a_node->details->uname); } else { pe_rsc_trace(rsc, "Resource %s active on %s", rsc->id, a_node->details->uname); return TRUE; } } return FALSE; } struct print_data_s { long options; void *print_data; }; static const char * native_pending_state(pe_resource_t * rsc) { const char *pending_state = NULL; if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_START, pcmk__str_casei)) { pending_state = "Starting"; } else if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_STOP, pcmk__str_casei)) { pending_state = "Stopping"; } else if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_MIGRATE, pcmk__str_casei)) { pending_state = "Migrating"; } else if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_MIGRATED, pcmk__str_casei)) { /* Work might be done in here. */ pending_state = "Migrating"; } else if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_PROMOTE, pcmk__str_casei)) { pending_state = "Promoting"; } else if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_DEMOTE, pcmk__str_casei)) { pending_state = "Demoting"; } return pending_state; } static const char * native_pending_task(pe_resource_t * rsc) { const char *pending_task = NULL; if (pcmk__str_eq(rsc->pending_task, CRMD_ACTION_STATUS, pcmk__str_casei)) { pending_task = "Monitoring"; /* Pending probes are not printed, even if pending * operations are requested. If someone ever requests that * behavior, uncomment this and the corresponding part of * unpack.c:unpack_rsc_op(). */ /* } else if (pcmk__str_eq(rsc->pending_task, "probe", pcmk__str_casei)) { pending_task = "Checking"; */ } return pending_task; } static enum rsc_role_e native_displayable_role(pe_resource_t *rsc) { enum rsc_role_e role = rsc->role; if ((role == RSC_ROLE_STARTED) && pcmk_is_set(uber_parent(rsc)->flags, pe_rsc_promotable)) { role = RSC_ROLE_SLAVE; } return role; } static const char * native_displayable_state(pe_resource_t *rsc, long options) { const char *rsc_state = NULL; if (options & pe_print_pending) { rsc_state = native_pending_state(rsc); } if (rsc_state == NULL) { rsc_state = role2text(native_displayable_role(rsc)); } return rsc_state; } static void native_print_xml(pe_resource_t * rsc, const char *pre_text, long options, void *print_data) { const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER); const char *rsc_state = native_displayable_state(rsc, options); const char *target_role = NULL; /* resource information. */ status_print("%sxml, XML_ATTR_TYPE)); status_print("role=\"%s\" ", rsc_state); if (rsc->meta) { target_role = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET_ROLE); } if (target_role) { status_print("target_role=\"%s\" ", target_role); } status_print("active=\"%s\" ", pcmk__btoa(rsc->fns->active(rsc, TRUE))); status_print("orphaned=\"%s\" ", pe__rsc_bool_str(rsc, pe_rsc_orphan)); status_print("blocked=\"%s\" ", pe__rsc_bool_str(rsc, pe_rsc_block)); status_print("managed=\"%s\" ", pe__rsc_bool_str(rsc, pe_rsc_managed)); status_print("failed=\"%s\" ", pe__rsc_bool_str(rsc, pe_rsc_failed)); status_print("failure_ignored=\"%s\" ", pe__rsc_bool_str(rsc, pe_rsc_failure_ignored)); status_print("nodes_running_on=\"%d\" ", g_list_length(rsc->running_on)); if (options & pe_print_pending) { const char *pending_task = native_pending_task(rsc); if (pending_task) { status_print("pending=\"%s\" ", pending_task); } } /* print out the nodes this resource is running on */ if (options & pe_print_rsconly) { status_print("/>\n"); /* do nothing */ } else if (rsc->running_on != NULL) { GListPtr gIter = rsc->running_on; status_print(">\n"); for (; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; status_print("%s \n", pre_text, node->details->uname, node->details->id, pcmk__btoa(node->details->online == FALSE)); } status_print("%s\n", pre_text); } else { status_print("/>\n"); } } // Append a flag to resource description string's flags list static bool add_output_flag(GString *s, const char *flag_desc, bool have_flags) { g_string_append(s, (have_flags? ", " : " (")); g_string_append(s, flag_desc); return true; } // Append a node name to resource description string's node list static bool add_output_node(GString *s, const char *node, bool have_nodes) { g_string_append(s, (have_nodes? " " : " [ ")); g_string_append(s, node); return true; } /*! * \internal * \brief Create a string description of a resource * * \param[in] rsc Resource to describe * \param[in] name Desired identifier for the resource * \param[in] node If not NULL, node that resource is "on" * \param[in] options Bitmask of pe_print_* * \param[in] target_role Resource's target role * \param[in] show_nodes Whether to display nodes when multiply active * * \return Newly allocated string description of resource * \note Caller must free the result with g_free(). */ gchar * pcmk__native_output_string(pe_resource_t *rsc, const char *name, pe_node_t *node, long options, const char *target_role, bool show_nodes) { const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); const char *provider = NULL; const char *kind = crm_element_value(rsc->xml, XML_ATTR_TYPE); gchar *retval = NULL; GString *outstr = NULL; bool have_flags = false; if (rsc->variant != pe_native) { return NULL; } CRM_CHECK(name != NULL, name = "unknown"); CRM_CHECK(kind != NULL, kind = "unknown"); CRM_CHECK(class != NULL, class = "unknown"); if (pcmk_is_set(pcmk_get_ra_caps(class), pcmk_ra_cap_provider)) { provider = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER); } if ((node == NULL) && (rsc->lock_node != NULL)) { node = rsc->lock_node; } if (pcmk_is_set(options, pe_print_rsconly) || pcmk__list_of_multiple(rsc->running_on)) { node = NULL; } // We need a string of at least this size outstr = g_string_sized_new(strlen(name) + strlen(class) + strlen(kind) + (provider? (strlen(provider) + 2) : 0) + (node? strlen(node->details->uname) + 1 : 0) + 11); // Resource name and agent g_string_printf(outstr, "%s\t(%s%s%s:%s):\t", name, class, ((provider == NULL)? "" : PROVIDER_SEP), ((provider == NULL)? "" : provider), kind); // State on node if (pcmk_is_set(rsc->flags, pe_rsc_orphan)) { g_string_append(outstr, " ORPHANED"); } if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { enum rsc_role_e role = native_displayable_role(rsc); if (role > RSC_ROLE_SLAVE) { g_string_append_printf(outstr, " FAILED %s", role2text(role)); } else { g_string_append(outstr, " FAILED"); } } else { g_string_append_printf(outstr, " %s", native_displayable_state(rsc, options)); } if (node) { g_string_append_printf(outstr, " %s", node->details->uname); } // Flags, as: ( [...]) if (node && !(node->details->online) && node->details->unclean) { have_flags = add_output_flag(outstr, "UNCLEAN", have_flags); } if (node && (node == rsc->lock_node)) { have_flags = add_output_flag(outstr, "LOCKED", have_flags); } if (pcmk_is_set(options, pe_print_pending)) { const char *pending_task = native_pending_task(rsc); if (pending_task) { have_flags = add_output_flag(outstr, pending_task, have_flags); } } if (target_role) { enum rsc_role_e target_role_e = text2role(target_role); /* Only show target role if it limits our abilities (i.e. ignore * Started, as it is the default anyways, and doesn't prevent the * resource from becoming Master). */ if (target_role_e == RSC_ROLE_STOPPED) { have_flags = add_output_flag(outstr, "disabled", have_flags); } else if (pcmk_is_set(uber_parent(rsc)->flags, pe_rsc_promotable) && target_role_e == RSC_ROLE_SLAVE) { have_flags = add_output_flag(outstr, "target-role:", have_flags); g_string_append(outstr, target_role); } } if (pcmk_is_set(rsc->flags, pe_rsc_block)) { have_flags = add_output_flag(outstr, "blocked", have_flags); } else if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { have_flags = add_output_flag(outstr, "unmanaged", have_flags); } if (pcmk_is_set(rsc->flags, pe_rsc_failure_ignored)) { have_flags = add_output_flag(outstr, "failure ignored", have_flags); } if (have_flags) { g_string_append(outstr, ")"); } // User-supplied description if (pcmk_is_set(options, pe_print_rsconly) || pcmk__list_of_multiple(rsc->running_on)) { const char *desc = crm_element_value(rsc->xml, XML_ATTR_DESC); if (desc) { g_string_append_printf(outstr, " %s", desc); } } if (show_nodes && !pcmk_is_set(options, pe_print_rsconly) && pcmk__list_of_multiple(rsc->running_on)) { bool have_nodes = false; for (GList *iter = rsc->running_on; iter != NULL; iter = iter->next) { pe_node_t *n = (pe_node_t *) iter->data; have_nodes = add_output_node(outstr, n->details->uname, have_nodes); } if (have_nodes) { g_string_append(outstr, " ]"); } } retval = outstr->str; g_string_free(outstr, FALSE); return retval; } int pe__common_output_html(pcmk__output_t *out, pe_resource_t * rsc, const char *name, pe_node_t *node, long options) { const char *kind = crm_element_value(rsc->xml, XML_ATTR_TYPE); const char *target_role = NULL; xmlNodePtr list_node = NULL; const char *cl = NULL; CRM_ASSERT(rsc->variant == pe_native); CRM_ASSERT(kind != NULL); if (rsc->meta) { const char *is_internal = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_INTERNAL_RSC); if (crm_is_true(is_internal) && !pcmk_is_set(options, pe_print_implicit)) { crm_trace("skipping print of internal resource %s", rsc->id); return pcmk_rc_no_output; } target_role = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET_ROLE); } if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { cl = "rsc-managed"; } else if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { cl = "rsc-failed"; } else if (rsc->variant == pe_native && (rsc->running_on == NULL)) { cl = "rsc-failed"; } else if (pcmk__list_of_multiple(rsc->running_on)) { cl = "rsc-multiple"; } else if (pcmk_is_set(rsc->flags, pe_rsc_failure_ignored)) { cl = "rsc-failure-ignored"; } else { cl = "rsc-ok"; } { gchar *s = pcmk__native_output_string(rsc, name, node, options, target_role, true); list_node = pcmk__output_create_html_node(out, "li", NULL, NULL, NULL); pcmk_create_html_node(list_node, "span", NULL, cl, s); g_free(s); } return pcmk_rc_ok; } int pe__common_output_text(pcmk__output_t *out, pe_resource_t * rsc, const char *name, pe_node_t *node, long options) { const char *target_role = NULL; CRM_ASSERT(rsc->variant == pe_native); if (rsc->meta) { const char *is_internal = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_INTERNAL_RSC); if (crm_is_true(is_internal) && !pcmk_is_set(options, pe_print_implicit)) { crm_trace("skipping print of internal resource %s", rsc->id); return pcmk_rc_no_output; } target_role = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET_ROLE); } { gchar *s = pcmk__native_output_string(rsc, name, node, options, target_role, true); out->list_item(out, NULL, "%s", s); g_free(s); } return pcmk_rc_ok; } void common_print(pe_resource_t * rsc, const char *pre_text, const char *name, pe_node_t *node, long options, void *print_data) { const char *target_role = NULL; CRM_ASSERT(rsc->variant == pe_native); if (rsc->meta) { const char *is_internal = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_INTERNAL_RSC); if (crm_is_true(is_internal) && !pcmk_is_set(options, pe_print_implicit)) { crm_trace("skipping print of internal resource %s", rsc->id); return; } target_role = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET_ROLE); } if (options & pe_print_xml) { native_print_xml(rsc, pre_text, options, print_data); return; } if ((pre_text == NULL) && (options & pe_print_printf)) { pre_text = " "; } if (options & pe_print_html) { if (!pcmk_is_set(rsc->flags, pe_rsc_managed)) { status_print(""); } else if (pcmk_is_set(rsc->flags, pe_rsc_failed)) { status_print(""); } else if (rsc->running_on == NULL) { status_print(""); } else if (pcmk__list_of_multiple(rsc->running_on)) { status_print(""); } else if (pcmk_is_set(rsc->flags, pe_rsc_failure_ignored)) { status_print(""); } else { status_print(""); } } { gchar *resource_s = pcmk__native_output_string(rsc, name, node, options, target_role, false); status_print("%s%s", (pre_text? pre_text : ""), resource_s); g_free(resource_s); } #if CURSES_ENABLED if (pcmk_is_set(options, pe_print_ncurses) && !pcmk_is_set(options, pe_print_rsconly) && !pcmk__list_of_multiple(rsc->running_on)) { /* coverity[negative_returns] False positive */ move(-1, 0); } #endif if (pcmk_is_set(options, pe_print_html)) { status_print(" "); } if (!pcmk_is_set(options, pe_print_rsconly) && pcmk__list_of_multiple(rsc->running_on)) { GListPtr gIter = rsc->running_on; int counter = 0; if (options & pe_print_html) { status_print("
    \n"); } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print("["); } for (; gIter != NULL; gIter = gIter->next) { pe_node_t *n = (pe_node_t *) gIter->data; counter++; if (options & pe_print_html) { status_print("
  • \n%s", n->details->uname); } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print(" %s", n->details->uname); } else if ((options & pe_print_log)) { status_print("\t%d : %s", counter, n->details->uname); } else { status_print("%s", n->details->uname); } if (options & pe_print_html) { status_print("
  • \n"); } } if (options & pe_print_html) { status_print("
\n"); } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print(" ]"); } } if (options & pe_print_html) { status_print("
\n"); } else if (options & pe_print_suppres_nl) { /* nothing */ } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print("\n"); } } void native_print(pe_resource_t * rsc, const char *pre_text, long options, void *print_data) { pe_node_t *node = NULL; CRM_ASSERT(rsc->variant == pe_native); if (options & pe_print_xml) { native_print_xml(rsc, pre_text, options, print_data); return; } node = pe__current_node(rsc); if (node == NULL) { // This is set only if a non-probe action is pending on this node node = rsc->pending_node; } common_print(rsc, pre_text, rsc_printable_id(rsc), node, options, print_data); } PCMK__OUTPUT_ARGS("primitive", "unsigned int", "pe_resource_t *", "GList *", "GList *") int pe__resource_xml(pcmk__output_t *out, va_list args) { unsigned int options = va_arg(args, unsigned int); pe_resource_t *rsc = va_arg(args, pe_resource_t *); GList *only_node G_GNUC_UNUSED = va_arg(args, GList *); GList *only_rsc = va_arg(args, GList *); const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER); const char *rsc_state = native_displayable_state(rsc, options); long is_print_pending = options & pe_print_pending; char ra_name[LINE_MAX]; char *nodes_running_on = NULL; char *priority = NULL; int rc = pcmk_rc_no_output; const char *target_role = NULL; if (rsc->meta != NULL) { target_role = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET_ROLE); } CRM_ASSERT(rsc->variant == pe_native); if (rsc->fns->is_filtered(rsc, only_rsc, TRUE)) { return pcmk_rc_no_output; } /* resource information. */ snprintf(ra_name, LINE_MAX, "%s%s%s:%s", class, ((prov == NULL)? "" : PROVIDER_SEP), ((prov == NULL)? "" : prov), crm_element_value(rsc->xml, XML_ATTR_TYPE)); nodes_running_on = crm_itoa(g_list_length(rsc->running_on)); priority = crm_ftoa(rsc->priority); rc = pe__name_and_nvpairs_xml(out, true, "resource", 12, "id", rsc_printable_id(rsc), "resource_agent", ra_name, "role", rsc_state, "target_role", target_role, "active", pcmk__btoa(rsc->fns->active(rsc, TRUE)), "orphaned", pe__rsc_bool_str(rsc, pe_rsc_orphan), "blocked", pe__rsc_bool_str(rsc, pe_rsc_block), "managed", pe__rsc_bool_str(rsc, pe_rsc_managed), "failed", pe__rsc_bool_str(rsc, pe_rsc_failed), "failure_ignored", pe__rsc_bool_str(rsc, pe_rsc_failure_ignored), "nodes_running_on", nodes_running_on, "pending", (is_print_pending? native_pending_task(rsc) : NULL)); free(priority); free(nodes_running_on); CRM_ASSERT(rc == pcmk_rc_ok); if (rsc->running_on != NULL) { GList *gIter = rsc->running_on; for (; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; rc = pe__name_and_nvpairs_xml(out, false, "node", 3, "name", node->details->uname, "id", node->details->id, "cached", pcmk__btoa(node->details->online)); CRM_ASSERT(rc == pcmk_rc_ok); } } pcmk__output_xml_pop_parent(out); return rc; } PCMK__OUTPUT_ARGS("primitive", "unsigned int", "pe_resource_t *", "GList *", "GList *") int pe__resource_html(pcmk__output_t *out, va_list args) { unsigned int options = va_arg(args, unsigned int); pe_resource_t *rsc = va_arg(args, pe_resource_t *); GList *only_node G_GNUC_UNUSED = va_arg(args, GList *); GList *only_rsc = va_arg(args, GList *); pe_node_t *node = pe__current_node(rsc); if (rsc->fns->is_filtered(rsc, only_rsc, TRUE)) { return pcmk_rc_no_output; } CRM_ASSERT(rsc->variant == pe_native); if (node == NULL) { // This is set only if a non-probe action is pending on this node node = rsc->pending_node; } return pe__common_output_html(out, rsc, rsc_printable_id(rsc), node, options); } PCMK__OUTPUT_ARGS("primitive", "unsigned int", "pe_resource_t *", "GList *", "GList *") int pe__resource_text(pcmk__output_t *out, va_list args) { unsigned int options = va_arg(args, unsigned int); pe_resource_t *rsc = va_arg(args, pe_resource_t *); GList *only_node G_GNUC_UNUSED = va_arg(args, GList *); GList *only_rsc = va_arg(args, GList *); pe_node_t *node = pe__current_node(rsc); CRM_ASSERT(rsc->variant == pe_native); if (rsc->fns->is_filtered(rsc, only_rsc, TRUE)) { return pcmk_rc_no_output; } if (node == NULL) { // This is set only if a non-probe action is pending on this node node = rsc->pending_node; } return pe__common_output_text(out, rsc, rsc_printable_id(rsc), node, options); } void native_free(pe_resource_t * rsc) { pe_rsc_trace(rsc, "Freeing resource action list (not the data)"); common_free(rsc); } enum rsc_role_e native_resource_state(const pe_resource_t * rsc, gboolean current) { enum rsc_role_e role = rsc->next_role; if (current) { role = rsc->role; } pe_rsc_trace(rsc, "%s state: %s", rsc->id, role2text(role)); return role; } /*! * \internal * \brief List nodes where a resource (or any of its children) is * * \param[in] rsc Resource to check * \param[out] list List to add result to - * \param[in] current 0 = where known, 1 = running, 2 = running or pending + * \param[in] current 0 = where allocated, 1 = where running, + * 2 = where running or pending * - * \return If list contains only one node, that node + * \return If list contains only one node, that node, or NULL otherwise */ pe_node_t * native_location(const pe_resource_t *rsc, GList **list, int current) { pe_node_t *one = NULL; GListPtr result = NULL; if (rsc->children) { GListPtr gIter = rsc->children; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *child = (pe_resource_t *) gIter->data; child->fns->location(child, &result, current); } } else if (current) { if (rsc->running_on) { result = g_list_copy(rsc->running_on); } if ((current == 2) && rsc->pending_node && !pe_find_node_id(result, rsc->pending_node->details->id)) { result = g_list_append(result, rsc->pending_node); } } else if (current == FALSE && rsc->allocated_to) { result = g_list_append(NULL, rsc->allocated_to); } if (result && (result->next == NULL)) { one = result->data; } if (list) { GListPtr gIter = result; for (; gIter != NULL; gIter = gIter->next) { pe_node_t *node = (pe_node_t *) gIter->data; if (*list == NULL || pe_find_node_id(*list, node->details->id) == NULL) { *list = g_list_append(*list, node); } } } g_list_free(result); return one; } static void get_rscs_brief(GListPtr rsc_list, GHashTable * rsc_table, GHashTable * active_table) { GListPtr gIter = rsc_list; for (; gIter != NULL; gIter = gIter->next) { pe_resource_t *rsc = (pe_resource_t *) gIter->data; const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); const char *kind = crm_element_value(rsc->xml, XML_ATTR_TYPE); int offset = 0; char buffer[LINE_MAX]; int *rsc_counter = NULL; int *active_counter = NULL; if (rsc->variant != pe_native) { continue; } offset += snprintf(buffer + offset, LINE_MAX - offset, "%s", class); if (pcmk_is_set(pcmk_get_ra_caps(class), pcmk_ra_cap_provider)) { const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER); if (prov != NULL) { offset += snprintf(buffer + offset, LINE_MAX - offset, PROVIDER_SEP "%s", prov); } } offset += snprintf(buffer + offset, LINE_MAX - offset, ":%s", kind); CRM_LOG_ASSERT(offset > 0); if (rsc_table) { rsc_counter = g_hash_table_lookup(rsc_table, buffer); if (rsc_counter == NULL) { rsc_counter = calloc(1, sizeof(int)); *rsc_counter = 0; g_hash_table_insert(rsc_table, strdup(buffer), rsc_counter); } (*rsc_counter)++; } if (active_table) { GListPtr gIter2 = rsc->running_on; for (; gIter2 != NULL; gIter2 = gIter2->next) { pe_node_t *node = (pe_node_t *) gIter2->data; GHashTable *node_table = NULL; if (node->details->unclean == FALSE && node->details->online == FALSE) { continue; } node_table = g_hash_table_lookup(active_table, node->details->uname); if (node_table == NULL) { node_table = crm_str_table_new(); g_hash_table_insert(active_table, strdup(node->details->uname), node_table); } active_counter = g_hash_table_lookup(node_table, buffer); if (active_counter == NULL) { active_counter = calloc(1, sizeof(int)); *active_counter = 0; g_hash_table_insert(node_table, strdup(buffer), active_counter); } (*active_counter)++; } } } } static void destroy_node_table(gpointer data) { GHashTable *node_table = data; if (node_table) { g_hash_table_destroy(node_table); } } void print_rscs_brief(GListPtr rsc_list, const char *pre_text, long options, void *print_data, gboolean print_all) { GHashTable *rsc_table = crm_str_table_new(); GHashTable *active_table = g_hash_table_new_full(crm_str_hash, g_str_equal, free, destroy_node_table); GHashTableIter hash_iter; char *type = NULL; int *rsc_counter = NULL; get_rscs_brief(rsc_list, rsc_table, active_table); g_hash_table_iter_init(&hash_iter, rsc_table); while (g_hash_table_iter_next(&hash_iter, (gpointer *)&type, (gpointer *)&rsc_counter)) { GHashTableIter hash_iter2; char *node_name = NULL; GHashTable *node_table = NULL; int active_counter_all = 0; g_hash_table_iter_init(&hash_iter2, active_table); while (g_hash_table_iter_next(&hash_iter2, (gpointer *)&node_name, (gpointer *)&node_table)) { int *active_counter = g_hash_table_lookup(node_table, type); if (active_counter == NULL || *active_counter == 0) { continue; } else { active_counter_all += *active_counter; } if (options & pe_print_rsconly) { node_name = NULL; } if (options & pe_print_html) { status_print("
  • \n"); } if (print_all) { status_print("%s%d/%d\t(%s):\tActive %s\n", pre_text ? pre_text : "", active_counter ? *active_counter : 0, rsc_counter ? *rsc_counter : 0, type, active_counter && (*active_counter > 0) && node_name ? node_name : ""); } else { status_print("%s%d\t(%s):\tActive %s\n", pre_text ? pre_text : "", active_counter ? *active_counter : 0, type, active_counter && (*active_counter > 0) && node_name ? node_name : ""); } if (options & pe_print_html) { status_print("
  • \n"); } } if (print_all && active_counter_all == 0) { if (options & pe_print_html) { status_print("
  • \n"); } status_print("%s%d/%d\t(%s):\tActive\n", pre_text ? pre_text : "", active_counter_all, rsc_counter ? *rsc_counter : 0, type); if (options & pe_print_html) { status_print("
  • \n"); } } } if (rsc_table) { g_hash_table_destroy(rsc_table); rsc_table = NULL; } if (active_table) { g_hash_table_destroy(active_table); active_table = NULL; } } int pe__rscs_brief_output(pcmk__output_t *out, GListPtr rsc_list, long options, gboolean print_all) { GHashTable *rsc_table = crm_str_table_new(); GHashTable *active_table = g_hash_table_new_full(crm_str_hash, g_str_equal, free, destroy_node_table); GListPtr sorted_rscs; int rc = pcmk_rc_no_output; get_rscs_brief(rsc_list, rsc_table, active_table); /* Make a list of the rsc_table keys so that it can be sorted. This is to make sure * output order stays consistent between systems. */ sorted_rscs = g_hash_table_get_keys(rsc_table); sorted_rscs = g_list_sort(sorted_rscs, (GCompareFunc) strcmp); for (GListPtr gIter = sorted_rscs; gIter; gIter = gIter->next) { char *type = (char *) gIter->data; int *rsc_counter = g_hash_table_lookup(rsc_table, type); GHashTableIter hash_iter2; char *node_name = NULL; GHashTable *node_table = NULL; int active_counter_all = 0; g_hash_table_iter_init(&hash_iter2, active_table); while (g_hash_table_iter_next(&hash_iter2, (gpointer *)&node_name, (gpointer *)&node_table)) { int *active_counter = g_hash_table_lookup(node_table, type); if (active_counter == NULL || *active_counter == 0) { continue; } else { active_counter_all += *active_counter; } if (options & pe_print_rsconly) { node_name = NULL; } if (print_all) { out->list_item(out, NULL, "%d/%d\t(%s):\tActive %s", *active_counter, rsc_counter ? *rsc_counter : 0, type, (*active_counter > 0) && node_name ? node_name : ""); } else { out->list_item(out, NULL, "%d\t(%s):\tActive %s", *active_counter, type, (*active_counter > 0) && node_name ? node_name : ""); } rc = pcmk_rc_ok; } if (print_all && active_counter_all == 0) { out->list_item(out, NULL, "%d/%d\t(%s):\tActive", active_counter_all, rsc_counter ? *rsc_counter : 0, type); rc = pcmk_rc_ok; } } if (rsc_table) { g_hash_table_destroy(rsc_table); rsc_table = NULL; } if (active_table) { g_hash_table_destroy(active_table); active_table = NULL; } if (sorted_rscs) { g_list_free(sorted_rscs); } return rc; } gboolean pe__native_is_filtered(pe_resource_t *rsc, GListPtr only_rsc, gboolean check_parent) { if (pcmk__str_in_list(only_rsc, rsc_printable_id(rsc)) || pcmk__str_in_list(only_rsc, rsc->id)) { return FALSE; } else if (check_parent) { pe_resource_t *up = uber_parent(rsc); if (pe_rsc_is_bundled(rsc)) { return up->parent->fns->is_filtered(up->parent, only_rsc, FALSE); } else { return up->fns->is_filtered(up, only_rsc, FALSE); } } return TRUE; } diff --git a/lib/services/services.c b/lib/services/services.c index 89b2ec0372..b8240a2dc5 100644 --- a/lib/services/services.c +++ b/lib/services/services.c @@ -1,1108 +1,1110 @@ /* * Copyright 2010-2020 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU Lesser General Public License * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. */ #include #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif #include #include #include #include #include #include #include #include #include #include #include #include "services_private.h" #include "services_lsb.h" #if SUPPORT_UPSTART # include #endif #if SUPPORT_SYSTEMD # include #endif #if SUPPORT_NAGIOS # include #endif /* TODO: Develop a rollover strategy */ static int operations = 0; static GHashTable *recurring_actions = NULL; /* ops waiting to run async because of conflicting active * pending ops */ static GList *blocked_ops = NULL; /* ops currently active (in-flight) */ static GList *inflight_ops = NULL; static void handle_blocked_ops(void); /*! * \brief Find first service class that can provide a specified agent * * \param[in] agent Name of agent to search for * * \return Service class if found, NULL otherwise * * \note The priority is LSB, then systemd, then upstart. It would be preferable * to put systemd first, but LSB merely requires a file existence check, * while systemd requires contacting D-Bus. */ const char * resources_find_service_class(const char *agent) { if (services__lsb_agent_exists(agent)) { return PCMK_RESOURCE_CLASS_LSB; } #if SUPPORT_SYSTEMD if (systemd_unit_exists(agent)) { return PCMK_RESOURCE_CLASS_SYSTEMD; } #endif #if SUPPORT_UPSTART if (upstart_job_exists(agent)) { return PCMK_RESOURCE_CLASS_UPSTART; } #endif return NULL; } static inline void init_recurring_actions(void) { if (recurring_actions == NULL) { recurring_actions = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); } } /*! * \internal * \brief Check whether op is in-flight systemd or upstart op * * \param[in] op Operation to check * * \return TRUE if op is in-flight systemd or upstart op */ static inline gboolean inflight_systemd_or_upstart(svc_action_t *op) { return pcmk__strcase_any_of(op->standard, PCMK_RESOURCE_CLASS_SYSTEMD, PCMK_RESOURCE_CLASS_UPSTART, NULL) && g_list_find(inflight_ops, op) != NULL; } /*! * \internal * \brief Expand "service" alias to an actual resource class * * \param[in] rsc Resource name (for logging only) * \param[in] standard Resource class as configured * \param[in] agent Agent name to look for * * \return Newly allocated string with actual resource class * * \note The caller is responsible for calling free() on the result. */ static char * expand_resource_class(const char *rsc, const char *standard, const char *agent) { char *expanded_class = NULL; if (strcasecmp(standard, PCMK_RESOURCE_CLASS_SERVICE) == 0) { const char *found_class = resources_find_service_class(agent); if (found_class) { crm_debug("Found %s agent %s for %s", found_class, agent, rsc); expanded_class = strdup(found_class); } else { crm_info("Assuming resource class lsb for agent %s for %s", agent, rsc); expanded_class = strdup(PCMK_RESOURCE_CLASS_LSB); } } else { expanded_class = strdup(standard); } CRM_ASSERT(expanded_class); return expanded_class; } +#if SUPPORT_NAGIOS /*! * \brief Duplicate a file path, inserting a prefix if not absolute * * \param[in] filename File path to duplicate * \param[in] dirname If filename is not absolute, prefix to add * * \return Newly allocated memory with full path */ static char * dup_file_path(const char *filename, const char *dirname) { return (*filename == '/')? strdup(filename) : crm_strdup_printf("%s/%s", dirname, filename); } +#endif svc_action_t * resources_action_create(const char *name, const char *standard, const char *provider, const char *agent, const char *action, guint interval_ms, int timeout, GHashTable *params, enum svc_action_flags flags) { svc_action_t *op = NULL; uint32_t ra_caps = 0; /* * Do some up front sanity checks before we go off and * build the svc_action_t instance. */ if (pcmk__str_empty(name)) { crm_err("Cannot create operation without resource name"); goto return_error; } if (pcmk__str_empty(standard)) { crm_err("Cannot create operation for %s without resource class", name); goto return_error; } ra_caps = pcmk_get_ra_caps(standard); if (pcmk_is_set(ra_caps, pcmk_ra_cap_provider) && pcmk__str_empty(provider)) { crm_err("Cannot create operation for %s without provider", name); goto return_error; } if (pcmk__str_empty(agent)) { crm_err("Cannot create operation for %s without agent name", name); goto return_error; } if (pcmk__str_empty(action)) { crm_err("Cannot create operation for %s without operation name", name); goto return_error; } /* * Sanity checks passed, proceed! */ op = calloc(1, sizeof(svc_action_t)); op->opaque = calloc(1, sizeof(svc_action_private_t)); op->rsc = strdup(name); op->interval_ms = interval_ms; op->timeout = timeout; op->standard = expand_resource_class(name, standard, agent); op->agent = strdup(agent); op->sequence = ++operations; op->flags = flags; op->id = pcmk__op_key(name, action, interval_ms); if (pcmk_is_set(ra_caps, pcmk_ra_cap_status) && pcmk__str_eq(action, "monitor", pcmk__str_casei)) { op->action = strdup("status"); } else { op->action = strdup(action); } if (pcmk_is_set(ra_caps, pcmk_ra_cap_provider)) { op->provider = strdup(provider); } if (pcmk_is_set(ra_caps, pcmk_ra_cap_params)) { op->params = params; params = NULL; // so we don't free them in this function } if (strcasecmp(op->standard, PCMK_RESOURCE_CLASS_OCF) == 0) { op->opaque->exec = crm_strdup_printf("%s/resource.d/%s/%s", OCF_ROOT_DIR, provider, agent); op->opaque->args[0] = strdup(op->opaque->exec); op->opaque->args[1] = strdup(op->action); } else if (strcasecmp(op->standard, PCMK_RESOURCE_CLASS_LSB) == 0) { op->opaque->exec = services__lsb_agent_path(op->agent); op->opaque->args[0] = strdup(op->opaque->exec); op->opaque->args[1] = strdup(op->action); #if SUPPORT_SYSTEMD } else if (strcasecmp(op->standard, PCMK_RESOURCE_CLASS_SYSTEMD) == 0) { op->opaque->exec = strdup("systemd-dbus"); #endif #if SUPPORT_UPSTART } else if (strcasecmp(op->standard, PCMK_RESOURCE_CLASS_UPSTART) == 0) { op->opaque->exec = strdup("upstart-dbus"); #endif #if SUPPORT_NAGIOS } else if (strcasecmp(op->standard, PCMK_RESOURCE_CLASS_NAGIOS) == 0) { op->opaque->exec = dup_file_path(op->agent, NAGIOS_PLUGIN_DIR); op->opaque->args[0] = strdup(op->opaque->exec); if (pcmk__str_eq(op->action, "monitor", pcmk__str_casei) && (op->interval_ms == 0)) { /* Invoke --version for a nagios probe */ op->opaque->args[1] = strdup("--version"); } else if (op->params) { GHashTableIter iter; char *key = NULL; char *value = NULL; int index = 1; static int args_size = sizeof(op->opaque->args) / sizeof(char *); g_hash_table_iter_init(&iter, op->params); while (g_hash_table_iter_next(&iter, (gpointer *) & key, (gpointer *) & value) && index <= args_size - 3) { if (pcmk__str_eq(key, XML_ATTR_CRM_VERSION, pcmk__str_casei) || strstr(key, CRM_META "_")) { continue; } op->opaque->args[index++] = crm_strdup_printf("--%s", key); op->opaque->args[index++] = strdup(value); } } // Nagios actions don't need to keep the parameters if (op->params != NULL) { g_hash_table_destroy(op->params); op->params = NULL; } #endif } else { crm_err("Unknown resource standard: %s", op->standard); goto return_error; } if(params) { g_hash_table_destroy(params); } return op; return_error: if(params) { g_hash_table_destroy(params); } services_action_free(op); return NULL; } svc_action_t * services_action_create_generic(const char *exec, const char *args[]) { svc_action_t *op; unsigned int cur_arg; op = calloc(1, sizeof(*op)); op->opaque = calloc(1, sizeof(svc_action_private_t)); op->opaque->exec = strdup(exec); op->opaque->args[0] = strdup(exec); for (cur_arg = 1; args && args[cur_arg - 1]; cur_arg++) { op->opaque->args[cur_arg] = strdup(args[cur_arg - 1]); if (cur_arg == DIMOF(op->opaque->args) - 1) { crm_err("svc_action_t args list not long enough for '%s' execution request.", exec); break; } } return op; } /*! * \brief Create an alert agent action * * \param[in] id Alert ID * \param[in] exec Path to alert agent executable * \param[in] timeout Action timeout * \param[in] params Parameters to use with action * \param[in] sequence Action sequence number * \param[in] cb_data Data to pass to callback function * * \return New action on success, NULL on error * \note It is the caller's responsibility to free cb_data. * The caller should not free params explicitly. */ svc_action_t * services_alert_create(const char *id, const char *exec, int timeout, GHashTable *params, int sequence, void *cb_data) { svc_action_t *action = services_action_create_generic(exec, NULL); CRM_ASSERT(action); action->timeout = timeout; action->id = strdup(id); action->params = params; action->sequence = sequence; action->cb_data = cb_data; return action; } /*! * \brief Set the user and group that an action will execute as * * \param[in,out] action Action to modify * \param[in] user Name of user to execute action as * \param[in] group Name of group to execute action as * * \return pcmk_ok on success, -errno otherwise * * \note This will have no effect unless the process executing the action runs * as root, and the action is not a systemd or upstart action. * We could implement this for systemd by adding User= and Group= to * [Service] in the override file, but that seems more likely to cause * problems than be useful. */ int services_action_user(svc_action_t *op, const char *user) { CRM_CHECK((op != NULL) && (user != NULL), return -EINVAL); return crm_user_lookup(user, &(op->opaque->uid), &(op->opaque->gid)); } /*! * \brief Execute an alert agent action * * \param[in] action Action to execute * \param[in] cb Function to call when action completes * * \return TRUE if the library will free action, FALSE otherwise * * \note If this function returns FALSE, it is the caller's responsibility to * free the action with services_action_free(). */ gboolean services_alert_async(svc_action_t *action, void (*cb)(svc_action_t *op)) { action->synchronous = false; action->opaque->callback = cb; return services_os_action_execute(action); } #if SUPPORT_DBUS /*! * \internal * \brief Update operation's pending DBus call, unreferencing old one if needed * * \param[in,out] op Operation to modify * \param[in] pending Pending call to set */ void services_set_op_pending(svc_action_t *op, DBusPendingCall *pending) { if (op->opaque->pending && (op->opaque->pending != pending)) { if (pending) { crm_info("Lost pending %s DBus call (%p)", op->id, op->opaque->pending); } else { crm_trace("Done with pending %s DBus call (%p)", op->id, op->opaque->pending); } dbus_pending_call_unref(op->opaque->pending); } op->opaque->pending = pending; if (pending) { crm_trace("Updated pending %s DBus call (%p)", op->id, pending); } else { crm_trace("Cleared pending %s DBus call", op->id); } } #endif void services_action_cleanup(svc_action_t * op) { if ((op == NULL) || (op->opaque == NULL)) { return; } #if SUPPORT_DBUS if(op->opaque->timerid != 0) { crm_trace("Removing timer for call %s to %s", op->action, op->rsc); g_source_remove(op->opaque->timerid); op->opaque->timerid = 0; } if(op->opaque->pending) { if (dbus_pending_call_get_completed(op->opaque->pending)) { // This should never be the case crm_warn("Result of %s op %s was unhandled", op->standard, op->id); } else { crm_debug("Will ignore any result of canceled %s op %s", op->standard, op->id); } dbus_pending_call_cancel(op->opaque->pending); services_set_op_pending(op, NULL); } #endif if (op->opaque->stderr_gsource) { mainloop_del_fd(op->opaque->stderr_gsource); op->opaque->stderr_gsource = NULL; } if (op->opaque->stdout_gsource) { mainloop_del_fd(op->opaque->stdout_gsource); op->opaque->stdout_gsource = NULL; } } void services_action_free(svc_action_t * op) { unsigned int i; if (op == NULL) { return; } /* The operation should be removed from all tracking lists by this point. * If it's not, we have a bug somewhere, so bail. That may lead to a * memory leak, but it's better than a use-after-free segmentation fault. */ CRM_CHECK(g_list_find(inflight_ops, op) == NULL, return); CRM_CHECK(g_list_find(blocked_ops, op) == NULL, return); CRM_CHECK((recurring_actions == NULL) || (g_hash_table_lookup(recurring_actions, op->id) == NULL), return); services_action_cleanup(op); if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); op->opaque->repeat_timer = 0; } free(op->id); free(op->opaque->exec); for (i = 0; i < DIMOF(op->opaque->args); i++) { free(op->opaque->args[i]); } free(op->opaque); free(op->rsc); free(op->action); free(op->standard); free(op->agent); free(op->provider); free(op->stdout_data); free(op->stderr_data); if (op->params) { g_hash_table_destroy(op->params); op->params = NULL; } free(op); } gboolean cancel_recurring_action(svc_action_t * op) { crm_info("Cancelling %s operation %s", op->standard, op->id); if (recurring_actions) { g_hash_table_remove(recurring_actions, op->id); } if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); op->opaque->repeat_timer = 0; } return TRUE; } /*! * \brief Cancel a recurring action * * \param[in] name Name of resource that operation is for * \param[in] action Name of operation to cancel * \param[in] interval_ms Interval of operation to cancel * * \return TRUE if action was successfully cancelled, FALSE otherwise */ gboolean services_action_cancel(const char *name, const char *action, guint interval_ms) { gboolean cancelled = FALSE; char *id = pcmk__op_key(name, action, interval_ms); svc_action_t *op = NULL; /* We can only cancel a recurring action */ init_recurring_actions(); op = g_hash_table_lookup(recurring_actions, id); if (op == NULL) { goto done; } /* Tell operation_finalize() not to reschedule the operation */ op->cancel = TRUE; /* Stop tracking it as a recurring operation, and stop its repeat timer */ cancel_recurring_action(op); /* If the op has a PID, it's an in-flight child process, so kill it. * * Whether the kill succeeds or fails, the main loop will send the op to * operation_finished() (and thus operation_finalize()) when the process * goes away. */ if (op->pid != 0) { crm_info("Terminating in-flight op %s[%d] early because it was cancelled", id, op->pid); cancelled = mainloop_child_kill(op->pid); if (cancelled == FALSE) { crm_err("Termination of %s[%d] failed", id, op->pid); } goto done; } #if SUPPORT_DBUS // In-flight systemd and upstart ops don't have a pid if (inflight_systemd_or_upstart(op)) { inflight_ops = g_list_remove(inflight_ops, op); /* This will cause any result that comes in later to be discarded, so we * don't call the callback and free the operation twice. */ services_action_cleanup(op); } #endif // The rest of this is essentially equivalent to operation_finalize(), // except without calling handle_blocked_ops() // Report operation as cancelled op->status = PCMK_LRM_OP_CANCELLED; if (op->opaque->callback) { op->opaque->callback(op); } blocked_ops = g_list_remove(blocked_ops, op); services_action_free(op); cancelled = TRUE; // @TODO Initiate handle_blocked_ops() asynchronously done: free(id); return cancelled; } gboolean services_action_kick(const char *name, const char *action, guint interval_ms) { svc_action_t * op = NULL; char *id = pcmk__op_key(name, action, interval_ms); init_recurring_actions(); op = g_hash_table_lookup(recurring_actions, id); free(id); if (op == NULL) { return FALSE; } if (op->pid || inflight_systemd_or_upstart(op)) { return TRUE; } else { if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); op->opaque->repeat_timer = 0; } recurring_action_timer(op); return TRUE; } } /*! * \internal * \brief Add a new recurring operation, checking for duplicates * * \param[in] op Operation to add * * \return TRUE if duplicate found (and reschedule), FALSE otherwise */ static gboolean handle_duplicate_recurring(svc_action_t * op) { svc_action_t * dup = NULL; /* check for duplicates */ dup = g_hash_table_lookup(recurring_actions, op->id); if (dup && (dup != op)) { /* update user data */ if (op->opaque->callback) { dup->opaque->callback = op->opaque->callback; dup->cb_data = op->cb_data; op->cb_data = NULL; } /* immediately execute the next interval */ if (dup->pid != 0) { if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); op->opaque->repeat_timer = 0; } recurring_action_timer(dup); } /* free the duplicate */ services_action_free(op); return TRUE; } return FALSE; } inline static gboolean action_exec_helper(svc_action_t * op) { /* Whether a/synchronous must be decided (op->synchronous) beforehand. */ if (op->standard && (strcasecmp(op->standard, PCMK_RESOURCE_CLASS_UPSTART) == 0)) { #if SUPPORT_UPSTART return upstart_job_exec(op); #endif } else if (op->standard && strcasecmp(op->standard, PCMK_RESOURCE_CLASS_SYSTEMD) == 0) { #if SUPPORT_SYSTEMD return systemd_unit_exec(op); #endif } else { return services_os_action_execute(op); } /* The 'op' has probably been freed if the execution functions return TRUE for the asynchronous 'op'. */ /* Avoid using the 'op' in here. */ return FALSE; } void services_add_inflight_op(svc_action_t * op) { if (op == NULL) { return; } CRM_ASSERT(op->synchronous == FALSE); /* keep track of ops that are in-flight to avoid collisions in the same namespace */ if (op->rsc) { inflight_ops = g_list_append(inflight_ops, op); } } /*! * \internal * \brief Stop tracking an operation that completed * * \param[in] op Operation to stop tracking */ void services_untrack_op(svc_action_t *op) { /* Op is no longer in-flight or blocked */ inflight_ops = g_list_remove(inflight_ops, op); blocked_ops = g_list_remove(blocked_ops, op); /* Op is no longer blocking other ops, so check if any need to run */ handle_blocked_ops(); } gboolean services_action_async_fork_notify(svc_action_t * op, void (*action_callback) (svc_action_t *), void (*action_fork_callback) (svc_action_t *)) { op->synchronous = false; if (action_callback) { op->opaque->callback = action_callback; } if (action_fork_callback) { op->opaque->fork_callback = action_fork_callback; } if (op->interval_ms > 0) { init_recurring_actions(); if (handle_duplicate_recurring(op) == TRUE) { /* entry rescheduled, dup freed */ /* exit early */ return TRUE; } g_hash_table_replace(recurring_actions, op->id, op); } if (!pcmk_is_set(op->flags, SVC_ACTION_NON_BLOCKED) && op->rsc && is_op_blocked(op->rsc)) { blocked_ops = g_list_append(blocked_ops, op); return TRUE; } return action_exec_helper(op); } gboolean services_action_async(svc_action_t * op, void (*action_callback) (svc_action_t *)) { return services_action_async_fork_notify(op, action_callback, NULL); } static gboolean processing_blocked_ops = FALSE; gboolean is_op_blocked(const char *rsc) { GList *gIter = NULL; svc_action_t *op = NULL; for (gIter = inflight_ops; gIter != NULL; gIter = gIter->next) { op = gIter->data; if (pcmk__str_eq(op->rsc, rsc, pcmk__str_casei)) { return TRUE; } } return FALSE; } static void handle_blocked_ops(void) { GList *executed_ops = NULL; GList *gIter = NULL; svc_action_t *op = NULL; gboolean res = FALSE; if (processing_blocked_ops) { /* avoid nested calling of this function */ return; } processing_blocked_ops = TRUE; /* n^2 operation here, but blocked ops are incredibly rare. this list * will be empty 99% of the time. */ for (gIter = blocked_ops; gIter != NULL; gIter = gIter->next) { op = gIter->data; if (is_op_blocked(op->rsc)) { continue; } executed_ops = g_list_append(executed_ops, op); res = action_exec_helper(op); if (res == FALSE) { op->status = PCMK_LRM_OP_ERROR; /* this can cause this function to be called recursively * which is why we have processing_blocked_ops static variable */ operation_finalize(op); } } for (gIter = executed_ops; gIter != NULL; gIter = gIter->next) { op = gIter->data; blocked_ops = g_list_remove(blocked_ops, op); } g_list_free(executed_ops); processing_blocked_ops = FALSE; } static gboolean action_get_metadata(svc_action_t *op) { const char *class = op->standard; if (op->agent == NULL) { crm_err("meta-data requested without specifying agent"); return FALSE; } if (class == NULL) { crm_err("meta-data requested for agent %s without specifying class", op->agent); return FALSE; } if (!strcmp(class, PCMK_RESOURCE_CLASS_SERVICE)) { class = resources_find_service_class(op->agent); } if (class == NULL) { crm_err("meta-data requested for %s, but could not determine class", op->agent); return FALSE; } if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei)) { return (services__get_lsb_metadata(op->agent, &op->stdout_data) >= 0); } #if SUPPORT_NAGIOS if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_NAGIOS, pcmk__str_casei)) { return services__get_nagios_metadata(op->agent, &op->stdout_data) >= 0; } #endif return action_exec_helper(op); } gboolean services_action_sync(svc_action_t * op) { gboolean rc = TRUE; if (op == NULL) { crm_trace("No operation to execute"); return FALSE; } op->synchronous = true; if (pcmk__str_eq(op->action, "meta-data", pcmk__str_casei)) { /* Synchronous meta-data operations are handled specially. Since most * resource classes don't provide any meta-data, it has to be * synthesized from available information about the agent. * * services_action_async() doesn't treat meta-data actions specially, so * it will result in an error for classes that don't support the action. */ rc = action_get_metadata(op); } else { rc = action_exec_helper(op); } crm_trace(" > " PCMK__OP_FMT ": %s = %d", op->rsc, op->action, op->interval_ms, op->opaque->exec, op->rc); if (op->stdout_data) { crm_trace(" > stdout: %s", op->stdout_data); } if (op->stderr_data) { crm_trace(" > stderr: %s", op->stderr_data); } return rc; } GList * get_directory_list(const char *root, gboolean files, gboolean executable) { return services_os_get_directory_list(root, files, executable); } GList * resources_list_standards(void) { GList *standards = NULL; GList *agents = NULL; standards = g_list_append(standards, strdup(PCMK_RESOURCE_CLASS_OCF)); standards = g_list_append(standards, strdup(PCMK_RESOURCE_CLASS_LSB)); standards = g_list_append(standards, strdup(PCMK_RESOURCE_CLASS_SERVICE)); #if SUPPORT_SYSTEMD agents = systemd_unit_listall(); if (agents) { standards = g_list_append(standards, strdup(PCMK_RESOURCE_CLASS_SYSTEMD)); g_list_free_full(agents, free); } #endif #if SUPPORT_UPSTART agents = upstart_job_listall(); if (agents) { standards = g_list_append(standards, strdup(PCMK_RESOURCE_CLASS_UPSTART)); g_list_free_full(agents, free); } #endif #if SUPPORT_NAGIOS agents = services__list_nagios_agents(); if (agents) { standards = g_list_append(standards, strdup(PCMK_RESOURCE_CLASS_NAGIOS)); g_list_free_full(agents, free); } #endif return standards; } GList * resources_list_providers(const char *standard) { if (pcmk_is_set(pcmk_get_ra_caps(standard), pcmk_ra_cap_provider)) { return resources_os_list_ocf_providers(); } return NULL; } GList * resources_list_agents(const char *standard, const char *provider) { if ((standard == NULL) || (strcasecmp(standard, PCMK_RESOURCE_CLASS_SERVICE) == 0)) { GList *tmp1; GList *tmp2; GList *result = services__list_lsb_agents(); if (standard == NULL) { tmp1 = result; tmp2 = resources_os_list_ocf_agents(NULL); if (tmp2) { result = g_list_concat(tmp1, tmp2); } } #if SUPPORT_SYSTEMD tmp1 = result; tmp2 = systemd_unit_listall(); if (tmp2) { result = g_list_concat(tmp1, tmp2); } #endif #if SUPPORT_UPSTART tmp1 = result; tmp2 = upstart_job_listall(); if (tmp2) { result = g_list_concat(tmp1, tmp2); } #endif return result; } else if (strcasecmp(standard, PCMK_RESOURCE_CLASS_OCF) == 0) { return resources_os_list_ocf_agents(provider); } else if (strcasecmp(standard, PCMK_RESOURCE_CLASS_LSB) == 0) { return services__list_lsb_agents(); #if SUPPORT_SYSTEMD } else if (strcasecmp(standard, PCMK_RESOURCE_CLASS_SYSTEMD) == 0) { return systemd_unit_listall(); #endif #if SUPPORT_UPSTART } else if (strcasecmp(standard, PCMK_RESOURCE_CLASS_UPSTART) == 0) { return upstart_job_listall(); #endif #if SUPPORT_NAGIOS } else if (strcasecmp(standard, PCMK_RESOURCE_CLASS_NAGIOS) == 0) { return services__list_nagios_agents(); #endif } return NULL; } gboolean resources_agent_exists(const char *standard, const char *provider, const char *agent) { GList *standards = NULL; GList *providers = NULL; GListPtr iter = NULL; gboolean rc = FALSE; gboolean has_providers = FALSE; standards = resources_list_standards(); for (iter = standards; iter != NULL; iter = iter->next) { if (pcmk__str_eq(iter->data, standard, pcmk__str_none)) { rc = TRUE; break; } } if (rc == FALSE) { goto done; } rc = FALSE; has_providers = pcmk_is_set(pcmk_get_ra_caps(standard), pcmk_ra_cap_provider); if (has_providers == TRUE && provider != NULL) { providers = resources_list_providers(standard); for (iter = providers; iter != NULL; iter = iter->next) { if (pcmk__str_eq(iter->data, provider, pcmk__str_none)) { rc = TRUE; break; } } } else if (has_providers == FALSE && provider == NULL) { rc = TRUE; } if (rc == FALSE) { goto done; } if (pcmk__str_eq(standard, PCMK_RESOURCE_CLASS_SERVICE, pcmk__str_casei)) { if (services__lsb_agent_exists(agent)) { rc = TRUE; #if SUPPORT_SYSTEMD } else if (systemd_unit_exists(agent)) { rc = TRUE; #endif #if SUPPORT_UPSTART } else if (upstart_job_exists(agent)) { rc = TRUE; #endif } else { rc = FALSE; } } else if (pcmk__str_eq(standard, PCMK_RESOURCE_CLASS_OCF, pcmk__str_casei)) { rc = services__ocf_agent_exists(provider, agent); } else if (pcmk__str_eq(standard, PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei)) { rc = services__lsb_agent_exists(agent); #if SUPPORT_SYSTEMD } else if (pcmk__str_eq(standard, PCMK_RESOURCE_CLASS_SYSTEMD, pcmk__str_casei)) { rc = systemd_unit_exists(agent); #endif #if SUPPORT_UPSTART } else if (pcmk__str_eq(standard, PCMK_RESOURCE_CLASS_UPSTART, pcmk__str_casei)) { rc = upstart_job_exists(agent); #endif #if SUPPORT_NAGIOS } else if (pcmk__str_eq(standard, PCMK_RESOURCE_CLASS_NAGIOS, pcmk__str_casei)) { rc = services__nagios_agent_exists(agent); #endif } else { rc = FALSE; } done: g_list_free(standards); g_list_free(providers); return rc; }