summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/Server/Admin/Bundle.py14
-rw-r--r--src/lib/Server/Admin/Examples.py71
-rw-r--r--src/lib/Server/Admin/Init.py2
-rw-r--r--src/lib/Server/Admin/Web.py79
-rw-r--r--src/lib/Server/Admin/__init__.py22
5 files changed, 178 insertions, 10 deletions
diff --git a/src/lib/Server/Admin/Bundle.py b/src/lib/Server/Admin/Bundle.py
index 41cd5727e..893fde489 100644
--- a/src/lib/Server/Admin/Bundle.py
+++ b/src/lib/Server/Admin/Bundle.py
@@ -46,7 +46,7 @@ class Bundle(Bcfg2.Server.Admin.MetadataCore):
# except MetadataConsistencyError:
# print "Error in deleting bundle."
# raise SystemExit(1)
- #Lists all available xml bundles
+ # Lists all available xml bundles
elif args[0] in ['list-xml', 'ls-xml']:
bundle_name = []
for bundle_path in xml_list:
@@ -54,7 +54,7 @@ class Bundle(Bcfg2.Server.Admin.MetadataCore):
bundle_name.append(rg.search(bundle_path).group(1))
for bundle in bundle_name:
print bundle.split('.')[0]
- #Lists all available genshi bundles
+ # Lists all available genshi bundles
elif args[0] in ['list-genshi', 'ls-gen']:
bundle_name = []
for bundle_path in genshi_list:
@@ -62,9 +62,11 @@ class Bundle(Bcfg2.Server.Admin.MetadataCore):
bundle_name.append(rg.search(bundle_path).group(1))
for bundle in bundle_name:
print bundle.split('.')[0]
- #Shows a list of all available bundles and prints bundle
- #details after the user choose one bundle.
- #FIXME: Add support for detailed output of genshi bundles
+ # Shows a list of all available bundles and prints bundle
+ # details after the user choose one bundle.
+ # FIXME: Add support for detailed output of genshi bundles
+ # FIXME: This functionality is almost identical with
+ # bcfg2-info bundles
elif args[0] in ['show']:
bundle_name = []
bundle_list = xml_list + genshi_list
@@ -84,7 +86,7 @@ class Bundle(Bcfg2.Server.Admin.MetadataCore):
else:
if '%s/Bundler/%s' % \
(repo, bundle_name[int(lineno)]) in genshi_list:
- print "Detailed output for *.genshi bundle is not supported."
+ print "Detailed output for *.genshi bundles is not supported."
else:
print 'Details for the "%s" bundle:' % \
(bundle_name[int(lineno)].split('.')[0])
diff --git a/src/lib/Server/Admin/Examples.py b/src/lib/Server/Admin/Examples.py
new file mode 100644
index 000000000..3335c5e10
--- /dev/null
+++ b/src/lib/Server/Admin/Examples.py
@@ -0,0 +1,71 @@
+import dulwich
+import time
+import tarfile
+from subprocess import Popen
+import Bcfg2.Server.Admin
+from Bcfg2.Server.Plugins.Metadata import MetadataConsistencyError
+
+class Examples(Bcfg2.Server.Admin.MetadataCore):
+ __shorthelp__ = "Pulls in the data from the Bcfg2 sample repository"
+ __longhelp__ = (__shorthelp__ + "\n\nbcfg2-admin examples pull\n"
+ "\n\nbcfg2-admin examples update\n"
+ "bcfg2-admin examples backup")
+ __usage__ = ("bcfg2-admin examples [options] [add|del|update|list] [attr=val]")
+
+ def __init__(self, configfile):
+ Bcfg2.Server.Admin.MetadataCore.__init__(self, configfile,
+ self.__usage__)
+
+ def __call__(self, args):
+ Bcfg2.Server.Admin.MetadataCore.__call__(self, args)
+
+
+ Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore)
+ Bcfg2.Server.Plugin.Version.__init__(self)
+ self.core = core
+ self.datastore = datastore
+
+ if len(args) == 0:
+ self.errExit("No argument specified.\n"
+ "Please see bcfg2-admin examples help for usage.")
+
+ if args[0] == 'pull':
+ try:
+ # FIXME: Repo URL is hardcoded for now
+ Popen(['git', 'clone', 'https://github.com/solj/bcfg2-repo.git', datastore])
+ except MetadataConsistencyError:
+ print "Error in pulling examples."
+ raise SystemExit(1)
+
+#fatal: destination path 'bcfg2-test' already exists and is not an empty directory.
+
+ elif args[0] == 'backup':
+ try:
+ self.metadata.add_group(args[1], attr_d)
+ except MetadataConsistencyError:
+ print "Error in adding group"
+ raise SystemExit(1)
+
+
+ elif args[0] == 'backup':
+ try:
+ self.metadata.add_group(args[1], attr_d)
+ except MetadataConsistencyError:
+ print "Error in adding group"
+ raise SystemExit(1)
+
+ else:
+ print "No command specified"
+ raise SystemExit(1)
+
+ def repobackup():
+ """Make a backup of the existing files in the Bcfg2 repo directory."""
+ if os.path.isdir(datastore):
+ print 'Backup in progress...'
+ target = time.strftime('%Y%m%d%H%M%S')
+
+
+ out = tarfile.open(filename, w.gz)
+ else:
+ logger.error("%s doesn't exist." % datastore)
+ #raise Bcfg2.Server.Plugin.PluginInitError
diff --git a/src/lib/Server/Admin/Init.py b/src/lib/Server/Admin/Init.py
index 384ba6929..c6d1f9e3d 100644
--- a/src/lib/Server/Admin/Init.py
+++ b/src/lib/Server/Admin/Init.py
@@ -66,7 +66,7 @@ clients = '''<Clients version="3.0">
# Mapping of operating system names to groups
os_list = [
- ('Redhat/Fedora/RHEL/RHAS/Centos', 'redhat'),
+ ('Red Hat/Fedora/RHEL/RHAS/Centos', 'redhat'),
('SUSE/SLES', 'suse'),
('Mandrake', 'mandrake'),
('Debian', 'debian'),
diff --git a/src/lib/Server/Admin/Web.py b/src/lib/Server/Admin/Web.py
new file mode 100644
index 000000000..5ad14f2b9
--- /dev/null
+++ b/src/lib/Server/Admin/Web.py
@@ -0,0 +1,79 @@
+import os
+import sys
+import BaseHTTPServer
+import SimpleHTTPServer
+import daemon
+import Bcfg2.Server.Admin
+import Bcfg2.Options
+
+# For debugging output only
+import logging
+logger = logging.getLogger('Bcfg2.Server.Admin.Web')
+
+class Web(Bcfg2.Server.Admin.Mode):
+ __shorthelp__ = "A simple webserver to display the content of the Bcfg2 repos."
+ __longhelp__ = (__shorthelp__ + "\n\nbcfg2-admin web start\n"
+ "\n\nbcfg2-admin web stop")
+ __usage__ = ("bcfg2-admin web [start|stop]")
+
+ def __init__(self, configfile):
+ Bcfg2.Server.Admin.Mode.__init__(self, configfile)
+
+ def __call__(self, args):
+ Bcfg2.Server.Admin.Mode.__call__(self, args)
+ opts = {'repo': Bcfg2.Options.SERVER_REPOSITORY}
+ setup = Bcfg2.Options.OptionParser(opts)
+ setup.parse(sys.argv[1:])
+ repo = setup['repo']
+
+ if len(args) == 0 or args[0] == '-h':
+ print(self.__usage__)
+ raise SystemExit(0)
+
+ if len(args) == 0:
+ self.errExit("No argument specified.\n"
+ "Please see bcfg2-admin web help for usage.")
+
+ if args[0] in ['start', 'up']:
+ # Change directory to the Bcfg2 repo
+ if not os.path.exists(repo):
+ #print "Path '%s' doesn't exisit" % repo
+ logger.error("%s doesn't exist" % repo)
+ else:
+ os.chdir(repo)
+ self.start_web()
+
+ elif args[0] in ['stop', 'down']:
+ self.stop_web()
+
+ else:
+ print "No command specified"
+ raise SystemExit(1)
+
+ # The web server part with hardcoded port number
+ def start_web(self, port=6788):
+ """Starts the webserver for directory listing of the Bcfg2 repo."""
+ try:
+ server_class = BaseHTTPServer.HTTPServer
+ handler_class = SimpleHTTPServer.SimpleHTTPRequestHandler
+ server_address = ('', port)
+ server = server_class(server_address, handler_class)
+ #server.serve_forever()
+ # Make the context manager for becoming a daemon process
+ daemon_context = daemon.DaemonContext()
+ daemon_context.files_preserve = [server.fileno()]
+
+ # Become a daemon process
+ with daemon_context:
+ server.serve_forever()
+ except:
+ logger.error("Failed to start webserver")
+ #raise Bcfg2.Server.Admin.AdminInitError
+
+ def stop_web(self):
+ """Stops the webserver."""
+# self.shutdown = 1
+ self.shutdown()
+ # self.stopped = True
+# self.serve_forever()
+
diff --git a/src/lib/Server/Admin/__init__.py b/src/lib/Server/Admin/__init__.py
index bb5c41895..b76d0a77e 100644
--- a/src/lib/Server/Admin/__init__.py
+++ b/src/lib/Server/Admin/__init__.py
@@ -1,8 +1,24 @@
__revision__ = '$Revision$'
-__all__ = ['Mode', 'Client', 'Compare', 'Init', 'Minestruct', 'Perf',
- 'Pull', 'Query', 'Reports', 'Snapshots', 'Tidy', 'Viz',
- 'Xcmd', 'Group', 'Backup']
+__all__ = [
+ 'Backup',
+ 'Bundle',
+ 'Client',
+ 'Compare',
+ 'Group',
+ #'Examples',
+ 'Init',
+ 'Minestruct',
+ 'Mode',
+ 'Perf',
+ 'Pull',
+ 'Query',
+ 'Reports',
+ 'Snapshots',
+ 'Tidy',
+ 'Viz',
+ 'Xcmd'
+ ]
import ConfigParser
import logging