我是否正确使用木偶包含?

Am I using puppet contain correctly?

我正在尝试创建依赖关系,以便 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': } 
}

如果我在 silex_api 中明确包含所有 类,则 phpwebserver 首先配置文件成功 运行,如下所示:

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 all sub类 对我来说似乎不正确。有没有更好的方法来完成这个,或者这是确保设置依赖关系的标准方法?

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

我认为您的 class roles::dev 定义正确。您应该从个人资料中删除双重声明:

silex_api个人资料:

class profiles::silex_api{
    contain composer
    contain silex
}

phpwebserver 配置文件:

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

要为包含的 classes 提供参数,请使用 hiera

您也可以考虑使用 include function instead of contain

我相信这是正确的方法 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
}