这是我之前关于parameterized classes的问题的后续。继续这个例子,我希望能够将运行或停止传递到服务中,但是当我将服务添加到框中时,我不使用"include poodle:: service ",而是使用"include poodle“,它完成Poodle需要安装的所有其他内容。
那么,我可以像这样将变量传递给服务类吗:
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
class { 'poodle':
$ensure => 'stopped'
}
}
## POODLE MODULE, manifests/init.pp
class poodle ( $ensure = 'running' ) {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service':
ensure => $ensure
}
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodle::service ( $ensure ) {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}或者我应该将参数直接放在服务类上,然后显式地调用Poodle类和Poodle的服务类,如下所示:
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
include poodle
class { 'poodle::service':
$ensure => 'stopped'
}
}
## POODLE MODULE, manifests/init.pp
class poodle {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service':
ensure => $ensure
}
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodle::service ( $ensure = 'running') {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}或者将参数添加到服务类并仅包含该参数,因为服务类具有依赖关系,如下所示:
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
class { 'poodle::service':
$ensure => 'stopped'
}
}
## POODLE MODULE, manifests/init.pp
class poodle {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service':
ensure => $ensure
}
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodle::service ( $ensure = 'running') {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}这里的正确路线和最佳实践是什么?提前感谢!
发布于 2014-01-17 06:01:01
通常,您不希望人们必须了解模块的内部结构才能使用它。
我当然不会要求它们同时包含poodle和poodle:service。
模块通常遵循以下两种结构之一:
通过init.pp为简单服务提供
的已定义类型
根据您所描述的内容,我将把参数放在主类中,并将其传递给服务子类。
发布于 2015-01-23 20:38:28
node 'beetle.example.com' {
class { 'poodle::service':
ensure => 'stopped'
}
}很管用。
但我不同意“你不希望人们了解你的模块的内部结构”的说法,因为你希望在创建vhost时具有灵活性,以定义应该使用什么端口、协议、什么后端代理+以及什么模块等。我看不到我的项目如何通过编写apache、nginx或诸如此类的代码来实现这种灵活性。
https://stackoverflow.com/questions/21171240
复制相似问题