前々回は拡張の全体的な流れを、
今回は、
プロバイダでは、
サンプルコードの解説
filesimpleタイプ用のプロバイダ/etc/
01: Puppet::Type.type(:filesimple).provide(:posix) do
02:
03: desc "Normal Unix-like POSIX support for file management."
04:
05: def create
06: File.open(@resource[:name], "w") { |f| f.puts "" } # Create an empty file
07:
08: # Make sure the mode is correct
09: should_mode = @resource.should(:mode)
10: unless self.mode == should_mode
11:
12: self.mode = should_mode
13: end
14: end
15:
16: def destroy
17: File.unlink(@resource[:name])
18: end
19:
20: def exists?
21: File.exists?(@resource[:name])
22: end
23:
24: # Return the mode as an octal string, not as an integer.
25: def mode
26: if File.exists?(@resource[:name])
27: "%o" % (File.stat(@resource[:name]).mode & 007777)
28: else
29: :absent
30: end
31: end
32:
33: # Set the file mode, converting from a string to an integer.
34: def mode=(value)
35: File.chmod(Integer("0" + value), @resource[:name])
36: end
37:
38: end
1行目では、
また、
Puppet::Type.type(:package).provide(:dpkg, :parent => Puppet::Provider::Package) do
3行目ではこのプロバイダのドキュメントを記述しています。Puppet標準のリソースタイプでは、
5行目から22行目では、
createメソッドでは、
25行目以降では、
25行目から31行目がgetterメソッドで、
33行目から36行目がsetterメソッドで、
このように、
複数のプロバイダ
サンプルコードでは示していませんが、
プロバイダが複数ある場合でも、
プロバイダを特定の環境でのみ有効にする
特定の環境でのみプロバイダを有効にするためには、
# Facter変数operatingsystemにより、特定のOSでのみ有効に
confine :operatingsystem => [:debian, :solaris]
# Facter変数puppetversionにより、特定バージョンのPuppetでのみ有効に
confine :puppetversion => '0.23.0'
# 特定のファイルが存在している場合にのみ有効に
confine :exists => '/etc/debian_release'
# 特定のメソッドの返り値によって有効に
confine :true => Puppet.features.rrd?
confine :false => Puppet.features.rails?
また、
command :yum => '/usr/bin/yum'
デフォルトプロバイダ
ユーザに選択させることなく、
例えば、
defaultfor :operatingsystem => :redhat
リソースタイプの拡張については、