首页 > 解决方案 > Puppet:将文件内容加载到变量(特别是哈希变量)

问题描述

我需要将一些静态文件的内容加载到 Puppet 中的一些哈希变量中,以便将它们放入模板中。我的文件夹布局如下:

./manifests/site.pp
./templates/script.sh.epp
./files/server1_part1.txt
       /server1_part2.txt
       /server2_part1.txt
       /server2_part2.txt

我现在要做的是将./files/${hostname}${part}.txtpuppet 哈希中的内容加载到变量中,以便将它们放入模板中。我知道我可以在其中声明它们,site.pp但是有 10 台机器都有不同的行,导致清单无法读取。

哈希现在看起来像这样:

  $script_config_hashes = {
    part1 => "${source_path}/${hostname}_part1.txt",
    part2 => "${source_path}/${hostname}_part2.txt",
    part3 => "${source_path}/${hostname}_part3.txt",
  }

关于如何实现这一目标的任何想法?阅读文档并没有回答我的问题(或者我忽略了显而易见的问题)。Puppet Master 是版本 6.X

标签: puppet

解决方案


您可以通过Puppetfile()函数加载驻留在编译服务器上的文件的内容。

但是,根据 的外观manifests/site.pp,我认为您考虑将其放在环境的根目录中。不。相反,创建一个模块,并将文件、模板和使用它们的清单放入该模块中。除了这是一种被广泛接受的最佳实践之外,它还具有解决构建所需文件的绝对路径的问题的优势。

将所有内容移至 modulemymodule后,哈希定义将如下所示:

  $script_config_hashes = {
    part1 => file("mymodule/${hostname}_part1.txt"),
    part2 => file("mymodule/${hostname}_part2.txt"),
    part3 => file("mymodule/${hostname}_part3.txt"),
  }

请特别注意,不需要绝对路径,并且路径的“files/”部分是隐含的。


推荐阅读