如何提取Ansible register存储的fruits键值对并传递给shell脚本
Ansible 实现方案
首先确认你的fruits注册变量的结构,对应两种写法:
情况1:fruits 已经是结构化的字典列表
如果fruits本身就是如下格式的列表对象:
fruits: - {"key":"A","value":"Apple"} - {"key":"B","value":"Banana"} - {"key":"C","value":"Cherry"}
直接用loop遍历即可,任务示例:
- name: 依次调用script.sh传参 ansible.builtin.shell: "./script.sh {{ item.key | quote }} {{ item.value | quote }}" args: chdir: /opt/your_script_path # 替换为script.sh实际所在的目录 loop: "{{ fruits }}"
情况2:fruits 存储的是原始JSON行文本
如果之前的任务输出是纯文本,fruits.stdout_lines是每行一个JSON字符串的数组,需要先对每行做JSON解析再取值:
- name: 解析JSON行后调用script.sh ansible.builtin.shell: "./script.sh {{ (item | from_json).key | quote }} {{ (item | from_json).value | quote }}" args: chdir: /opt/your_script_path loop: "{{ fruits.stdout_lines }}"
说明
- 示例中使用
quote过滤器是为了对参数做转义,避免参数包含空格、特殊字符时出现shell解析错误,无特殊字符时可省略。 - 执行时Ansible会自动按列表顺序逐个遍历,最终生成你需要的三条命令执行效果。
内容的提问来源于stack exchange,提问作者Sugetha Chandran
相关产品推荐
相关产品推荐

