diff options
| author | Luke Kanies <luke@madstop.com> | 2008-05-15 22:14:02 -0500 |
|---|---|---|
| committer | Luke Kanies <luke@madstop.com> | 2008-05-15 22:14:02 -0500 |
| commit | c9757a689a2ecdcd044ca0355e1ebfa30bb1978f (patch) | |
| tree | 60f1dd0ccc8dd7968c44b5e5286f492a92bf67d5 /lib/puppet/provider/confine.rb | |
| parent | ac79a79c8d7713068243209f782bf16077dd3d37 (diff) | |
| download | puppet-c9757a689a2ecdcd044ca0355e1ebfa30bb1978f.tar.gz puppet-c9757a689a2ecdcd044ca0355e1ebfa30bb1978f.tar.xz puppet-c9757a689a2ecdcd044ca0355e1ebfa30bb1978f.zip | |
Moving the 'confine' handling to separate classes.
Diffstat (limited to 'lib/puppet/provider/confine.rb')
| -rw-r--r-- | lib/puppet/provider/confine.rb | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/puppet/provider/confine.rb b/lib/puppet/provider/confine.rb new file mode 100644 index 000000000..e55ba02ec --- /dev/null +++ b/lib/puppet/provider/confine.rb @@ -0,0 +1,76 @@ +# The class that handles testing whether our providers +# actually work or not. +class Puppet::Provider::Confine + attr_reader :test, :values, :fact + + def exists?(value) + value and FileTest.exist?(value) + end + + # Are we a facter comparison? + def facter? + defined?(@facter) + end + + # Retrieve the value from facter + def facter_value + unless defined?(@facter_value) and @facter_value + @facter_value = Facter.value(@fact).to_s.downcase + end + @facter_value + end + + def false?(value) + ! value + end + + def initialize(test, values) + values = [values] unless values.is_a?(Array) + @values = values + + if %w{exists false true}.include?(test.to_s) + @test = test + @method = @test.to_s + "?" + else + @fact = test + @test = :facter + @method = "match?" + end + end + + def match?(value) + facter_value == value.to_s.downcase + end + + # Collect the results of all of them. + def result + values.collect { |value| send(@method, value) } + end + + def true?(value) + # Double negate, so we only get true or false. + ! ! value + end + + # Test whether our confine matches. + def valid? + values.each do |value| + unless send(@method, value) + msg = case test + when :false: "false value" + when :true: "true value" + when :exists: "file %s does not exist" % value + when :facter: "facter value '%s' for '%s' not in required list '%s'" % [value, @fact, values.join(",")] + end + Puppet.debug msg + return false + end + end + + return true + ensure + # Reset the cache. We want to cache it during a given + # run, but across runs. + @facter_value = nil + end +end |
