2016-03-18 35 views
0

我正在尝试生成动态库存文件。我写了一个生成json的程序。我希望能够在不使用--list选项或其他选项的情况下调用我的程序(可以将--list覆盖到某处?)。如果不可能,是否有一个选项可以通过使用JSON文件来生成库存文件(没有带有--list选项的可执行文件)?这是想法将是使用json文件或可执行文件生成动态库存文件--list

ansible-playbook playbook.yml -i test.json 

其中json文件是剧本的清单。现在,当我尝试这个方法我收到以下错误:

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" 
     } 
    } 
} 

回答

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 

这里是样品蟒蛇动态库存脚本...(请务必于chmod + X上的Python脚本)

#!/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测试了这个版本。