从 puppet bolt 及其 inventory.yaml 的文档,here,您似乎可以通过在 a
group
的定义中指定另一个group
来定义 yaml 文件的多个级别。从而创建一个多级或嵌套的清单文件。
但是我找不到任何关于如何使用 cli 中的
bolt
命令调用嵌套清单文件的示例。
例如文档中的这个 yaml:
groups:
- name: ssh_nodes
groups:
- name: webservers
targets:
- 192.168.100.179
- 192.168.100.180
- 192.168.100.181
- name: memcached
targets:
- 192.168.101.50
- 192.168.101.60
config:
ssh:
user: root
config:
transport: ssh
ssh:
user: centos
private-key: ~/.ssh/id_rsa
host-key-check: false
如何从 ssh_nodes 组调用
webservers
组?
通常我用这样的东西来称呼顶级组,在这种情况下是ssh_nodes
组。
bolt plan run "deploy::update_package" \
--targets "ssh_nodes" \
--user "${BOLT_USER}" \
--private-key "${KEY}" \
--modulepath "path/to/module" \
--inventoryfile "${INVENTORY_FILE}" \
package_name="${PACKAGE}" \
package_version="${VERSION}"
是的,支持嵌套组。无论嵌套如何,所有组都必须唯一命名。
例如,如果您的库存如下所示:
groups:
- name: dc1
groups:
- name: webservers
targets:
- 192.168.100.179
- 192.168.100.180
- 192.168.100.181
- name: dc2
groups:
- name: webservers
targets:
- 192.168.101.50
- 192.168.101.60
然后你试图查看库存,你会得到错误:
试图为 ["webservers", "dc2", "all"] 处的组重新定义物理组
为了解决这个问题,我建议像这样为嵌套组添加前缀:
groups:
- name: dc1
groups:
- name: dc1/webservers
targets:
- 192.168.100.179
- 192.168.100.180
- 192.168.100.181
- name: dc2
groups:
- name: dc2/webservers
targets:
- 192.168.101.50
- 192.168.101.60
然后你可以定位这些群体:
bolt inventory show -t dc2/webservers