puppet 2.7.22 を使用して次の puppet マニフェストを実行すると:
Exec {
logoutput => true,
path => '/bin',
}
define c {
exec {"echo [two]: ${b::x}": }
}
class a {
exec {"echo [one]: ${b::x}": }
include b
}
class b { $x = "asdf" }
c {'two': }
class {'a': }
次の出力が表示されます。
$ puppet apply test.pp
warning: Scope(Class[A]): Could not look up qualified variable 'b::x'; class b has not been evaluated at /tmp/l/a.pp:11
warning: Scope(Class[A]): Could not look up qualified variable 'b::x'; class b has not been evaluated at /tmp/l/a.pp:11
notice: /Stage[main]//C[two]/Exec[echo [two]: asdf]/returns: [two]: asdf
notice: /Stage[main]//C[two]/Exec[echo [two]: asdf]/returns: executed successfully
notice: /Stage[main]/A/Exec[echo [one]: ]/returns: [one]:
notice: /Stage[main]/A/Exec[echo [one]: ]/returns: executed successfully
notice: Finished catalog run in 0.15 seconds
これで、パペットが解析順に変数を評価することがわかりました。b の x 変数を使用する exec の後にclass b
fromを含めるのはばかげていることを理解しています。私が理解できないのは、定義された(名前が「2」のインスタンス)からのexecが、解析順序に関してクラス「a」の前に表示されるにもかかわらず、評価されたバージョンを持っている理由です。class a
type c
$b::x
これを説明する唯一のことは、定義された型がいつ解析されるかという点で遅れた場合ですか? この場合、これ (またはどこか) に関する puppetlabs のドキュメントはありますか、および/またはソースのどの部分が標準型リソースと定義済み型リソースを区別していますか? (私はそれを見つけようとしましcompiler.rb
たが失敗しました)。