Ansible 不同主机,不同动作

Ansible Different hosts, different action

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

类似的东西:

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

如您所见,我不知道如何进行。

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

在那种情况下,您应该使用组变量。我在下面包含了一个简化的示例。

像这样设置你的主机文件:

[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

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

最终,运行 client1 vs client2 时,模板的内容将根据变量编写不同的内容(请参阅更多关于 variable scopes).