A.9. アレイの解析

テンプレートを作成または変更する際、アレイを返す変数が出てくる場合があります。たとえば、@host.interfaces または @host.bond_interfaces などのネットワークインターフェイスに関連するホスト変数は、アレイで分類されるインターフェイスデータを返します。特定のインターフェイスのパラメーター値を抽出するには、Ruby メソッドを使用してアレイを解析します。

アレイを解析する正しい方法を見つける

以下の手順は、テンプレート内のアレイの解析方法として関連するものを見つけるために使用できる例です。この例では、レポートテンプレートが使用されていますが、この手順は他のテンプレートにも適用できます。

  1. この例では、コンテンツホストの NIC を取得するために @host.interfaces 変数を使用すると、アレイを解析する方法を見つけるために使用できるクラス値が返されます。

    入力例:

    <%= @host.interfaces -%>

    レンダリング例:

    <Nic::Base::ActiveRecord_Associations_CollectionProxy:0x00007f734036fbe0>

  2. テンプレートの作成ウィンドウで、ヘルプ タブをクリックし、ActiveRecord_Associations_CollectionProxy クラスおよび Nic::Base クラスを検索します。
  3. ActiveRecord_Associations_CollectionProxy の場合、許可された方法またはメンバー コラムで、以下のメソッドを表示してアレイを解析できます。

    [] each find_in_batches first map size to_a
  4. Nic::Base の場合、許可された方法またはメンバー コラムで、以下の方法を表示してアレイを解析できます。

    alias? attached_devices attached_devices_identifiers attached_to bond_options children_mac_addresses domain fqdn identifier inheriting_mac ip ip6 link mac managed? mode mtu nic_delay physical? primary provision shortname subnet subnet6 tag virtual? vlanid
  5. インターフェイスアレイを繰り返すには、関連する方法を ERB 構文に追加します。

    入力例:

    <% load_hosts().each_record do |host| -%>
    <%    host.interfaces.each do |iface| -%>
      iface.alias?: <%= iface.alias? %>
      iface.attached_to: <%= iface.attached_to %>
      iface.bond_options: <%= iface.bond_options %>
      iface.children_mac_addresses: <%= iface.children_mac_addresses %>
      iface.domain: <%= iface.domain %>
      iface.fqdn: <%= iface.fqdn %>
      iface.identifier: <%= iface.identifier %>
      iface.inheriting_mac: <%= iface.inheriting_mac %>
      iface.ip: <%= iface.ip %>
      iface.ip6: <%= iface.ip6 %>
      iface.link: <%= iface.link %>
      iface.mac: <%= iface.mac %>
      iface.managed?: <%= iface.managed? %>
      iface.mode: <%= iface.mode %>
      iface.mtu: <%= iface.mtu %>
      iface.physical?: <%= iface.physical? %>
      iface.primary: <%= iface.primary %>
      iface.provision: <%= iface.provision %>
      iface.shortname: <%= iface.shortname %>
      iface.subnet: <%= iface.subnet %>
      iface.subnet6: <%= iface.subnet6 %>
      iface.tag: <%= iface.tag %>
      iface.virtual?: <%= iface.virtual? %>
      iface.vlanid: <%= iface.vlanid %>
    <%- end -%>

    レンダリング例:

    host1.example.com
      iface.alias?: false
      iface.attached_to:
      iface.bond_options:
      iface.children_mac_addresses: []
      iface.domain:
      iface.fqdn: host1.example.com
      iface.identifier: ens192
      iface.inheriting_mac: 00:50:56:8d:4c:cf
      iface.ip: 10.10.181.13
      iface.ip6:
      iface.link: true
      iface.mac: 00:50:56:8d:4c:cf
      iface.managed?: true
      iface.mode: balance-rr
      iface.mtu:
      iface.physical?: true
      iface.primary: true
      iface.provision: true
      iface.shortname: host1.example.com
      iface.subnet:
      iface.subnet6:
      iface.tag:
      iface.virtual?: false
      iface.vlanid: