我有一个简单的任务,我正在尝试用Salt执行 .
我想动态地为我的所有服务器创建一个motd文件,这需要使用机器主机名渲染ascii art .
我想在主人身上做这个渲染,然后被推到仆从 .
到目前为止,我有这个简单的文件: /srv/salt/content/all/etc/update-motd.d/05-hostname
#!/bin/bash
cat << "EOF"
{{ salt.cmd.shell('figlet TestServer') }}
EOF
然后将此文件用于: /srv/salt/motd/init.sls
/etc/update-motd.d/05-hostname:
file.managed:
- source: salt://content/all/etc/update-motd.d/05-hostname
- template: jinja
如果我尝试运行它,它将使用输出保存文件: /bin/sh: 1: figlet: not found
,我猜,是因为命令在minion上执行而不是在master上执行 .
sudo salt 'server' state.sls motd
我确实知道,我可以让saltmaster在所有服务器上安装 figlet
,但我认为这将是一种浪费 . 主服务器已经通过 grains
知道主机名,因此它应该是一个简单的任务,在推送它之前在主服务器上生成此文件 .
有没有人有任何想法来完成这个?
1 回答
状态jinja是在minion上呈现的,因此file.managed无法以这种方式工作 .
为了在主人身上呈现某些东西,你需要使用支柱 .
所以你需要在master上添加一个看起来像这样的柱子:
然后将/srv/salt/content/all/etc/update-motd.d/05-hostname指向支柱 .