这是我的问题我需要使用一个变量'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
但是我想要它的某些价值,有人能指出我正确的方向。
答案 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
功能。