我是否正确使用木偶?

时间:2015-06-10 06:46:37

标签: dependencies puppet contain

我正在尝试创建一个依赖关系,以便在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 所有子类,对我来说,似乎不对。有没有更好的方法来实现这一点,或者这是确保设置依赖性的标准方法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
}