summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2010-10-29 11:46:45 -0500
committerSol Jerome <sol.jerome@gmail.com>2010-11-02 20:35:19 -0500
commitd7a26f768612b2fb1754dd30ce5a748955230494 (patch)
tree6892c5721780e5b912b6260e519706b29c22204e
parent90d3b840f49f2e86697a2abd35299bf7b8e93ee9 (diff)
downloadbcfg2-d7a26f768612b2fb1754dd30ce5a748955230494.tar.gz
bcfg2-d7a26f768612b2fb1754dd30ce5a748955230494.tar.bz2
bcfg2-d7a26f768612b2fb1754dd30ce5a748955230494.zip
bcfg2: implement -Q option (bundle-quick mode)
Implement the -Q option for the bcfg2 client. This option only verifies and installs the entries in bundles specified with -b. Considerably improves runtime performance when package checksums are being checked. This option prevents the client from sending statistics to the server, and is incompatible with -r.
-rw-r--r--man/bcfg2.17
-rw-r--r--src/lib/Options.py2
-rwxr-xr-xsrc/sbin/bcfg217
3 files changed, 24 insertions, 2 deletions
diff --git a/man/bcfg2.1 b/man/bcfg2.1
index bf20649c3..938d41dfe 100644
--- a/man/bcfg2.1
+++ b/man/bcfg2.1
@@ -114,6 +114,13 @@ performed. This mode relaxes the constraints of correctness, and thus
should only be used in safe conditions.
.TP
+.BR "\-Q"
+Run bcfg2 in "bundle quick" mode, where only entries in a bundle are
+or installed. This runs much faster than -q, but doesn't provide
+statistics to the server at all. In order for this option to work, the
+-b option must also be provided. This option is incompatible with -r.
+
+.TP
.BR "\-r <mode>"
Cause bcfg2 to remove extra configuration elements it detects. Mode is
one of all, Services, or Packages. All removes all entries. Likewise,
diff --git a/src/lib/Options.py b/src/lib/Options.py
index b467a776d..1dcad6427 100644
--- a/src/lib/Options.py
+++ b/src/lib/Options.py
@@ -290,6 +290,8 @@ CLIENT_REMOVE = Option('force removal of additional configuration items',
default=False, cmd='-r', odesc="<entry type|all>")
CLIENT_BUNDLE = Option('only configure the given bundle(s)', default=[],
cmd='-b', odesc='<bundle:bundle>', cook=colon_split)
+CLIENT_BUNDLEQUICK = Option('only verify/configure the given bundle(s)', default=False,
+ cmd='-Q')
CLIENT_INDEP = Option('only configure the given bundle(s)', default=False,
cmd='-z')
CLIENT_KEVLAR = Option('run in kevlar (bulletproof) mode', default=False,
diff --git a/src/sbin/bcfg2 b/src/sbin/bcfg2
index 3407a1c53..10262e4a9 100755
--- a/src/sbin/bcfg2
+++ b/src/sbin/bcfg2
@@ -49,6 +49,7 @@ class Client:
'dryrun': Bcfg2.Options.CLIENT_DRYRUN,
'paranoid': Bcfg2.Options.CLIENT_PARANOID,
'bundle': Bcfg2.Options.CLIENT_BUNDLE,
+ 'bundle-quick': Bcfg2.Options.CLIENT_BUNDLEQUICK,
'indep': Bcfg2.Options.CLIENT_INDEP,
'file': Bcfg2.Options.CLIENT_FILE,
'interactive': Bcfg2.Options.INTERACTIVE,
@@ -62,7 +63,6 @@ class Client:
'password': Bcfg2.Options.SERVER_PASSWORD,
'retries': Bcfg2.Options.CLIENT_RETRIES,
'kevlar': Bcfg2.Options.CLIENT_KEVLAR,
- 'key': Bcfg2.Options.SERVER_KEY,
'decision-list': DECISION_LIST,
'encoding': Bcfg2.Options.ENCODING,
'omit-lock-check': Bcfg2.Options.OMIT_LOCK_CHECK,
@@ -93,6 +93,13 @@ class Client:
to_file=self.setup['filelog'])
self.logger = logging.getLogger('bcfg2')
self.logger.debug(self.setup)
+ if self.setup['bundle-quick']:
+ if self.setup['bundle'] == []:
+ self.logger.error("-Q option requires -b")
+ raise SystemExit(1)
+ elif self.setup['remove'] != False:
+ self.logger.error("-Q option incompatible with -r")
+ raise SystemExit(1)
if 'drivers' in self.setup and self.setup['drivers'] == 'help':
self.logger.info("The following drivers are available:")
self.logger.info(Bcfg2.Client.Tools.drivers)
@@ -251,6 +258,12 @@ class Client:
self.fatal_error("Server error: %s" % (self.config.text))
return(1)
+ if self.setup['bundle-quick']:
+ newconfig = Bcfg2.Client.XML.XML('<Configuration/>')
+ [newconfig.append(bundle) for bundle in self.config.getchildren() if \
+ bundle.tag == 'Bundle' and bundle.get('name') in self.setup['bundle']]
+ self.config = newconfig
+
self.tools = Bcfg2.Client.Frame.Frame(self.config,
self.setup,
times, self.setup['drivers'],
@@ -281,7 +294,7 @@ class Client:
except OSError:
self.logger.error("Failed to unlock lockfile %s" % lockfile.name)
- if not self.setup['file']:
+ if not self.setup['file'] and not self.setup['bundle-quick']:
# upload statistics
feedback = self.tools.GenerateStats()