如何在执行剧本时在命令行中添加多个清单文件

pra*_*mar 9 ansible ansible-2.x ansible-inventory

我有一本包含两种不同剧本的剧本

Sample.yml
    - name : Play1
      hosts: Host1
      tasks:
       ...
    - name: Play2
      hosts: Host2
      tasks:
       ...
Run Code Online (Sandbox Code Playgroud)

我需要用两个不同的主机(Host1 和 Host2)运行这个剧本,这两个不同的主机存在于库存/目录下的两个单独的文件(Hostfile1 和 Hostfile2)中。

inventory/
   Hostfile1
   Hostfile2
   .
   .
   HostfileN
Run Code Online (Sandbox Code Playgroud)

我想知道如何在运行剧本时包含两个不同的主机文件。我知道通过在命令行中包含整个文件夹(库存/)我们可以实现这一点,但我在库存/ 文件夹中有很多主机文件,因此此选项将加载未使用的主机文件。

我试着像下面一样运行

ansible-playbook -i inventory/Hostfile1,Hostfile2 sample.yml
Run Code Online (Sandbox Code Playgroud)

但这没有用。那么,有谁知道如何通过在命令行中提供多个主机文件来运行剧本?

小智 20

只需简单地-i多次提供

ansible-playbook -i inventory/Hostfile1 -i inventory/Hostfile2 sample.yml

  • 所以,这是你可能不想做的事情。如果任何组变量不同,它将对所有实例使用最后一个清单的版本 (4认同)

小智 5

我想澄清上面的答案。该提案不起作用的原因是,如果 ansible 在 -i 标志的值中看到“,”,它会将其视为库存列表。使用你的例子:

ansible-playbook -i inventory/Hostfile1,Hostfile2 样本.yml

Ansible 将尝试在机器“inventory/Hostfile1”和“Hostfile2”上运行剧本“sample.yml”。

这就是为什么您必须多次指定 -i 的原因。