Dependencies 我是否正确使用了puppet contain?

Dependencies 我是否正确使用了puppet contain?,dependencies,puppet,contain,Dependencies,Puppet,Contain,我正在尝试创建依赖关系,以便在silex_api配置文件之前运行phpwebserver配置文件 角色: class roles::dev{ include profiles::phpwebserver include profiles::silex_api Class ['profiles::phpwebserver'] -> Class ['profiles::silex_api'] } class profiles::silex_api{

我正在尝试创建依赖关系,以便在
silex_api
配置文件之前运行
phpwebserver
配置文件

角色:

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 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配置文件:

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 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配置文件:

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 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': } 
}
课程:

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 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
,请不要通过
class
关键字再次声明类

我认为您的
类角色::dev
定义正确。您应该从配置文件中删除双重声明:

silex_api简介:

class profiles::silex_api{
    contain composer
    contain silex
}
phpwebserver配置文件:

class profiles::phpwebserver{
    contain apache
    contain apache::mod::php
}
要为包含的类提供参数,请使用


您也可以考虑使用函数而不是. 根据这一点,我认为这是正确的方法

角色

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
}
配置文件

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
}
模块

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
}

谢谢,但我不知道自动数据绑定将如何解决这里的依赖性问题?RE:“如果您使用contain,请不要再次声明类”-《puppet初学者指南》正是这样做的: