我使用 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'],
]
}
问题是:
- 这是惯用语吗?我在其他地方见过这种用法,所以我想说是的。
- 我实际上应该要求
cloudfuse::install
而不是父母吗?
我知道要求cloudfuse::install
可以解决我的问题,但是如果我有一个非常简单的类,也许我不会像这样分成三个,那么我必须猜测/查看清单才能知道如何声明依赖关系。