首页 > 解决方案 > 在 shell 脚本中将参数传递给 salt-stack

问题描述

我正在尝试将字符串传递给将状态应用于小兵的 shell 脚本。

脚本(build.sh):

pillar='pillar = '"'"'{"salt_master": "'$1'"}'"'"
echo $pillar
sudo salt 'ubuntu-test-node.example.com' state.sls ubuntu-node-test/firewall $pillar

状态(firewall.sls):

Allow SALT:
  iptables.append:
    - table: filter
    - chain: INPUT
    - jump: ACCEPT
    - comment: "Allow SALT Master"
    - protocol: tcp
    - dport: 4505:4506
    - source: {{ pillar['salt_master'] }}
    - position: 4
    - save: True

当我运行 ./build.sh 192.168.1.254 时,我得到以下输出和错误 - 回显输出似乎给出了所需的字符串,但盐堆栈抛出错误。

 pillar = '{"salt_master": "192.168.1.254"}'
 ERROR: Minions returned with non-zero exit code
 ubuntu-test-node.example.com:
     Data failed to compile:
 ----------
     Rendering SLS 'base:ubuntu-node-test/firewall' failed: Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'salt_master'

运行此命令时,盐栈状态已正确应用

sudo salt 'ubuntu-test-node.example.com' state.sls ubuntu-node-test/firewall pillar='{"salt_master": "192.168.1.254"}'

我在这里想念什么?脚本的回显输出与我在手动输入的命令中输入的确切参数字符串匹配。

提前致谢

标签: salt-stack

解决方案


该脚本看起来不像您显示的那样正确地吐出该命令。

尝试这个:

pillar='pillar='"'"'{"salt_master": "'$1'"}'"'" 
echo $pillar 
sudo salt 'ubuntu-test-node.example.com' state.sls ubuntu-node-test/firewall $pillar

观察等号周围第一行的第二根柱子之间没有空格。


推荐阅读