A.3. Satellite 特定的函数和变量
本节列出了 ERB 模板的特定 Satellite 功能和变量。请注意,其中一些可以在任何类型的模板中使用,例如,作业模板只接受 @host 变量和来自 表 A.4 “Kickstart 特定变量” 的变量,仅适用于 Kickstart 模板。
您可以在所有类型的模板中使用下表中列出的功能。
| Name | 描述 |
|---|---|
| indent(n) | 使用没有缩进的代码片段模板时,使用没有缩进的代码片段模板使用 n 个空格。 |
| foreman_url(kind) | 将完整的 URL 返回到给定类型的主机渲染模板。例如,"provision"类型的模板通常位于 http://HOST/unattended/provision。 |
| snippet(name) | 呈现指定的代码片段模板。有助于嵌套自定义模板。 |
| snippets(file) | 呈现 Foreman 数据库中找到的指定代码片段,如果数据库中找不到,尝试从 无人值守/snippets/ 目录中加载它。 |
| snippet_if_exists(name) | 呈现指定的代码片段,如果没有找到指定名称的代码片段,则跳过。 |
例 A.1. 使用代码片段和缩进功能
以下语法将 subscription_manager_registration 片断导入到模板,并将其缩进四个空格:
<%= indent 4 do snippet 'subscription_manager_registration' end %>
<%= indent 4 do
snippet 'subscription_manager_registration'
end %>
在作业模板中可以使用以下功能:有关使用示例,请参阅 第 12.2.4 节 “创建高级模板”。
| Name | 描述 |
|---|---|
| input(input_name) | 返回作业执行上指定输入的值。 |
| render_template(name, parameters) | 呈现指定的模板,类似于通用 snippet ()函数,但启用向模板传递参数。 |
以下变量允许使用模板中的主机数据。
| Name | 描述 |
|---|---|
| @host.architecture | 主机的构架。 |
| @host.bond_interfaces | 返回所有绑定接口的数组。请参阅 注意。 |
| @host.capabilities | 系统调配的方法,可以是 build (如 kickstart)或图像。 |
| @host.certname | 主机的 SSL 证书名称。 |
| @host.diskLayout | 主机的磁盘布局。可以从操作系统继承。 |
| @host.domain | 主机的域。 |
| @host.environment | 主机的 Puppet 环境。 |
| @host.facts | 返回一个来自 Facter 的 Ruby 事实哈希。例如,若要从输出中访问 "ipaddress" 事实,指定 @host.facts['ipaddress']。 |
| @host.grub_pass | 返回主机的 GRUB 密码。 |
| @host.hostgroup | 主机的主机组。 |
| @host.info['parameters'] | 返回包含主机参数信息的 Ruby 哈希。例如,使用 @host.info['parameters']['lifecycle_environment'] 来获取主机的生命周期环境。 |
| @host.image_build? | 如果使用镜像置备主机,则返回 true。 |
| @host.interfaces | 包含包括了主接口的所有可用主机接口的数组。请参阅 注意。 |
| @host.interfaces_with_identifier('IDs') | 返回具有给定标识符的接口数组。您可以将多个标识符数组作为输入传递,如 @host.interfaces_with_identifier (['eth0', 'eth1'])。请参阅 注意。 |
| @host.ip | 主机的 IP 地址。 |
| @host.location | 主机的位置。 |
| @host.mac | 主机的 MAC 地址。 |
| @host.managed_interfaces | 返回一组受管接口(不包括 BMC 和绑定接口)。请参阅 注意。 |
| @host.medium | 分配的操作系统安装介质。 |
| @host.name | 主机的全名。 |
| @host.operatingsystem.family | 操作系统系列。 |
| @host.operatingsystem.major | 所分配操作系统的主版本号。 |
| @host.operatingsystem.minor | 所分配操作系统的次要版本号。 |
| @host.operatingsystem.name | 分配的操作系统名称。 |
| @host.operatingsystem.boot_files_uri(@host.medium,@host.architecture) | 指向内核和 initrd 的完整路径,返回一个数组。 |
| @host.os.medium_uri(@host) | 用于置备的 URI (安装介质中配置的路径)。 |
| @host.param_false?(name) | 如果 给定名称的 host 参数评估为 false,则返回 false。 |
| @host.param_true?(name) | 如果 给定名称的 host 参数评估为 true,则返回 true。 |
| @host.params['parameter_name'] | 返回指定参数的值。 |
| @host.primary_interface | 返回主机的主接口。 |
| @host.provider | 计算资源提供商。 |
| @host.provision_interface | 返回主机的调配接口。返回接口对象。 |
| @host.ptable | 分区表名称。 |
| @host.puppetmaster | 主机应使用的 Puppet 主机。 |
| @host.pxe_build? | 如果使用网络或 PXE 置备主机,则返回 true。 |
| @host.shortname | 主机的短名称。 |
| @host.sp_ip | BMC 接口的 IP 地址。 |
| @host.sp_mac | BMC 接口的 MAC 地址。 |
| @host.sp_name | BMC 接口的名称。 |
| @host.sp_subnet | BMC 网络的子网。 |
| @host.subnet.dhcp | 如果为这个主机配置了 DHCP 代理,则返回 true。 |
| @host.subnet.dns_primary | 主机的主 DNS 服务器。 |
| @host.subnet.dns_secondary | 主机的辅助 DNS 服务器。 |
| @host.subnet.gateway | 主机的网关。 |
| @host.subnet.mask | 主机的子网掩码。 |
| @host.url_for_boot(:initrd) | 与此主机关联的 initrd 镜像的完整路径。不建议使用变量,因为它不进行干预。 |
| @host.url_for_boot(:kernel) | 与此主机关联的内核的完整路径。不建议使用此变量,首选 boot_files_uri。 |
| @provisioning_type | 根据调配类型,等于 'host' 或 'hostgroup'。 |
| @static | 如果网络配置是静态,则返回 true。 |
| @template_name | 正在呈现的模板的名称。 |
| grub_pass | 返回包括在 md5pass 参数中的 GRUB 密码,即 is-- md5pass=#{@host.grub_pass}。 |
| ks_console | 使用端口和主机的波特率(可以添加到内核行中)返回字符串。例如 console=ttyS1,9600。 |
| root_pass | 返回为系统配置的 root 密码。 |
注意
与网络接口相关的主机变量,如
@host.interfaces 或 @host.bond_interfaces 返回在阵列中分组的接口数据。要提取特定接口的参数值,请使用 Ruby 方法解析阵列。例如,要从阵列中获取有关第一个接口的信息,并在 kickstart 模板中使用它:
<% myinterface = @host.interfaces.first %> IPADDR="<%= myinterface.ip %>" NETMASK="<%= myinterface.subnet.mask %>" GATEWAY="<%= myinterface.subnet.gateway %>"
<% myinterface = @host.interfaces.first %>
IPADDR="<%= myinterface.ip %>"
NETMASK="<%= myinterface.subnet.mask %>"
GATEWAY="<%= myinterface.subnet.gateway %>"
您可以迭代 interface 数组,例如提取接口名称的数组:
<% ifnames = [] @host.interfaces.each do |i| ifnames.push(i.name) end %>
<% ifnames = []
@host.interfaces.each do |i|
ifnames.push(i.name)
end %>
例 A.2. 使用特定于主机的变量
以下示例检查主机是否启用了 Puppet 和 Puppetlabs 存储库:
<%
pm_set = @host.puppetmaster.empty? ? false : true
puppet_enabled = pm_set || @host.param_true?('force-puppet')
puppetlabs_enabled = @host.param_true?('enable-puppetlabs-repo')
%>
<%
pm_set = @host.puppetmaster.empty? ? false : true
puppet_enabled = pm_set || @host.param_true?('force-puppet')
puppetlabs_enabled = @host.param_true?('enable-puppetlabs-repo')
%>
以下示例演示了如何捕获主机操作系统的次版本和主版本,可用于软件包相关决策:
如果主机的子网启用了 DHCP 引导模式,以下示例导入 'kickstart_networking_setup' 片断:
<% subnet = @host.subnet %> <% if subnet.respond_to?(:dhcp_boot_mode?) -%> <%= snippet 'kickstart_networking_setup' %> <% end -%>
<% subnet = @host.subnet %>
<% if subnet.respond_to?(:dhcp_boot_mode?) -%>
<%= snippet 'kickstart_networking_setup' %>
<% end -%>
大多数常见的 Ruby 方法都可用于主机特定变量。例如,要提取主机的 IP 地址的最后一个片段,您可以使用:
<% @host.ip.split('.').last %>
<% @host.ip.split('.').last %>
以下变量设计为在 kickstart 配置模板中使用。
| Name | 描述 |
|---|---|
| @arch | 主机架构名称,与 @host.architecture.name 相同。 |
| @dynamic | 如果使用的分区表是 %pre 脚本(在表的第一行)中,返回 true。 |
| @epel | 一个命令,它会自动安装 epel-release rpm 的正确版本。在 %post 脚本中使用。 |
| @mediapath | 提供 URL 命令的完整 kickstart 行。 |
| @osver | 操作系统主要版本号,与 @host.operatingsystem.major 相同。 |