变量内的ansible变量

时间:2016-06-19 19:41:42

标签: ansible ansible-playbook

我正在尝试构建一个使用文件中某些变量的角色。 虽然这些变量还取决于我想为所有角色定义的一些常见变量,但只有一个没有复制并将其粘贴到每个变量文件中。

虽然我无法理解如何做到这一点。我只谈论vars文件。

E.g。 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 },
    ]   
  },  
]

where server.america.ip在全球某处定义?

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。变量文件实际上也通过jinja运行,因此您可以在变量文件中包含基本表达式和变量。

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

答案 1 :(得分:0)

例如,您可以在角色Y的tasks / main.yml的开头包含角色X中的变量。 例如,如果您有共同的角色,请在此位置放置位置。 唯一可能的问题是,您可能需要使用' with_items'调用包含的变量。