线上Puppet部署时采用的是版本3.4.3,最近发现客户端经常有一些warning提示,从提示信息看出涉及到跨版本的功能变化,因此对版本进行了一个有计划的升级。

puppetlabs的最新版本为3.6.2。开始升级之前参考了官方的Release Notes(3.5,3.6)和其他人的文档(PUPPET 3.6.1 UPDATES)。

首先将yum仓库同步到yum.puppetlabs.com的最新状态,方便后续使用。

升级分为master和agent两部分,分别进行调整。

master调整

master有两个明显的变化

  1. environmentpath支持
  2. Package模块中引入的allow_virtual

environmentpath调整

关于environmentpath,配置文件改动比较小,只需修改puppet.conf中的[master]部分

+    environmentpath = $confdir/environments
-    modulepath = $confdir/modules:/usr/share/puppet/modules
-    manifestdir = $confdir/manifests

早期版本的envorinment支持通过在puppet.conf中额外的[production][testing]部分实现。需要删除puppet.conf中自定义的environment部分。

同时需要对目录进行调整,这部分工作量稍大,也在可接受的范围内。以下示例中星号(*)标记的目录对应调整即可。

调整之前目录结构为

.
├── auth.conf
├── autosign.conf
├── puppet.conf
├── manifests
│   ├── production   *
│   └── testing    *
├── modules
│   ├── production   *
│   └── testing    *
├── reports
├── ssl
├── var
└── yaml

调整之后目录结构为

.
├── auth.conf
├── autosign.conf
├── puppet.conf
├── environments
│   ├── production
│   │   ├── manifests *
│   │   └── modules   *
│   └── testing
│       ├── manifests *
│       └── modules   *
├── reports
├── ssl
├── var
└── yaml

allow_virtual调整

这是一个新增的特性,相关背景可参考PDP-897。由于默认值变化,如果不配置agent会收到一个warning信息。

修改environments/production/manifests/site.ppenvironments/testing/manifests/site.pp

+    Package {
+      allow_virtual => true,
+    }

软件包升级

通过gem升级安装puppet-3.6.2

gem install puppet --version 3.6.2

安装后重新启动puppet master即可。

agent调整

master端设置的allow_virtual是新增的一个特性,如果agent不支持,会报错,将agent的puppet版本并重启进程即可。

Error: Failed to apply catalog: Invalid parameter allow_virtual

理论上直接升级客户端puppet到3.6.2版本即可完成。不过在升级后发现使用puppet agent --genconfig生成的配置文件仍然会有warning。

Warning: Setting manifest is deprecated in puppet.conf. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/site_ruby/1.8/puppet/settings.rb:1067:in `each')
Warning: Setting modulepath is deprecated in puppet.conf. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/site_ruby/1.8/puppet/settings.rb:1067:in `each')
Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/site_ruby/1.8/puppet/settings.rb:1071:in `each')
Warning: Setting manifestdir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/site_ruby/1.8/puppet/settings.rb:1071:in `each')

直接根据提示取消指定的配置项即可消除警告。这里使用一个脚本进行修改。

#!/bin/bash

for s in manifest modulepath templatedir manifestdir
do
	grep "^    $s = " /etc/puppet/puppet.conf
	sed -i -e "/^    $s = /s/^/#/" /etc/puppet/puppet.conf
done

使用调整后的配置文件启动puppet agent -t,可以看到成功运行并且不再有warning。