【问题标题】:How to access value from YAML key/value pair list item?如何从 YAML 键/值对列表项中访问值?
【发布时间】:2018-05-30 05:54:39
【问题描述】:

如果我有以下表示为键/值对的 YAML 列表项(我认为这就是它的名称),我该如何读取该值?我一直在查看 YAML 文档,但没有看到讨论过这种情况。

---
apache_vhosts:
  - servername: localhost
    documentroot: "/var/www/html"

我想做这样的事情并将 install_path 设置为“/var/www/html”:

...
# This doesn't work
install_path: "{{ apache_vhosts.servername[documentroot] }}"

【问题讨论】:

  • 您不会在 YAML 中读取值,因为 YAML 不是一种编程语言。您似乎在使用模板语言,但没有告诉我们是哪一种或在什么上下文中。
  • 我添加了 ansible 和 jinja2 标签。下次请添加尽可能多的上下文,以便其他人了解您正在使用的内容。 YAML 是一种自己的语言,不仅在 ansible 中使用。
  • 对不起。这是 Ansible 剧本的一部分,我正在尝试将一个 YAML 变量分配给文件中较高位置的另一个变量的值。
  • 我的回答对你有用吗?
  • tinita 的答案就是解决方案。当你说它不起作用时,你是什么意思?由于apache_vhosts 是一个列表,您是否通过list_items 循环对其进行迭代?你能添加你使用所有这些变量的 Ansible 代码吗(这样我们就可以知道你想要实现什么)?

标签: ansible yaml jinja2


【解决方案1】:

apache_vhosts 是一个映射列表。您正在尝试从此列表中访问密钥 servername,但列表没有密钥。 另外我不知道你想用.servername[documentroot]实现什么。

我猜你需要: apache_vhosts[0].documentroot(apache_vhosts的第一个元素->key documentroot)

请查看Jinja2 Template Docs。 编辑:可能更适合您的情况:Ansible Templating

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多