summaryrefslogtreecommitdiffstats
path: root/lib/puppet/property
diff options
context:
space:
mode:
authorAndrew Shafer <andrew@reductivelabs.com>2008-10-21 12:20:12 -0600
committerJames Turnbull <james@lovedthanlost.net>2008-10-22 16:34:50 +1100
commitc09d0cc128aa3f6a0b741422ae45326b258bae7d (patch)
treee357696bb317f3ac63d0649ed9ad1f5d8bc980b1 /lib/puppet/property
parent6d05cbc1e1a22d4316e18fb22d5cff9c7a42d3cf (diff)
downloadpuppet-c09d0cc128aa3f6a0b741422ae45326b258bae7d.tar.gz
puppet-c09d0cc128aa3f6a0b741422ae45326b258bae7d.tar.xz
puppet-c09d0cc128aa3f6a0b741422ae45326b258bae7d.zip
Solaris RBAC Attributes
Adding support to user type for: profiles auths project key/value pairs Refactored useradd.addcmd so I could override how properties get added in the subclass Added keyvalue property to manage generic keyvalues
Diffstat (limited to 'lib/puppet/property')
-rw-r--r--lib/puppet/property/keyvalue.rb96
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/puppet/property/keyvalue.rb b/lib/puppet/property/keyvalue.rb
new file mode 100644
index 000000000..6c0800c79
--- /dev/null
+++ b/lib/puppet/property/keyvalue.rb
@@ -0,0 +1,96 @@
+#This subclass of property manages string key value pairs.
+
+#In order to use this property:
+# - the @should value must be an array of keyvalue pairs separated by the 'separator'
+# - the retrieve method should return a hash with the keys as symbols
+# IMPORTANT NOTE: In order for this property to work there must also be a 'membership' parameter
+# The class that inherits from property should override that method with the symbol for the membership
+
+require 'puppet/property'
+
+module Puppet
+ class Property
+ class KeyValue < Property
+
+ def hash_to_key_value_s(hash)
+ hash.select { |k,v| true }.map { |pair| pair.join(separator) }.join(delimiter)
+ end
+
+ def should_to_s(should_value)
+ hash_to_key_value_s(should_value)
+ end
+
+ def is_to_s(current_value)
+ hash_to_key_value_s(current_value)
+ end
+
+ def membership
+ :key_value_membership
+ end
+
+ def inclusive?
+ @resource[membership] == :inclusive
+ end
+
+ def hashify(key_value_array)
+ #turns string array into a hash
+ key_value_array.inject({}) do |hash, key_value|
+ tmp = key_value.split(separator)
+ hash[tmp[0].intern] = tmp[1]
+ hash
+ end
+ end
+
+ def process_current_hash(current)
+ return {} if current == :absent
+
+ #inclusive means we are managing everything so if it isn't in should, its gone
+ if inclusive?
+ current.each_key { |key| current[key] = nil }
+ end
+ current
+ end
+
+ def should
+ unless defined? @should and @should
+ return nil
+ end
+
+ members = hashify(@should)
+ current = process_current_hash(retrieve)
+
+ #shared keys will get overwritten by members
+ current.merge(members)
+ end
+
+ def separator
+ "="
+ end
+
+ def delimiter
+ ";"
+ end
+
+ def retrieve
+ #ok, some 'convention' if the keyvalue property is named properties, provider should implement a properties method
+ if key_hash = provider.send(name) and key_hash != :absent
+ return key_hash
+ else
+ return :absent
+ end
+ end
+
+ def insync?(is)
+ unless defined? @should and @should
+ return true
+ end
+
+ unless is
+ return true
+ end
+
+ return (is == self.should)
+ end
+ end
+ end
+end