我使用Puppet挂载Cloudfuse来访问Rackspace的Cloudfiles,但是在一个新的主机上,尽pipe我需要整个class级,mount仍然运行得太快。 在Pro Puppet中 ,Jamesbuild议像这样分割类定义:
class cloudfuse{ include cloudfuse::install, cloudfuse::service, cloudfuse::config } class cloudfuse::install{ # download and install } class cloudfuse::config{ file{'/root/.cloudfuse': notify => Class['cloudfuse::service'], } } class cloudfuse::service{ service{'cloudfuse': ensure => running, } }
这工作得很好。 当我准备挂载时,我需要顶级的父类,像这样:
exec{'mount /data/cloudfiles': command => "/usr/local/bin/cloudfuse /data/cloudfiles", require => [ File['/data/cloudfiles'], Class['cloudfuse'], ] }
问题是:
cloudfuse::install而不是父级? 我知道需要cloudfuse::install会解决我的问题,但如果我有一个非常简单的类,也许我不会像这样分裂三个,那么我不得不猜测/看清单知道如何声明依赖关系。
披露,我是Puppet的开发者之一。
不幸的是,Puppet中的一个错误意味着只包含其他类的类不会导致传递依赖。 您可以使用“锚点”模式来解决这个问题,或者您可以添加一个无用的资源给顶层类,如下所示:
class cloudfuse { include cloudfuse::install, ... notify { "hate #8040": message => "work around bug #8040" } }
你可以关注bug#8040来观察我们最终得到修正的时间。