TemplateWriting » History » Version 48
Ronny M, 08/19/2013 07:20 PM
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 | 33 | Ohad Levy | h3. PXE Menus |
53 | 10 | Justin Sherrill | |
54 | 33 | Ohad Levy | 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(see above). 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 | 46 | Tomas Edwardsson | @rootpw --iscrypted <%= root_pass %>@ |
61 | 17 | Justin Sherrill | |
62 | Using a simple conditional: |
||
63 | |||
64 | 46 | Tomas Edwardsson | @<%= "selinux --disabled\n" if @osver != 3 -%>@ |
65 | 17 | Justin Sherrill | 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 | 46 | Tomas Edwardsson | <% if @osver == 5 -%> |
71 | 17 | Justin Sherrill | echo "uses yum" |
72 | 46 | Tomas Edwardsson | <% elsif @osver == 4 -%> |
73 | 17 | Justin Sherrill | echo "uses up2date |
74 | 46 | Tomas Edwardsson | <% else -%> |
75 | 17 | Justin Sherrill | echo "I'm not sure" |
76 | 46 | Tomas Edwardsson | <% end -%> |
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 | |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 | 19 | Justin Sherrill | |snippet(name) | Renders the specified snippet | | |
87 | 24 | 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 | 1 | Justin Sherrill | |@host.name |The (full) name of the host| | |
89 | 38 | Greg Sutcliffe | |@host.shortname |The (short) name of the host| | |
90 | 46 | Tomas Edwardsson | |@host.certname |The SSL certificate name of the host| | |
91 | 38 | Greg Sutcliffe | |@host.domain |The domain of the host| | |
92 | 39 | Ben Hagen | |@host.ip |The IP address of the host| | |
93 | 28 | Howard Jones | |@host.mac |The HW address of the host| | |
94 | 32 | Florian Koch | |@host.diskLayout |The disklayout of the host (could come from the operating system)| | |
95 | 1 | Justin Sherrill | |@host.puppetmaster |The puppetmaster the host should use | | |
96 | 46 | Tomas Edwardsson | |@host.environment |The environment the host should use | | |
97 | 34 | Frank Sweetser | |@host.architecture |The arch of the host (i.e. x86_64)| | |
98 | 21 | Justin Sherrill | |@host.operatingsystem.name|The operating system name| | |
99 | 1 | Justin Sherrill | |@host.operatingsystem.major |The major version of the OS|| |
100 | |@host.operatingsystem.minor |The minor version of the OS|| |
||
101 | |@host.operatingsystem.family |The OS Family (I.e. redhat, debian, etc.)|| |
||
102 | 42 | Trey Dockendorf | |@host.subnet.mask |The subnet mask of the host|| |
103 | |@host.subnet.gateway |The gateway of the host|| |
||
104 | |@host.subnet.dns_primary |The primary DNS of the host|| |
||
105 | |@host.subnet.dns_secondary |The secondary DNS of the host|| |
||
106 | 21 | Justin Sherrill | |@host.url_for_boot(:kernel) |Full url to the kernel associated with this host.|| |
107 | |@host.url_for_boot(:initrd) |Full url to the initrd image associated with this host|| |
||
108 | 44 | Siert Z. | |@host.sp_name|The name of the BMC interface || |
109 | |@host.sp_ip|The IP address of the BMC interface || |
||
110 | |@host.sp_mac|The HW address of the BMC interface || |
||
111 | |@host.sp_subnet|Subnet of the BMC network || |
||
112 | 48 | Ronny M | |@host.interfaces.size| Number of additional interfaces (either type interface or bmc) (only works if save_mode = false) |size=1 means a host has two interfaces| |
113 | |@host.interfaces.empty|If true host has only one interface (only works if save_mode = false) |use !@host.interfaces.empty in test to do something only if host has two or more interfaces| |
||
114 | 1 | Justin Sherrill | |
115 | *NOTE*: For *PXELinux* templates in 0.4 or older _only_ leave off the '@host.' from the above as it is currently generated slightly different from everything else. |
||
116 | |||
117 | 21 | Justin Sherrill | h3. Kickstart only variables (Only available for provision templates and "RedHat" Family operating systems): |
118 | 1 | Justin Sherrill | |
119 | |_.Name|_.Description|_.Example| |
||
120 | 21 | Justin Sherrill | |@osver |The OS Major Version (Same as @host.operatingsystem.major)|| |
121 | |@arch | The architecture (same as @host.architecture.name) || |
||
122 | |@mediapath | The full kickstart line to provide the url command.|@mediapath => http://file.example.com/RHEL-5-Server/U5/x86_64/os/| |
||
123 | 46 | Tomas Edwardsson | |@epel |A command which will automatically install the correct version of the epel-release rpm. Use full in a %post script.|@epel => "su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm'"| |
124 | |@dynamic |true if the parition table being used is a %pre script (has #Dynamic as the first line of the table)|<% if @dynamic -%>| |
||
125 | 1 | Justin Sherrill | |
126 | 21 | Justin Sherrill | h3. Preseed attributes (Only available for provision templates and "Debian" Family operating systems):: |
127 | 6 | Justin Sherrill | |
128 | 1 | Justin Sherrill | |_.Name|_.Description|_.Example| |
129 | |@preseed_path ||| |
||
130 | |@preseed_server ||| |
||
131 | 27 | Alexander Rusa | |
132 | h3. Host- or Hostgroup parameters |
||
133 | |||
134 | 35 | David M. | @host.params['parameter_name'] |
135 | |||
136 | 45 | Mikael Fridh | Hint: For Foreman older than 1.0 you have to disable Safemode-Rendering in More->Settings. |
137 | 36 | Adrian Bridgett | |
138 | 41 | Ohad Levy | h3. Compute Resource Specific functions |
139 | |||
140 | see [[Compute Resources#Templates]] |
||
141 | |||
142 | 36 | Adrian Bridgett | h3. Settings |
143 | |||
144 | Setting.setting_name |
||
145 | |||
146 | You will need to disable Safemode-Rendering in More->Settings. |