diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2006-09-22 17:18:13 -0400 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2006-09-22 17:18:13 -0400 |
commit | 1f8dadc3a3aded03dab038a66f5edfe7bee43ec9 (patch) | |
tree | f079b5610055e2baac288c5921f25e801b4b0632 /cobbler | |
parent | 7b51ac050a094e1164b0df9b0ecf0acdc5ae9a7b (diff) | |
download | third_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.py | 29 | ||||
-rw-r--r-- | cobbler/cobbler_msg.py | 1 | ||||
-rw-r--r-- | cobbler/item_system.py | 12 |
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 |