+++ This bug was initially created as a clone of Bug #905129 +++
Description of problem:
The kssendmac kickstart kernel argument does not select the correct Cobbler system profile with the 'findks' operation.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Create a cobbler system profile
2. Add a MAC address to the Cobbler system profile (eg 00:0c:29:a5:73:0a)
3. Issue a wget to the cobbler findks URI specifying the MAC address specified:
wget --header='X-RHN-Provisioning-MAC-0: eth0 00:0c:29:a5:73:0a' http://<rhn_satellite_fqdn>/cblr/svc/op/findks
500 Internal Server Error
Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] mod_wsgi (pid=6555): Exception occurred processing WSGI script '/var/www/cobbler/svc/services.wsgi'.
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] Traceback (most recent call last):
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] File "/var/www/cobbler/svc/services.wsgi", line 81, in application
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] content = func( **form )
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] File "/usr/lib/python2.6/site-packages/cobbler/services.py", line 230, in findks
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] name = self.autodetect(**rest)
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] File "/usr/lib/python2.6/site-packages/cobbler/services.py", line 191, in autodetect
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] ip = rest["REMOTE_ADDR"]
[Mon Jan 28 16:09:14 2013] [error] [client 192.168.2.230] KeyError: 'REMOTE_ADDR'
The kickstart script for the server to be returned.
The error seems to be in two scripts, and is normally masked by the fact that when a MAC address is added to a Cobbler system profile and a 'cobbler sync' is run, the PXE/tftp entry created adds the ks=path to the cobbler system profile (e.g. ks=http://172.16.204.51/cblr/svc/op/ks/system/test1) and so the kssendmac is not interpreted.
The problem becomes apparent when a separate PXE server is used, and a kernel kickstart line similar to the following is used to auto-select the correct kickstart profile based on MAC address:
kssendmac text ks=http://172.16.204.51/cblr/svc/op/findks
The following edits for the two erroneous files in cobbler-2.0.7-23.el6sat.noarch for RHN Satellite 5.5 seem to have fixed the problem:
--- services.wsgi.original_5.5 2013-01-28 15:42:22.104842450 +0000
+++ services.wsgi 2013-01-28 15:41:48.510009907 +0000
@@ -56,7 +56,11 @@ def application(environ, start_response)
# This MAC header is set by anaconda during a kickstart booted with the
# kssendmac kernel option. The field will appear here as something
# like: eth0 XX:XX:XX:XX:XX:XX
- form["REMOTE_MAC"] = form.get("HTTP_X_RHN_PROVISIONING_MAC_0", None)
+ form["REMOTE_MAC"] = environ.get("HTTP_X_RHN_PROVISIONING_MAC_0", None)
+ # REMOTE_ADDR isn't a required wsgi attribute so it may be naive to assume
+ # it's always present in this context.
+ form["REMOTE_ADDR"] = environ.get("REMOTE_ADDR", None)
# Read config for the XMLRPC port to connect to:
fd = open("/etc/cobbler/settings")
--- services.py.original_5.5 2013-01-28 15:36:04.866644349 +0000
+++ services.py 2013-01-28 14:56:29.024473937 +0000
@@ -30,7 +30,7 @@ import sys
import yaml # PyYAML
# the following imports are largely for the test code
@@ -65,6 +65,7 @@ class CobblerSvc(object):
self.apache = apache
self.remote = None
self.req = req
+ self.config = config.Config(self)
@@ -217,9 +218,7 @@ class CobblerSvc(object):
- serverseg = self.server.replace("http://","")
- serverseg = self.server.replace("/cobbler_api","")
+ serverseg = "http://%s" % self.config._settings.server
name = "?"
type = "system"
if system is not None:
--- Additional comment from Stephen Herr on 2014-07-14 16:29:07 EDT ---
These changes to cobbler look sane. Making it work through a Proxy is tricky because it's not Proxy that rewrites the urls in the kickstart file, it's Spacewalk. So the Spacewalk request has to have the appropriate headers so that Satellite knows to rewrite the urls in the ksfile.
I bet we can make cobbler return a 302 to the correct url instead of returing the ksfile directly, and that would make everything work correctly. I'm about 75% of the way there, will finish tomorrow.
Committing to Spacewalk master:
Moving bugs to ON_QA as we move to release Spacewalk 2.3
Spacewalk 2.3 has been released. See