迁移到 Puppet 4.5.2

迁移到 Puppet 4.5.2

我们正在迁移到 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 时遇到的主要问题。之后迁移过程很顺利。

相关内容