From d5dbd2ee4f68732d49b5e9d57c5b1138b68ab7dd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 10 Nov 2010 00:35:14 +0100 Subject: Changed Redhat to Red Hat --- src/lib/Server/Admin/Init.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') 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 = ''' # 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'), -- cgit v1.2.3-1-g7c22 From a5f0c8b9936eb55283b3a2bb03e048842c773b45 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 3 Dec 2010 01:25:49 +0100 Subject: Initial bcfg2-admin backup part --- src/lib/Server/Admin/Backup.py | 47 ++++++++++++++++++++++++++++++++++++++++ src/lib/Server/Admin/__init__.py | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/lib/Server/Admin/Backup.py (limited to 'src') diff --git a/src/lib/Server/Admin/Backup.py b/src/lib/Server/Admin/Backup.py new file mode 100644 index 000000000..583f0329c --- /dev/null +++ b/src/lib/Server/Admin/Backup.py @@ -0,0 +1,47 @@ +import glob +import sys +import time +import tarfile +import Bcfg2.Server.Admin +import Bcfg2.Options + +class Backup(Bcfg2.Server.Admin.MetadataCore): + __shorthelp__ = "Make a backup of the Bcfg2 repository." + __longhelp__ = (__shorthelp__ + "\n\nbcfg2-admin backup start" + "\n\nbcfg2-admin backup restore") + __usage__ = ("bcfg2-admin backup [start|restore]") + + def __init__(self, configfile): + Bcfg2.Server.Admin.MetadataCore.__init__(self, configfile, + self.__usage__) + + def __call__(self, args): + Bcfg2.Server.Admin.MetadataCore.__call__(self, args) + # Get Bcfg2 repo directory + opts = {'repo': Bcfg2.Options.SERVER_REPOSITORY} + setup = Bcfg2.Options.OptionParser(opts) + setup.parse(sys.argv[1:]) + repo = setup['repo'] + + if len(args) == 0: + self.errExit("No argument specified.\n" + "Please see bcfg2-admin backup help for usage.") + if args[0] == 'start': + timestamp = time.strftime('%Y%m%d%H%M%S') + format = 'gz' + mode = 'w:' + format + filename = timestamp + '.tar' + '.' + format + out = tarfile.open(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) + + elif args[0] == 'restore': + print 'Not implemented yet' + + else: + print "No command specified" + raise SystemExit(1) + diff --git a/src/lib/Server/Admin/__init__.py b/src/lib/Server/Admin/__init__.py index 3a088b2fb..bb5c41895 100644 --- a/src/lib/Server/Admin/__init__.py +++ b/src/lib/Server/Admin/__init__.py @@ -2,7 +2,7 @@ __revision__ = '$Revision$' __all__ = ['Mode', 'Client', 'Compare', 'Init', 'Minestruct', 'Perf', 'Pull', 'Query', 'Reports', 'Snapshots', 'Tidy', 'Viz', - 'Xcmd', 'Group'] + 'Xcmd', 'Group', 'Backup'] import ConfigParser import logging -- cgit v1.2.3-1-g7c22 From c9eec98340168b1e9e3f4877b15b681855ee696b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 3 Dec 2010 01:52:34 +0100 Subject: Fixed backup location --- src/lib/Server/Admin/Backup.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Admin/Backup.py b/src/lib/Server/Admin/Backup.py index 583f0329c..f150b9cf0 100644 --- a/src/lib/Server/Admin/Backup.py +++ b/src/lib/Server/Admin/Backup.py @@ -1,4 +1,5 @@ import glob +import os import sys import time import tarfile @@ -21,7 +22,7 @@ class Backup(Bcfg2.Server.Admin.MetadataCore): opts = {'repo': Bcfg2.Options.SERVER_REPOSITORY} setup = Bcfg2.Options.OptionParser(opts) setup.parse(sys.argv[1:]) - repo = setup['repo'] + self.datastore = setup['repo'] if len(args) == 0: self.errExit("No argument specified.\n" @@ -31,12 +32,12 @@ class Backup(Bcfg2.Server.Admin.MetadataCore): format = 'gz' mode = 'w:' + format filename = timestamp + '.tar' + '.' + format - out = tarfile.open(filename, mode=mode) - content = os.listdir(os.getcwd()) + out = tarfile.open(self.datastore + '/' + filename, mode=mode) + content = os.listdir(self.datastore) for item in content: out.add(item) out.close() - print "Archive %s was stored.\nLocation: %s" % (filename, datastore) + print "Archive %s was stored.\nLocation: %s" % (filename, self.datastore) elif args[0] == 'restore': print 'Not implemented yet' -- cgit v1.2.3-1-g7c22 From 94e4f622b4dee6b33983a17313c0ef5a71c93f2e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 5 Dec 2010 21:50:18 +0100 Subject: Backup part reworked --- src/lib/Server/Admin/Backup.py | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Admin/Backup.py b/src/lib/Server/Admin/Backup.py index f150b9cf0..27a7fd8c8 100644 --- a/src/lib/Server/Admin/Backup.py +++ b/src/lib/Server/Admin/Backup.py @@ -1,4 +1,3 @@ -import glob import os import sys import time @@ -8,9 +7,9 @@ import Bcfg2.Options class Backup(Bcfg2.Server.Admin.MetadataCore): __shorthelp__ = "Make a backup of the Bcfg2 repository." - __longhelp__ = (__shorthelp__ + "\n\nbcfg2-admin backup start" - "\n\nbcfg2-admin backup restore") - __usage__ = ("bcfg2-admin backup [start|restore]") + __longhelp__ = (__shorthelp__ + "\n\nbcfg2-admin backup") + #"\n\nbcfg2-admin backup restore") + __usage__ = ("bcfg2-admin backup") def __init__(self, configfile): Bcfg2.Server.Admin.MetadataCore.__init__(self, configfile, @@ -23,26 +22,11 @@ class Backup(Bcfg2.Server.Admin.MetadataCore): setup = Bcfg2.Options.OptionParser(opts) setup.parse(sys.argv[1:]) self.datastore = setup['repo'] - - if len(args) == 0: - self.errExit("No argument specified.\n" - "Please see bcfg2-admin backup help for usage.") - if args[0] == 'start': - timestamp = time.strftime('%Y%m%d%H%M%S') - format = 'gz' - mode = 'w:' + format - filename = timestamp + '.tar' + '.' + format - out = tarfile.open(self.datastore + '/' + filename, mode=mode) - content = os.listdir(self.datastore) - for item in content: - out.add(item) - out.close() - print "Archive %s was stored.\nLocation: %s" % (filename, self.datastore) - - elif args[0] == 'restore': - print 'Not implemented yet' - - else: - print "No command specified" - raise SystemExit(1) - + timestamp = time.strftime('%Y%m%d%H%M%S') + format = 'gz' + mode = 'w:' + format + filename = timestamp + '.tar' + '.' + format + out = tarfile.open(self.datastore + '/' + filename, mode=mode) + out.add(self.datastore, os.path.basename(self.datastore)) + out.close() + print "Archive %s was stored under %s" % (filename, self.datastore) -- cgit v1.2.3-1-g7c22 From e833a7a76b231cd346f09c9a422ecb855d1cc6b4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 8 Dec 2010 23:27:15 +0100 Subject: Merge with upstream --- src/lib/Server/Admin/20101204011521.tar.gz | Bin 0 -> 1269 bytes src/lib/Server/Admin/Examples.py | 71 ++++++++++++++++++++++++++ src/lib/Server/Admin/Web.py | 79 +++++++++++++++++++++++++++++ src/lib/Server/Admin/test.py | 73 ++++++++++++++++++++++++++ src/lib/Server/Plugins/__Web.py | 47 +++++++++++++++++ 5 files changed, 270 insertions(+) create mode 100644 src/lib/Server/Admin/20101204011521.tar.gz create mode 100644 src/lib/Server/Admin/Examples.py create mode 100644 src/lib/Server/Admin/Web.py create mode 100644 src/lib/Server/Admin/test.py create mode 100644 src/lib/Server/Plugins/__Web.py (limited to 'src') 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 Binary files /dev/null and b/src/lib/Server/Admin/20101204011521.tar.gz 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 -- cgit v1.2.3-1-g7c22 From 1bd521bcd125752b0430865446300c9896c5bfe2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 8 Dec 2010 23:31:06 +0100 Subject: Deleted old stuff --- src/lib/Server/Admin/20101204011521.tar.gz | Bin 1269 -> 0 bytes src/lib/Server/Admin/test.py | 73 ----------------------------- src/lib/Server/Plugins/__Web.py | 47 ------------------- 3 files changed, 120 deletions(-) delete mode 100644 src/lib/Server/Admin/20101204011521.tar.gz delete mode 100644 src/lib/Server/Admin/test.py delete mode 100644 src/lib/Server/Plugins/__Web.py (limited to 'src') diff --git a/src/lib/Server/Admin/20101204011521.tar.gz b/src/lib/Server/Admin/20101204011521.tar.gz deleted file mode 100644 index e14ae8fea..000000000 Binary files a/src/lib/Server/Admin/20101204011521.tar.gz and /dev/null differ diff --git a/src/lib/Server/Admin/test.py b/src/lib/Server/Admin/test.py deleted file mode 100644 index 06271b186..000000000 --- a/src/lib/Server/Admin/test.py +++ /dev/null @@ -1,73 +0,0 @@ -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 deleted file mode 100644 index e1646e429..000000000 --- a/src/lib/Server/Plugins/__Web.py +++ /dev/null @@ -1,47 +0,0 @@ -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 -- cgit v1.2.3-1-g7c22 From 725383528b3b7132644bacfa1d146e084a39277f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 12 Dec 2010 10:11:40 +0100 Subject: backup and bundle added --- src/lib/Server/Admin/__init__.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Admin/__init__.py b/src/lib/Server/Admin/__init__.py index bb5c41895..aac38d30d 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 -- cgit v1.2.3-1-g7c22 From eb655503a5881c81c25f4c891eefdbbe9ec84fbd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 12 Dec 2010 11:07:15 +0100 Subject: Examples commented out --- src/lib/Server/Admin/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/Server/Admin/__init__.py b/src/lib/Server/Admin/__init__.py index aac38d30d..b76d0a77e 100644 --- a/src/lib/Server/Admin/__init__.py +++ b/src/lib/Server/Admin/__init__.py @@ -6,7 +6,7 @@ __all__ = [ 'Client', 'Compare', 'Group', - 'Examples', + #'Examples', 'Init', 'Minestruct', 'Mode', -- cgit v1.2.3-1-g7c22 From fe4a1326c9c800282a6ea4c81e6d563ec5021ea6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 12 Dec 2010 22:34:18 +0100 Subject: full stop added --- src/lib/Server/Admin/Bundle.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src') 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]) -- cgit v1.2.3-1-g7c22 From 007ab2c646c56600ed6701cf11e9a72bb402ad3e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 13 Dec 2010 23:48:52 +0100 Subject: Removed new features, too early to commit --- src/lib/Server/Admin/Examples.py | 71 ------------------------------------ src/lib/Server/Admin/Web.py | 79 ---------------------------------------- 2 files changed, 150 deletions(-) delete mode 100644 src/lib/Server/Admin/Examples.py delete mode 100644 src/lib/Server/Admin/Web.py (limited to 'src') diff --git a/src/lib/Server/Admin/Examples.py b/src/lib/Server/Admin/Examples.py deleted file mode 100644 index 3335c5e10..000000000 --- a/src/lib/Server/Admin/Examples.py +++ /dev/null @@ -1,71 +0,0 @@ -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 deleted file mode 100644 index 5ad14f2b9..000000000 --- a/src/lib/Server/Admin/Web.py +++ /dev/null @@ -1,79 +0,0 @@ -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() - -- cgit v1.2.3-1-g7c22 From d6fe15278d9a487c8c51a627dd96e5161217c1ab Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Wed, 15 Dec 2010 21:10:11 -0600 Subject: doc: Merge Fabian's bcfg2-admin doc updates Signed-off-by: Sol Jerome --- src/lib/Server/Admin/__init__.py | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/lib/Server/Admin/__init__.py b/src/lib/Server/Admin/__init__.py index b76d0a77e..a22d8521a 100644 --- a/src/lib/Server/Admin/__init__.py +++ b/src/lib/Server/Admin/__init__.py @@ -6,7 +6,6 @@ __all__ = [ 'Client', 'Compare', 'Group', - #'Examples', 'Init', 'Minestruct', 'Mode', -- cgit v1.2.3-1-g7c22 From b057e03b0836bb08770a52d1c780e81daa1a8cf6 Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Thu, 16 Dec 2010 07:01:49 -0600 Subject: Remove some deprecated tools Signed-off-by: Sol Jerome --- src/lib/Server/Admin/Reports.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/lib/Server/Admin/Reports.py (limited to 'src') diff --git a/src/lib/Server/Admin/Reports.py b/src/lib/Server/Admin/Reports.py old mode 100755 new mode 100644 -- cgit v1.2.3-1-g7c22 From b84ae0fc40cdbd5b7062c3dff8f649cc0561268c Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Fri, 17 Dec 2010 17:12:31 -0600 Subject: Svn2: Native svn plugin --- src/lib/Server/Plugins/Svn2.py | 71 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/lib/Server/Plugins/Svn2.py (limited to 'src') diff --git a/src/lib/Server/Plugins/Svn2.py b/src/lib/Server/Plugins/Svn2.py new file mode 100644 index 000000000..89b36b89f --- /dev/null +++ b/src/lib/Server/Plugins/Svn2.py @@ -0,0 +1,71 @@ +import os +try: + import pysvn + missing = False +except: + missing = True +import Bcfg2.Server.Plugin + +# FIXME +REPOS_URL = 'file:///space/svn/admin' + +class Svn2(Bcfg2.Server.Plugin.Plugin, + Bcfg2.Server.Plugin.Version): + """Svn is a version plugin for dealing with Bcfg2 repos.""" + name = 'Svn2' + __version__ = '$Id$' + __author__ = 'bcfg-dev@mcs.anl.gov' + + conflicts = ['Svn'] + experimental = True + __rmi__ = Bcfg2.Server.Plugin.Plugin.__rmi__ + ['Update'] + + def __init__(self, core, datastore): + Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) + + if missing: + self.logger.error("Svn2: Missing PySvn") + raise Bcfg2.Server.Plugin.PluginInitError + + self.client = pysvn.Client() + + self.core = core + self.datastore = datastore + self.svn_root = REPOS_URL + self.revision = None + + # Read revision from bcfg2 repo + revision = self.get_revision() + if not self.revision: + raise Bcfg2.Server.Plugin.PluginInitError + + self.logger.debug("Initialized svn plugin with svn root %s at revision %s" \ + % (self.svn_root, revision)) + + def get_revision(self): + """Read svn revision information for the Bcfg2 repository.""" + try: + info = self.client.info(self.datastore) + self.revision = info.revision + return str(self.revision.number) + except: + self.logger.error("Svn2: Failed to get revision", exc_info=1) + self.revision = None + return str(-1) + + def Update(self): + '''NatvieSvn.Update() => True|False\nUpdate svn working copy\n''' + try: + old_revision = self.revision.number + self.revision = self.client.update(self.datastore, recurse=True)[0] + except: + self.logger.error("Svn2: Failed to update server repository", exc_info=1) + return False + + if old_revision == self.revision.number: + self.logger.debug("repository is current") + else: + self.logger.info("Updated %s from revision %s to %s" % \ + (self.datastore, old_revision, self.revision.number)) + return True + -- cgit v1.2.3-1-g7c22 From adbc58cc37668667e626ff7985fa401dc67edf91 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Fri, 17 Dec 2010 17:26:27 -0600 Subject: Svn2: Add commit support --- src/lib/Server/Plugins/Svn2.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Plugins/Svn2.py b/src/lib/Server/Plugins/Svn2.py index 89b36b89f..d0d7712f5 100644 --- a/src/lib/Server/Plugins/Svn2.py +++ b/src/lib/Server/Plugins/Svn2.py @@ -18,7 +18,7 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, conflicts = ['Svn'] experimental = True - __rmi__ = Bcfg2.Server.Plugin.Plugin.__rmi__ + ['Update'] + __rmi__ = Bcfg2.Server.Plugin.Plugin.__rmi__ + ['Update','Commit'] def __init__(self, core, datastore): Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) @@ -53,8 +53,18 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, self.revision = None return str(-1) + def commit_changes(self): + """Commit changes into the repository""" + try: + self.revision = self.client.checkin([self.datastore], 'Svn2: autocommit', + recurse=True) + self.revision = self.client.update(self.datastore, recurse=True)[0] + self.logger.info("Svn2: Commited changes. At %s" % self.revision.number) + except: + self.logger.error("Svn2: Failed to commit changes", exc_info=1) + def Update(self): - '''NatvieSvn.Update() => True|False\nUpdate svn working copy\n''' + '''Svn2.Update() => True|False\nUpdate svn working copy\n''' try: old_revision = self.revision.number self.revision = self.client.update(self.datastore, recurse=True)[0] @@ -69,3 +79,12 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, (self.datastore, old_revision, self.revision.number)) return True + def Commit(self): + """Svn2.Commit() => True|False\nCommit svn repository\n""" + try: + self.commit_changes() + return True + except: + return False + + -- cgit v1.2.3-1-g7c22 From dcdfd3684115d11b21f9985754e38c6dc91006fa Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Sat, 18 Dec 2010 07:41:51 -0600 Subject: Plugin.Version: define parameters for commit_data --- src/lib/Server/Plugin.py | 2 +- src/lib/Server/Plugins/Svn2.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Plugin.py b/src/lib/Server/Plugin.py index 95569e3ac..186d1198a 100644 --- a/src/lib/Server/Plugin.py +++ b/src/lib/Server/Plugin.py @@ -293,7 +293,7 @@ class Version(object): """Interact with various version control systems.""" def get_revision(self): return [] - def commit_data(self): + def commit_data(self, file_list, comment=None): pass # the rest of the file contains classes for coherent file caching diff --git a/src/lib/Server/Plugins/Svn2.py b/src/lib/Server/Plugins/Svn2.py index d0d7712f5..5af0655e9 100644 --- a/src/lib/Server/Plugins/Svn2.py +++ b/src/lib/Server/Plugins/Svn2.py @@ -53,10 +53,12 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, self.revision = None return str(-1) - def commit_changes(self): + def commit_data(self, file_list, comment=None): """Commit changes into the repository""" + if not comment: + comment = 'Svn2: autocommit' try: - self.revision = self.client.checkin([self.datastore], 'Svn2: autocommit', + self.revision = self.client.checkin([self.datastore], comment, recurse=True) self.revision = self.client.update(self.datastore, recurse=True)[0] self.logger.info("Svn2: Commited changes. At %s" % self.revision.number) @@ -82,7 +84,7 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, def Commit(self): """Svn2.Commit() => True|False\nCommit svn repository\n""" try: - self.commit_changes() + self.commit_changes([]) return True except: return False -- cgit v1.2.3-1-g7c22 From a7d489e63e4e887b972c2c362fff532daef994a4 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Sat, 18 Dec 2010 08:21:42 -0600 Subject: Admin.Pull: Add commit support to PulEntry --- src/lib/Server/Admin/Pull.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/Server/Admin/Pull.py b/src/lib/Server/Admin/Pull.py index aa732c67f..cb837abc4 100644 --- a/src/lib/Server/Admin/Pull.py +++ b/src/lib/Server/Admin/Pull.py @@ -135,4 +135,9 @@ class Pull(Bcfg2.Server.Admin.MetadataCore): except Bcfg2.Server.Plugin.PluginExecutionError: self.errExit("Configuration upload not supported by plugin %s" \ % (plugin.name)) - # FIXME svn commit if running under svn + # commit if running under a VCS + for plugin in self.bcore.plugins.values(): + if isinstance(plugin, Bcfg2.Server.Plugin.Version): + files = "%s/%s" % (plugin.data, ename) + comment = 'file "%s" pulled from host %s' % (files, client) + plugin.commit_data([files], comment) -- cgit v1.2.3-1-g7c22 From 122af6dcc0c556ebf49d32daa4235b5fc390bc40 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Sat, 18 Dec 2010 08:24:38 -0600 Subject: Svn2: Remove hardcoded svn root path --- src/lib/Server/Plugins/Svn2.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Plugins/Svn2.py b/src/lib/Server/Plugins/Svn2.py index 5af0655e9..6c04d528a 100644 --- a/src/lib/Server/Plugins/Svn2.py +++ b/src/lib/Server/Plugins/Svn2.py @@ -6,9 +6,6 @@ except: missing = True import Bcfg2.Server.Plugin -# FIXME -REPOS_URL = 'file:///space/svn/admin' - class Svn2(Bcfg2.Server.Plugin.Plugin, Bcfg2.Server.Plugin.Version): """Svn is a version plugin for dealing with Bcfg2 repos.""" @@ -31,7 +28,7 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, self.core = core self.datastore = datastore - self.svn_root = REPOS_URL + self.svn_root = None self.revision = None # Read revision from bcfg2 repo @@ -47,6 +44,7 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, try: info = self.client.info(self.datastore) self.revision = info.revision + self.svn_root = info.url return str(self.revision.number) except: self.logger.error("Svn2: Failed to get revision", exc_info=1) -- cgit v1.2.3-1-g7c22 From 50c759ba20f513acc9745427c1ccad4ee4227e84 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Sat, 18 Dec 2010 08:43:09 -0600 Subject: Admin.Pull: Fix generator plugin name --- src/lib/Server/Admin/Pull.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Admin/Pull.py b/src/lib/Server/Admin/Pull.py index cb837abc4..289852f79 100644 --- a/src/lib/Server/Admin/Pull.py +++ b/src/lib/Server/Admin/Pull.py @@ -136,8 +136,8 @@ class Pull(Bcfg2.Server.Admin.MetadataCore): self.errExit("Configuration upload not supported by plugin %s" \ % (plugin.name)) # commit if running under a VCS - for plugin in self.bcore.plugins.values(): - if isinstance(plugin, Bcfg2.Server.Plugin.Version): + for vcsplugin in self.bcore.plugins.values(): + if isinstance(vcsplugin, Bcfg2.Server.Plugin.Version): files = "%s/%s" % (plugin.data, ename) comment = 'file "%s" pulled from host %s' % (files, client) - plugin.commit_data([files], comment) + vcsplugin.commit_data([files], comment) -- cgit v1.2.3-1-g7c22 From 09c0c0b30dc9b89c3023a1df8fc85c6e70345512 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Sat, 18 Dec 2010 08:44:04 -0600 Subject: Svn2: Add files explicitly listed which arent under control --- src/lib/Server/Plugins/Svn2.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/lib/Server/Plugins/Svn2.py b/src/lib/Server/Plugins/Svn2.py index 6c04d528a..875e9e6a6 100644 --- a/src/lib/Server/Plugins/Svn2.py +++ b/src/lib/Server/Plugins/Svn2.py @@ -55,6 +55,18 @@ class Svn2(Bcfg2.Server.Plugin.Plugin, """Commit changes into the repository""" if not comment: comment = 'Svn2: autocommit' + + # First try to update + if not self.Update(): + self.logger.error("Failed to update svn repository, refusing to commit changes") + return + + #FIXME - look for conflicts? + + for file in file_list: + stat = self.client.status(file) + self.client.add([f.path for f in stat \ + if f.text_status == pysvn.wc_status_kind.unversioned]) try: self.revision = self.client.checkin([self.datastore], comment, recurse=True) -- cgit v1.2.3-1-g7c22