異なる人形モジュールからクラスを拡張する必要があります。これは可能ですか?はいの場合、構文はどのようになりますか?異なる人形モジュールからクラスを拡張する
答えて
パペットでは、クラスa :: bは、クラスを介してクラスaを継承することができます。これにより、クラスa :: bはクラスaを「拡張」することができます。
パペットはこれを行う必要はほとんどないことをお勧めします。特に、インクルード関数を使用して基本クラスをインクルードするだけで、継承によって達成できるもののほとんどを達成することができます。詳細については、文書hereを参照してください。
継承を使用する場合は、クラスaが自動的に最初に宣言されます。クラスaはクラスa :: bの親スコープになり、すべての変数とリソースのデフォルトのコピーを受け取ります。クラスa :: bのコードには、クラスaで設定されているリソース属性をオーバーライドする権限があります。
このパターンを使用すると、クラスa :: bはクラスパラメータの1つのデフォルトとしてクラスaの変数を使用することもできます。これにより、params.ppファイルを使用してクラスのデフォルトを設定する「paramsパターン」が作成されました。
次の簡単なコード例は、これらの機能の全てを示す:
class a {
File {
mode => '0755',
}
file { '/tmp/foo':
ensure => absent,
}
$x = 'I, Foo'
}
class a::b (
$y = $a::x # default from class a.
) inherits a {
# Override /tmp/foo's ensure
# and content attributes.
File['/tmp/foo'] {
ensure => file,
content => $y,
}
# Both /tmp/foo and /tmp/bar
# will receive the default file
# mode of 0755.
file { '/tmp/bar':
ensure => file,
}
}
とカタログの予想終了状態を表現するためにRSPECを使用して:
describe 'a::b' do
it 'overrides ensure attribute' do
is_expected.to contain_file('/tmp/foo').with({
'ensure' => 'file',
})
end
it 'inherits content from $x' do
is_expected.to contain_file('/tmp/foo').with({
'content' => "I, Foo",
})
end
it 'file defaults inherited' do
is_expected.to contain_file('/tmp/foo').with({
'mode' => '0755',
})
is_expected.to contain_file('/tmp/bar').with({
'mode' => '0755',
})
end
end
テストに合格:
a::b
overrides ensure attribute
inherits content from $x
file defaults inherited
Finished in 0.15328 seconds (files took 1.2 seconds to load)
3 examples, 0 failures
を
「plusignment」についての注意。
また、ドキュメントで説明されているように、配列であるリソース属性をオーバーライドするときに、+>
"plusignment"演算子を使用する代わりにその配列に追加することもできます。まれに使用される機能ですが、この文脈で言及する必要があります。コード例については、上のリンクを参照してください。
良い答えですが、そのクラスの継承は、3.xの低さからPuppetによって落胆されており、高い4.x以降の 'params'の継承には注意が必要です。 –
はい、私は、継承を使用する時期と使用しない時期についてのPuppetの推奨事項に注意を払うと言っていました。私はそれがまだ意見の問題だと思いますか?実際には、Craig Dunnの元の役割とプロファイルの記事で興味深い継承を使用しています。https://www.craigdunn.org/2012/05/239/ –
2012年5月のクラス継承はまだOKと考えられていました。 –
- 1. Ruby:モジュールを拡張するクラス
- 2. アダプタクラスからクラスを拡張する
- 3. inetから簡単なモジュールを拡張するには?
- 4. モジュールを拡張する
- 5. SilverStripeモジュール拡張の拡張
- 6. JS:EcmaScript6拡張クラスに異なる数のパラメータを渡す方法
- 7. 異なるサイト拡張をリンクする
- 8. 別のPHP拡張モジュールを拡張するPHP拡張モジュールを作成しますか?
- 9. 拡張クラスからクラス名を取得
- 10. あるモジュールのリストを別のモジュールから別のモジュールに拡張する - 古いモジュールに行がない?
- 11. 拡張モジュール:void *からbytearrayへのマーケティング
- 12. Python cursesモジュールでクラスを拡張するには
- 13. 拡張モジュールFilterNotFoundException
- 14. 抽象クラスから拡張クラスを作成するには?
- 15. PHP:クラスを拡張する
- 16. PsCredentialクラスを拡張する
- 17. 人形モジュールのインストールウィンドウ
- 18. クラスが別のクラスを拡張する場合、拡張クラスを拡張するのではなく、初期化することはできますか?
- 19. HadoopのMapperを拡張するクラスを拡張する
- 20. 異なる拡張子を持つFswatch
- 21. 拡張iOSモジュールからviewControllerを表示する方法
- 22. 別のモジュールからtypescriptインターフェイスを拡張する
- 23. 異なるパッケージからの実装と拡張インターフェイス
- 24. タスクを拡張するクラスからのテキストを更新する
- 25. 拡張形式
- 26. ZipArchiveEntryを異なる拡張子を持つZipArchiveクラスに作成するC#
- 27. 2つのモジュールで同じクラスを拡張しますか? Magentoモジュールの競合?
- 28. PHPは異なるクラスランタイムから拡張します(変数として拡張されますか?)
- 29. モジュールをjavascriptのモジュールパターンで拡張する
- 30. モジュールパターン:モジュールの拡張を制限する
そうすることは可能ですが、パペットクラス、特に別のモジュールからのクラスを拡張する必要はありません。 Puppet言語仕様は、その種類のドキュメントでは実際には非常に読みやすいです。 [構文について説明し、例を示します](https://puppet.com/docs/puppet/5.3/lang_classes.html#inheritance)。また、この機能の適切な使用法についてはほとんど触れていません。 –