在Ansible中访问变量元素的方法

86次阅读
没有评论

问题描述

在使用Ansible时,尝试访问数据列表中的特定值,但操作失败,无法找到ipa变量。用户提供了一个包含数据的boulder.yaml变量文件的片段,以及一个用于创建文件的Jinja2模板nodes.j2,但尝试访问ipa值时出现错误。

以下是boulder.yaml变量文件的片段示例:

service:
  control:
    - name: "bldr0cuomdev01"
      ipa: 192.168.101.81
    - name: "bldr0cuomdev02"
      ipa: 192.168.101.82
management:
  control:
    - name: "bldr0cuomdev11"
      ipa: 10.100.78.81
    - name: "bldr0cuomdev12"
      ipa: 10.100.78.82

用户的Jinja2模板 nodes.j2 如下:

{{ service.control.ipa[0] }},{{ management.control.ipa[0] }}

用户尝试使用循环方式访问service.controlipa值,如下:

{% for s in service.control %}{{ s.ipa }}{% endfor %}

用户还尝试使用 .0'0' 作为索引,但都无法成功获取ipa值。

解决方案

请注意以下操作可能受到版本差异影响。

使用正确的索引访问

根据您的需求,您可以通过以下方式访问变量值:

{{ service.control[0].ipa }},{{ management.control[0].ipa }}

这将直接访问service.controlmanagement.control中的第一个元素的ipa值。

使用变量存储结果

您还可以将结果存储在一个变量中,以便更方便地在模板中使用:

{% set service_ipa = service.control[0].ipa %}
{% set management_ipa = management.control[0].ipa %}

{{ service_ipa }},{{ management_ipa }}

这样,您可以在模板的其他部分使用 service_ipamanagement_ipa 变量。

使用result变量

还有一种方法是使用 result 变量来存储结果,这在一些情况下可能更加方便:

{% set result = service.control[0].ipa ~ ',' ~ management.control[0].ipa %}

result: "{{ result }}"

在上述示例中,我们使用了~运算符来连接两个ipa值,并将结果存储在 result 变量中,然后将结果输出到模板。

结论

以上是在Ansible中访问变量元素的几种方法。您可以根据自己的需求选择适合的方式来获取和使用变量值。如果您的操作仍然无法成功,建议检查变量名称和结构是否正确,确保索引和属性名称的一致性。

正文完