您可以使用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"
謝謝。您是否知道預計從Web服務接收到的數據結構是什麼?關於'with_url'的唯一文檔位於[「更多查找」](http://docs.ansible.com/ansible/playbooks_lookups.html#more-lookups)中,並且僅表明該命令存在。我期望它是某種列表,以便'{{item}}'可以迭代它,但不明白究竟應該提供什麼(它不是JSON形式的動態庫存定義,它看起來應該是某種東西就像我提到的那樣,我認爲這是可迭代的)。 – WoJ
具體而言,我收到以下錯誤:「'通過'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
@WoJ我用例子更新了我的答案。'with_url '在http響應中迭代線 - 它是通用查找插件,可以用於任何任務,而不僅僅用於add_host。 –