2015-06-10 33 views
1

我正在尝试创建一个依赖关系,以使phpwebserver配置文件在silex_api配置文件之前运行。我使用木偶是否正确?

作用:

class roles::dev{ 
    include profiles::phpwebserver 
    include profiles::silex_api 

    Class ['profiles::phpwebserver'] -> 
    Class ['profiles::silex_api'] 
} 

silex_api简介:

class profiles::silex_api{ 

    class { '::silex' : 
     package_version => '1.6.2', 
    } 


    class {'::composer' : 
     command_name => 'composer.phar', 
     target_dir => '/var', 
     user   => 'root' 
    } 

    contain ::composer 
    contain ::silex 
} 

phpwebserver简介:

class profiles::phpwebserver{ 

    class { '::apache': 
    default_vhost => false, 
    conf_template => "apache/httpd.silex.conf.erb", 
    service_name => "httpd", 
    package_ensure => "2.2.15-39.el6", 
    service_enable => true, 
    service_ensure => "running", 
    } 

    class {'::apache::mod::php': 
    package_name => "php", 
     path => "${::apache::params::lib_path}/libphp54-php5.so", 
    } 


    contain ::apache 
    contain ::apache::mod::php 
} 

类:如下图所示

class silex{ 
class { 'silex::install': } 
class { 'silex::service': } 
} 

phpwebserver曲线运行成功,第一,如果我明确地包含内部silex_api所有类:

class profiles::silex_api{   
    class { '::silex' : 
     package_version => '1.6.2', 
    } 


    class {'::composer' : 
     command_name => 'composer.phar', 
     target_dir => '/var', 
     user   => 'root' 
    } 

    contain ::composer 
    contain ::silex::install 
    contain ::silex::service 

} 

现在我需要contain所有子类这对于我来说,似乎不正确。有没有更好的方法来完成这一点,或者这是确保依赖关系的标准方法吗?

回答

0

我相信这是正确的方式按本article.

角色

class roles::dev{ 
     include profiles::phpwebserver 
     include profiles::silex_api 

     Class ['profiles::phpwebserver'] -> 
     Class ['profiles::silex_api'] 
} 

档案

class profiles::silex_api{ 

     class { '::silex' : 
      package_version => '1.6.2', 
     } 

     class {'::composer' : 
      command_name => 'composer.phar', 
      target_dir => '/var', 
      user   => 'root' 
     } 

     contain ::composer 
     contain ::silex 

} 

模块

class silex (
    $package_name = $::silex::params::silex_package_name, 
    $package_version, 
    $release_version = "1", 
) inherits ::silex::params 
{ 

     class { 'silex::install' : 
      package_name => $package_name, 
      package_version => $package_version, 
      release_version => $release_version, 
     } 

     contain silex::install 
     contain silex::config 
} 
1

你搞砸了资源申报。您不应该混合resources-like and include-like声明。因此,如果您使用contain请不要通过class关键字再次声明类。

在我看来,您的class roles::dev已被正确定义。你应该从你的配置文件中删除双声明:

silex_api简介:

class profiles::silex_api{ 
    contain composer 
    contain silex 
} 

phpwebserver简介:

class profiles::phpwebserver{ 
    contain apache 
    contain apache::mod::php 
} 

提供的参数包含类使用hiera

您也可以考虑使用include函数代替contain

+0

谢谢,但我没有看到自动数据绑定将如何解决依赖关系问题? – kaizenCoder

+0

RE:“如果你使用包含不要再声明类” - 木偶初学者指南确实如此:https://puppet.com/docs/puppet/5.3/bgtm.html#ordering – 7yl4r