TemplateWriting
Version 19 (Justin Sherrill, 02/02/2011 05:17 pm)
| 1 | 1 | h1. Templates |
|
|---|---|---|---|
| 2 | 1 | ||
| 3 | 1 | ||
| 4 | 1 | ||
| 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 | 15 | Justin Sherrill | 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 | ||
| 9 | 1 | ||
| 10 | 8 | Justin Sherrill | h2. Accessing Templates |
| 11 | 1 | ||
| 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 | ||
| 14 | 10 | Justin Sherrill | |
| 15 | 8 | Justin Sherrill | h3. Host-based Rendering |
| 16 | 8 | Justin Sherrill | |
| 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 | ||
| 19 | 13 | Justin Sherrill | 1. Only the templates of the appropriate kind and associated with the hosts operating system are considered |
| 20 | 13 | Justin Sherrill | 2. If a template has a hostgroup/environment combination that matches that of the host, use this template else |
| 21 | 13 | Justin Sherrill | 3. If a template is associated with the environment of the host, use this template, else |
| 22 | 13 | Justin Sherrill | 4. Use the first template found associated with the operating system associated with the host. |
| 23 | 1 | ||
| 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 | 13 | Justin Sherrill | |
| 26 | 13 | Justin Sherrill | |
| 27 | 1 | To access a template of a certain type simply use this url: |
|
| 28 | 1 | ||
| 29 | 13 | Justin Sherrill | @/unattended/KIND_NAME@ |
| 30 | 1 | ||
| 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 | 12 | Justin Sherrill | |
| 34 | 13 | Justin Sherrill | @/unattended/provision?spoof=192.168.0.1@ |
| 35 | 12 | Justin Sherrill | |
| 36 | 12 | Justin Sherrill | 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 | 8 | Justin Sherrill | |
| 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 | 8 | Justin Sherrill | |
| 44 | 8 | Justin Sherrill | /unattended/template/Template Name/Hostgroup Name |
| 45 | 8 | Justin Sherrill | |
| 46 | 8 | Justin Sherrill | For example, a hostgroup of name Finance, and a template named WebServerKickstart could be rendered using the url: |
| 47 | 8 | Justin Sherrill | |
| 48 | 11 | Justin Sherrill | /unattended/template/WebServerKickstart/Finance |
| 49 | 1 | ||
| 50 | 10 | Justin Sherrill | h4. PXE Menus |
| 51 | 10 | Justin Sherrill | |
| 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 | 8 | Justin Sherrill | h2. Writing templates |
| 55 | 17 | Justin Sherrill | |
| 56 | 17 | Justin Sherrill | Templates can be written using common ERB style templating. Here's an example on using a variable/function: |
| 57 | 17 | Justin Sherrill | |
| 58 | 17 | Justin Sherrill | @rootpw --iscrypted <%= root_pass %>@ |
| 59 | 17 | Justin Sherrill | |
| 60 | 17 | Justin Sherrill | Using a simple conditional: |
| 61 | 17 | Justin Sherrill | |
| 62 | 17 | Justin Sherrill | @<%= "selinux --disabled\n" if @osver != 3 -%>@ |
| 63 | 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) |
| 64 | 17 | Justin Sherrill | |
| 65 | 17 | Justin Sherrill | Another way to do conditional (with if/elsif/else): |
| 66 | 17 | Justin Sherrill | |
| 67 | 18 | Justin Sherrill | <pre> |
| 68 | 17 | Justin Sherrill | <% if @osver == 5 -%> |
| 69 | 17 | Justin Sherrill | echo "uses yum" |
| 70 | 17 | Justin Sherrill | <% elsif @osver == 4 -%> |
| 71 | 17 | Justin Sherrill | echo "uses up2date |
| 72 | 17 | Justin Sherrill | <% else -%> |
| 73 | 17 | Justin Sherrill | echo "I'm not sure" |
| 74 | 17 | Justin Sherrill | <% end -%> |
| 75 | 18 | Justin Sherrill | </pre> |
| 76 | 8 | Justin Sherrill | |
| 77 | 8 | Justin Sherrill | |
| 78 | 8 | Justin Sherrill | |
| 79 | 8 | Justin Sherrill | h2. Functions and macros: |
| 80 | 8 | Justin Sherrill | |
| 81 | 1 | |_.Name|_.Description|_.Example| |
|
| 82 | 1 | |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 | |foreman_url(kind)| Provides the full URL to a host-rendered template of the given kind | foreman_url("provision") => http://HOST/unattended/provision | |
|
| 86 | 1 | |@host |The name of the host| | |
|
| 87 | 1 | |@host.name |The name of the host| | |
|
| 88 | 1 | |@host.diskLayout |The disklayout of the host (could come from the operating system)| | |
|
| 89 | 1 | |@host.puppetmaster |The puppetmaster the host should use | | |
|
| 90 | 1 | |@host.architecture |The arch of the host (i.e. x86_64)| | |
|
| 91 | 1 | |@host.operatingsystem|The operating system name| | |
|
| 92 | 1 | |@host.operatingsystem.media_url ||| |
|
| 93 | 1 | |@host.operatingsystem.major |The major version of the OS|| |
|
| 94 | 1 | |@host.operatingsystem.minor |The minor version of the OS|| |
|
| 95 | 1 | |@host.operatingsystem.family |The OS Family (I.e. redhat, debian, etc.)|| |
|
| 96 | 1 | |@host.url_for_boot(:kernel) ||| |
|
| 97 | 1 | |@host.url_for_boot(:initrd) ||| |
|
| 98 | 1 | ||
| 99 | 1 | ||
| 100 | 2 | Justin Sherrill | |
| 101 | 8 | Justin Sherrill | h3. Kickstart only variables: |
| 102 | 1 | ||
| 103 | 1 | |_.Name|_.Description|_.Example| |
|
| 104 | 1 | |@dynamic ||| |
|
| 105 | 1 | |@osver ||| |
|
| 106 | 1 | |@arch ||| |
|
| 107 | 1 | |@mediapath ||| |
|
| 108 | 1 | |@epel ||| |
|
| 109 | 1 | |@yumrepo ||| |
|
| 110 | 1 | |@static ||| |
|
| 111 | 1 | ||
| 112 | 8 | Justin Sherrill | h3. Preseed attributes: |
| 113 | 6 | Justin Sherrill | |
| 114 | 1 | |_.Name|_.Description|_.Example| |
|
| 115 | 1 | |@preseed_path ||| |
|
| 116 | 1 | |@preseed_server ||| |
