在多个 Puppet Windows 批处理脚本中使用变量

在多个 Puppet Windows 批处理脚本中使用变量

在我的 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,请阅读定制事实

相关内容