仮想リソースとは?
仮想リソースは通常のリソースとは異なり,
仮想リソースの宣言は通常のリソースの宣言とほぼ同じですが,
@user { luke: ensure => present }
この仮想リソースをシステムに適用するためには,
realize(User['luke'])
これでシステム上にlukeというユーザが作成されます。
他にも実体化の方法はありますが,
仮想リソースの利用シナリオ
仮想リソースの利用シーンとして,
- ウェブサービスのためのサーバを構築する。
- このウェブサービスでは,
前段にリバースプロキシを置いてブラウザからのリクエストを受ける。 - リバースプロキシは背後のウェブアプリケーションサーバにリクエストを中継する。
- スモールスタートでコストを抑えつつ,
冗長性も確保するために, マシンは2台用意し, それぞれにリバースプロキシとウェブアプリケーションサーバを同居させる。 - リバースプロキシ,
ウェブアプリケーションのどちらでも負荷に応じて個別に台数を増やせるような柔軟性を確保する。 - リバースプロキシで利用するPerlbalと,
ウェブアプリケーションで利用するBackgrounDrbのプロセスは, daemontoolsで管理する。
このようなシナリオを想定した上で,
リバースプロキシとウェブアプリケーションサーバが同居しない場合には,
class proxy {
package {
'daemontools':
ensure => present;
'perl-Perlbal':
ensure => present;
}
}
class www {
package {
'daemontools':
ensure => present;
'rubygem-rails':
ensure => present;
}
}
node proxy {
include proxy
}
node www {
include www
}
リバースプロキシとウェブアプリケーションサーバを同居させようとした場合,
class proxy {
package {
'daemontools':
ensure => present;
'perl-Perlbal':
ensure => present;
}
}
class www {
package {
'daemontools':
ensure => present;
'rubygem-rails':
ensure => present;
}
}
node proxy_and_www {
include proxy
include www
}
これをシステムに適用しようとすると,
err: Could not retrieve configuration: Duplicate definition: Package[daemontools] is already defined in file manifests/site.pp at line 11; cannot redefine at manifests/site.pp:2