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