如何用Ansible的vars_prompt或AWX survey获取数据创建JSON文件
实现方案
你现有vars_prompt配置无需修改,直接在playbook中追加变量组装、文件生成的任务即可,该方案同时兼容AWX survey变量传入场景,不需要做逻辑适配。
完整可运行Playbook示例
--- - name: Playbook for creating a .JSON file hosts: localhost gather_facts: no vars_prompt: - name: fruitName prompt: Please enter Fruit Name default: "Apple" private: no - name: fruitSize prompt: Please enter required fruit size default: "Large" private: no - name: fruitColour prompt: Please provide fruit colour default: "Red" private: no tasks: - name: 构造JSON对应的数据字典 ansible.builtin.set_fact: output_config: fruitName: "{{ fruitName }}" fruitSize: "{{ fruitSize }}" fruitColour: "{{ fruitColour }}" - name: 写入格式化JSON文件 ansible.builtin.copy: content: "{{ output_config | to_nice_json }}" dest: /path/to/your/target/file.json # 替换为实际要存放JSON的路径 mode: '0644'
关键说明
to_nice_json是Ansible内置过滤器,会自动将字典序列化为带缩进换行的标准可读JSON,和你要求的输出格式完全匹配;如果需要生成无多余空格的压缩版JSON,替换为to_json过滤器即可。- AWX使用场景下,可以直接删除
vars_prompt段落,只要在job template的survey中配置三个同名变量fruitName、fruitSize、fruitColour,后续生成JSON的任务逻辑完全不需要改动,会自动读取survey传入的值生成文件。 - 如果需要在远程被控节点上生成JSON文件,将
hosts修改为目标主机组即可,文件会直接写入对应被控节点的指定路径。 - 禁止手动拼接JSON字符串,这种方式遇到特殊字符时很容易出现转义错误、格式非法问题,用内置过滤器做序列化是最稳定的实现方式。
执行后生成的JSON文件内容完全符合预期:
{ "fruitName": "Apple", "fruitSize": "Large", "fruitColour": "Red" }
内容的提问来源于stack exchange,提问作者Aditya Siddarth
相关产品推荐
相关产品推荐

