私は以下のようなことを達成しようとしています:
node 'basenode' {
class {
'puppet' :
disable => false,
}
}
node 'child' inherits 'basenode' {
class {
'puppet' :
disable => true,
}
}
これは私に与えます:
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate definition: Class[Puppet] is already defined
この単一ノードのこの設定をオーバーライドし、パラメーター化されたクラスを保持するにはどうすればよいですか?
これは既知の問題であることが判明しました: https://projects.puppetlabs.com/issues/5517
このようにノードの継承を行うのは、一般的に適切な設計ではありません。 /etc/puppet/manifests/roles.pp
の別のファイルに抽象的な「ロール」レイヤーを作成します。そして、代わりにそれらのクラスにパラメーターを渡します。
site.pp
import "roles.pp"
import "nodes.pp"
nodes.pp
node 'webserver1' {
class{"role::webserver":}
}
node 'webserver2' {
class{"role::webserver":
do_stuff => false,
}
}
node 'db' {
class{"role::db":}
}
role.pp
class role($do_stuff) {
class{'foo': do_stuff => $do_stuff,}
}
class role::webserver($do_stuff=true) {
class{'role':
do_stuff => $do_stuff,
}
class{'Apache':
other_stuff => 'foo',
}
}
class role::webserver($do_stuff=true) {
class{'role': do_stuff => $do_stuff,}
class{'Apache': other_stuff => 'foo',}
}
class role::db($do_stuff=true) {
class{'role': do_stuff => $do_stuff,}
class{'postgres': other_stuff => 'foo',}
}