summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/settings/file_setting.rb
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2009-08-19 11:31:19 -0700
committerJames Turnbull <james@lovedthanlost.net>2009-08-24 11:36:20 +1000
commit058514aaf44f981a3239b402f2ff116ebf0d951f (patch)
tree12ee14aa7e1f693671167c2190ad1021e10d4fee /lib/puppet/util/settings/file_setting.rb
parentb0f219ad177c8e9c261578586f0324cef0c71cd2 (diff)
downloadpuppet-058514aaf44f981a3239b402f2ff116ebf0d951f.tar.gz
puppet-058514aaf44f981a3239b402f2ff116ebf0d951f.tar.xz
puppet-058514aaf44f981a3239b402f2ff116ebf0d951f.zip
Moving Setting classes into separate files
This isn't really a refactor, just moving code around. I did some simple method renaming, also. Signed-off-by: Luke Kanies <luke@madstop.com>
Diffstat (limited to 'lib/puppet/util/settings/file_setting.rb')
-rw-r--r--lib/puppet/util/settings/file_setting.rb102
1 files changed, 102 insertions, 0 deletions
diff --git a/lib/puppet/util/settings/file_setting.rb b/lib/puppet/util/settings/file_setting.rb
new file mode 100644
index 000000000..08d8039f4
--- /dev/null
+++ b/lib/puppet/util/settings/file_setting.rb
@@ -0,0 +1,102 @@
+require 'puppet/util/settings/setting'
+
+# A file.
+class Puppet::Util::Settings::FileSetting < Puppet::Util::Settings::Setting
+ attr_writer :owner, :group
+ attr_accessor :mode, :create
+
+ # Should we create files, rather than just directories?
+ def create_files?
+ create
+ end
+
+ def group
+ if defined? @group
+ return @settings.convert(@group)
+ else
+ return nil
+ end
+ end
+
+ def owner
+ if defined? @owner
+ return @settings.convert(@owner)
+ else
+ return nil
+ end
+ end
+
+ # Set the type appropriately. Yep, a hack. This supports either naming
+ # the variable 'dir', or adding a slash at the end.
+ def munge(value)
+ # If it's not a fully qualified path...
+ if value.is_a?(String) and value !~ /^\$/ and value !~ /^\// and value != 'false'
+ # Make it one
+ value = File.join(Dir.getwd, value)
+ end
+ if value.to_s =~ /\/$/
+ @type = :directory
+ return value.sub(/\/$/, '')
+ end
+ return value
+ end
+
+ # Return the appropriate type.
+ def type
+ value = @settings.value(self.name)
+ if @name.to_s =~ /dir/
+ return :directory
+ elsif value.to_s =~ /\/$/
+ return :directory
+ elsif value.is_a? String
+ return :file
+ else
+ return nil
+ end
+ end
+
+ # Turn our setting thing into a Puppet::Resource instance.
+ def to_resource
+ return nil unless type = self.type
+
+ path = self.value
+
+ return nil unless path.is_a?(String)
+
+ # Make sure the paths are fully qualified.
+ path = File.join(Dir.getwd, path) unless path =~ /^\//
+
+ return nil unless type == :directory or create_files? or File.exist?(path)
+ return nil if path =~ /^\/dev/
+
+ resource = Puppet::Resource.new(:file, path)
+ resource[:mode] = self.mode if self.mode
+
+ if Puppet.features.root?
+ resource[:owner] = self.owner if self.owner
+ resource[:group] = self.group if self.group
+ end
+
+ resource[:ensure] = type
+ resource[:loglevel] = :debug
+ resource[:backup] = false
+
+ resource.tag(self.section, self.name, "settings")
+
+ resource
+ end
+
+ # Make sure any provided variables look up to something.
+ def validate(value)
+ return true unless value.is_a? String
+ value.scan(/\$(\w+)/) { |name|
+ name = $1
+ unless @settings.include?(name)
+ raise ArgumentError,
+ "Settings parameter '%s' is undefined" %
+ name
+ end
+ }
+ end
+end
+