挂载前如何依赖 Puppet 类?

Fra*_*eil 1 puppet

我使用 Puppet 挂载 Cloudfuse 以访问 Rackspace 的 Cloudfiles,但在新主机上,挂载运行过快,即使我需要整个类。在Pro Puppet 中,James 建议像这样拆分类定义:

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,
  }
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好。当我准备好挂载时,我需要顶级的父类,如下所示:

exec{'mount /data/cloudfiles':
  command => "/usr/local/bin/cloudfuse /data/cloudfiles",
  require => [
    File['/data/cloudfiles'],
    Class['cloudfuse'],
  ]
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 这是惯用语吗?我在别处见过这个,所以我会说它是。
  2. 我真的应该要求cloudfuse::install而不是父母吗?

我知道 requirecloudfuse::install会解决我的问题,但是如果我有一个非常简单的类,也许我不会像这样分成三个,那么我必须猜测/查看清单才能知道如何声明依赖项。

Dan*_*man 7

披露,我是 Puppet 的开发者之一。

不幸的是,Puppet 中的一个错误意味着一个只包含其他类的类不会导致传递依赖。您可以使用“锚点”模式来解决这个问题,或者您可以向顶级类添加其他无意义的资源,如下所示:

class cloudfuse {
  include cloudfuse::install, ...
  notify { "hate #8040": message => "work around bug #8040" }
}
Run Code Online (Sandbox Code Playgroud)

您可以关注错误 #8040以观察我们最终修复此问题的时间。