背景
我通过 Terraform 管理域,它输出服务器 IP 地址。然后我有一个输出 YAML 清单的脚本(稍后输出)。
- Ansible 2.6.2
- 格式来源:https ://docs.ansible.com/ansible/2.6/user_guide/intro_inventory.html#hosts-and-groups
问题
当我运行ansible-inventory --inventory inventory.sh --graph
它时,它总是以
@all:
|--@stage:
|--@ungrouped:
| |--18.66.1.28
如果我希望机器处于小组赛阶段。
我发现静态清单和作为脚本输出的清单有不同的行为。
静态文件
如果您将其保存为静态文件并将其用作库存,它将起作用。
all:
hosts:
18.66.1.28
children:
stage:
hosts:
18.66.1.28:
输出:
@all:
|--@stage:
| |--18.66.1.28
|--@ungrouped:
脚本
但是如果你像下面这样指定shell脚本,它就行不通了
#!/bin/bash
echo "all:
hosts:
18.66.1.28
children:
stage:
hosts:
18.66.1.28:"
输出:
[WARNING]: * Failed to parse /tmp/inventory.sh with script plugin: You defined a group 'all' with bad data for the host list: {u'hosts':
u'18.66.1.28', u'children': {u'stage': {u'hosts': {u'18.66.1.28': None}}}}
[WARNING]: * Failed to parse /tmp/inventory.sh with ini plugin: /tmp/inventory.sh:3: Error parsing host definition 'echo "all:': No closing
quotation
[WARNING]: Unable to parse /tmp/inventory.sh as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
YAML 输出
变体 1
all:
hosts:
- 18.66.1.28
children:
stage:
hosts:
- 18.66.1.28:
变体 2
all:
hosts:
- 18.66.1.28
children:
stage:
hosts:
18.66.1.28:
变体 3
all:
hosts:
- 18.66.1.28
children:
stage:
hosts:
- 18.66.1.28