我在hostA上有一堆JSON文件。我正在开发服务器上运行剧本。我的目标是从hostA上的JSON文件中读取变量,并将该变量用作我的剧本中的条件来执行其他任务。我可以使用include_vars在我的开发服务器上读取JSON文件,并将变量用作执行任务的条件。但是,我无法读取hostA上的JSON文件。看起来include_vars仅适用于localhost。我还有其他模块可以用来实现我的目标吗?我的剧本看起来像这样:
---
- hosts: hostA
tasks:
- include_vars:
file: /mypath/myfile.json
name: my_var
- name: Create file if var_a in json file is less than 5
file:
path: /mypath/myfile
state: touch
when: '"{{ my_var.var_a|int }}" < 5'
答案 0 :(得分:0)
fetch文件,并在 include_vars 中使用它。
答案 1 :(得分:0)
使用fetch和include_vars的方法一次不能在多台计算机上使用,因为您将无法在每台计算机上分离事实。
相反,您可以考虑使用事实来实现目标。下面,我在远程计算机(例如,hostA)上的/etc/ansible/facts.d中创建了一个脚本,并使其对所有人可执行:
server.Router.BeforeRouting
当我运行它时,它会生成json
$ cd /etc/ansible/facts.d
$ chmod 0755 example.fact
$ cat example.fact
#!/usr/bin/env python
import json
kv = {'mykey': 'myvalue'}
print json.dumps(kv)
将其添加到您的角色或剧本-它会运行/etc/ansible/facts.d中的所有脚本。
$ ./example.fact
{"mykey": "myvalue"}
并确认您得到了想要的东西
- name: read local facts
setup:
filter: ansible_local
Ansible输出:
- name: debug
debug:
var: ansible_local.example
如果您想从远程计算机中将自定义值读入您的剧本执行中,现在所需要做的就是修改example.fact脚本以使用该信息并将其生成为json,例如:
ok: [hostA] => {
"ansible_local.example": {
"mykey": "myvalue"
}
}