首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在预先存在的木偶类中编写包装类/重写配置

问如何在预先存在的木偶类中编写包装类/重写配置
EN

Stack Overflow用户
提问于 2016-02-04 13:28:42
回答 1查看 323关注 0票数 1

我想重写另一个木偶模块中另一个类的值。请帮助我,提出建议。

现有类:(模块名: MySQL )

代码语言:javascript
复制
class mysql::server (
  $config_file             = $mysql::params::config_file,
  $includedir              = $mysql::params::includedir)
{
  My Code Logics
}

当前类:(模块名称:概要文件)

代码语言:javascript
复制
Class profiles::mysql () {
    class { '::mysql::server':
        config_file => '/opt/arunraj',
        includedir  => true
    }
}

当我这样做时,我会得到重复的类声明错误。这是覆盖两个类之间的值的最佳方法。

EN

回答 1

Stack Overflow用户

发布于 2016-02-04 15:44:03

首先,示例代码是不完整的。您给出了类mysql::server和profiles::mysql的定义,后者包含类mysql::server的资源类型声明,但对于给定类mysql::server的一个或多个其他声明没有提及。您实际呈现的内容不足以产生您所描述的错误。

还请注意,使用资源样式类声明通常是糟糕的形式,特别是用于声明任何模块的公共类,尤其是声明属于不同于声明出现的模块的类。这些原因有点技术性,但在很大程度上归结为引发您所遇到的错误的风险。每当Puppet计算已经为其计算声明(在任何样式中)的类的资源样式声明时,就会发生这种情况,因为类参数值是作为计算第一次遇到的声明的一部分而绑定的。

自定义类参数值的最佳方法是首先依赖自动数据绑定(Hiera)将值绑定到这些参数。如果您有一台需要不同参数值的奇球机器,那么您将它们设置在数据层次结构的一个比普通值产生的级别更高的优先级级别,并且其范围足够窄,以避免影响应该具有普通参数的机器。

此外,为了避免您描述的错误类型,您还应该确保在任何地方都只对可能多次声明(即任何公共类和一些私有类)的类使用include类声明。这与自动绑定密切相关,因为如果不使用类似资源的声明,那么自动数据绑定是自定义类参数值的最佳可用方法。经典的包含样式声明是通过include函数本身进行的,但是require、contain和hiera_include函数也提供了包含样式的声明(语义上有各种不同)。如果您使用ENC来声明类,那么它可能产生任何一种样式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35202316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档