绝对木偶初学者在这里。 我正在用我的傀儡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检查这个博客关于模块的遏制。