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).
使用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).