如何pipe理不同模块版本的puppet节点?

我有一个设置,我们想让puppetpipe理我们的软件在多个服务器上的安装和configuration,但是能够在不同的服务器上安装不同版本的软件。

例如,我希望能够创build一个puppet模块,其中包含我们版本1.0的服务器configuration,依赖关系等,以及1.1版本的独立模块。 从单一的木偶大师安装,我想能够configuration一些节点运行版本1.0和其他节点运行1.1。

我发现模块允许包含版本的元数据,但是看起来您一次只能在puppet master上安装一个模块版本。

理想情况下,它是基于组的,我们可以定义一个“早期采用者”组和“正常”组,当我们提出新版本时,我们可以设置早期采用者组使用新版本和正常组来使用下一个最老的。

什么是pipe理这个最好的方法?

有几种方法我最喜欢的是以下三种:

  • 对于我们从apache1到apache2的迁移,我们创build了完全独立的模块。 你会认为这造成了很多重复,但我们同时redid我们的configuration。
  • 对于单个软件包的简单升级,我们做类似的事情

    package{"foo": ensure => $wants_foo_upgrade ? { true => latest, false => 1.0 } } 

    其中$wants_foo_upgrade基于我们的基础架构数据库,extlookup数据或事实

  • 对于中间的东西,我们采取第二种方法,使用该variables来确定要使用的configuration文件,或者在configfiles的模板中。

我会build议做一个单一的模块,将版本号作为参数,如下所示:

 class our_software ($version) { ... } 

你在课堂上做什么取决于你的软件的两个版本有多less共同点。 您可能可以将所有configuration文件直接包含在类中,而模板可以根据版本号为其设置select正确的值,也可以有两个单独的类来完全不同地设置每个版本的环境,根据版本号决定要包含哪些内容。

如果您使用的是hiera(或其他外部查找的东西),则可以使用完全独立于“安装我们的软件”的代码来指定所需的软件版本。

如果你想变得有趣,模块可以包含一个事实来指出当前安装的软件版本,这样你的模块就可以禁止类似版本降级的事情(假设你的环境是合适的)。