Open1

Puppetの operatingsystem とかがない時の対応法

sonzaisonzai

古いPuppetマニフェストを使っていると、よく $::operatingsystem みたいなことが書かれている。
これは facter から取得したOSの情報などをPuppetが変数として格納してくれる機能なのだが、この書き方はlegacy factsと呼ばれており、Puppet 8からは参照できなくなっている。

普通ならモダンな書き方である structured facts を使うべきである。例えば、以下は等価である。

$::operatingsystem == $facts['os']['name']

だが、何らかの事情で書き方を変更できない場合もあるだろう。そのようなときは include_legacy_facts=true という設定を使うとよい[1] 。 puppet.conf などのファイルを用意し、以下のように書く。

[main]
include_legacy_facts=true

puppet apply -t ./puppet.conf のようにすれば、legacy factsのままpuppet applyできる。

legacy factsのようなものをlintするには puppet-lint[2] が使える。

脚注
  1. https://github.com/puppetlabs/puppet/wiki/Puppet-8-Compatibility#legacy-facts ↩︎

  2. https://github.com/puppetlabs/puppet-lint/tree/main ↩︎