我们正在迁移到更高版本的 puppet。
新版本:
# puppet --version
4.5.2
现有版本:
#puppet-3.8.7
我们现有的site.pp如下:
#A default site.pp to do a quick test run
import "../classes/*"
import "../nodes/*"
file { 'testfile':
path => '/home/test/testfile',
ensure => present,
mode => 0755,
content => "A test file to check a different manifestdir" ,
}
Exec { path => ["/bin" , "/sbini/", "/usr/bin" , "/usr/sbin/"] }
现在由于我们正在迁移到Puppet 4
,我认为下面的导入功能包含多个 pp 文件将在这里不起作用Puppet 4
import "../classes/*"
import "../nodes/*"
如果我没记错的话,我可以将 classes 和 nodes 目录下的所有清单复制到下面的清单目录
/apps/puppetlabs/code/environments/production/manifests/site.pp
请建议如何将清单更新到 Puppet 的更高版本或没有兼容性问题?
是的,清单目录将被递归导入,所以这是最好的做法。
有许多细微的变化,因此请使用未来解析器 (
--parser future
) 在 Puppet 3 上测试您的清单,看看它们的工作情况如何。从Puppet 3.x 到 4.x 开始:获取升级就绪、发行说明和Puppet 3.8 弃用。
以下是将代码从 Puppet 迁移到 Puppet 4 时必须执行的更改。
木偶 3 代码:
我的 site.pp 正在使用导入函数来调用其他清单,如下所示
木偶4代码:
将节点和类目录复制到“puppet config print manifest”指定的清单目录
在我的情况下不需要,
site.pp
因为我们有多个节点的清单。将类和节点放入清单目录将导致 puppet 递归读取每个节点清单节点编写 Puppet 模板时的语法更改
木偶 3 代码:
<%= ipaddress %> dev.example.com
在 Puppet 4 上应用时看到以下错误
Call, Failed to parse template /etc/puppet/templates/Node-002/hosts.erb: Filepath: /etc/puppet/templates/Node-002/hosts.erb: Line: 1 Detail: undefined local variable or method 'ipaddress' for #<Puppet::Parser::TemplateWrapper:0x007ffa98fb55c8>
木偶4代码:
更新代码如下,之后清单被很好地应用
<%= @ipaddress %> node-002.example.com
- 数值属性值的表示
木偶 3 代码:
这因以下错误而失败
Puppet 4 Code:修复是将模式值放在引号内
这些是我在迁移到 Puppet 4 时遇到的主要问题。之后迁移就很顺利了。