![在多个 Puppet Windows 批处理脚本中使用变量](https://linux22.com/image/577294/%E5%9C%A8%E5%A4%9A%E4%B8%AA%20Puppet%20Windows%20%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F.png)
在我的 Puppet 脚本中,我有两个 exec 调用来执行不同的批处理文件
exec {
command => 'file1.bat'
}
exec {
command => 'file2.bat'
}
如果 file1.bat 使用以下方式设置环境变量SET
SET VAR1=someVal
正如我所料,它无法从 file2.bat 访问。
但是如果我使用SETX
SETX VAR1 someVal -m
它在file2.bat中仍然不可用。
我能够使变量更改对 file2.bat 可用的唯一方法是直接在 file1.bat 中的注册表中设置变量(使用 reg ADD),然后在 file2.bat 中查询它(使用 reg QUERY)。有没有更好的方法可以做到这一点?
我无法将 file1.bat 和 file2.bat 合并为一个脚本,因为它们在其他地方独立使用。
答案1
在您的 Puppet 清单中设置变量,并从带有变量的模板文件中获取批处理脚本,否则您将使用 OS 变量。
例如,我的 postfix.erb 文件中的一行:
myhostname = <%= fqdn %>
有关实践中实际代码的丰富资源,请参阅有没有想过维基媒体服务器是如何配置的?。您可以使用 检出存储库git
。
获取脚本
file { "file1 batch script":
path => "/whatever/you/want/file1.bat",
content => template("file1.erb");
}
->
exec {
command = file1.bat
}
file { "file2 batch script":
path => "/whatever/you/want/file2.bat",
content => template("file2.erb");
}
->
exec {
command = file1.bat
}
查看一些 ERB 值作为示例。
任何环境变量都可以用脚本读取,就像直接运行脚本一样。此外,puppet 还可以在 exec 块中为要运行的命令设置环境变量。查看Puppet 类型参考了解更多信息。
至于将变量导入 Puppet,请阅读定制事实。