[et-mgmt-tools] passing list/dictionary in ksmeta

adamwolf at feelslikeburning.com adamwolf at feelslikeburning.com
Fri Jul 20 21:24:47 UTC 2007


> Hennessey Daniel wrote:
>> Hey people,
>>
>> I am trying to use the ksmeta="" construct to pass a list of
>> dictionaries through to the kickstart file where I am using a cheetah
>> "#for $var in $vars" loop to unravel them.
>>
>> Is this possible?
>
> Achieving that result is possible, though as you've entered it, the
> variable will just be a string, not a data structure.    --ksmeta in the
> command line allows for "key=value key=value" ... key/value pairs
> seperated by spaces.   Those values aren't evaluated to be Python data
> structures.
>
> I have not really used Cheetah for ultra-advanced templating usage,
> though it does allow executing arbitrary python code, so in theory,
> you could pass in arbitrary strings and work on them in Python,
> including evaling them to create real data structures.   Whether this
> works
> as advertised I don't know... though I could definitely use some more
> advanced templating examples for the Wiki.
>
> I'd be inclined to take a simpler approach though, and pass in simple
> variables like --ksmeta="eth0=dhcp eth1=dhcp", and then check
> for the values of those expressions, possibly in conjunction with "#if"
> templating
>
> #if defined $eth0   # syntax for this is probably wrong :)
>
>     some line containing value for $eth0
> #end
>
> etc

I spent some time working with this today.

Cheetah allows you to use #if $variable as a shortcut for "is the variable
defined?"

This shortcut will not work with Cobbler.  If something like that is
written in a kickstart template, and the profile with which it is
associated doesn't have the variable in its ksmeta, cobbler sync will
crash.

There's a workaround.

Instead of using the shortcut to see if the variable is defined, define it
to "none" or something obviously wrong/null in the profile.

For example, we have default printer information stored in Cobbler.  If we
set the profile to have the ksmeta pair of DefaultPrinter=none, our
kickstart template can have the section

#if $DefaultPrinter != "none"
lpoptions -d $DefaultPrinter
#end if

It works, and is only slightly less elegant than the (not working)

#if $DefaultPrinter
lpoptions -d $DefaultPrinter
#end if

I'm running the git sources from 2 days ago, if it matters to anyone.

Adam Wolf




More information about the et-mgmt-tools mailing list