summaryrefslogtreecommitdiffstats
path: root/cobbler
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2006-09-22 17:18:13 -0400
committerJim Meyering <jim@meyering.net>2006-09-22 17:18:13 -0400
commit1f8dadc3a3aded03dab038a66f5edfe7bee43ec9 (patch)
treef079b5610055e2baac288c5921f25e801b4b0632 /cobbler
parent7b51ac050a094e1164b0df9b0ecf0acdc5ae9a7b (diff)
downloadthird_party-cobbler-1f8dadc3a3aded03dab038a66f5edfe7bee43ec9.tar.gz
third_party-cobbler-1f8dadc3a3aded03dab038a66f5edfe7bee43ec9.tar.xz
third_party-cobbler-1f8dadc3a3aded03dab038a66f5edfe7bee43ec9.zip
dhcp templating for individual systems
Diffstat (limited to 'cobbler')
-rw-r--r--cobbler/action_sync.py29
-rw-r--r--cobbler/cobbler_msg.py1
-rw-r--r--cobbler/item_system.py12
3 files changed, 40 insertions, 2 deletions
diff --git a/cobbler/action_sync.py b/cobbler/action_sync.py
index a4699ee..b025138 100644
--- a/cobbler/action_sync.py
+++ b/cobbler/action_sync.py
@@ -25,6 +25,8 @@ import cexceptions
import traceback
import errno
+
+
class BootSync:
"""
Handles conversion of internal state to the tftpboot tree layout
@@ -80,6 +82,7 @@ class BootSync:
self.copyfile(path, destpath)
def write_dhcp_file(self):
+
try:
f2 = open("/etc/cobbler/dhcp.template","r")
except:
@@ -88,7 +91,31 @@ class BootSync:
f1 = self.open_file("/etc/dhcpd.conf","w+")
template_data = f2.read()
f2.close()
- system_definitions = "<INSERT COBBLER LIST HERE>"
+
+ # build each per-system definition
+ system_definitions = ""
+ counter = 0
+ elilo = os.path.basename(self.settings.bootloaders["ia64"])
+ for system in self.systems:
+ if not utils.is_mac(system.name):
+ # can't do per-system dhcp features if the system
+ # hostname is not a MAC, therefore the templating
+ # gets to be pretty lame. The general rule here is
+ # if you want to PXE IA64 boxes, you need to use
+ # the MAC as the system name.
+ continue
+ systxt = ""
+ counter = counter + 1
+ systxt = "\nhost label%d {\n" % counter
+ if system.pxe_arch == "ia64":
+ # can't use pxelinux.0 anymore
+ systxt = systxt + " filename \"/%s\";\n" % elilo
+ systxt = systxt + " hardware ethernet %s;\n" % system.name
+ if system.pxe_hostname != "":
+ systxt = systxt + " fixed-address %s;\n" % system.pxe_hostname
+ systxt = systxt + "}\n"
+ system_definitions = system_definitions + systxt
+
metadata = {
"insert_cobbler_system_definitions" : system_definitions,
"date" : time.asctime(time.gmtime())
diff --git a/cobbler/cobbler_msg.py b/cobbler/cobbler_msg.py
index c125c19..4ea4283 100644
--- a/cobbler/cobbler_msg.py
+++ b/cobbler/cobbler_msg.py
@@ -76,6 +76,7 @@ _msg_table = {
"exc_profile2" : "profile name not set",
"exc_pxe_arch" : "valid PXE architectures: standard or ia64",
"exc_no_template" : "can't read /etc/cobbler/dhcp.template",
+ "exc_dhcp_nomac" : "when cobbler is managing dhcpd.conf, all system names must be MAC addresses. Aborting.",
"check_ok" : """
No setup problems found.
diff --git a/cobbler/item_system.py b/cobbler/item_system.py
index 7127ae3..2ada359 100644
--- a/cobbler/item_system.py
+++ b/cobbler/item_system.py
@@ -28,6 +28,7 @@ class System(item.Item):
self.kernel_options = ""
self.ks_meta = ""
self.pxe_arch = "standard"
+ self.pxe_hostname = ""
def from_datastruct(self,seed_data):
self.name = seed_data['name']
@@ -35,6 +36,7 @@ class System(item.Item):
self.kernel_options = seed_data['kernel_options']
self.ks_meta = seed_data['ks_meta']
self.pxe_arch = seed_data['pxe_arch']
+ self.pxe_hostname = seed_data['pxe_hostname']
return self
def set_name(self,name):
@@ -52,6 +54,12 @@ class System(item.Item):
self.name = name # we check it add time, but store the original value.
return True
+ def set_pxe_hostname(self,hostname):
+ # we allow this to be set to anything
+ # though we probably should check to see if it looks like a FQDN
+ self.pxe_hostname = hostname
+ return True
+
def set_profile(self,profile_name):
"""
Set the system to use a certain named profile. The profile
@@ -94,7 +102,8 @@ class System(item.Item):
'profile' : self.profile,
'kernel_options' : self.kernel_options,
'ks_meta' : self.ks_meta,
- 'pxe_arch' : self.pxe_arch
+ 'pxe_arch' : self.pxe_arch,
+ 'pxe_hostname' : self.pxe_hostname
}
def printable(self,id):
@@ -103,5 +112,6 @@ class System(item.Item):
buf = buf + "kernel options : %s" % self.kernel_options
buf = buf + "ks metadata : %s" % self.ks_meta
buf = buf + "pxe arch : %s" % self.pxe_arch
+ buf = buf + "pxe hostname : %s" % self.pxe_hostname
return buf