尽pipe有明确的箭头操作符使用,但木偶类无序

绝对木偶初学者在这里。 我正在用我的傀儡performance体验一个有趣的行为,并想知道我做错了什么。 举个例子说,我正在用下面的有序类来configuration实例:

class { 'update_system': } -> class { 'facter': } -> class { 'user_sshkey': user => 'ubuntu', type => 'rsa', } -> class { 'tmux': user => 'ubuntu', } -> class { 'vim': user => 'ubuntu', } -> class { 'bashrc': user => 'ubuntu' } -> notify {"Configuring DB role":} -> class { 'postgresql': } 

当我使用–debug开关运行清单时,通过查看notify语句,我可以看到这些类按以下顺序执行:

 1. update_system starts 2. a cron type inside of postgresql class (the very **last** class in that ordered list above) is executed 3. postgres::install starts 5. facter starts installing 6. postgres::configure and postgres::service start 7. the vim class is executed 8. "Configuring DB role" notification is made. All the way at the end here. etc 

基本上事情到处都是,顺序似乎没有任何方式跟随箭头运营商。

我猜我在这里错过了一些强迫类一次执行一个的东西。 难道我在这里错过了某种锚点模式? 无效的遏制?

编辑:据我可以告诉的是,问题的一部分是我沿着以下线使用postgres模块内的嵌套类:

 class postgres { class{'postgres::install': } -> class{'postgres::config': } ~> class{'postgres::service': } -> } 

而且我的理解是,如果没有锚点攻击,按照错误8040 ,这将不会起作用

我得到这个正确?

你正在用一个类( postgresql )创build一个依赖关系,并在其中直接声明资源。 这不会创build从那里包含的类( postgresql::install )的依赖关系。 所以,来自postgresql::install的资源并没有涉及到你正在创build的依赖关系结构。

你需要的是资源只取决于他们真正需要的东西,而不是试图执行高层次的命令 – 如果你需要在特定的资源运行之前完成系统更新,那么只需要从那里获取。

当你点这样的类时,你会认为明确的sorting也适用于类内部的资源,但是它们不会…

Puppet中存在一个长期存在的问题,那就是需要将类中的资源“锚定”到其父类中。 http://projects.puppetlabs.com/issues/8040

这个错误有一个解决方法,但有点难以理解: http : //projects.puppetlabs.com/projects/puppet/wiki/Anchor_Pattern

我使用这样的东西 –

  node /^web*/ { include common_module include apache_base include webserver_install include webserver_delpoy Class ['common_module'] -> Class ['apache_base'] -> Class ['webserver_install'] -> Class ['webserver_delpoy'] } 

这样你可以按照特定的顺序运行模块。 另外,从puppet检查这个博客关于模块的遏制。