2016-03-18 72 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測試了這個版本。