在Ansible中,如何从另一个变量中获取变量然后获取其值

时间:2015-12-27 19:20:27

标签: ansible ansible-playbook

这是我的问题我需要使用一个变量'RDS_SG_NAME',然后在其值附加'_id'以获取另一个变量名称,我想要/需要该值。我的简单剧本看起来像这样:

---
- hosts: localhost
  connection: local
  gather_facts: no 
  vars:
    abc_id: 'some-value'
    RDS_SG_NAME: 'abc'
    RDS_SG_ID: "{{ RDS_SG_NAME +'_id' }}"
  tasks:
    - debug: msg="{{ RDS_SG_NAME }}"
    - debug: msg="{{ RDS_SG_ID }}"

当我运行这个剧本时,它会给出这样的值:

RDS_SG_NAME:abc
  RDS_SG_ID:abc_id

但是我想要它的某些价值,有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

如果为了简化示例而仅定义了这样的变量声明,则可能存在机会。可以从词典hostvars访问所有组和主机变量。

因此,如果您的vars实际上被定义为主机或组vars,您可以执行以下操作:

hostvars[ansible_hostname][RDS_SG_ID]

如果您确实在剧本中定义了变量,那么仍有机会。通过显示hostvars的内容(没有主机名),我可以在dict中看到你的局部变量:

TASK: [debug msg="{{ hostvars }}"] ******************************************** 
ok: [127.0.0.1] => {
    "msg": "\"{'inventory_hostname': '127.0.0.1', 'inventory_hostname_short': '127', 'abc_id': 'some-value', 'ansible_python_interpreter': '/usr/bin/python', 'RDS_SG_ID': \"{{RDS_SG_NAME"

RDS_SG_ID未经评估并突然停止,这可能是调试模块中的错误。但abc_id肯定存在。有趣的是,我无法从字典中提取它。无论您直接尝试访问什么值,错误消息都将是

  

未找到主机:abc_id

哪个有道理。但是使用主机名调用它会导致dict不包含已定义的变量。所以价值是在一个字典中,但你无法访问它。如果您在剧本中本地定义vars并需要访问它们,那么可能需要对此进行调查。

除此之外,Jinja / Ansible没有eval功能。