在/ etc/osci下,我们为监控名称存储了一个单行字符串.我创建了一个ansible playbook,它将默认的zabbix配置复制到远程服务器,现在我想使用ansible replace模块用/ etc/osci的输出替换新复制的配置文件中的字符串
在salt中,我可以执行在远程服务器中运行的cmd.shell并将文件输出读取到变量(使用cat),但是我在使用与Ansible相同的方法时遇到了问题.
这样做的正确方法是什么?
- shell: cat /etc/osci
register: data
Run Code Online (Sandbox Code Playgroud)
这不起作用,在系统中调用数据变量返回0输出.这样做有另一种方法吗?我真的不想使用fetch将文件下载到本地主机并使用lookup进行读取.
我遇到了一个我无法解决的问题:我有一个文件(/ etc/osci),我在我的所有服务器上使用它作为我们监控的名称(zabbix)我创建了一个推送的状态文件到服务器的模板配置文件,并将/ etc/osci的内容读取到变量.下一步是使用带有'file.replace'函数的相同变量来搜索字符串并将其替换为变量.
uusnimi=$(cat /etc/osci):
cmd.run
/etc/zabbix_agentd.conf:
file.managed:
- source: salt://base/streamingconf/zabbix/zabbix_agentd.conf
- mode: 644
change_hostname_zabbix:
file.replace:
- name: /etc/zabbix_agentd.conf
- pattern: 'Hostname='
- repl: 'Hostname=$uusnimi'Run Code Online (Sandbox Code Playgroud)
现在,当执行状态文件回显目标服务器中的变量时,它为我提供了正确的输出:
echo $uusnimi
Server1Run Code Online (Sandbox Code Playgroud)
但是对于我的生活,我无法弄清楚如何逃避上面代码的最后一行,所以它会插入值而不是'$ uusnimi'字符串