これから数回に渡って、
今回はリソースタイプを拡張し、
Puppetサーバ側の設定
カスタムリソースタイプはPuppetサーバ上のモジュールパスに置かれますので、
# mkdir -p /etc/puppet/modules/custom/plugins/puppet/type
# mkdir -p /etc/puppet/modules/custom/plugins/puppet/provider
次に、
[plugins]
allow *.example.com
これにより、
Puppet クライアント側の設定
Puppetクライアントでは、
[main]
pluginsync = true
pluginsource = puppet://$server/plugins
カスタムリソースタイプの作成
今回はサンプルとして、
カスタムリソースタイプの作成は、
タイプの作成
以下の内容の/etc/
module Puppet
newtype(:filesimple) do
@doc = "Manage a file (the simple version)."
ensurable
newparam(:name) do
desc "The full path to the file."
end
newproperty(:mode) do
desc "Manage the file's mode."
defaultto "640"
end
end
end
プロバイダの作成
以下の内容の/etc/
Puppet::Type.type(:filesimple).provide(:posix) do
desc "Normal Unix-like POSIX support for file management."
def create
File.open(@resource[:name], "w") { |f| f.puts "" } # Create an empty file
# Make sure the mode is correct
should_mode = @resource.should(:mode)
unless self.mode == should_mode
self.mode = should_mode
end
end
def destroy
File.unlink(@resource[:name])
end
def exists?
File.exists?(@resource[:name])
end
# Return the mode as an octal string, not as an integer.
def mode
if File.exists?(@resource[:name])
"%o" % (File.stat(@resource[:name]).mode & 007777)
else
:absent
end
end
# Set the file mode, converting from a string to an integer.
def mode=(value)
File.chmod(Integer("0" + value), @resource[:name])
end
end
カスタムリソースの適用
作成したfilesimpleタイプのリソースを定義し、
Puppetサーバ側での作業
Puppetサーバ側で、
node default {
filesimple { '/tmp/file':
ensure => present,
mode => 600,
}
}
puppetmasterdを起動します。
# puppetmasterd --verbose --no-daemonize
info: Starting server for Puppet version 0.24.4
info: mount[plugins]: allowing *.example.com access
info: Listening on port 8140
notice: Starting Puppet server version 0.24.4
Puppetクライアント側での作業
puppetdを実行してPuppetサーバに接続し、
# puppetd --server puppet.example.com --verbose --no-daemonize
notice: Starting Puppet client version 0.24.4
info: Retrieving plugins
notice: /File[/var/puppet/lib]/checksum: checksum changed '{mtime}Sun Apr 27 01:34:46 +0900 2008' to '{mtime}Sun Apr 27 05:51:23 +0900 2008'
notice: /File[/var/puppet/lib/puppet]/ensure: created
notice: /File[/var/puppet/lib/puppet/type]/ensure: created
notice: /File[/var/puppet/lib/puppet/type/filesimple.rb]/ensure: created
notice: /File[/var/puppet/lib/puppet/provider]/ensure: created
notice: /File[/var/puppet/lib/puppet/provider/filesimple]/ensure: created
notice: /File[/var/puppet/lib/puppet/provider/filesimple/posix.rb]/ensure: created
info: Caching catalog at /var/puppet/state/localconfig.yaml
notice: Starting catalog run
notice: //Node[default]/Filesimple[/tmp/file]/ensure: created
notice: Finished catalog run in 0.02 seconds
カスタムリソースタイプが同期されていること、
以上がカスタムリソースタイプを作成し、