Puppet で次の問題を解決しようとしています。
複数のノードがあります。各ノードには、クラスのコレクションが含まれています。たとえば、mysql
クラスとwebserver
クラスがあります。node1 は Web サーバーのみ、node2 は Web サーバー + mysql です。
ノードに webserver と mysql の両方がある場合、mysql のインストールが webserver の前に行われるように指定したいと思います。
Class[mysql] -> Class[webserver]
MySQL のサポートはオプションであるため、依存関係を持つことはできません。
ステージを使用しようとしましたが、クラス間に依存関係が生じるようです。たとえば、次の場合:
Stage[db] -> Stage[web]
class {
'webserver':
stage => web ;
'mysql':
stage => db ;
}
ノードにWebサーバークラスを含めます
node node1 {
include webserver
}
.. mysql クラスも含まれます! それは私が望むものではありません。
オプションのクラスの順序を定義するにはどうすればよいですか?
編集:ここに解決策があります:
class one {
notify{'one':}
}
class two {
notify{'two':}
}
stage { 'pre': }
Stage['pre'] -> Stage['main']
class {
one: stage=>pre;
# two: stage=>main; #### BROKEN - will introduce dependency even if two is not included!
}
# Solution - put the class in the stage only if it is defined
if defined(Class['two']) {
class {
two: stage=>main;
}
}
node default {
include one
}
結果:
notice: one
notice: /Stage[pre]/One/Notify[one]/message: defined 'message' as 'one'
notice: Finished catalog run in 0.04 seconds
〜