如何解决从输出中提取值并发送到下一个任务
我正在尝试在Ansible Tower中定义一个模板,我想在其中提取Kafka Broker中Active Controller的ID,然后在另一个模板/任务中使用此值,该模板/任务将执行滚动重启,但将确保活动控制器最后启动
当我运行此Ansible任务
C:\\full\\path\\config.js
我得到以下结果。我想提取 brokerid 并将2的值分配给可以在同一模板中的不同任务中使用的变量,或者当模板是工作流定义的一部分时将其传递给另一个模板。
我尝试使用- name: Find active controller
shell: '/bin/zookeeper-shell 192.168.129.227 get /controller'
register: resultAC
,但这不起作用。
resultAC.stdout_lines[5].brokerid
的结构:
resultAC
解决方法
由于JSON只是字符串列表的一部分,因此不会被解析或视为JSON。
您必须使用Ansible过滤器from_json
才能将其解析回字典。
给出剧本:
- hosts: all
gather_facts: no
vars:
resultAC:
stdout_lines:
- "Connecting to 192.168.129.227"
- ""
- "WATCHER::"
- ""
- "WatchedEvent state:SyncConnected type:None path:null"
- "{\"version\":1,\"brokerid\":2,\"timestamp\":\"1597241391146\"}"
tasks:
- debug:
msg: "{{ (resultAC.stdout_lines[5] | from_json).brokerid }}"
这提供了回顾:
PLAY [all] *************************************************************************************************************************************************************
TASK [debug] ***********************************************************************************************************************************************************
ok: [localhost] => {
"msg": "2"
}
PLAY RECAP *************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
再进一步,也许我会select
and match
stdout_lines
列表中的JSON,以防万一它不总是位于第六行:
- hosts: all
gather_facts: no
vars:
resultAC:
stdout_lines:
- "Connecting to 192.168.129.227"
- ""
- "WATCHER::"
- ""
- "WatchedEvent state:SyncConnected type:None path:null"
- "{\"version\":1,\"timestamp\":\"1597241391146\"}"
tasks:
- debug:
msg: "{{ (resultAC.stdout_lines | select('match','{.*\"brokerid\":.*}') | first | from_json).brokerid }}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。