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>