如何在安装之前依赖 Puppet 类?

如何在安装之前依赖 Puppet 类?

我使用 Puppet 安装 Cloudfuse 来访问 Rackspace 的 Cloudfiles,但在新主机上,安装运行得太快了,尽管我需要整个类。在专业木偶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,
  }
}

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

exec{'mount /data/cloudfiles':
  command => "/usr/local/bin/cloudfuse /data/cloudfiles",
  require => [
    File['/data/cloudfiles'],
    Class['cloudfuse'],
  ]
}

问题是:

  1. 这是惯用语吗?我在其他地方见过这种用法,所以我想说是的。
  2. 我实际上应该要求cloudfuse::install而不是父母吗?

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

答案1

披露一下,我是 Puppet 的开发人员之一。

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

class cloudfuse {
  include cloudfuse::install, ...
  notify { "hate #8040": message => "work around bug #8040" }
}

您可以关注错误 #8040等待我们最终修复这个问题。

相关内容