确保变量中存在目录树

时间:2014-08-14 17:42:55

标签: windows puppet

在puppet中我试图在Windows机器上安装一个包。该包可以使用INSTALLDIR参数,该参数确定它的安装位置。我想确保包安装的目录存在。但是,除非我弄错了,木偶并不是管理整个目录树的最佳选择。在线建议的方法似乎是分别管理树中的每个文件夹,如下所示:

file{
    ['parent','parent/firstchild', 'parent/firstchild/lastchild]:
    ensure => directory, 
}

或者目录结构已经存在于modules文件夹中,或者运行一个创建目录树的exec(我想避免它,因为它不能确保一个状态,这是puppet的目标)。 / p>

我如何检查某个目录是否存在,如果没有在 变量的中创建它?

相关代码:

$installDir = "C:/folder1/folder2/folder3"

package{ "MagicalPackage":
        ensure  => $installValue,
        source  => 'magic.msi',
        install_options => ["INSTALLDIR=${installDir}"],

}

2 个答案:

答案 0 :(得分:1)

你走在正确的道路上。我认为这应该有用。

# Create install directory
file{ ["C:\folder1\", "C:\folder1\folder2", "C:\folder1\folder2\folder3" ]:
    ensure => "directory", 
}

# Set install directory
$installDir = "C:\folder1\folder2\folder3"

# Software
package { "MagicalPackage":
    ensure  => "installed",
    source  => 'magic.msi',
    require => $installDir,
    install_options => [ "INSTALLDIR = ${installDir}" ],
}

# Config file
file { "MagicalConfig":
    path    => "C:\Config\Path",
    ensure  => "file",
    require => Package[ 'MagicalPackage' ],
}

# Service is on
service { 
    enabled => true,
}

答案 1 :(得分:0)

这是一个长期被要求的feature,但无法找到令人满意的设计。

如果您不希望明确管理路径上的每个目录,那么我可以在这里看到两个选项:

  1. 您只需传递INSTALLDIR并注意package资源
  2. 中的错误消息
  3. 您为要使用的每个INSTALLDIR添加custom facts - 然后您可以从清单中查询状态