我们正在迁移到 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 的更高版本或者不存在兼容性问题?
答案1
如果我没错的话,我可以将 classes 和 nodes 目录下的所有清单复制到下面的清单目录
是的,清单目录将被递归导入,所以这是最好的办法。
请建议如何将清单更新到 Puppet 的更高版本或者不存在兼容性问题?
有许多细微的变化,因此请使用未来的解析器 ( --parser future
) 在 Puppet 3 上测试您的清单,看看它们运行得如何。
从...开始Puppet 3.x 至 4.x:做好升级准备、发行说明和Puppet 3.8 弃用。
答案2
以下是我将代码从 Puppet 迁移到 Puppet 4 所必须执行的更改。
- 不推荐使用导入功能。
Puppet 3 代码:
我的 site.pp 使用导入函数来调用其他清单,如下所示
import "../classes/*"
import "../nodes/*"
Puppet 4 代码:
按照“puppet config print manifest”的指定,将节点和类目录复制到清单目录
# puppet config print manifest
/etc/puppetlabs/code/environments/production/manifests
# ls /etc/puppetlabs/code/environments/production/manifests
classes nodes
在我的例子中不需要,site.pp
因为我们有多个节点的清单。将类和节点放入清单目录将导致 puppet 递归读取每个节点清单节点
编写 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>
Puppet 4 代码:
更新了代码如下,之后清单就可以正常使用了
<%= @ipaddress %> node-002.example.com
- 数字属性值的表示
Puppet 3 代码:
` file { "/etc/sudoers":
path => "/etc/sudoers",
...
mode => 440,
} `
失败并出现以下错误
`Error: Failed to apply catalog: Parameter mode failed on File[/etc/sudoers]: The file mode specification must be a string, not 'Fixnum' at /etc/puppetlabs/code/environments/production/manifests/classes/user_default.pp:7`
Puppet 4 代码:修复方法是将模式值放在引号内
`file { "/etc/sudoers":
path => "/etc/sudoers",
...
mode => "440",
} `
这些是我在迁移到 Puppet 4 时遇到的主要问题。之后迁移过程很顺利。