Thanks - this is precisely the sort of example I was looking for
Chris
-----Original Message-----
From: cobbler-bounces(a)lists.fedorahosted.org
[mailto:cobbler-bounces@lists.fedorahosted.org] On Behalf Of Glenn Bailey
Sent: 30 April 2010 16:21
To: cobbler mailing list
Subject: RE: Including python in kickstarts
Has anyone got any documentation, hints or samples of python inside
a
kickstart? Specifically I need to connect to a MySQL db when
displaying the kickstart to pull some information from a database that
will be used to configure the servers settings, and I'm having some
trouble getting to grips with it.
Sure, I use purley python in all my kickstarts, he's an excerpt from the beginning of
my "pre" section:
%pre --interpreter /usr/bin/python
# Begin KickstartConfigMenu.py snippet
"""
KickstartConfigMenu.py
A cobbler snippet to parse user input pre build to later be parsed by a
kickstart file during or post.
gbailey(a)terremark.com
"""
import os, sys
from snack import *
import ConfigParser
sys.path.append('/usr/lib/anaconda')
def set_tty(n):
f = open('/dev/tty%d' % n, 'a')
os.dup2(f.fileno(), sys.stdin.fileno())
os.dup2(f.fileno(), sys.stdout.fileno())
os.dup2(f.fileno(), sys.stderr.fileno())
class KickstartConfigMenu:
"""
Example usage:
x = KickstartConfigMenu("entry_box")
x.title = "Cobbler Network Config"
x.text = "eth0 Configuration"
x.items = ["Main", "IP Address", "Netmask",
"Gateway"]
x.gen_menu()
This will then create a file in /tmp called "eth0_configuration.conf" with
some options similar to this:
[main]
netmask = 255.255.255.0
hostname = mordor
gatway = 192.168.0.1
address = 192.168.0.10
The class will replace all spaces with an underscore and make all characters
lowerclass. The filename is based on the "text" option passed to the class.
Another example:
x = KickstartConfigMenu("list_box")
x.title = "Cobbler Swap Config"
x.text = "Select Swap Size"
x.items = ["1024", "2048", "4096", "8192"]
x.gen_menu()
Will generate a file in /tmp called "select_swap_size.conf" looking like
this:
[main]
result = 4096
"""
def __init__(self,type):
self.type = type
self.file = None # file to write to
self.title = None # Title of the window
self.text = None # Text description of the items to gather
self.items = [] # items to gather results for
self.complete = None
self.screen = None
def list_box(self):
self.results = []
self.display_results = None
x = ListboxChoiceWindow(self.screen, self.title, self.text, self.items,
['Continue'], 40, 1, -1)
self.results.append(self.items[int(x[1])])
self.display_results = self.text + " : " + self.items[int(x[1])] +
"\n"
def entry_box(self):
self.results = []
self.display_results = None
x = EntryWindow(self.screen, self.title, self.text, self.items, 1, 40, 20,
['Continue'], "None")
self.results = x[1]
y = 0
for result in x[1]:
if self.display_results:
self.display_results = self.display_results + self.items[y] + " :
" + result + "\n"
else:
self.display_results = self.items[y] + " : " + result +
"\n"
y += 1
def confirm_box(self):
self.display_results = "Confirm Options\n\n" + self.display_results
x = ButtonChoiceWindow(self.screen, self.title, self.display_results,
['Continue', 'Re-input Items'], 40, 0, 0, "None")
if x == "continue":
self.complete = 1
def error_box(self):
ButtonChoiceWindow(self.screen, self.title, self.error_string, ['Exit'],
40, 0, 0, "None")
self.screen.finish()
sys.exit()
def write_config(self):
config = ConfigParser.ConfigParser()
config.add_section("main")
self.file = "/tmp/" + self.text.replace("
","_").lower() + ".conf"
if self.type == "list_box":
self.items = ['result']
x = 0
for result in self.results:
config_item = self.items[x].replace(" ","_").lower()
config.set("main",config_item,result)
x += 1
try:
f = open(self.file,'w')
except:
self.error_string = "Unable to open " + self.file + " for
writing, Exiting"
self.error_box()
config.write(f)
f.close()
def gen_menu(self):
self.screen = SnackScreen()
try:
while not self.complete:
if self.type == "list_box":
self.list_box()
elif self.type == "entry_box":
self.entry_box()
self.confirm_box()
self.display_results = None
except:
self.error_string = "Something went wrong, check your params"
self.error_box()
self.write_config()
self.screen.finish()
_______________________________________________
cobbler mailing list
cobbler(a)lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/cobbler