Puppet Bolt 未将参数传递到作为任务运行的 Bash 脚本中

Puppet Bolt 未将参数传递到作为任务运行的 Bash 脚本中

当尝试使用 Puppet Bolt 在远程计算机上运行 Bash 脚本时,我总是遇到脚本无法正常工作的情况,因为它们没有接收到 Bolt 命令传递的参数。如果将脚本作为这样的任务运行:

bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'

No user or group defined根据我为脚本定义的条件。

这一切都是在本地测试脚本并知道它可以处理参数之后完成的。

为什么脚本/任务没有接收参数?


答案1

注意:这已作为原始问题的一部分发布,因此我(terdon)将其发布为 CW 答案


好的,所以我在发布之前就已经找到了这个问题的解决方案。我只是想发表一篇文章,因为我在这方面浪费了时间,尽管它已记录在案:

如果未安装脚本,或者您希望将其变成一个内聚任务,以便可以使用代码管理工具管理其版本,请将代码添加到脚本中以检查环境变量(以 PT_ 为前缀),然后读取它们的论点。

我正在尝试在远程计算机上运行脚本,最初认为我可以通过 stdin 将参数作为 $1、$2 等传递到 bask 脚本中。这些变量接收在 Bash 中启动脚本后输入的值,如下所示:./scriptTakeInUserAndGroup 用户组(其中 echo $1 会打印用户因为它传递了第一个参数)。

这在傀儡螺栓中不起作用。对于 unix,Puppet Bolt 对于 input_method 有两个选项:标准输入和环境。到目前为止,我还没有使用 stdin 选项,但我发现一旦发现环境变量与变量名称混淆,它就会起作用:

bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'

不按您在 JSON 元数据中调用这些变量的名称传递这些变量。

如果您输入printenv | grep user脚本,您将在您的环境中看到以下内容:PT_user=testuser

相当烦人的是,PT_在变量名称之前添加。所以你用 $user 运行的 bash 脚本正在崩溃

如果你修改你的脚本来使用$PT_user它就会很好地工作。

相关内容