TemplateWriting » History » Version 20
Justin Sherrill, 02/02/2011 05:17 PM
1 | 1 | Justin Sherrill | h1. Templates |
---|---|---|---|
2 | |||
3 | |||
4 | |||
5 | 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. |
6 | 15 | Justin Sherrill | |
7 | To ensure that safemode is enabled, set ":safemode_render = true" in settings.yml. Safemode rendering prevents templates from reading and writing files on the file system or modifying application data within foreman. |
||
8 | 1 | Justin Sherrill | |
9 | |||
10 | 8 | Justin Sherrill | h2. Accessing Templates |
11 | 1 | Justin Sherrill | |
12 | 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. |
13 | 1 | Justin Sherrill | |
14 | 10 | Justin Sherrill | |
15 | 8 | Justin Sherrill | h3. Host-based Rendering |
16 | |||
17 | 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: |
18 | 1 | Justin Sherrill | |
19 | 13 | Justin Sherrill | 1. Only the templates of the appropriate kind and associated with the hosts operating system are considered |
20 | 2. If a template has a hostgroup/environment combination that matches that of the host, use this template else |
||
21 | 3. If a template is associated with the environment of the host, use this template, else |
||
22 | 4. Use the first template found associated with the operating system associated with the host. |
||
23 | 1 | Justin Sherrill | |
24 | 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. |
25 | |||
26 | |||
27 | 1 | Justin Sherrill | To access a template of a certain type simply use this url: |
28 | |||
29 | 13 | Justin Sherrill | @/unattended/KIND_NAME@ |
30 | 1 | Justin Sherrill | |
31 | 13 | Justin Sherrill | For example: @/unattended/provision@ |
32 | 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: |
33 | |||
34 | 13 | Justin Sherrill | @/unattended/provision?spoof=192.168.0.1@ |
35 | 12 | Justin Sherrill | |
36 | 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. |
||
37 | 8 | Justin Sherrill | |
38 | |||
39 | 17 | Justin Sherrill | |
40 | 8 | Justin Sherrill | h3. Hostgroup-based rendering |
41 | 9 | Justin Sherrill | |
42 | 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: |
43 | |||
44 | /unattended/template/Template Name/Hostgroup Name |
||
45 | |||
46 | For example, a hostgroup of name Finance, and a template named WebServerKickstart could be rendered using the url: |
||
47 | |||
48 | 11 | Justin Sherrill | /unattended/template/WebServerKickstart/Finance |
49 | 1 | Justin Sherrill | |
50 | 10 | Justin Sherrill | h4. PXE Menus |
51 | |||
52 | 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. |
53 | 8 | Justin Sherrill | |
54 | h2. Writing templates |
||
55 | 17 | Justin Sherrill | |
56 | Templates can be written using common ERB style templating. Here's an example on using a variable/function: |
||
57 | |||
58 | @rootpw --iscrypted <%25= root_pass %25>@ |
||
59 | |||
60 | Using a simple conditional: |
||
61 | |||
62 | @<%25= "selinux --disabled\n" if @osver != 3 -%25>@ |
||
63 | This would include a line to disable selinux if the operating system version is not 3 (since Selinux isn't supported on RHEL 3) |
||
64 | |||
65 | Another way to do conditional (with if/elsif/else): |
||
66 | |||
67 | 18 | Justin Sherrill | <pre> |
68 | 17 | Justin Sherrill | <%25 if @osver == 5 -%25> |
69 | echo "uses yum" |
||
70 | <%25 elsif @osver == 4 -%25> |
||
71 | echo "uses up2date |
||
72 | <%25 else -%25> |
||
73 | echo "I'm not sure" |
||
74 | <%25 end -%25> |
||
75 | 18 | Justin Sherrill | </pre> |
76 | 8 | Justin Sherrill | |
77 | |||
78 | |||
79 | h2. Functions and macros: |
||
80 | |||
81 | 1 | Justin Sherrill | |_.Name|_.Description|_.Example| |
82 | |root_pass |The root password configured for the system| | |
||
83 | 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 | |
84 | 6 | Justin Sherrill | |snippets(name) | Renders the specified snippet | | |
85 | 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 | |
86 | |@host.name |The name of the host| | |
||
87 | |@host.diskLayout |The disklayout of the host (could come from the operating system)| | |
||
88 | |@host.puppetmaster |The puppetmaster the host should use | | |
||
89 | |@host.architecture |The arch of the host (i.e. x86_64)| | |
||
90 | |@host.operatingsystem|The operating system name| | |
||
91 | |@host.operatingsystem.media_url ||| |
||
92 | |@host.operatingsystem.major |The major version of the OS|| |
||
93 | |@host.operatingsystem.minor |The minor version of the OS|| |
||
94 | |@host.operatingsystem.family |The OS Family (I.e. redhat, debian, etc.)|| |
||
95 | |@host.url_for_boot(:kernel) ||| |
||
96 | |@host.url_for_boot(:initrd) ||| |
||
97 | |||
98 | |||
99 | 2 | Justin Sherrill | |
100 | 8 | Justin Sherrill | h3. Kickstart only variables: |
101 | 1 | Justin Sherrill | |
102 | |_.Name|_.Description|_.Example| |
||
103 | |@dynamic ||| |
||
104 | |@osver ||| |
||
105 | |@arch ||| |
||
106 | |@mediapath ||| |
||
107 | |@epel ||| |
||
108 | |@yumrepo ||| |
||
109 | |@static ||| |
||
110 | |||
111 | 8 | Justin Sherrill | h3. Preseed attributes: |
112 | 6 | Justin Sherrill | |
113 | 1 | Justin Sherrill | |_.Name|_.Description|_.Example| |
114 | |@preseed_path ||| |
||
115 | |@preseed_server ||| |