Re: Idea for Cobbler pxe rescue mode? (MEMTEST)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



	Hi, for your review:

	Based on talk with Michael on irc, the ability to create menus
for memtest if installed arised, so here is the patch attached for cobbler
0.9x. This is for ticket #94 @ trac

	If there is any /boot/memtest* file, it will copy to /tftpboot/
(or whatever the location based on cobbler variables) and then create menu
entries named as "memtest*" filename with kernel "filename".

	I didn't wrote a "delete" for copied memtest's for this patch as
even, an old copy of memtest could be useful, if you think that deletion
should be included, please, start blaming :)

	Regards
	Pablo





-- 
Pablo Iranzo Gómez
(http://Alufis35.uv.es/~iranzo/)
(PGPKey Available on http://www.uv.es/~iranzop/PGPKey.pgp)
                  --
Postulado de Boling sobre la Ley de Murphy:

Si se encuentra bien, no se preocupe. Se le pasará

On Tue, 8 Apr 2008, Jennifer Cranfill wrote:

> Michael DeHaan wrote:
> > Michael DeHaan wrote:
> >  >
> >  > Could we create "rescue" profiles automatically when we do imports?
> >  > It would just be a different profile ending in "-rescue" that would
> >  > just have "--kopts=rescue" added.   Example "DistroName-i386-rescue".
> >  > The other thing we /might/ want to do is set up a kickstart template
> >  > for that profile (and assign it) that can be used to feed the rescue
> >  > image the media information, so you don't have to enter that in
> >  > manually.
> >  > Presumably that could all be done with modifications to action_import.py
> >  >
> >  >
> >  > If we do something like having a rescue profile, it's just:
> >  >
> >  > cobbler system edit --name=server1 --profile=F-9-i386-rescue
> >  > --netboot-enabled=1
> >  > # fix system
> >  > cobbler system edit --name=server1 --profile=originalname
> >  > --netboot-enabled=0
> >  >
> >  > The one thing that requires is knowing the proper rescue profile for
> >  > server1, so it's possible we could add a --rescueprofile= to the
> >  > system and also have a --rescuemode=1/0 like --netboot-enabled if you
> >  > think that's useful.   That could be interesting.
> >  >
> >  > That workflow might be like:
> >  >
> >  > cobbler system edit --name=server1 --rescuemode  (rescuemode could
> >  > actually set netboot-enabled to 1 for simplicity)
> >  > cobbler system edit --name =server1 --workingmode (this could set
> >  > netboot enabled back)
> >
> > To clarify syntax a bit more and see if we're on the same page, how
> > about the following?
> >
> > cobbler import --name=F9A --mirror=path
> > # automatically creates F9A-i386, F9A-i386-xen, F9A-i386-rescue as both
> > distros and profiles (action_import.py)
> > # automatically does the equivalent of "cobbler profile edit
> > --name=F9A-i386 --rescueprofile=F9A-i386-rescue"
> >
> > Basically the above would allow any given profile to store the name of
> > /another/ profile that is used for rescue mode.
> > You may ask "why isn't rescue mode part of the distro", and the answer
> > here is that if it's a profile we can take advantage
> > of it also showing up in PXE menus automatically.
> >
> > System syntax could also look like this:
> >
> > cobbler system edit --name=F9A --rescuemode [implies --netboot-enabled=1]
> > cobbler system edit --name=F9A --workingmode [--netboot-enabled=1/0]
> >
> > The commands --rescuemode would toggle netboot-enabled and temporarily
> > set up PXE to point to the rescue profile.
> > The command --workingmode would set it back, but at no time do you have
> > to remember what the proper rescue distro
> > is for a given system -- because it asks the profile for that info.
> >
> > This would be something that would be really easy to incorporate into
> > the web interface as well -- as it would just be a couple of checkboxes.
> >
> > That eventually involves also modifying files like action_sync.py and
> > modules/cli_system.py and item_system.py/item_profile.py -- though
> > nothing too invasive.   (And I can help on this...)
>
> That sounds great to me! I like the idea of putting it in the profile.
> I'll start taking a look at the code. Thanks Michael!
>
> --Jennifer
>
> _______________________________________________
> et-mgmt-tools mailing list
> et-mgmt-tools@xxxxxxxxxx
> https://www.redhat.com/mailman/listinfo/et-mgmt-tools
>
diff --git a/cobbler/action_sync.py b/cobbler/action_sync.py
index 8a0eadf..db78870 100644
--- a/cobbler/action_sync.py
+++ b/cobbler/action_sync.py
@@ -108,6 +108,9 @@ class BootSync:
             destpath = os.path.join(self.bootloc, newname)
             self.copyfile(path, destpath)
         self.copyfile("/var/lib/cobbler/menu.c32", os.path.join(self.bootloc, "menu.c32"))
+        # Copy memtest86 if package is installed on system
+        for memtest in glob.glob('/boot/memtest*'):
+          self.copyfile(memtest,os.path.join(self.bootloc + "/" + os.path.basename(memtest)))
 
     def write_dhcp_file(self):
         """
@@ -818,13 +821,50 @@ class BootSync:
             contents = self.write_pxe_file(None,None,profile,distro,False,include_header=False)
             if contents is not None:
                 pxe_menu_items = pxe_menu_items + contents + "\n"
- 
-        # save the template.
+        for memtestentry in glob.glob(self.bootloc + '/memtest*'):
+                contents = self.write_memtest_pxe(os.path.join("/" + os.path.basename(memtestentry)))
+                pxe_menu_items = pxe_menu_items + contents + "\n"
+              
+         # save the template.
         metadata = { "pxe_menu_items" : pxe_menu_items }
         outfile = os.path.join(self.bootloc, "pxelinux.cfg", "default")
         self.apply_template(template_data, metadata, outfile)
         template_src.close()
 
+    def write_memtest_pxe(self,filename):
+        """
+        Write a configuration file for memtest
+        """
+
+        # ---
+        # just some random variables
+        template = None
+        metadata = {}
+        buffer = ""
+
+        # ---
+        template = "/etc/cobbler/pxeprofile.template"
+
+        # ---
+        # store variables for templating
+        metadata["menu_label"] = "MENU LABEL %s" % os.path.basename(filename)
+        metadata["profile_name"] = os.path.basename(filename)
+        metadata["kernel_path"] = os.path.join("/" + os.path.basename(filename))
+        metadata["initrd_path"] = ""
+        metadata["append_line"] = ""
+
+        # ---
+        # get the template
+        template_fh = open(template)
+        template_data = template_fh.read()
+        template_fh.close()
+
+        # ---
+        # return results
+        buffer = self.apply_template(template_data, metadata, None)
+        return buffer
+
+
 
     def write_pxe_file(self,filename,system,profile,distro,is_ia64, include_header=True):
         """
_______________________________________________
et-mgmt-tools mailing list
et-mgmt-tools@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/et-mgmt-tools

[Index of Archives]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux