Puppet

Puppet 4.x から消えた import の代わりに Main Manifest を Directory に変更する

More than 3 years have passed since last update.


背景

Puppet 4.0 から、 import 関数が削除されました。

ザックリ言うと、これは複数の manifests をガッチャンコするものです。

# default.pp と node.pp の内容を取り込んで使う

import 'default.pp'
import 'node.pp'

4.0 から import 関数が入っていると、以下のようにエラーとなります。

$ puppet apply /tmp/hello.pp

Error: Evaluation Error: Use of 'import' has been discontinued in favor of a manifest directory. See http://links.puppetlabs.com/puppet-import-deprecation at /tmp/hello.pp:1:1 on node okkun.local


これからはどうする

今まで site.pp のようなMain Manifestで import していた場合は、4.xからはディレクトリを指定することで回避できそうです。


Directories: The Main Manifest(s) — Documentation — Puppet Labs

If the main manifest is a directory, Puppet will parse every .pp file in the directory in alphabetical order and then evaluate the combined manifest. It will descend into all subdirectories of the manifest dir, and load files in depth-first order. (For example, if the manifest directory contains a directory named 01 and a file named 02.pp, it will parse all the files in 01 before 02.)


puppet apply /path/to/directory とすれば、ディレクトリ中の Puppet manifestsをアルファベット順に読み込み、まとめて1つの Manifest として結合してくれます。


hello.ppworld.pp にそれぞれ以下のような内容があるとします。

どちらも hello world と出力するだけの manifests です。

# hello.pp

notice('hello')

# world.pp

notice('world')

これらのファイルを1つのディレクトリに入れて、 puppet apply /path/to/manifests_dir と実行すれば、指定したディレクトリ以下(サブディレクトリも含む)をアルファベット順に結合して実行してくれます。

$ puppet apply /tmp/puppet_main_manifest/

Notice: Scope(Class[main]): hello
Notice: Scope(Class[main]): world
Notice: Compiled catalog for okkun.local in environment production in 0.66 seconds
Notice: Applied catalog in 0.01 seconds


結論

これまで:

# site.pp

import 'default.pp'
import 'node.pp'

puppet apply /path/to/manifests/site.pp

/path/to/manifests
├── default.pp
├── node.pp
└── site.pp

これから:

puppet apply /path/to/manifests_dir

/path/to/manifests_dir
├── default.pp
└── node.pp