我正在尝试生成动态广告资源文件。我写了一个生成json的程序。我希望能够在没有--list选项或其他选项的情况下调用我的程序(可以在某处覆盖--list吗?)。如果这是不可能的,是否有一个选项来生成一个库存文件(没有带有--list选项的可执行文件)只使用一个JSON文件?这就是想法
ansible-playbook playbook.yml -i test.json
其中json文件是playbook的库存。现在,当我尝试这种方法时,我收到以下错误:
ERROR! ERROR! host range must be begin:end or begin:end:step
这是json我正在使用
{
"myname":{
"hosts":[
"host1.company.biz",
"host2.company.biz",
"host3.company.biz",
"host4.company.biz"
],
"vars":{
"ansible_ssh_private_key_file":"/home/keys/.ssh/id_dev",
"ansible_ssh_private_key_file":"/home/keys/.ssh/id_staging",
"ansible_ssh_private_key_file":"/home/keys/.ssh/id_staging_uk"
}
}
}
答案 0 :(得分:1)
我不确定如何直接加载json,但我知道使用python的工作。如果你有这个预生成的json文件。你可以编写一个简单的python脚本,你可以用ansible-playbook调用它。让我们调用python文件test.py和json test.json。
这是我的样本剧本..
---
- name: run command on on host4
hosts: 'host4.company.biz'
vars:
foo: "{{ lookup('file', 'tmp.txt') }}"
tasks:
- debug: var=foo
以下是示例python动态库存脚本...(确保python脚本上的chmod + x)
#!/usr/bin/env python
from json import dumps, loads
test_file = loads(open('test.json', 'r').read())
print dumps(test_file, indent=4)
ansible-playbook -i test.py -u host4.company.biz -vvvv test.yml --connection=local.
示例输出..
ok: [host4.company.biz]
TASK [debug]
*******************************************************************
task path: /home/linuxdynasty/test.yml:7
File lookup using /home/linuxdynasty/tmp.txt as file
ok: [host4.company.biz] => {
"foo": [
"1",
"2",
"3",
"4"
]
}
我使用ansible 2.0.1测试了这个