【问题标题】:Ensure directory tree exists from variable确保目录树存在于变量中
【发布时间】: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 }。我不认为这种情况会以另一种方式发生。
  • 啊,那太糟糕了。感觉非常难看。谢谢!

标签: windows puppet


【解决方案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,
}

【讨论】:

  • 您在file 资源中所说的是 OP 试图避免的。 OP 要求一种编程解决方案来创建完整的目录结构。
【解决方案2】:

这是一个早就被要求的feature,但找不到满意的设计。

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

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

【讨论】:

    猜你喜欢
    • 2023-02-12
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多