summaryrefslogtreecommitdiffstats
path: root/scripts/findks.cgi
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-07-09 12:05:13 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-07-09 12:05:13 -0400
commit94661f57c1e8a33688f20594dc304ce30ccd3ec1 (patch)
tree541d95be7ada2ee73f97b17e41c0d1b468a27544 /scripts/findks.cgi
parent224bb933094abd526c864f8ad6acd9be19e65130 (diff)
downloadthird_party-cobbler-94661f57c1e8a33688f20594dc304ce30ccd3ec1.tar.gz
third_party-cobbler-94661f57c1e8a33688f20594dc304ce30ccd3ec1.tar.xz
third_party-cobbler-94661f57c1e8a33688f20594dc304ce30ccd3ec1.zip
Adding kickstart serving CGI script.
Also fixing one error in the utils module.
Diffstat (limited to 'scripts/findks.cgi')
-rwxr-xr-xscripts/findks.cgi116
1 files changed, 116 insertions, 0 deletions
diff --git a/scripts/findks.cgi b/scripts/findks.cgi
new file mode 100755
index 0000000..be8afdf
--- /dev/null
+++ b/scripts/findks.cgi
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+# This software may be freely redistributed under the terms of the GNU
+# general public license.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# based on:
+# Cobbler ks-serving script
+# July 5 2007
+# Adam Wolf <adamwolf@feelslikeburning.com>
+# http://feelslikeburning.com/projects/live-cd-restoring-with-cobbler/
+
+import cgi
+import cgitb
+import time
+import os
+import sys
+import socket
+import xmlrpclib
+
+COBBLER_BASE = "/var/www/cobbler"
+XMLRPC_SERVER = "http://127.0.0.1:25151"
+
+#----------------------------------------------------------------------
+
+class ServerProxy(xmlrpclib.ServerProxy):
+
+ def __init__(self, url=None):
+ xmlrpclib.ServerProxy.__init__(self, url, allow_none=True)
+
+#----------------------------------------------------------------------
+
+def parse_query():
+
+ form = cgi.parse()
+
+ if form.has_key("system"):
+ name = form["system"][0]
+ type = "system"
+ elif form.has_key("profile"):
+ name = form["profile"][0]
+ type = "profile"
+ else:
+ type = "system"
+ name = autodetect_ip()
+ return (name,type)
+
+#----------------------------------------------------------------------
+
+def autodetect_ip():
+
+ ip = os.environ["REMOTE_ADDR"]
+ xmlrpc_server = ServerProxy(XMLRPC_SERVER)
+ systems = xmlrpc_server.get_systems()
+ candidates = [system['name'] for system in systems if system['ip_address'] == ip]
+
+ if len(candidates) == 0:
+ print "# No system entries with ip %s found" % ip
+ sys.exit(1)
+ elif len(candidates) > 1:
+ print "# Multiple system entries with ip %s found" % ip
+ sys.exit(1)
+ elif len(candidates) == 1:
+ return candidates[0]
+
+#----------------------------------------------------------------------
+
+def serve_file(name):
+
+ # never hurts to be safe...
+ name = name.replace("/","")
+ name = name.replace("..","")
+ name = name.replace(";","")
+
+ if type == "system":
+ ks_path = "%s/kickstarts_sys/%s/ks.cfg" % (COBBLER_BASE, name)
+ elif type == "profile":
+ ks_path = "%s/kickstarts/%s/ks.cfg" % (COBBLER_BASE, name)
+
+ if not os.path.exists(ks_path):
+ print "# No such cobbler object"
+ sys.exit(1)
+
+ try:
+ ksfile = open(ks_path)
+ except:
+ print "# Cannot open file %s" % ks_path
+ sys.exit(1)
+
+ for line in ksfile:
+ print line.strip()
+ ksfile.close()
+
+#----------------------------------------------------------------------
+
+def header():
+ print "Content-type: text/plain"
+ print
+
+#----------------------------------------------------------------------
+
+if __name__ == "__main__":
+ cgitb.enable(format='text')
+ header()
+ (name, type) = parse_query()
+ print "# kickstart for cobbler %s %s" % (type,name)
+ print "# served on %s" % time.ctime()
+ print "# requestor ip = %s" % os.environ["REMOTE_ADDR"]
+ print "# ============================="
+ print " "
+ serve_file(name)
+
+