Ansible不同的主机,不同的动作

时间:2017-03-03 11:34:52

标签: variables ansible hosts

使用Ansible我需要在不同的客户端/主机中复制脚本,然后我需要修改脚本中的一行。该行取决于客户端,每次都不一样。 每个主机都具有相同的名称。每个客户名称都不同。

类似的东西:

    lineinfile: >
      state=present
      dest=/path/to/myscript
      line="/personal line
    when: {{ clients/hosts }} is {{ client/host }}

如您所见,我不知道如何继续。

1 个答案:

答案 0 :(得分:1)

听起来有些客户端有一些与之关联的特定主机,此脚本中的行会因客户端而异。

在这种情况下,您应该使用组变量。我在下面列出了一个简化的例子。

设置您的主机文件:

[client1]
host1
host2

[client2]
host3
host4

使用这样的组变量:

文件group_vars / client1:

variable_script_line: echo "this is client 1"

文件group_vars / client2:

variable_script_line: echo "this is client 2"

创建名为yourscript.sh.j2的模板文件:

#!/bin/bash
# {{ ansible_managed }}

script line 1
script line 2
# below is the line that should be dynamic
{{ variable_script_line }}

然后像这样使用模板模块:

---
- hosts: all
  tasks:
    - name: Deploy script to remote hosts
      template:
        src: /path/to/yourscript.sh.j2
        dest: /path/to/location/yourscript.sh
        mode: 0755

请注意,如果您使用[role] [1],源模板的路径会有所不同。

最终,当游戏在client1 vs client2上运行时,模板的内容将根据变量以不同方式编写(请参阅有关variable scopes的详情)。