木偶和模块,不是很多吗?

我正在阅读最新的木偶书,它把事情分解成很好的模块。

在一个例子中,他们为SSH创build了一个模块,所以:

/modules/ssh/{files, manifests, ...} 

然后,您可以将该模块包含到您的节点类中。

我的问题是,对于现场制作木偶configuration,这基本上意味着你将有很多模块正确? 我的意思是如果你为ssh创build一个,这个列表将会很长,你不会说吗?

 eg: I need: nginx, ssh, mysql, phusion passenger, etc. etc. 

这些是主要组件,但是如果我为每个需要的服务编写一个模块,我认为这个列表将会变长。

另一方面,ssh已经安装了Ubuntu,所以也许这本书中的例子只是为了传授模块背后的想法而devise的。

这是一个办法..

你基本上有一个默认的节点,它包括了所有服务器应该做的所有事情。 然后你有你的节点inheritance您的site.pp生产

所以例如

 node default { include linux include ssh::install } node prod inherits default { include postfix::relay } node www.domain.com inherits prod { include apache::install } 

所以我的节点www.domain.com将包括

 linux ssh::install postfix::relay apache::install 

那么,把这个问题的头脑。 如果你使用模块,你将把你所有的configuration放在哪里?

以ssh为例。 的确,ssh安装在几乎所有的现代Unix上,但是…

  • 你在/etc/ssh/ssh_known_keys上有每个服务器的ssh密钥吗?
  • 你的/etc/ssh/ssh_known_keys可读?

对于Ubuntu而言,答案是否定的,对于任何系统而言,答案都是否定的。 我使用的ssh模块(以及我从github获得的模块)负责将每个服务器的密钥复制到每个其他服务器的已知密钥中。

现在,为了得到这个,我只需要一个include ssh::server 。 在每个服务器上进行整个configuration并不那么容易?

另一个要考虑的方面是一个模块可以包含其他模块等等。 而且你可以在任何模块内部包含类和定义。

例如,我的典型节点只有这样几行:

 include linux-server include agencia 

linux-server拥有标准linux服务器所需的一切(有很多条件来处理虚拟服务器和物理服务器之类的东西),而agencia是一个特定应用程序的模板,包括apache,php,drupal,导出configuration用于nginx和清漆等