Here is a (hopefully) finished patch to add a DNS search path.

Regarding the webui;

1. I noticed that for name servers it was suggesting a space separated list, but I think from the code this should be comma separated. So I altered this.

2. I altered the width of a number of field to hopefully improve the looks.

Dave Hatton





>From 9003c34fa90d1619df3b5ad3eee359f57cc25369 Mon Sep 17 00:00:00 2001
From: Dave Hatton <[email protected]>
Date: Tue, 27 Jan 2009 22:51:46 +0000
Subject: [PATCH] Added name server serach path support

---
 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 +
 cobbler/webui/CobblerWeb.py          |    6 ++++--
 snippets/post_install_network_config |    8 ++++++++
 webui_templates/system_edit.tmpl     |   23 +++++++++++++++++++----
 9 files changed, 60 insertions(+), 6 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 91a7f62..355cb6c 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         = ""
@@ -175,6 +176,7 @@ class System(item.Item):
         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 
@@ -448,6 +450,11 @@ class System(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_subnet(self,subnet,interface):
         intf = self.__get_interface(interface)
         intf["subnet"] = subnet
@@ -662,6 +669,7 @@ class System(item.Item):
            '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
         }
 
@@ -681,6 +689,7 @@ class System(item.Item):
         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
@@ -787,6 +796,7 @@ class System(item.Item):
            '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 03efb7b..a066680 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..b69e362 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 a36ade3..b4e3dee 100644
--- a/cobbler/remote.py
+++ b/cobbler/remote.py
@@ -1900,6 +1900,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)
 
@@ -1918,6 +1919,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/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index f29a949..72f3659 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -512,7 +512,7 @@ class CobblerWeb(object):
     def system_save(self,name=None,comment=None,editmode="edit",profile=None,
                     kopts=None, koptspost=None, ksmeta=None, owners=None, 
server_override=None, netboot='n', 
                     
virtpath=None,virtram=None,virttype=None,virtcpus=None,virtfilesize=None,
-                    name_servers=None,
+                    name_servers=None,name_servers_search=None,
                     power_type=None, power_user=None, power_pass=None, 
power_id=None, power_address=None,
                     
gateway=None,hostname=None,redhatmanagementkey=None,delete1=None, delete2=None, 
**args):
 
@@ -565,6 +565,7 @@ class CobblerWeb(object):
             self.remote.modify_system(system, 'power_id', power_id, self.token)
             self.remote.modify_system(system, 'power_address', power_address, 
self.token)
             self.remote.modify_system(system, 'name_servers', name_servers, 
self.token)
+            self.remote.modify_system(system, 'name_servers_search', 
name_servers_search, self.token)
             self.remote.modify_system(system, 'gateway', gateway, self.token)
             self.remote.modify_system(system, 'hostname', hostname, self.token)
             self.remote.modify_system(system, 'redhat_management_key', 
redhatmanagementkey, self.token)
@@ -678,7 +679,7 @@ class CobblerWeb(object):
                      
ksmeta=None,owners=None,enablemenu=None,virtfilesize=None,virtram=None,virttype=None,
                      
virtpath=None,repos=None,dhcptag=None,delete1=False,delete2=False,
                      
parent=None,virtcpus=None,virtbridge=None,subprofile=None,server_override=None,
-                     
name_servers=None,redhatmanagementkey=None,recursive=False,**args):
+                     
name_servers=None,name_servers_search=None,redhatmanagementkey=None,recursive=False,**args):
 
         if not self.__xmlrpc_setup():
             return self.xmlrpc_auth_failure()
@@ -745,6 +746,7 @@ class CobblerWeb(object):
             self.remote.modify_profile(profile, 'server', server_override, 
self.token)
             self.remote.modify_profile(profile, 'comment', comment, self.token)
             self.remote.modify_profile(profile, 'name_servers', name_servers, 
self.token)
+            self.remote.modify_profile(profile, 'name_servers_search', 
name_servers_search, self.token)
             self.remote.modify_profile(profile, 'redhat_management_key', 
redhatmanagementkey, self.token)
 
             if repos is None:
diff --git a/snippets/post_install_network_config 
b/snippets/post_install_network_config
index a0538bd..a50c761 100644
--- a/snippets/post_install_network_config
+++ b/snippets/post_install_network_config
@@ -204,6 +204,14 @@ 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
+        #end if
        #for $route in $static_routes
            #set routepattern = $re.compile("[0-9/.]+:[0-9.]+")
            #if $routepattern.match($route)
diff --git a/webui_templates/system_edit.tmpl b/webui_templates/system_edit.tmpl
index 92cd057..7cad60a 100644
--- a/webui_templates/system_edit.tmpl
+++ b/webui_templates/system_edit.tmpl
@@ -533,9 +533,9 @@ redhatmanagementkey"
         </td>
         <td class="netedit">
         #if $system
-            <input type="text" size="64" style="width: 150px;" name="hostname" 
id="hostname" value="$system.hostname" />
+            <input type="text" size="64" style="width: 200px;" name="hostname" 
id="hostname" value="$system.hostname" />
         #else
-            <input type="text" size="64" style="width: 150px;" name="hostname" 
id="hostname" />
+            <input type="text" size="64" style="width: 200px;" name="hostname" 
id="hostname" />
         #end if
         <p class="context-tip">Ex: "vanhalen.example.org".  Used for 
/etc/sysconfig/network.</p>
         </td>
@@ -563,15 +563,30 @@ redhatmanagementkey"
     <td class="netedit">
     #if $system
        #set joined = " ".join($system.name_servers)
-       <input type="text" name="name_servers" id="name_servers" 
value="$joined">
+       <input type="text" size="255" style="width: 400px;" name="name_servers" 
id="name_servers" value="$joined" />
     #else
-       <input type="text" name="name_servers" id="name_servers" 
value="<<inherit>>">
+       <input type="text" size="255" style="width: 400px;" name="name_servers" 
id="name_servers" value="<<inherit>>" />
     #end if
     <p class="context-tip">Name servers, space delimited, if not provided by 
DHCP</p>
     </td>
     </tr>
 
     <tr>
+    <td class="netedit">
+    <label for="name_servers_search">Name Servers Search Path</label>
+    </td>
+    <td class="netedit">
+    #if $system
+       #set joined = " ".join($system.name_servers_search)
+       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="$joined">
+    #else
+       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="<<inherit>>">
+    #end if
+    <p class="context-tip">Name servers search path, space delimited, if not 
provided by DHCP</p>
+    </td>
+    </tr>
+
+    <tr>
     <td class="virtedit">
     <label for="virtfilesize">Virt Disk (GB)</label>
     </td>
-- 
1.5.5.6

>From 24116fde0e4ab8f680b12344db122ba2a06c0e55 Mon Sep 17 00:00:00 2001
From: Dave Hatton <[email protected]>
Date: Wed, 28 Jan 2009 13:59:19 +0000
Subject: [PATCH] added name_servers_search - added to webgui

---
 webui_templates/profile_edit.tmpl |   23 +++++++++++++++++++----
 webui_templates/system_edit.tmpl  |   12 ++++++------
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/webui_templates/profile_edit.tmpl 
b/webui_templates/profile_edit.tmpl
index 960d580..a1363dd 100644
--- a/webui_templates/profile_edit.tmpl
+++ b/webui_templates/profile_edit.tmpl
@@ -245,12 +245,27 @@ function disablename(value)
     </td>
     <td>
     #if $profile
-       #set joined = " ".join($profile.name_servers)
-       <input type="text" name="name_servers" id="name_servers" 
value="$joined">
+       #set joined = ", ".join($profile.name_servers)
+       <input type="text" size="255" style="width: 400px;" name="name_servers" 
id="name_servers" value="$joined" />
     #else
-       <input type="text" name="name_servers" id="name_servers" value="">
+       <input type="text" size="255" style="width: 400px;" name="name_servers" 
id="name_servers" value="" />
     #end if
-    <p class="context-tip">Name servers, space delimited, if not provided by 
DHCP</p>
+    <p class="context-tip">Name servers, comma delimited, if not provided by 
DHCP</p>
+    </td>
+    </tr>
+
+    <tr>
+    <td>
+    <label for="name_servers_search">Name Servers Search Path</label>
+    </td>
+    <td>
+    #if $profile
+       #set joined = ", ".join($profile.name_servers_search)
+       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="$joined" />
+    #else
+       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="" />
+    #end if
+    <p class="context-tip">Name servers search path, comma delimited, if not 
provided by DHCP</p>
     </td>
     </tr>
 
diff --git a/webui_templates/system_edit.tmpl b/webui_templates/system_edit.tmpl
index 7cad60a..372908d 100644
--- a/webui_templates/system_edit.tmpl
+++ b/webui_templates/system_edit.tmpl
@@ -562,12 +562,12 @@ redhatmanagementkey"
     </td>
     <td class="netedit">
     #if $system
-       #set joined = " ".join($system.name_servers)
+       #set joined = ", ".join($system.name_servers)
        <input type="text" size="255" style="width: 400px;" name="name_servers" 
id="name_servers" value="$joined" />
     #else
        <input type="text" size="255" style="width: 400px;" name="name_servers" 
id="name_servers" value="<<inherit>>" />
     #end if
-    <p class="context-tip">Name servers, space delimited, if not provided by 
DHCP</p>
+    <p class="context-tip">Name servers, comma delimited, if not provided by 
DHCP</p>
     </td>
     </tr>
 
@@ -577,12 +577,12 @@ redhatmanagementkey"
     </td>
     <td class="netedit">
     #if $system
-       #set joined = " ".join($system.name_servers_search)
-       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="$joined">
+       #set joined = ", ".join($system.name_servers_search)
+       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="$joined" />
     #else
-       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="<<inherit>>">
+       <input type="text" size="255" style="width: 400px;" 
name="name_servers_search" id="name_servers_search" value="<<inherit>>" />
     #end if
-    <p class="context-tip">Name servers search path, space delimited, if not 
provided by DHCP</p>
+    <p class="context-tip">Name servers search path, comma delimited, if not 
provided by DHCP</p>
     </td>
     </tr>
 
-- 
1.5.5.6

_______________________________________________
cobbler mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/cobbler

Reply via email to