【发布时间】:2014-08-19 10:30:10
【问题描述】:
我有一个 puppet 模块,它部署一个 JAR 文件并编写一些属性文件(通过使用 ERB 模板)。 最近我们为应用程序添加了“模式”功能,这意味着应用程序可以根据清单中输入的值以不同的模式运行。 我的层次结构如下:
设置
*配置
**文件
*安装
意思是setup调用config类和install类。 install类根据模式部署相关的RPM文件
config 类检查模式,并为每个模式调用具有特定模式和目录参数的 files 类,这种结构的原因是属性的值取决于实际模式。
技术问题是,如果清单中有多种模式(这是我的目标),我需要调用文件类两次:
if grep($modesArray, $online_str) == [$online_str] {
class { 'topology::files' :
dir => $code_dir,
mode => $online_str
}
}
$offline_str = "offline"
$offline_suffix = "_$offline_str"
if grep($modesArray, $offline_str) == [$offline_str] {
$dir = "$code_dir$offline_suffix"
class { 'topology::files' :
dir => $dir,
mode => $offline_str
}
但是,在 puppet 中,你不能两次声明同一个类。
我试图弄清楚如何调用一个类两次或者一个方法,我可以从我的 ERB 文件中访问其参数,但我无法弄清楚
文档说这是可能的,但没有说明如何(我在这里查看https://docs.puppetlabs.com/puppet/latest/reference/lang_classes.html#declaring-classes)。
所以总结一下有没有办法:
- 使用不同的参数多次调用同一个类
- (其他方式)基于同一个 ERB 文件创建多个文件(每次使用不同的参数)
【问题讨论】:
-
您可能想要创建自定义资源:docs.puppetlabs.com/guides/custom_types.html
-
我将如何使用它来解决我的问题?
-
不是创建一个类(不能多次使用),而是创建一个自定义资源,它与您的类完全一样,可以多次使用。然而,这是一项相当广泛的任务,因此您需要阅读文档并尝试自己编写,或者您可以等待其他答案,这可能更合适。
-
我现在正在尝试在函数中创建不涉及 ERB 的所有内容(这也很难做到),然后我将为需要的一个文件创建两个不同的 ERB再培训局。在 puppet 中编写可移植代码非常困难