我扮演以下角色:
- name: get answer from server
command: "curl http://my_server:8888"
register: response
现在,response.stdout
看起来像:
Server: 10.8.7.1
Domain: com
State: Health
Type: B
Server: 10.8.7.2
Domain: eu
State: Health
Type: A
Server: 10.8.7.3
Domain: com
State: Health
Type: C
Server: 10.8.7.4
Domain: com
State: Bad
Type: C
如何将其转换为字典列表(如{"Server": "10.8.7.1", "Domain": "com","State": "Health","Type": "B"}
)?
我考虑编写自己的python模块,但是我相信您可以知道一些更优雅的方法。
答案 0 :(得分:0)
不了解优雅,但是如果curl
的输出稳定且可预测,则可以执行以下操作:
- name: get answer from server
shell: curl http://my_server:8888 | sed -e 's/^/ /' -e 's/ Server/- Server/'
register: response
- debug:
var: response.stdout | from_yaml
shell
切换到comannd
sed
命令将输出格式化为类似于YAML的内容response.stdout
传递到from_yaml
过滤器中,该过滤器会将字符串解码为字典列表再次,不确定优雅。对我来说有点脏,但是,嘿,把工作做好了:)
关于干净的实现方式-如果可能,请以某种结构化格式(最好是JSON)在远程服务器上获取文件,然后可以使用Ansible uri
模块读取该文件。