Puppet 和模块,不是很多吗?

Puppet 和模块,不是很多吗?

我正在阅读最新的木偶书,它将事物分解为模块,这很好。

在一个示例中,他们为 SSH 创建了一个模块,因此:

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

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

我的问题是,对于实时生产 Puppet 配置,这基本上意味着您将拥有很多模块,对吗?我的意思是,如果您为 ssh 创建一个,列表会很长,不是吗?

e.g.:
I need: nginx, ssh, mysql, phusion passenger, etc. etc.

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

另一方面,ssh 已经在 Ubuntu 中设置好了,所以书中的例子可能有点不自然,只是为了教授模块背后的想法?

答案1

这是实现此目的的一种方法。

您基本上有一个默认节点,其中包含所有服务器应执行的所有操作。然后,您甚至可以拥有一个生产节点,该节点继承默认节点并包含生产服务器所需的一切。然后,您在 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

答案2

那么,让我们把这个问题反过来想。如果你使用模块,您要把所有配置放在哪里?

让我们以 ssh 为例。事实上,几乎所有现代 Unix 都安装了 ssh,但是...

  • 您有每台服务器的 ssh 密钥吗/etc/ssh/ssh_known_keys
  • 您的/etc/ssh/ssh_known_keys内容大家都能读懂吗?

对于 Ubuntu 来说,这两个问题都不是答案,对于任何系统来说,第一个问题也不是答案。我使用的 ssh 模块(我从 github 获取)负责将每个服务器的密钥复制到每个其他服务器的已知密钥中。

现在,为了得到它,我只需要一个include ssh::server。这不是比在每台服务器上进行整个配置容易得多吗?

需要考虑的另一个方面是,一个模块可以包含其他模块,依此类推。并且您可以将不在任何模块内的类和定义也包含进去。

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

include linux-server
include agencia

其中linux-server具有标准 Linux 服务器所需的一切(具有许多条件来处理诸如虚拟服务器与物理服务器之类的东西),并且agencia是一个特定应用程序的模板,包括 apache、php、drupal 的配置、nginx 和 varnish 的导出配置等。

相关内容