2016-07-28 44 views
0

我目前通過我可以在劇本中使用Web服務中的清單數據嗎?

# ansible-playbook -i myscript.py myplaybook.yaml 

其中myscript.py生成相關主機信息(每documentation)和myplaybook.py開始運行我的劇本與

--- 
- hosts: all 
(...) 

這工作得很好。

我現在想

  • 通過Web服務接收庫存:包括劇本一call to the web service內收到庫存以適當的格式,不管它是什麼(我控制Web服務)
  • 以及在劇本中直接使用此庫存,但不包含-i參數,host: all指令明白它應該使用它。

這是可行的嗎?我覺得在劇本開始時需要庫存(=不能在劇本中生成)

回答

2

您可以使用add_host模塊動態創建庫存。
像這樣的東西開始,並修改您的需要:

--- 
- hosts: localhost 
    tasks: 
    - add_host: name={{item}} group=hosts_from_webservice 
     with_url: https://mywebservice/host_list_as_simple_strings 
     # in this example web service should return one ip/hostname by line: 
     # 10.1.1.1 
     # 10.1.1.2 
     # 10.1.1.3 

    - add_host: name={{(item | from_json).host}} group=hosts_from_webservice description={{(item | from_json).desc}} 
     with_url: https://mywebservice/host_list_as_json_strings 
     # in this example web service should return JSON object on every line: 
     # {"host":"10.1.1.1","desc":"hello"} 
     # {"host":"10.1.1.2","desc":"world"} 
     # {"host":"10.1.1.3","desc":"test"} 

- hosts: hosts_from_webservice 
    tasks: 
    - debug: msg="I'm a host from webservice" 
+0

謝謝。您是否知道預計從Web服務接收到的數據結構是什麼?關於'with_url'的唯一文檔位於[「更多查找」](http://docs.ansible.com/ansible/playbooks_lookups.html#more-lookups)中,並且僅表明該命令存在。我期望它是某種列表,以便'{{item}}'可以迭代它,但不明白究竟應該提供什麼(它不是JSON形式的動態庫存定義,它看起來應該是某種東西就像我提到的那樣,我認爲這是可迭代的)。 – WoJ

+0

具體而言,我收到以下錯誤:「'通過'add_host'創建主機:hostname = {'hosts':['10 .11.2.16','10 .11.2.4','10 .11.2.5','10 .11.2.15', '10 .11.2.6']} 意外的異常:不可互換的類型:'dict' '我嘗試了多個數據結構('hostname ='後可見的結構):列表,字典等 - 錯誤是他們都是(我希望在那一點上''hostname ='應該有一個主機名傳遞,通過Web服務的響應迭代 - 我不知道如何構造。 – WoJ

+1

@WoJ我用例子更新了我的答案。'with_url '在http響應中迭代線 - 它是通用查找插件,可以用於任何任務,而不僅僅用於add_host。 –

相關問題