由于各种原因/限制,我无法在库存文件中创建新组,并且需要使用它--limit/-l
来指定主机。
我被告知要做如下的事情:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com server.2.com my-playbook.yml --check --diff
这引发了一个错误:
ERROR! the playbook: server.2.com could not be found
来自Ansible 文档关于这个问题,我发现你可以使用一个单独的文件来列出你想要限制的所有主机。例如:
ansible-playbook -i /path/to/my/inventory/file.ini -l @list-to-limit.txt my-playbook.yml
但是,我需要以内联方式完成所有操作,而无需创建额外的文件。
答案1
相同常见模式应用于命令行选项-l
。引用注释:
“您可以使用逗号 (,) 或冒号 (:) 来分隔主机列表。处理范围和 IPv6 地址时,最好使用逗号。”
例如,给定库存
shell> cat hosts
[webservers]
test_01
test_02
[dbservers]
test_03
test_04
和剧本
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: inventory_hostname
各种主机的模式都按预期工作。例如
- Web 服务器中的所有主机以及 db 服务器中的所有主机
shell> ansible-playbook -i hosts pb.yml -l webservers:dbservers
...
ok: [test_01] =>
inventory_hostname: test_01
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_03] =>
inventory_hostname: test_03
ok: [test_04] =>
inventory_hostname: test_04
- 主机 test_02 和 test_04
shell> ansible-playbook -i hosts pb.yml -l test_02,test_04
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_04] =>
inventory_hostname: test_04
- 网络服务器中除主机 test_02 之外的所有主机
shell> ansible-playbook -i hosts pb.yml -l webservers:\!test_02
inventory_hostname: test_01
答案2
具体操作如下:
ansible-playbook ./your_playbook --limit "host1,host2,host3,host4"
答案3
我当时正在发呆,我完全以为我只要列出所有主机就ansible-playbook
可以理解。
-l
我通过在命令中的每个主机名前添加内容来解决了我的问题。
(我意识到这可能不是“最佳实践”)
我的最终命令如下所示:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com -l server.2.com my-playbook.yml --check --diff