Whimlog

寝るまでが一日

Puppet 3 to 4 tips

refs: Puppet 3.x to 4.x: Get upgrade-ready

puppet 3から puppet 4への移行作業の途中で遭遇した tipsを2つ紹介します。

検証環境

refs: Atlas puppetlabs

環境はvagrantで簡単に作成できます。

puppetのバージョンを厳密にしたい場合は以下のようにプロビジョン時にアップデートするようにすると良いと思います。

config.vm.provision "shell", inline: "yum install -y https://yum.puppetlabs.com/el/7/products/x86_64/puppet-3.8.7-1.el7.noarch.rpm"

公式のyumこちらになります。

stringify_facts = true

refs: stringify_facts = true

このオプションはpuppet 4ではfalseになっています。 facterの値が falseと返ってきた場合、文字列の falseで比較できていた部分ができなくなります。 Puppet 4では、 bool値はシングルクオートで囲めないのと facterで返ってくる stringを boolに変換することで対応します。

sample code

-if $::facter == 'false' {
+if str2bool($::facter) == false {

call_function

refs: cannot call 4.x functions from 3.x function ERB templates

hieraの情報をテンプレートファイルから読み出す事があると思います。 その際にfunction_hieraで呼び出していた場合、この関数はpuppet 4では使えないのでcall_functionに置き換える必要があります。

error messega

Detail: hiera() has been converted to 4x API

sample code

- user_data: "<%= scope.function_hiera(['fuga::user_data']) %>"
+ user_data: "<%= scope.call_function('hiera', ['fuga::user_data']) %>"

上記の方法は、puppet 3.8.2以上でないと動きません。3.8.2以下の場合は manifests上で変数を定義するといった方法でこのエラーを回避できます。

まとめ

puppetのバージョンアップ作業はまだ途中なのですが、これらを見つけるのにもとても時間がかかりました。 同じ作業をする方がいれば参考になればと思います!