Puppet 傀儡角色/配置文件和init.pp类仅参数化
我希望将Craig Dunn和at URL解释的角色/配置文件模式应用于使用在中指定的规则构建的模块 遵循这些规则,每个组件模块(如Apache、OpenLDAP)只对init.pp类进行参数化Puppet 傀儡角色/配置文件和init.pp类仅参数化,puppet,roles,profiles,Puppet,Roles,Profiles,我希望将Craig Dunn和at URL解释的角色/配置文件模式应用于使用在中指定的规则构建的模块 遵循这些规则,每个组件模块(如Apache、OpenLDAP)只对init.pp类进行参数化 # # Component classes. # class apache ($logfile = '.log', $backend = $::apache::params::backend) inherits ::apache::params { # # This is the un
#
# Component classes.
#
class apache ($logfile = '.log', $backend = $::apache::params::backend) inherits ::apache::params {
#
# This is the unique parametrized class.
#
}
class apache::log inherits ::apache {
#
# This class inherits the params.
#
}
嗯,我通常使用角色/概要文件类(比如profile::apache、profile::openldap)来使用组件类的include-like或resource-like声明
如果我在父概要文件类(如profile::apache)中使用类似资源的声明,并且使用继承的概要文件(如profile::apache::openssh或profile::apache::openldap)来应用新功能,我需要覆盖组件的父定义,但使用Puppet v4,我无法覆盖父概要文件(类)中声明的组件类[::apache]{backend=>'ldap'})或使用资源收集器(类{backend=>'ldap'})
因此,在我新的编码风格中,如果我只使用init.pp组件类参数化,我如何应用角色/配置文件模式呢?Puppet DSL并不是您认为的面向对象语言。特别是,类继承并不是您认为的那样 类继承应该非常少地使用,通常只在 以下情况:
- 当需要重写基类中的资源属性时
- 要让“params类”为另一个类的参数提供默认值,请执行以下操作:
当你说 在过去,我使用参数化组件类,在子概要文件中,我可以直接调用组件类,而无需重写组件类的init.pp的参数 …我想您的意思是,您使用了类似资源的类声明,以便在清单中指定参数值。在大多数情况下,这种风格很差,但声明同一模块的私有类的类除外 那么,如果我只使用init.pp组件类参数化,如何应用角色/配置文件模式呢
正如语言指南所说,依靠外部数据查找(即Hiera)自定义模块参数。请注意,这也适用于组件模块。鉴于存在继承自类apache的公共类apache::log,您不应该通过类似资源的语法声明后者。Puppet DSL在您看来不是面向对象的语言.特别是,类继承并不像您所想的那样: 类继承应该非常少地使用,通常只在 以下情况:
- 当需要重写基类中的资源属性时
- 要让“params类”为另一个类的参数提供默认值,请执行以下操作:
当你说 在过去,我使用参数化组件类,在子概要文件中,我可以直接调用组件类,而无需重写组件类的init.pp的参数 …我想您的意思是,您使用了类似资源的类声明,以便在清单中指定参数值。在大多数情况下,这种风格很差,但声明同一模块的私有类的类除外 那么,如果我只使用init.pp组件类参数化,如何应用角色/配置文件模式呢
正如语言指南所说,依靠外部数据查找(即Hiera)自定义模块参数。请注意,这也适用于组件模块。鉴于存在继承自类
apache
的公共类apache::log
,您不应该通过类似资源的语法声明后者。我已经更新了问题。但我只能使用外部数据查找吗?没有任何其他方法?如果我需要这些类可以根据最终用户包含的组件::apache类的参数“后端”进行编辑,那么我如何定义profile::apache::openldap或profile::apache::mysql?@BnG除了这个答案之外,您的配置文件和模块的设计模式是混乱和复杂的。如果您nt制作一个灯的配置文件,然后制作一个包含必要类的灯的配置文件。不要让这种方式对你自己造成太大的影响。@BnG,我看不到你的编辑所引入的任何东西对我所说的有什么影响
#
# Profile classes.
#
class profile::apache {
class { ::apache:
logfile => '.my_log',
}
}
class profile::apache::openldap inherits profile::apache {
include ::openldap
# Doesn't work with Puppet 4.
Class[::apache] {
backend => 'ldap'
}
#
# OR...
#
# Also, doesn't work with Puppet 4.
Class <| name=='::apache'|> {
backend => 'ldap'
}
}
class apache::backend ($backend) inherits ::apache {
#
# Do stuff.
#
}
class profile::apache::openldap inherits profile::apache {
include ::openldap
class { ::apache::backend:
backend => 'ldap'
}
}
class profile::apache::mysql inherits profile::apache {
include ::mysql
class { ::apache::backend:
backend => 'mysql'
}
}