【发布时间】:2014-08-15 20:16:54
【问题描述】:
在 puppet 中,我试图在 Windows 机器上安装一个包。该包可以采用INSTALLDIR 参数,该参数确定它的安装位置。我想确保安装包的目录存在。但是,除非我弄错了,否则 puppet 并不是管理整个目录树的最佳选择。在线建议的方法似乎是分别管理树中的每个文件夹,如下所示:
file{
['parent','parent/firstchild', 'parent/firstchild/lastchild]:
ensure => directory,
}
或者在模块文件夹中已经存在目录结构,或者运行创建目录树的 exec(我想避免这种情况,因为它不能完全确保状态,这是 puppet 的目标)。
我将如何检查目录是否存在,如果不存在则在 puppet from 变量中创建它?
相关代码:
$installDir = "C:/folder1/folder2/folder3"
package{ "MagicalPackage":
ensure => $installValue,
source => 'magic.msi',
install_options => ["INSTALLDIR=${installDir}"],
}
【问题讨论】:
-
Puppet 不会检查目录是否存在然后创建它。您需要显式管理目录以确保它存在。你甚至不能真正编写自定义函数,因为函数在主服务器而不是代理服务器上运行。
-
我希望能够基于变量显式管理目录树。
-
我看到这种情况发生的唯一方法是编写一个自定义函数来拆分目录路径。然后您可以执行
$installDir = custom_function('C:/folder1/folder2/folder3'),这可能等同于$installDir = ['C:/folder1','C:/folder1/folder2','C:/folder1/folder2/folder3',然后您可以将其传递给文件资源file { $installDir: ensure => directory }。我不认为这种情况会以另一种方式发生。 -
啊,那太糟糕了。感觉非常难看。谢谢!