Hi
This patch and an option to compliment the --name-servers and allows you to configure the "search" parameter in /etc/resolv.conf
Dave Hatton
PS I ended up with some spaces at the end of lines - so there is a second patch to clean those up.
From 40921a86f5a9997ebe31c443523e326e5fdc7dbe Mon Sep 17 00:00:00 2001
From: Dave Hatton dave@starground.it Date: Sat, 24 Jan 2009 14:23:32 +0000 Subject: [PATCH] add --name-servers-search
--- cobbler/item_profile.py | 10 ++++++++++ cobbler/item_system.py | 10 ++++++++++ cobbler/modules/cli_profile.py | 3 +++ cobbler/modules/cli_system.py | 3 +++ cobbler/remote.py | 2 ++ cobbler/settings.py | 1 + snippets/post_install_network_config | 14 ++++++++++++++ 7 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/cobbler/item_profile.py b/cobbler/item_profile.py index d30eb52..90cf782 100644 --- a/cobbler/item_profile.py +++ b/cobbler/item_profile.py @@ -69,6 +69,7 @@ class Profile(item.Item): self.ctime = 0 self.mtime = 0 self.name_servers = (self.settings.default_name_servers, '<<inherit>>')[is_subobject] + self.name_servers_search = (self.settings.default_name_servers_search, '<<inherit>>')[is_subobject] self.redhat_management_key = "<<inherit>>"
def from_datastruct(self,seed_data): @@ -95,6 +96,7 @@ class Profile(item.Item): self.ctime = self.load_item(seed_data,'ctime',0) self.mtime = self.load_item(seed_data,'mtime',0) self.name_servers = self.load_item(seed_data,'name_servers',[]) + self.name_servers_search = self.load_item(seed_data,'name_servers_search',[]) self.redhat_management_key = self.load_item(seed_data,'redhat_management_key', '<<inherit>>')
# backwards compatibility @@ -184,6 +186,11 @@ class Profile(item.Item): self.name_servers = data return True
+ def set_name_servers_search(self,data): + data = utils.input_string_or_list(data) + self.name_servers_search = data + return True + def set_enable_menu(self,enable_menu): """ Sets whether or not the profile will be listed in the default @@ -304,6 +311,7 @@ class Profile(item.Item): 'ctime' : self.ctime, 'mtime' : self.mtime, 'name_servers' : self.name_servers, + 'name_servers_search' : self.name_servers_search, 'uid' : self.uid, 'random_id' : self.random_id, 'redhat_management_key' : self.redhat_management_key @@ -328,6 +336,7 @@ class Profile(item.Item): buf = buf + _("mgmt classes : %s\n") % self.mgmt_classes buf = buf + _("modified : %s\n") % time.ctime(self.mtime) buf = buf + _("name servers : %s\n") % self.name_servers + buf = buf + _("name servers search : %s\n") % self.name_servers_search buf = buf + _("owners : %s\n") % self.owners buf = buf + _("post kernel options : %s\n") % self.kernel_options_post buf = buf + _("redhat mgmt key : %s\n") % self.redhat_management_key @@ -379,6 +388,7 @@ class Profile(item.Item): 'mgmt_classes' : self.set_mgmt_classes, 'comment' : self.set_comment, 'name_servers' : self.set_name_servers, + 'name_servers_search' : self.set_name_servers_search, 'redhat_management_key' : self.set_redhat_management_key }
diff --git a/cobbler/item_system.py b/cobbler/item_system.py index 4939fa0..9ed447b 100644 --- a/cobbler/item_system.py +++ b/cobbler/item_system.py @@ -74,6 +74,7 @@ class System(item.Item): self.hostname = "" self.gateway = "" self.name_servers = "" + self.name_servers_search = "" self.bonding = "" self.bonding_master = "" self.bonding_opts = "" @@ -179,6 +180,7 @@ interface. self.hostname = self.load_item(seed_data, 'hostname', __hostname)
self.name_servers = self.load_item(seed_data, 'name_servers', '<<inherit>>') + self.name_servers_search = self.load_item(seed_data, 'name_servers_search', '<<inherit>>') self.redhat_management_key = self.load_item(seed_data, 'redhat_management_key', '<<inherit>>')
# virt specific @@ -455,6 +457,11 @@ interface. self.name_servers = data return True
+ def set_name_servers_search(self,data): + data = utils.input_string_or_list(data) + self.name_servers_search = data + return True + def set_subnet(self,subnet,interface): intf = self.__get_interface(interface) intf["subnet"] = subnet @@ -669,6 +676,7 @@ interface. 'hostname' : self.hostname, 'gateway' : self.gateway, 'name_servers' : self.name_servers, + 'name_servers_search' : self.name_servers_search, 'redhat_management_key' : self.redhat_management_key }
@@ -688,6 +696,7 @@ interface. buf = buf + _("modified : %s\n") % time.ctime(self.mtime)
buf = buf + _("name servers : %s\n") % self.name_servers + buf = buf + _("name servers search : %s\n") % self.name_servers_search buf = buf + _("netboot enabled? : %s\n") % self.netboot_enabled buf = buf + _("owners : %s\n") % self.owners buf = buf + _("server : %s\n") % self.server @@ -794,6 +803,7 @@ interface. 'hostname' : self.set_hostname, 'gateway' : self.set_gateway, 'name_servers' : self.set_name_servers, + 'name_servers_search' : self.set_name_servers_search, 'redhat_management_key' : self.set_redhat_management_key }
diff --git a/cobbler/modules/cli_profile.py b/cobbler/modules/cli_profile.py index 1f8a565..50edf5a 100644 --- a/cobbler/modules/cli_profile.py +++ b/cobbler/modules/cli_profile.py @@ -72,6 +72,7 @@ class ProfileFunction(commands.CobblerFunction): if not self.matches_args(args,["dumpvars","remove","report","getks","list"]):
p.add_option("--name-servers", dest="name_servers", help="name servers for static setups") + p.add_option("--name-servers-search", dest="name_servers_search", help="name servers search path for static setups")
if "copy" in args or "rename" in args: p.add_option("--newname", dest="newname") @@ -158,6 +159,8 @@ class ProfileFunction(commands.CobblerFunction): obj.set_template_files(self.options.template_files,self.options.inplace) if self.options.name_servers is not None: obj.set_name_servers(self.options.name_servers) + if self.options.name_servers_search is not None: + obj.set_name_servers_search(self.options.name_servers_search) if self.options.redhat_management_key is not None: obj.set_redhat_management_key(self.options.redhat_management_key)
diff --git a/cobbler/modules/cli_system.py b/cobbler/modules/cli_system.py index 0c6499d..9f55bdd 100644 --- a/cobbler/modules/cli_system.py +++ b/cobbler/modules/cli_system.py @@ -73,6 +73,7 @@ class SystemFunction(commands.CobblerFunction): p.add_option("--mac", dest="mac", help="ex: 'AA:BB:CC:DD:EE:FF', (RECOMMENDED)") p.add_option("--mgmt-classes", dest="mgmt_classes", help="list of config management classes (for Puppet, etc)") p.add_option("--name-servers", dest="name_servers", help="name servers for static setups") + p.add_option("--name-servers-search", dest="name_servers_search", help="name servers search path for static setups") p.add_option("--redhat-management-key", dest="redhat_management_key", help="authentication token for RHN/Spacewalk/Satellite") p.add_option("--static-routes", dest="static_routes", help="sets static routes (see manpage)") p.add_option("--template-files", dest="template_files",help="specify files to be generated from templates during a sync") @@ -245,6 +246,8 @@ class SystemFunction(commands.CobblerFunction): obj.set_template_files(self.options.template_files,self.options.inplace) if self.options.name_servers is not None: obj.set_name_servers(self.options.name_servers) + if self.options.name_servers_search is not None: + obj.set_name_servers_search(self.options.name_servers_search) if self.options.redhat_management_key is not None: obj.set_redhat_management_key(self.options.redhat_management_key)
diff --git a/cobbler/remote.py b/cobbler/remote.py index 2221d71..cf803b5 100644 --- a/cobbler/remote.py +++ b/cobbler/remote.py @@ -1921,6 +1921,7 @@ def test_xmlrpc_rw(): server.modify_profile(pid, "mgmt-classes", "one two three", token) server.modify_profile(pid, "comment", "...", token) server.modify_profile(pid, "name_servers", ["one","two"], token) + server.modify_profile(pid, "name_servers_search", ["one","two"], token) server.modify_profile(pid, "redhat_management_key", "BETA", token) server.save_profile(pid, token)
@@ -1939,6 +1940,7 @@ def test_xmlrpc_rw(): server.modify_system(sid, 'virt-path', "/opt/images", token) server.modify_system(sid, 'virt-type', 'qemu', token) server.modify_system(sid, 'name_servers', 'one two three four', token) + server.modify_system(sid, 'name_servers_search', 'one two three four', token) server.modify_system(sid, 'modify-interface', { "macaddress-eth0" : "AA:BB:CC:EE:EE:EE", "ipaddress-eth0" : "192.168.10.50", diff --git a/cobbler/settings.py b/cobbler/settings.py index c43987a..6e98680 100644 --- a/cobbler/settings.py +++ b/cobbler/settings.py @@ -38,6 +38,7 @@ DEFAULTS = { "cobbler_master" : '', "default_kickstart" : "/var/lib/cobbler/kickstarts/default.ks", "default_name_servers" : '', + "default_name_servers_search" : '', "default_password_crypted" : "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac.", "default_virt_bridge" : "xenbr0", "default_virt_type" : "auto", diff --git a/snippets/post_install_network_config b/snippets/post_install_network_config index a0538bd..f4cfe0b 100644 --- a/snippets/post_install_network_config +++ b/snippets/post_install_network_config @@ -204,6 +204,20 @@ echo "BOOTPROTO=dhcp" >> $devfile #set $nct = $nct + 1 echo "DNS$nct=$nameserver" >> $devfile #end for + #if $name_servers_search != "" +sed -i -e "/^search /d" /etc/resolv.conf +echo -n "search " >>/etc/resolv.conf + #for $nameserversearch in $name_servers_search +echo -n "$nameserversearch " >>/etc/resolv.conf + #end for +echo "" >>/etc/resolv.conf + #if $name_servers != "" +sed -i -e "/^nameserver /d" /etc/resolv.conf + #for $nameserver in $name_servers +echo "nameserver $nameserver " >>/etc/resolv.conf + #end for + #end if + #end if #for $route in $static_routes #set routepattern = $re.compile("[0-9/.]+:[0-9.]+") #if $routepattern.match($route)
Dave Hatton wrote:
Hi
This patch and an option to compliment the --name-servers and allows you to configure the "search" parameter in /etc/resolv.conf
Dave Hatton
PS I ended up with some spaces at the end of lines - so there is a second patch to clean those up.
cobbler mailing list cobbler@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/cobbler
Please also add the neccessary code to CobblerWeb.py and webui_templates/system_edit.py and then I'll apply this.
We can't add new fields without seeing that they are also in the webapp.
--Michael
cobbler@lists.fedorahosted.org