使用Ansible我需要在不同的客户端/主机中复制脚本,然后我需要修改脚本中的一行。该行取决于客户端,每次都不一样。 每个主机都具有相同的名称。每个客户名称都不同。
类似的东西:
lineinfile: >
state=present
dest=/path/to/myscript
line="/personal line
when: {{ clients/hosts }} is {{ client/host }}
如您所见,我不知道如何继续。
答案 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的详情)。