2014-01-16 101 views
3

传递参数这是我刚才的问题有关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'], 
    } 
} 

或者我应该把参数直接在服务类和显式调用这两个贵宾级和像贵宾的服务类这样的:

# 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'], 
    } 
} 

什么是正确的道路,并在这里的最佳实践?提前致谢!

回答

4

一般情况下,你不希望人们必须了解你的模块使用它的内部结构。

我当然不会要求他们包括poodlepoodle:service

模块通常遵循两种结构中的一种:

  • 单一入口点通过init.pp对于一些/没有PARAMS和没有独立的角色 (客户端/服务器)或“倍数”(如数据库简单的服务服务器可以有通过木偶 其配置多分贝的)

  • 通过子类多个入口点和定义类型的处理独立角色和 倍数

根据你所描述的东西,我会放在参数主类,并通过它传递给服务子类。

+0

需要明确的是,公认的答案是通过对其他类的,我做到了传递价值和它的工作如预期。谢谢! – Spanky

2
node 'beetle.example.com' { 
    class { 'poodle::service': 
     ensure => 'stopped' 
    } 
} 

工程。

但我不同意说“你不想让人们必须理解你的模块的内部结构”,你需要灵活性来创建虚拟主机来定义什么端口,协议,后端代理+和应该使用什么模块等。 我没有看到我的项目如何通过编写include apache,nginx等来实现这种灵活性。