Tim Sharpe氏がPuppet lint 1.0.0のリリースを発表した。Puppetコードの推奨スタイルガイドラインへの準拠性をチェックし,文法上のミスを検出するツールである。新バージョンでは新しい機能やバグフィックスに加えて,プラグインシステム,エラーの自動修正機能などを備えている。
プラグインシステム
新機能のプラグインシステムによって,Ruby gemとして配布可能なカスタムチェックを追加できるようになる。コミュニティプラグインのリストは小規模ながら拡大を続けている。自分でプラグインを開発したい人のために,サンプルを含むチュートリアルも用意されている。
チェックはRubyを使って,checkメソッドとして実装する。サンプルプラグインで示されているように,オプションとして,推奨する構文を自動的に適用するfixメソッドもある。Puppet-lintには,RSpecとともに,checkとfixの動作テストに使用するテストAPIも含まれている。
エラーの自動フィックス
チェックで報告されるエラーの一部は,puppet-lint --fixを使って自動的にフィックスすることもできる。コアに実装されたチェック,プラグインのチェックのいずれにも使用可能だ。特定のチェックによる問題のみをフィックスするには,新しい--only-checksパラメータを--fixパラメータと併用して,puppet-lint --fix --only-checks arrow_alignment manifestsのように指定すればよい。
自動フィックスの可能なチェックは次のようなものだ。
arrow_alignment: 属性ブロック内の矢印(=>)は,同じブロック内の他の矢印と一致していなければならない。file_mode: ファイルモードは3桁ではなく4桁の8進数で指定するか,またはu=rw,g=rのようなシンボルで指定しなければならない。ensure_not_symlink_target: シンボリックリンクではensure => linkとターゲット属性の値を使用しなければならない。double_quoted_strings: 変数を含まない文字列はすべて,単一引用符で囲まなければならない。variables_not_enclosed: 文字列内に挿入された変数はすべて,括弧({})で囲まなければならない。
その他,スタイルと構文の一般的な間違いに対処するためのチェックが2つ,Puppet-lintのコアに新たに追加されている。
unquoted_node_name: 引用符のないノード名をチェックする。puppet_url_without_modules:modulesマウントポイントのないファイルサーバURLをチェックする。
また,class_parameter_defaultsチェックが,スタイルガイドの誤解に基づくものであったために削除されている。
コントロールコメント
コード内の特殊なコメントを使うことで,テストを無効にできるようになった。#lint:ignore:check_nameと#lint:endignoreの間のコードは無視される。double_quoted_stringsチェックを無効にするには,次のようにすればよい。
class foo {
$bar = 'bar'
# lint:ignore:double_quoted_strings
$baz = "baz"
$gronk = "gronk"
# lint:endignore
}
単一の行は,#lint:ignore:check_nameというコメントを付加するだけでチェックを無効にできる。
$this_line_has_a_really_long_name_and_value = "[snip]" # lint:ignore:80chars
新しいコマンドラインパラメータ
--fix以外にも,新たにいくつかのコマンドパラメータが追加されている。
--relative:autoloader_layoutチェックで最上位のディレクトリを無視して,モジュールのルートからの相対的な位置でモジュールレイアウトを比較するように指示する。puppet-moduleのように,モジュールフォルダがモジュール名と異なる場合に有効だ。--show-ignored: 無視された問題点を表示する。-c/--config:puppet-lint.rcへのパスを指定する。puppet-lint.rcはコマンドラインオプションを指定するスクリプトで,デフォルトでは/etc/puppet-lint.rcから参照される。--with-context: 問題を検出したマニフェストの行を,正確な位置を示すポイントとともにプリントアウトする。
Puppet-lintはRuby gemとしてインストールすることができる。コマンドラインからも使用可能だが,}RakeタスクとしてRakefileで使用するのが一般的な方法で,カスタマイズにも対応する。このツールを含むさまざまなツールは,Puppet Labsにおいて,Puppet Forgeがサポートするモジュールをテストするために利用されている。