【问题标题】:ansible variables inside variables变量内的ansible变量
【发布时间】:2016-06-20 06:08:20
【问题描述】:

我正在尝试构建一个使用文件中的一些变量的角色。 虽然这些变量也依赖于一些公共变量,但我想为所有角色定义一个变量,而无需将其复制并粘贴到每个变量文件中。

虽然我不明白我怎么能做到这一点。我说的只是 vars 文件。

例如roles/dns/tasks/main.yml 包含特定位置的文件:

- include_vars: ../vars/dns/domains_{{ location }}.yml

位置是在角色级别定义的。在这里面,我试图为各种 dns 名称定义设置,例如:

domains: [
  {
    domain: "domain.com",
    location: "america", 
    ip: "xx.xx.xx.xx",
    ttl: 1800,
    mx: "10 mail",
    subdomains: [
      { name: "www",    ip: "xx.xx.xx.xx"},
    ]   
  },  
]

所以在这里我为每个条目定义了相同的 IP。 有没有办法将所有 IP 放入某个全局 var 文件(例如 group_vars/all/vars_file.yml )并在这个角色特定的 var 文件中使用它,如下所示:

domains: [
  {
    domain: "domain.com",
    location: "america", 
    ip: server.america.ip,
    ttl: 1800,
    mx: "10 mail",
    subdomains: [
      { name: "www",    ip: server.america.ip },
    ]   
  },  
]

server.america.ip 是在哪里定义的?

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    是的,这是可能的。变量文件实际上也是通过 jinja 运行的,所以变量文件中可以有基本的表达式和变量。

    domains: [
      {
        domain: "domain.com",
        location: "america", 
        ip: "{{ server.america.ip }}",
        ttl: 1800,
        mx: "10 mail",
        subdomains: [
          { name: "www",    ip: "{{ server.america.ip }}" },
        ]   
      },  
    ]
    

    【讨论】:

      【解决方案2】:

      例如,您可以在角色 Y 的 tasks/main.yml 开头包含角色 X 的变量。 例如,如果您有一个共同的角色,让我们将位置放在这个角色上。 唯一的潜在问题是您可能需要使用“with_items”来调用包含的变量。

      【讨论】:

        猜你喜欢
        • 2015-12-18
        • 2017-08-30
        • 2022-01-23
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 2015-05-18
        • 2019-09-13
        • 2021-10-26
        相关资源
        最近更新 更多