【发布时间】:2019-03-11 10:02:22
【问题描述】:
是否可以在 YAML vars 文件中定义 var,如下所示:
nodeJs:
version : "10.x"
url : "xxx.com/{{ nodeJS['version'] }}"
script : "runme.sh"
我相信这是可能的,因为 Python 本身允许这样的引用:
nodeJS = {"version": "10.x", "url": "xxx.com/"+nodeJS['version'], "script":"runme.sh"}
Output:
nodeJS
Out[34]: {'script': 'runme.sh', 'url': 'xxx.com/10.x', 'version': '10.x'}
我知道我可以简单地定义如下变量:
nodeJSversion = "10.x"
nodeJSurl = "xxx.com/{{ nodeJSversion }}"
但不适合
【问题讨论】:
-
我认为没有办法动态解析变量。该剧本假定它是一个字符串,并且只打印字符串而不是解析变量。为什么你没有 vars 的 jinja 模板,解析模板并在 playbook 中加载 vars 文件???
-
我想在 playbook 的不同任务中引用这些变量,目前是这样的:
- name : Download Node.js script get_url : url : "{{ njUrl }}" dest : "{{ ansible_env.HOME}}/{{ njScript }}" register : nodejs_download - name : Add Node.js PPA shell : | bash "{{ ansible_env.HOME}}/{{ njScript }}" register : njresult become : yes when : nodejs_download.changedimo,像 nodeJS['version']、nodeJS['url'] 这样的变量更易于阅读