Project

General

Profile

TemplateWriting » History » Version 31

Joshua Hoblitt, 10/27/2011 06:44 PM
describe @static & @dynamic

1 25 Paul Kelly
{{toc}}
2 26 Paul Kelly
3 1 Justin Sherrill
h1. Templates
4
5
6
7 16 Justin Sherrill
The following functions and macros can be used within templates.  These are guaranteed to work via the safemode rendering, to ensure a template can do nothing harmful. With safemode disabled other macros may work, but are not supported at this time.
8 15 Justin Sherrill
9 30 Martin Hovmöller
To enable safemode, set "safemode_render" to "true" in Settings -> Foreman settings.  Safemode rendering prevents templates from reading and writing files on the file system or modifying application data within foreman.  
10 1 Justin Sherrill
11
12 8 Justin Sherrill
h2. Accessing Templates
13 1 Justin Sherrill
14 10 Justin Sherrill
There are two ways to render a template, based on a single host, or based on a Hostgroup.  The host or hostgroup provides all the details with which to render the template.  
15 1 Justin Sherrill
16 10 Justin Sherrill
17 8 Justin Sherrill
h3. Host-based Rendering
18
19 13 Justin Sherrill
Only a single template of each type may be rendered for a system.  Foreman determines which template to use following these rules:
20 1 Justin Sherrill
21 13 Justin Sherrill
1. Only the templates of the appropriate kind and associated with the hosts operating system are considered
22
2. If a template has a hostgroup/environment combination that matches that of the host, use this template else
23
3. If a template is associated with the environment of the host, use this template, else
24
4. Use the first template found associated with the operating system associated with the host.
25 1 Justin Sherrill
26 13 Justin Sherrill
So essentially, the hostgroup/environment combination is used first, then just the environment, and finally just the operating system of the host.
27
28
29 1 Justin Sherrill
To access a template of a certain type simply use this url:
30
31 13 Justin Sherrill
@/unattended/KIND_NAME@
32 1 Justin Sherrill
33 13 Justin Sherrill
For example:    @/unattended/provision@
34 12 Justin Sherrill
would render the provisioning template.  The host will be based on the IP Address it is accessed from.  To spoof a template simply access the url in this manner:
35
36 13 Justin Sherrill
@/unattended/provision?spoof=192.168.0.1@
37 12 Justin Sherrill
38
where 192.168.0.1 is the ip address of the system you want to spoof. This allows you to view a template for a particular system from anywhere.  
39 8 Justin Sherrill
40
41 17 Justin Sherrill
42 8 Justin Sherrill
h3. Hostgroup-based rendering
43 9 Justin Sherrill
44 8 Justin Sherrill
Allows any template to be rendered for any Hostgroup.  When rendering using a hostgroup, @host is actually the hostgroup instead of a defined host. The default values for the hostgroup are used for templated values.  This means if a value is not set in the hostgroup, you may get an error when rendering the template.  To access a template using a Hostgroup to render, simply use this URL:
45
46
/unattended/template/Template Name/Hostgroup Name
47
48
For example, a hostgroup of name Finance, and a template named WebServerKickstart could be rendered using the url:
49
50 11 Justin Sherrill
/unattended/template/WebServerKickstart/Finance
51 1 Justin Sherrill
52 10 Justin Sherrill
h4.  PXE Menus
53
54 16 Justin Sherrill
Pxe Menus can be deployed to smart proxies from the Config Templates list page (/config_templates).  All provision templates will be added with each of their hostgroup combinations.  For example if the template "WebServerKickstart" is associated to the Hostgroup1/Production, Hostgroup2/Production, and Hostgroup2/Testing combinations, the template would only be added twice.  Once for WebServerKickstart-Hostgroup1 and WebServerKickstart-Hostgroup2.
55 8 Justin Sherrill
56
h2. Writing templates
57 17 Justin Sherrill
58
Templates can be written using common ERB style templating.  Here's an example on using a variable/function:
59
60
@rootpw --iscrypted <%25= root_pass %25>@
61
62
Using a simple conditional:
63
64
@<%25= "selinux --disabled\n" if @osver != 3 -%25>@
65
This would include a line to disable selinux if the operating system version is not 3 (since Selinux isn't supported on RHEL 3)
66
67
Another way to do conditional (with if/elsif/else):
68
69 18 Justin Sherrill
<pre>
70 17 Justin Sherrill
<%25 if @osver == 5 -%25>
71
 echo "uses yum"
72
<%25 elsif @osver == 4 -%25>
73
 echo "uses up2date
74
<%25 else -%25>
75
 echo "I'm not sure"
76
<%25 end -%25>
77 18 Justin Sherrill
</pre>
78 8 Justin Sherrill
79
80
81
h2. Functions and macros:
82
83 1 Justin Sherrill
|_.Name|_.Description|_.Example|
84
|root_pass  |The root password configured for the system| |
85 19 Justin Sherrill
|ks_console |A string assembled using the port and baud of the host which can be added to a kernel line | ks_console => console=ttyS1,9600 |
86 24 Justin Sherrill
|snippet(name)   | Renders the specified snippet | |
87 1 Justin Sherrill
|foreman_url(kind)| Provides the full URL to a host-rendered template of the given kind  | foreman_url("provision") =>  http://HOST/unattended/provision |
88
|@host.name                |The name of the host| |
89 28 Howard Jones
|@host.ip                |The IP address of the host| |
90 1 Justin Sherrill
|@host.diskLayout     |The disklayout of the host (could come from the operating system)| |
91
|@host.puppetmaster   |The puppetmaster the host should use | |
92 21 Justin Sherrill
|@host.architecture.name   |The arch of the host (i.e. x86_64)| |
93
|@host.operatingsystem.name|The operating system name| |
94 1 Justin Sherrill
|@host.operatingsystem.major |The major version of the OS||
95
|@host.operatingsystem.minor |The minor version of the OS||
96
|@host.operatingsystem.family |The OS Family (I.e. redhat, debian, etc.)||
97 21 Justin Sherrill
|@host.url_for_boot(:kernel) |Full url to the kernel associated with this host.||
98
|@host.url_for_boot(:initrd) |Full url to the initrd image associated with this host||
99 1 Justin Sherrill
100 29 Jacob McCann
*NOTE*: For *PXELinux* templates _only_ leave off the '@host.' from the above as it is currently generated slightly different from everything else.
101 2 Justin Sherrill
102 21 Justin Sherrill
h3. Kickstart only variables (Only available for provision templates and "RedHat" Family operating systems):
103 1 Justin Sherrill
104
|_.Name|_.Description|_.Example|
105 21 Justin Sherrill
|@osver |The OS Major Version (Same as @host.operatingsystem.major)||
106
|@arch | The architecture (same as @host.architecture.name)  ||
107
|@mediapath | The full kickstart line to provide the url command.|@mediapath => http://file.example.com/RHEL-5-Server/U5/x86_64/os/|
108
|@epel |A command which will automatically install the correct version of the epel-release rpm.  Use full in a %25post script.|@epel => "su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm'"|
109 1 Justin Sherrill
|@yumrepo |||
110 31 Joshua Hoblitt
|@static |true if the partition table being used is static|<%25 if @static -%25>|
111
|@dynamic |true if the parition table being used is a %25pre script (has #Dynamic as the first line of the table)|<%25 if @dynamic -%25>|
112 1 Justin Sherrill
113 21 Justin Sherrill
h3. Preseed attributes (Only available for provision templates and "Debian" Family operating systems)::
114 6 Justin Sherrill
115 1 Justin Sherrill
|_.Name|_.Description|_.Example|
116
|@preseed_path |||
117
|@preseed_server |||
118 27 Alexander Rusa
119
h3. Host- or Hostgroup parameters
120
121
@host.params["parameter_name"]