summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFabian Affolter <fabian@bernewireless.net>2010-12-08 23:27:15 +0100
committerFabian Affolter <fabian@bernewireless.net>2010-12-08 23:27:15 +0100
commite833a7a76b231cd346f09c9a422ecb855d1cc6b4 (patch)
treee2762fc31e1162a6859dbd6cd7b5c28208296d9d /src
parentbaf5854f414c2a35887e3fbbcfd094e12e7c6ee7 (diff)
downloadbcfg2-e833a7a76b231cd346f09c9a422ecb855d1cc6b4.tar.gz
bcfg2-e833a7a76b231cd346f09c9a422ecb855d1cc6b4.tar.bz2
bcfg2-e833a7a76b231cd346f09c9a422ecb855d1cc6b4.zip
Merge with upstream
Diffstat (limited to 'src')
-rw-r--r--src/lib/Server/Admin/20101204011521.tar.gzbin0 -> 1269 bytes
-rw-r--r--src/lib/Server/Admin/Examples.py71
-rw-r--r--src/lib/Server/Admin/Web.py79
-rw-r--r--src/lib/Server/Admin/test.py73
-rw-r--r--src/lib/Server/Plugins/__Web.py47
5 files changed, 270 insertions, 0 deletions
diff --git a/src/lib/Server/Admin/20101204011521.tar.gz b/src/lib/Server/Admin/20101204011521.tar.gz
new file mode 100644
index 000000000..e14ae8fea
--- /dev/null
+++ b/src/lib/Server/Admin/20101204011521.tar.gz
Binary files differ
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/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/test.py b/src/lib/Server/Admin/test.py
new file mode 100644
index 000000000..06271b186
--- /dev/null
+++ b/src/lib/Server/Admin/test.py
@@ -0,0 +1,73 @@
+import os
+import time
+import tarfile
+import sys
+datastore = '/var/lib/bcfg2'
+
+#Popen(['git', 'clone', 'https://github.com/solj/bcfg2-repo.git', datastore])
+#timestamp = time.strftime('%Y%m%d%H%M%S')
+#format = 'gz'
+#mode = 'w:' + format
+#filename = timestamp + '.tar' + '.' + format
+#out = tarfile.open('/home/fab/' + filename, mode=mode)
+
+
+#content = os.listdir(os.getcwd())
+#for item in content:
+# out.add(item)
+#out.close()
+#print "Archive %s was stored.\nLocation: %s" % (filename, datastore)
+
+#print os.getcwd()
+#print os.listdir(os.getcwd())
+
+#import shlex
+#args = shlex.split('env LC_ALL=C git clone https://github.com/solj/bcfg2-repo.git datastore')
+#print args
+
+#Popen("env LC_ALL=C git clone https://github.com/solj/bcfg2-repo.git datastore")
+
+#timestamp = time.strftime('%Y%m%d%H%M%S')
+#format = 'gz'
+#mode = 'w:' + format
+#filename = timestamp + '.tar' + '.' + format
+#out = tarfile.open(name = filename, mode = mode)
+##content = os.listdir(datastore)
+##for item in content:
+## out.add(item)
+##out.close()
+
+###t = tarfile.open(name = destination, mode = 'w:gz')
+#out.add(datastore, os.path.basename(datastore))
+#out.close()
+
+#print datastore, os.path.basename(datastore)
+
+#content = os.listdir(datastore)
+#for item in content:
+# #out.add(item)
+# print item
+
+#timestamp = time.strftime('%Y%m%d%H%M%S')
+#format = 'gz'
+#mode = 'w:' + format
+#filename = timestamp + '.tar' + '.' + format
+
+if len(sys.argv) == 0:
+ destination = datastore + '/'
+else:
+ destination = sys.argv[1]
+
+print destination
+#out = tarfile.open(destination + filename, mode=mode)
+#out.add(self.datastore, os.path.basename(self.datastore))
+#out.close()
+#print "Archive %s was stored at %s" % (filename, destination)
+
+#print 'Die Kommandozeilenparameter sind:'
+##for i in sys.argv:
+## print i
+
+#print sys.argv[0]
+#print sys.argv[1]
+##print sys.argv[2]
diff --git a/src/lib/Server/Plugins/__Web.py b/src/lib/Server/Plugins/__Web.py
new file mode 100644
index 000000000..e1646e429
--- /dev/null
+++ b/src/lib/Server/Plugins/__Web.py
@@ -0,0 +1,47 @@
+import os
+import BaseHTTPServer
+import SimpleHTTPServer
+import Bcfg2.Server.Plugin
+
+# for debugging output only
+import logging
+logger = logging.getLogger('Bcfg2.Plugins.Web')
+
+class Web(Bcfg2.Server.Plugin.Plugin,
+ Bcfg2.Server.Plugin.Version):
+ """Web is a simple webserver to display the content of the Bcfg2 repos."""
+ name = 'Web'
+ __version__ = '$Id$'
+ __author__ = 'bcfg-dev@mcs.anl.gov'
+ experimental = True
+
+ def __init__(self, core, datastore):
+ Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore)
+ Bcfg2.Server.Plugin.Version.__init__(self)
+ self.core = core
+ self.datastore = datastore
+
+ # Change directory to the Bcfg2 repo
+ ##path = '/home/fab/backup'
+ if not os.path.exists(datastore):
+ ##print "Path '%s' doesn't exisit" % datastore
+ logger.error("%s doesn't exist" % datastore)
+ raise Bcfg2.Server.Plugin.PluginInitError
+ else:
+ os.chdir(datastore)
+ self.start_web()
+
+ logger.debug("Serving at port %s" % port)
+
+
+ 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()
+ except:
+ logger.error("Failed to start webserver")
+ raise Bcfg2.Server.Plugin.PluginInitError