我可以在 playbook 中使用来自 Web 服务的清单数据吗?
Can I use inventory data from a web service within a playbook?
我目前 运行 我的剧本来自
# ansible-playbook -i myscript.py myplaybook.yaml
其中 myscript.py
生成相关主机信息(根据 documentation)并且 myplaybook.py
以
开头
---
- hosts: all
(...)
这很好用。
我现在想
- 通过网络服务接收库存:在剧本中包含一个 call to the web service 并以适当的格式接收库存,无论它是什么(我控制网络服务)
- 以及直接在剧本中使用此库存,无需
-i
参数,让 host: all
指令了解它应该使用它。
这在 ansible 中是可能的吗? 我的印象是在剧本开始时需要库存(=它不能在剧本中生成)
您可以使用 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"
我目前 运行 我的剧本来自
# ansible-playbook -i myscript.py myplaybook.yaml
其中 myscript.py
生成相关主机信息(根据 documentation)并且 myplaybook.py
以
---
- hosts: all
(...)
这很好用。
我现在想
- 通过网络服务接收库存:在剧本中包含一个 call to the web service 并以适当的格式接收库存,无论它是什么(我控制网络服务)
- 以及直接在剧本中使用此库存,无需
-i
参数,让host: all
指令了解它应该使用它。
这在 ansible 中是可能的吗? 我的印象是在剧本开始时需要库存(=它不能在剧本中生成)
您可以使用 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"