From ebe7542db7217c2fac3d7111e80f94caedfb69e2 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 16 Jan 2013 13:28:06 -0500 Subject: added module-level OptionParser to avoid passing it as an argument or global all over --- src/lib/Bcfg2/Options.py | 68 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 9 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index c0a274e23..780619f3b 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1106,6 +1106,14 @@ CRYPT_OPTIONS = dict(encrypt=ENCRYPT, cfg=CRYPT_CFG, remove=CRYPT_REMOVE) +PATH_METADATA_OPTIONS = dict(owner=MDATA_OWNER, + group=MDATA_GROUP, + mode=MDATA_MODE, + secontext=MDATA_SECONTEXT, + important=MDATA_IMPORTANT, + paranoid=MDATA_PARANOID, + sensitive=MDATA_SENSITIVE) + DRIVER_OPTIONS = \ dict(apt_install_path=CLIENT_APT_TOOLS_INSTALL_PATH, apt_var_path=CLIENT_APT_TOOLS_VAR_PATH, @@ -1190,10 +1198,11 @@ REPORTING_COMMON_OPTIONS = dict(reporting_file_limit=REPORTING_FILE_LIMIT, class OptionParser(OptionSet): - """ - OptionParser bootstraps option parsing, - getting the value of the config file - """ + """ OptionParser bootstraps option parsing, getting the value of + the config file. This should only be instantiated by + :func:`get_option_parser`, below, not by individual plugins or + scripts. """ + def __init__(self, args, argv=None, quiet=False): if argv is None: argv = sys.argv[1:] @@ -1208,17 +1217,21 @@ class OptionParser(OptionSet): self.argv = [] self.do_getopt = True - def reparse(self): + def reparse(self, argv=None, do_getopt=None): """ parse the options again, taking any changes (e.g., to the config file) into account """ for key, opt in self.optinfo.items(): self[key] = opt - if "args" not in self.optinfo: + if "args" not in self.optinfo and "args" in self: del self['args'] - self.parse(self.argv, self.do_getopt) + if do_getopt is None: + do_getopt = self.do_getopt + if argv is None: + argv = self.argv + self.parse(argv, do_getopt) - def parse(self, argv, do_getopt=True): - self.argv = argv + def parse(self, argv=None, do_getopt=True): + self.argv = argv or sys.argv[1:] self.do_getopt = do_getopt OptionSet.parse(self, self.argv, do_getopt=self.do_getopt) @@ -1227,6 +1240,43 @@ class OptionParser(OptionSet): self[name] = opt self.optinfo[name] = opt + def add_options(self, options): + """ Add a set of options to the parser """ + self.update(options) + self.optinfo.update(options) + def update(self, optdict): dict.update(self, optdict) self.optinfo.update(optdict) + + +#: A module-level OptionParser object that all plugins, etc., can use. +#: This should not be used directly, but retrieved via +#: :func:`get_option_parser`. +_PARSER = None + + +def get_option_parser(args=None, argv=None, quiet=False): + """ Get an OptionParser object. If :attr:`_PARSER` already + exists, that will be used; if not, a new OptionParser object will + be created. + + If ``args`` or ``argv`` are given, then a new OptionParser object + will be instantiated regardless of whether one already exists. + + :param args: The argument set to parse. This is required on the + first invocation of :func:`get_option_parser`. + :type args: dict of :class:`Bcfg2.Options.Option` objects + :param argv: The command-line argument list. If this is not + provided, :attr:`sys.argv` will be used. + :type argv: list of strings + :param quiet: Be quiet when bootstrapping the argument parser. + :type quiet: bool + :returns: :class:`Bcfg2.Options.OptionParser` + """ + global _PARSER # pylint: disable=W0603 + if _PARSER is None or args is not None or argv is not None: + if args is None: + args = CLI_COMMON_OPTIONS + _PARSER = OptionParser(args, argv=argv, quiet=quiet) + return _PARSER -- cgit v1.2.3-1-g7c22 From 41cfeba3ec2f4287dc1294a2c421e64f7b1224f8 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 17 Jan 2013 10:00:20 -0500 Subject: Options: split loading a new OptionParser from fetching an existing parser --- src/lib/Bcfg2/Options.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index 780619f3b..4818c67f9 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1256,16 +1256,12 @@ class OptionParser(OptionSet): _PARSER = None -def get_option_parser(args=None, argv=None, quiet=False): - """ Get an OptionParser object. If :attr:`_PARSER` already - exists, that will be used; if not, a new OptionParser object will - be created. +def load_option_parser(args, argv=None, quiet=False): + """ Load an :class:`Bcfg2.Options.OptionParser` object, caching it + in :attr:`_PARSER` for later retrieval via + :func:`get_option_parser`. - If ``args`` or ``argv`` are given, then a new OptionParser object - will be instantiated regardless of whether one already exists. - - :param args: The argument set to parse. This is required on the - first invocation of :func:`get_option_parser`. + :param args: The argument set to parse. :type args: dict of :class:`Bcfg2.Options.Option` objects :param argv: The command-line argument list. If this is not provided, :attr:`sys.argv` will be used. @@ -1275,8 +1271,17 @@ def get_option_parser(args=None, argv=None, quiet=False): :returns: :class:`Bcfg2.Options.OptionParser` """ global _PARSER # pylint: disable=W0603 - if _PARSER is None or args is not None or argv is not None: - if args is None: - args = CLI_COMMON_OPTIONS - _PARSER = OptionParser(args, argv=argv, quiet=quiet) + _PARSER = OptionParser(args, argv=argv, quiet=quiet) + return _PARSER + + +def get_option_parser(): + """ Get an already-created :class:`Bcfg2.Options.OptionParser` object. If + :attr:`_PARSER` has not been populated, then a new OptionParser + will be created with basic arguments. + + :returns: :class:`Bcfg2.Options.OptionParser` + """ + if _PARSER is None: + return load_option_parser(CLI_COMMON_OPTIONS) return _PARSER -- cgit v1.2.3-1-g7c22 From c0b2afa6e86557d5d206a64bd886034f432eee8d Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 31 Oct 2012 12:46:21 -0400 Subject: removed deprecated tools: RPMng, YUM24, YUMng --- src/lib/Bcfg2/Options.py | 102 ++++++----------------------------------------- 1 file changed, 13 insertions(+), 89 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index 4818c67f9..1f5a8f689 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -587,33 +587,27 @@ SERVER_UMASK = \ DB_ENGINE = \ Option('Database engine', default='sqlite3', - cf=('database', 'engine'), - deprecated_cf=('statistics', 'database_engine')) + cf=('database', 'engine')) DB_NAME = \ Option('Database name', default=os.path.join(SERVER_REPOSITORY.default, "etc/bcfg2.sqlite"), - cf=('database', 'name'), - deprecated_cf=('statistics', 'database_name')) + cf=('database', 'name')) DB_USER = \ Option('Database username', default=None, - cf=('database', 'user'), - deprecated_cf=('statistics', 'database_user')) + cf=('database', 'user')) DB_PASSWORD = \ Option('Database password', default=None, - cf=('database', 'password'), - deprecated_cf=('statistics', 'database_password')) + cf=('database', 'password')) DB_HOST = \ Option('Database host', default='localhost', - cf=('database', 'host'), - deprecated_cf=('statistics', 'database_host')) + cf=('database', 'host')) DB_PORT = \ Option('Database port', default='', - cf=('database', 'port'), - deprecated_cf=('statistics', 'database_port')) + cf=('database', 'port')) # Django options WEB_CFILE = \ @@ -635,8 +629,7 @@ DJANGO_DEBUG = \ DJANGO_WEB_PREFIX = \ Option('Web prefix', default=None, - cf=('reporting', 'web_prefix'), - deprecated_cf=('statistics', 'web_prefix'),) + cf=('reporting', 'web_prefix')) # Reporting options REPORTING_FILE_LIMIT = \ @@ -869,125 +862,65 @@ CLIENT_RPM_INSTALLONLY = \ 'kernel-default', 'kernel-largesmp-devel', 'kernel-largesmp', 'kernel-xen', 'gpg-pubkey'], cf=('RPM', 'installonlypackages'), - deprecated_cf=('RPMng', 'installonlypackages'), cook=list_split) CLIENT_RPM_PKG_CHECKS = \ Option("Perform RPM package checks", default=True, cf=('RPM', 'pkg_checks'), - deprecated_cf=('RPMng', 'pkg_checks'), cook=get_bool) CLIENT_RPM_PKG_VERIFY = \ Option("Perform RPM package verify", default=True, cf=('RPM', 'pkg_verify'), - deprecated_cf=('RPMng', 'pkg_verify'), cook=get_bool) CLIENT_RPM_INSTALLED_ACTION = \ Option("RPM installed action", default="install", - cf=('RPM', 'installed_action'), - deprecated_cf=('RPMng', 'installed_action')) + cf=('RPM', 'installed_action')) CLIENT_RPM_ERASE_FLAGS = \ Option("RPM erase flags", default=["allmatches"], cf=('RPM', 'erase_flags'), - deprecated_cf=('RPMng', 'erase_flags'), cook=list_split) CLIENT_RPM_VERSION_FAIL_ACTION = \ Option("RPM version fail action", default="upgrade", - cf=('RPM', 'version_fail_action'), - deprecated_cf=('RPMng', 'version_fail_action')) + cf=('RPM', 'version_fail_action')) CLIENT_RPM_VERIFY_FAIL_ACTION = \ Option("RPM verify fail action", default="reinstall", - cf=('RPM', 'verify_fail_action'), - deprecated_cf=('RPMng', 'verify_fail_action')) + cf=('RPM', 'verify_fail_action')) CLIENT_RPM_VERIFY_FLAGS = \ Option("RPM verify flags", default=[], cf=('RPM', 'verify_flags'), - deprecated_cf=('RPMng', 'verify_flags'), cook=list_split) -CLIENT_YUM24_INSTALLONLY = \ - Option('YUM24 install-only packages', - default=['kernel', 'kernel-bigmem', 'kernel-enterprise', - 'kernel-smp', 'kernel-modules', 'kernel-debug', - 'kernel-unsupported', 'kernel-devel', 'kernel-source', - 'kernel-default', 'kernel-largesmp-devel', - 'kernel-largesmp', 'kernel-xen', 'gpg-pubkey'], - cf=('YUM24', 'installonlypackages'), - cook=list_split) -CLIENT_YUM24_PKG_CHECKS = \ - Option("Perform YUM24 package checks", - default=True, - cf=('YUM24', 'pkg_checks'), - cook=get_bool) -CLIENT_YUM24_PKG_VERIFY = \ - Option("Perform YUM24 package verify", - default=True, - cf=('YUM24', 'pkg_verify'), - cook=get_bool) -CLIENT_YUM24_INSTALLED_ACTION = \ - Option("YUM24 installed action", - default="install", - cf=('YUM24', 'installed_action')) -CLIENT_YUM24_ERASE_FLAGS = \ - Option("YUM24 erase flags", - default=["allmatches"], - cf=('YUM24', 'erase_flags'), - cook=list_split) -CLIENT_YUM24_VERSION_FAIL_ACTION = \ - Option("YUM24 version fail action", - cf=('YUM24', 'version_fail_action'), - default="upgrade") -CLIENT_YUM24_VERIFY_FAIL_ACTION = \ - Option("YUM24 verify fail action", - default="reinstall", - cf=('YUM24', 'verify_fail_action')) -CLIENT_YUM24_VERIFY_FLAGS = \ - Option("YUM24 verify flags", - default=[], - cf=('YUM24', 'verify_flags'), - cook=list_split) -CLIENT_YUM24_AUTODEP = \ - Option("YUM24 autodependency processing", - default=True, - cf=('YUM24', 'autodep'), - cook=get_bool) CLIENT_YUM_PKG_CHECKS = \ Option("Perform YUM package checks", default=True, cf=('YUM', 'pkg_checks'), - deprecated_cf=('YUMng', 'pkg_checks'), cook=get_bool) CLIENT_YUM_PKG_VERIFY = \ Option("Perform YUM package verify", default=True, cf=('YUM', 'pkg_verify'), - deprecated_cf=('YUMng', 'pkg_verify'), cook=get_bool) CLIENT_YUM_INSTALLED_ACTION = \ Option("YUM installed action", default="install", - cf=('YUM', 'installed_action'), - deprecated_cf=('YUMng', 'installed_action')) + cf=('YUM', 'installed_action')) CLIENT_YUM_VERSION_FAIL_ACTION = \ Option("YUM version fail action", default="upgrade", - cf=('YUM', 'version_fail_action'), - deprecated_cf=('YUMng', 'version_fail_action')) + cf=('YUM', 'version_fail_action')) CLIENT_YUM_VERIFY_FAIL_ACTION = \ Option("YUM verify fail action", default="reinstall", - cf=('YUM', 'verify_fail_action'), - deprecated_cf=('YUMng', 'verify_fail_action')) + cf=('YUM', 'verify_fail_action')) CLIENT_YUM_VERIFY_FLAGS = \ Option("YUM verify flags", default=[], cf=('YUM', 'verify_flags'), - deprecated_cf=('YUMng', 'verify_flags'), cook=list_split) # Logging options @@ -1127,15 +1060,6 @@ DRIVER_OPTIONS = \ rpm_version_fail_action=CLIENT_RPM_VERSION_FAIL_ACTION, rpm_verify_fail_action=CLIENT_RPM_VERIFY_FAIL_ACTION, rpm_verify_flags=CLIENT_RPM_VERIFY_FLAGS, - yum24_installonly=CLIENT_YUM24_INSTALLONLY, - yum24_pkg_checks=CLIENT_YUM24_PKG_CHECKS, - yum24_pkg_verify=CLIENT_YUM24_PKG_VERIFY, - yum24_installed_action=CLIENT_YUM24_INSTALLED_ACTION, - yum24_erase_flags=CLIENT_YUM24_ERASE_FLAGS, - yum24_version_fail_action=CLIENT_YUM24_VERSION_FAIL_ACTION, - yum24_verify_fail_action=CLIENT_YUM24_VERIFY_FAIL_ACTION, - yum24_verify_flags=CLIENT_YUM24_VERIFY_FLAGS, - yum24_autodep=CLIENT_YUM24_AUTODEP, yum_pkg_checks=CLIENT_YUM_PKG_CHECKS, yum_pkg_verify=CLIENT_YUM_PKG_VERIFY, yum_installed_action=CLIENT_YUM_INSTALLED_ACTION, -- cgit v1.2.3-1-g7c22 From 9be9cfec322518f764be9766b27d24132fc6a66f Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 16 Jan 2013 13:28:06 -0500 Subject: added module-level OptionParser to avoid passing it as an argument or global all over --- src/lib/Bcfg2/Options.py | 68 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 9 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index c0a274e23..780619f3b 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1106,6 +1106,14 @@ CRYPT_OPTIONS = dict(encrypt=ENCRYPT, cfg=CRYPT_CFG, remove=CRYPT_REMOVE) +PATH_METADATA_OPTIONS = dict(owner=MDATA_OWNER, + group=MDATA_GROUP, + mode=MDATA_MODE, + secontext=MDATA_SECONTEXT, + important=MDATA_IMPORTANT, + paranoid=MDATA_PARANOID, + sensitive=MDATA_SENSITIVE) + DRIVER_OPTIONS = \ dict(apt_install_path=CLIENT_APT_TOOLS_INSTALL_PATH, apt_var_path=CLIENT_APT_TOOLS_VAR_PATH, @@ -1190,10 +1198,11 @@ REPORTING_COMMON_OPTIONS = dict(reporting_file_limit=REPORTING_FILE_LIMIT, class OptionParser(OptionSet): - """ - OptionParser bootstraps option parsing, - getting the value of the config file - """ + """ OptionParser bootstraps option parsing, getting the value of + the config file. This should only be instantiated by + :func:`get_option_parser`, below, not by individual plugins or + scripts. """ + def __init__(self, args, argv=None, quiet=False): if argv is None: argv = sys.argv[1:] @@ -1208,17 +1217,21 @@ class OptionParser(OptionSet): self.argv = [] self.do_getopt = True - def reparse(self): + def reparse(self, argv=None, do_getopt=None): """ parse the options again, taking any changes (e.g., to the config file) into account """ for key, opt in self.optinfo.items(): self[key] = opt - if "args" not in self.optinfo: + if "args" not in self.optinfo and "args" in self: del self['args'] - self.parse(self.argv, self.do_getopt) + if do_getopt is None: + do_getopt = self.do_getopt + if argv is None: + argv = self.argv + self.parse(argv, do_getopt) - def parse(self, argv, do_getopt=True): - self.argv = argv + def parse(self, argv=None, do_getopt=True): + self.argv = argv or sys.argv[1:] self.do_getopt = do_getopt OptionSet.parse(self, self.argv, do_getopt=self.do_getopt) @@ -1227,6 +1240,43 @@ class OptionParser(OptionSet): self[name] = opt self.optinfo[name] = opt + def add_options(self, options): + """ Add a set of options to the parser """ + self.update(options) + self.optinfo.update(options) + def update(self, optdict): dict.update(self, optdict) self.optinfo.update(optdict) + + +#: A module-level OptionParser object that all plugins, etc., can use. +#: This should not be used directly, but retrieved via +#: :func:`get_option_parser`. +_PARSER = None + + +def get_option_parser(args=None, argv=None, quiet=False): + """ Get an OptionParser object. If :attr:`_PARSER` already + exists, that will be used; if not, a new OptionParser object will + be created. + + If ``args`` or ``argv`` are given, then a new OptionParser object + will be instantiated regardless of whether one already exists. + + :param args: The argument set to parse. This is required on the + first invocation of :func:`get_option_parser`. + :type args: dict of :class:`Bcfg2.Options.Option` objects + :param argv: The command-line argument list. If this is not + provided, :attr:`sys.argv` will be used. + :type argv: list of strings + :param quiet: Be quiet when bootstrapping the argument parser. + :type quiet: bool + :returns: :class:`Bcfg2.Options.OptionParser` + """ + global _PARSER # pylint: disable=W0603 + if _PARSER is None or args is not None or argv is not None: + if args is None: + args = CLI_COMMON_OPTIONS + _PARSER = OptionParser(args, argv=argv, quiet=quiet) + return _PARSER -- cgit v1.2.3-1-g7c22 From 4ea3569a0b396622a6c156588c4c8752a8dd7738 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 17 Jan 2013 10:00:20 -0500 Subject: Options: split loading a new OptionParser from fetching an existing parser --- src/lib/Bcfg2/Options.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index 780619f3b..4818c67f9 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1256,16 +1256,12 @@ class OptionParser(OptionSet): _PARSER = None -def get_option_parser(args=None, argv=None, quiet=False): - """ Get an OptionParser object. If :attr:`_PARSER` already - exists, that will be used; if not, a new OptionParser object will - be created. +def load_option_parser(args, argv=None, quiet=False): + """ Load an :class:`Bcfg2.Options.OptionParser` object, caching it + in :attr:`_PARSER` for later retrieval via + :func:`get_option_parser`. - If ``args`` or ``argv`` are given, then a new OptionParser object - will be instantiated regardless of whether one already exists. - - :param args: The argument set to parse. This is required on the - first invocation of :func:`get_option_parser`. + :param args: The argument set to parse. :type args: dict of :class:`Bcfg2.Options.Option` objects :param argv: The command-line argument list. If this is not provided, :attr:`sys.argv` will be used. @@ -1275,8 +1271,17 @@ def get_option_parser(args=None, argv=None, quiet=False): :returns: :class:`Bcfg2.Options.OptionParser` """ global _PARSER # pylint: disable=W0603 - if _PARSER is None or args is not None or argv is not None: - if args is None: - args = CLI_COMMON_OPTIONS - _PARSER = OptionParser(args, argv=argv, quiet=quiet) + _PARSER = OptionParser(args, argv=argv, quiet=quiet) + return _PARSER + + +def get_option_parser(): + """ Get an already-created :class:`Bcfg2.Options.OptionParser` object. If + :attr:`_PARSER` has not been populated, then a new OptionParser + will be created with basic arguments. + + :returns: :class:`Bcfg2.Options.OptionParser` + """ + if _PARSER is None: + return load_option_parser(CLI_COMMON_OPTIONS) return _PARSER -- cgit v1.2.3-1-g7c22 From 96628400ced3b6dfc1ef35692f5e5a3ca388749a Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 12 Feb 2013 07:50:01 -0500 Subject: fixed some option parsing bugs --- src/lib/Bcfg2/Options.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index decb726d0..6289e3eae 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1168,20 +1168,22 @@ class OptionParser(OptionSet): def reparse(self, argv=None, do_getopt=None): """ parse the options again, taking any changes (e.g., to the config file) into account """ + self.parse(argv=argv, do_getopt=do_getopt) + + def parse(self, argv=None, do_getopt=None): for key, opt in self.optinfo.items(): self[key] = opt if "args" not in self.optinfo and "args" in self: del self['args'] + self.argv = argv or sys.argv[1:] + if self.do_getopt is None: + if do_getopt: + self.do_getopt = do_getopt + else: + self.do_getopt = True if do_getopt is None: do_getopt = self.do_getopt - if argv is None: - argv = self.argv - self.parse(argv, do_getopt) - - def parse(self, argv=None, do_getopt=True): - self.argv = argv or sys.argv[1:] - self.do_getopt = do_getopt - OptionSet.parse(self, self.argv, do_getopt=self.do_getopt) + OptionSet.parse(self, self.argv, do_getopt=do_getopt) def add_option(self, name, opt): """ Add an option to the parser """ -- cgit v1.2.3-1-g7c22 From 893acc1735794e6df9d290c30d9911621bb2a927 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 7 Feb 2013 10:01:16 -0500 Subject: Metadata: allowed setting global default authentication type --- src/lib/Bcfg2/Options.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index 6289e3eae..fe9a480a4 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -582,6 +582,11 @@ SERVER_UMASK = \ default='0077', odesc='', cf=('server', 'umask')) +SERVER_AUTHENTICATION = \ + Option('Default client authentication method', + default='cert+password', + odesc='{cert|bootstrap|cert+password}', + cf=('communication', 'authentication')) # database options DB_ENGINE = \ @@ -1048,7 +1053,8 @@ SERVER_COMMON_OPTIONS = dict(repo=SERVER_REPOSITORY, protocol=SERVER_PROTOCOL, web_configfile=WEB_CFILE, backend=SERVER_BACKEND, - vcs_root=SERVER_VCS_ROOT) + vcs_root=SERVER_VCS_ROOT, + authentication=SERVER_AUTHENTICATION) CRYPT_OPTIONS = dict(encrypt=ENCRYPT, decrypt=DECRYPT, -- cgit v1.2.3-1-g7c22 From f91163abed4aa739f7f8b772eabb403f01b94a88 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 13 Feb 2013 16:08:08 -0500 Subject: extended usage of Executor class, added client-side timeout options --- src/lib/Bcfg2/Options.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index fe9a480a4..3f4e9a83c 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -334,6 +334,16 @@ def get_bool(val): raise ValueError("Not a boolean value", val) +def get_timeout(val): + """ convert the timeout value into a float or None """ + if val is None: + return val + timeout = float(val) # pass ValueError up the stack + if timeout <= 0: + return None + return timeout + + def get_size(value): """ Given a number of bytes in a human-readable format (e.g., '512m', '2g'), get the absolute number of bytes as an integer """ @@ -801,6 +811,16 @@ CLIENT_EXIT_ON_PROBE_FAILURE = \ long_arg=True, cf=('client', 'exit_on_probe_failure'), cook=get_bool) +CLIENT_PROBE_TIMEOUT = \ + Option("Timeout when running client probes", + default=None, + cf=('client', 'probe_timeout'), + cook=get_timeout) +CLIENT_COMMAND_TIMEOUT = \ + Option("Timeout when client runs other external commands (not probes)", + default=None, + cf=('client', 'command_timeout'), + cook=get_timeout) # bcfg2-test and bcfg2-lint options TEST_NOSEOPTS = \ @@ -1131,7 +1151,9 @@ CLIENT_COMMON_OPTIONS = \ serverCN=CLIENT_SCNS, timeout=CLIENT_TIMEOUT, decision_list=CLIENT_DECISION_LIST, - probe_exit=CLIENT_EXIT_ON_PROBE_FAILURE) + probe_exit=CLIENT_EXIT_ON_PROBE_FAILURE, + probe_timeout=CLIENT_PROBE_TIMEOUT, + command_timeout=CLIENT_COMMAND_TIMEOUT) CLIENT_COMMON_OPTIONS.update(DRIVER_OPTIONS) CLIENT_COMMON_OPTIONS.update(CLI_COMMON_OPTIONS) -- cgit v1.2.3-1-g7c22 From acb1dde9ba48b04d1ceb701ce849e96cef3d0070 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 21 Feb 2013 08:47:59 -0500 Subject: removed in-place modification of "states" dict in client tools --- src/lib/Bcfg2/Options.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/lib/Bcfg2/Options.py') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index 3f4e9a83c..74c488b45 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -9,8 +9,8 @@ import shlex import sys import grp import pwd -import Bcfg2.Client.Tools -from Bcfg2.Compat import ConfigParser +from Bcfg2.Client.Tools import __path__ as toolpath +from Bcfg2.Compat import ConfigParser, walk_packages from Bcfg2.version import __version__ @@ -723,7 +723,7 @@ CLIENT_PARANOID = \ cook=get_bool) CLIENT_DRIVERS = \ Option('Specify tool driver set', - default=Bcfg2.Client.Tools.default, + default=[m[1] for m in walk_packages(path=toolpath)], cmd='-D', odesc='', cf=('client', 'drivers'), -- cgit v1.2.3-1-g7c22