2015-06-10 4 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': } 
} 

The 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

Вы испортили объявление ресурсов. Вы не должны mix 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: «если вы используете include, не объявляйте класс снова» - руководство для марионетки начинающего делает именно это: https://puppet.com/docs/puppet/5.3/bgtm.html#ordering – 7yl4r

Смежные вопросы