7 ERB 模板 #
ERB 模板允许在配置文件中嵌入一些 Ruby 代码,以在安装期间修改配置文件。利用此方法,您可以通过设置值、添加或跳过某些部分等方式,来检查系统并调整配置文件。
要激活 ERB 处理,配置文件的扩展名必须为 .erb
(例如,autoyast.xml.erb
)。之后,它将无法合并规则/类和 ERB 模板。
7.1 什么是 ERB
? #
ERB
即 Embedded Ruby,可让您使用 Ruby 编程语言的强大功能来生成不同类型的内容。利用 ERB
,您可以在配置文件中包含一些 Ruby 代码,以在运行时根据安装系统调整配置文件。
使用 ERB 时,Ruby 代码包含在 <%
和 %>
符号之间。如果您希望将命令输出包含在最终的配置文件中,只需添加一个等号 (=
) 即可。
<bootloader> <% require "open-uri" %> <%= URI.open("http://192.168.1.1/profiles/bootloader-common.xml").read %> </bootloader>
AutoYaST 提供了一小组帮助程序函数,以从底层系统中检索信息(例如 disks
或 network_cards
)。您可以在第 7.2 节 “模板帮助程序”中查看帮助程序及值列表。
7.2 模板帮助程序 #
模板帮助程序是 Ruby 方法的集合,可用于配置文件中以检索安装系统的相关信息。
7.2.1 disks
#
disks
帮助程序可返回检测到的磁盘列表。列表的每个元素包含一些基本信息,例如设备名称或大小。
键 |
类型 |
值 |
---|---|---|
|
字符串 |
设备内核名称(例如 |
|
字符串 |
磁盘型号 |
|
字符串 |
序列号 |
|
整数 |
磁盘大小(以字节为单位) |
|
字符串数组 |
磁盘 udev 名称列表。您可以使用其中的任何名称来表示设备。 |
|
字符串 |
磁盘供应商名称 |
以下示例中的配置文件会在最大的磁盘上安装系统。它会按大小对现有磁盘列表排序,然后使用最后一个磁盘。之后,它会使用 :device
键作为 device
元素的值。
<partitioning t="list"> <drive> <% disk = disks.sort_by { |d| d[:size] }.last %> <!-- find the largest disk --> <device><%= disk[:device] %></device> <!-- print the disk device name --> <initialize t="boolean">true</initialize> <use>all</use> </drive> </partitioning>
7.2.2 network_cards
#
network_cards
帮助程序可返回网卡列表,包括网卡名称,状态信息(例如,它们是否已连接)。
键 |
类型 |
值 |
---|---|---|
|
字符串 |
设备名称(例如 |
|
字符串 |
MAC 地址 |
|
布尔 |
设备是否处于活动状态 |
|
布尔 |
设备是否已连接 |
|
字符串 |
磁盘供应商名称 |
下面的示例会找到最先连接网络的网卡,并将其配置为使用 DHCP。
<interfaces t="list"> <% with_link = netword_cards.sort_by { |n| n[:name] }.find { |n| n[:link] } %> <% if with_link %> <interface> <device><%= with_link[:device] %></device> <startmode>auto</startmode> <bootproto>dhcp</bootproto> </interface> <% end > </interfaces>
7.2.3 os_release
#
os_release
帮助程序可返回操作系统信息,这些信息包含在 /etc/os-release
文件中。
键 |
类型 |
值 |
---|---|---|
|
字符串 |
发行套件 ID(例如 |
|
字符串 |
发行套件名称(例如 |
|
字符串 |
发行套件版本(例如 |
您可以使用这些信息决定要安装的产品,对所有发行套件(SLE 或 openSUSE 发行套件)使用几乎相同的配置文件。
<products t="list"> <% if os_release[:id] == 'sle' %> <product>SLES</product> <% else %> <product>openSUSE</product> <% end %< </products>