ansible-playbook——限制多个主机?

ansible-playbook——限制多个主机?

由于各种原因/限制,我无法在库存文件中创建新组,并且需要使用它--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

各种主机的模式都按预期工作。例如

  1. 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
  1. 主机 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
  1. 网络服务器中除主机 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

相关内容