salt-stack - 在 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"}'
我在这里想念什么?脚本的回显输出与我在手动输入的命令中输入的确切参数字符串匹配。
提前致谢
解决方案
该脚本看起来不像您显示的那样正确地吐出该命令。
尝试这个:
pillar='pillar='"'"'{"salt_master": "'$1'"}'"'"
echo $pillar
sudo salt 'ubuntu-test-node.example.com' state.sls ubuntu-node-test/firewall $pillar
观察等号周围第一行的第二根柱子之间没有空格。
推荐阅读
- database - Laravel比较不同表中的三列返回0项
- .net-core - Rollbar 未在 .NET Core 2.2 api 项目中全局处理错误
- reactjs - reactjs 中 API url 和端口的更新动态构建
- c# - Net Core API:制作 ProducesResponseType 全局参数或自动化
- java - neo4j - 如何使用 java 限制重复节点
- c# - 控制台不打印 c# 构造函数中定义的属性
- python - python subprocess.Popen with shell = False,
- javascript - 游戏继续进行 - 希望玩家获胜时停止
- node-red - 如何在nodered中显示自定义节点的输入端口(左点)?
- java - 我应该如何只创建一次媒体播放器并多次调用它?