我正在阅读最新的木偶书,它把事情分解成很好的模块。
在一个例子中,他们为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和清漆等