【问题标题】:How To create Ansible variable from string如何从字符串创建 Ansible 变量
【发布时间】:2016-12-04 06:51:05
【问题描述】:

例如:

我有想要使用的变量 {{ ami_redhat_7_2 }}

vars:
  OsType: redhat
  OsVersion: '7_2'

tasks:
- debug: 'msg="{{ ami_{{OsType}}_{{ OsVersion }} }}"'

我收到错误:

fatal: [localhost]: FAILED! => {
    "failed": true,
    "msg": "template error while templating string: expected token 'end of print statement', got '{'. String: {{ ami_{{ OsType }}_{{ OsVersion }} }}"
}

【问题讨论】:

  • 你试过了吗:-调试:msg="{{vars["ami_" ~ OsType ~ "_" ~ OsVersion]}}"

标签: ansible ansible-playbook


【解决方案1】:

具有动态名称的“根”变量在 Ansible 中是一件棘手的事情。
如果它们是宿主事实,您可以像这样访问它们:

{{ hostvars[inventory_hostname]['ami_'+OsType+'_'+OsVersion] }}

如果它们是播放绑定变量,您可以通过未记录的vars 对象访问它们:

{{ vars['ami_'+OsType+'_'+OsVersion] }}

但它们永远不会被模板化,因为vars 以特殊方式处理。

对你来说最简单的方法是一些带有预定义名称和动态键名的字典,例如:

ami:
   redhat_7_2: 827987234/dfhksdj/234ou234/ami.id

要访问它,您可以使用:

{{ ami[OsType+'_'+OsVersion] }}

附:并按照其他答案中的建议删除 msg 周围的引号。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2011-03-10
  • 1970-01-01
相关资源
最近更新 更多