我刚刚设置了一个新的 Puppet 服务器,想知道最佳实践的目录结构是什么?我浏览了不同的论坛和 Puppet 网站,让我印象深刻的是,每个人似乎都以不同的方式布局。没有推荐的方式和目录结构吗?
到目前为止我已经:
puppet/
+ manifests/
+ site.pp
+ nodes/
+ production/
+ nodes.pp
+ dev/
+ nodes.pp
+ modules/
我只是有点困惑 :)
所以我想我要把它分离到服务器角色,比如“webserver”,它有一个像“httpd”或“nginx”这样的服务
什么是最好的方法来布置这一切,因为它让我抓狂,似乎没有一个首选的方法来做到这一点,或者也许我只是在所有其他信息中错过了它: (
这就是您构造目录的方式吗?
puppet/
+ manifests/
+ site.pp
+ nodes/
+ production/
+ nodes.pp (Nodes have roles)
+ dev/
+ nodes.pp
+ roles/
+ web-server-apache.pp (Roles have modules)
+ modules/
+ web-server-apache/
+ manifests/
+ init.pp (This is where "httpd" gets defined and installs latest httpd)
+ templates/
+ files/
答案1
是的,标准目录布局看起来像这样 - 您看到这种结构有什么样的变化?
您的不同服务(httpd、nginx)应分别由目录内的模块处理modules
,而将这些模块附加到节点以包含在其配置目录中将在 中进行manifests
。
您希望如何定义您的角色?通常,这应该在您的节点定义中完成,无论是nodes.pp
通过 加载的清单目录中的文件site.pp
,还是使用 Hiera 进行节点定义(如果您愿意,我绝对推荐这样做)。
答案2
我建议使用 Geppeto 之类的 IDE 根据 Puppet 模块样式指南来管理您的模块。Geppetto 将创建所需的文件和目录结构。
答案3
所以我想我要把它分离到服务器角色,比如“webserver”,它有一个像“httpd”或“nginx”这样的服务
我想您问的是您是否可以将模块组织到文件系统的树中。大多数情况下,人们不会这样做。他们只是将大量模块放在模块目录中,并为其赋予漂亮的描述性标签/名称。
为特定模块创建一些结构很有用。例如,您可能有一个role
模块,您可以创建一个类,如 role::webserver which includes in modules that configure particular services. But if
role::webserver`,它只是包含类,您可以在节点定义、enc 或 hiera 中应用相同的内容。
在您的示例中,您建议在 下定义服务services::
。如果您想要使用 forge 的模块,您会发现这很难维护。原因很简单,因为所有 forge 模块基本上都假设它们位于顶层。您必须大量重写下载的任何模块,以使其适合您的结构并使用它。
所以我的建议是,放弃树的想法,并接受你将拥有一个大的平面目录模块目录。