我可以在剧本中使用来自网络服务的库存数据吗?

时间:2016-07-28 07:44:38

标签: ansible ansible-playbook

我目前通过

运行我的剧本
# ansible-playbook -i myscript.py myplaybook.yaml

其中myscript.py生成相关的主机信息(按documentation),myplaybook.py

开头
---
- hosts: all
(...)

这很好用。

我现在想

  • 通过网络服务接收广告资源:在游戏手册中加入call to the web service,并以适当的格式接收广告资源,无论它是什么(我控制网络服务)
  • 以及直接在剧本中使用此广告资源,没有-i参数,让host: all指令明白它应该使用它。

这是否可以在ansible中使用?我认为在剧本开头需要库存(=无法在剧本中生成)

1 个答案:

答案 0 :(得分: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"