gpt4 book ai didi

ruby - 如何多次运行同一个类?

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:37 30 4
gpt4 key购买 nike

我有一个 puppet 模块,它部署一个 JAR 文件并编写一些属性文件(通过使用 ERB 模板)。最近我们向应用程序添加了“模式”功能,这意味着应用程序可以根据 list 中输入的值以不同的模式运行。我的层次结构如下:

设置

*配置

**文件

*安装

意思是安装程序调用配置类和安装类。安装类根据模式部署相关RPM文件

配置类检查模式,并为每个模式调用具有特定模式和目录参数的文件类,这种结构的原因是属性的值取决于实际模式。

技术问题是,如果我在 list 中有多种模式(这是我的目标),我需要调用文件类两次:

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 )。

总结一下有没有办法:

  1. 使用不同的参数多次调用同一个类
  2. (其他方式)基于同一个 ERB 文件创建多个文件(每次使用不同的参数)

最佳答案

您可以简单地将您的类声明为定义:

define topology::files($dir,$mode){
file{"${dir}/filename":
content=> template("topology/${mode}.erb"),
}
}

这将为每种模式应用不同的模板

然后,根据需要多次实例化它:

if grep($modesArray, $online_str) == [$online_str] {
topology::files{ "topology_files_${online_str}" :
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"
topology::files{ "topology_files_${online_str}" :
dir => $dir,
mode => $offline_str
}

关于ruby - 如何多次运行同一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25381136/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com