如何将Ansible INI格式清单转换为JSON或YAML格式?
嘿,这个问题太常见了!刚上手Ansible的朋友大多从INI格式清单开始,但AWX要求用YAML/JSON,其实完全不用手动转换,Ansible自带的ansible-inventory工具就能搞定一切,简单得很。
转成JSON格式
假设你的INI清单文件叫inventory.ini,直接跑这条命令就能生成标准JSON清单:
ansible-inventory -i inventory.ini --export --list > inventory.json
-i指定你的INI清单路径--export是关键参数,它会去掉Ansible内部的元数据,只保留清单的核心内容,这样导入AWX时更干净--list以JSON格式输出清单结构,重定向到inventory.json文件里
转成YAML格式
如果是Ansible 2.11及以上版本,直接用--yaml参数就能一步生成YAML:
ansible-inventory -i inventory.ini --export --yaml > inventory.yaml
要是你用的是旧版Ansible(低于2.11)没有--yaml参数,也可以先转成JSON再用Python转成YAML(Python的yaml模块一般随Ansible安装自带):
ansible-inventory -i inventory.ini --export --list | python -c 'import json, yaml; print(yaml.dump(json.loads(input()), default_flow_style=False))' > inventory.yaml
举个实际例子
比如你有这样的INI清单:
[webservers] web1.example.com web2.example.com ansible_user=admin ansible_port=2222 [dbservers] db1.example.com ansible_host=192.168.1.100 [all:vars] ansible_python_interpreter=/usr/bin/python3
转成YAML后会是这样的结构(完全符合AWX的要求):
all: children: dbservers: hosts: db1.example.com: ansible_host: 192.168.1.100 webservers: hosts: web1.example.com: {} web2.example.com: ansible_port: 2222 ansible_user: admin vars: ansible_python_interpreter: /usr/bin/python3
这样生成的文件直接就能导入AWX了,根本不用手动改格式,省超多事!
内容的提问来源于stack exchange,提问作者user1717259
相关产品推荐
相关产品推荐

