summaryrefslogtreecommitdiffstats
path: root/lib/puppet/provider/nameservice/netinfo.rb
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-11-13 04:20:57 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-11-13 04:20:57 +0000
commit4e96031745a215b84f1ae45916050f35741f9201 (patch)
tree929ae6e35efe6ffcd417dad1a43bb1d22061b841 /lib/puppet/provider/nameservice/netinfo.rb
parent064ddbc218c56de91318c9dfedc481e67ed60750 (diff)
downloadpuppet-4e96031745a215b84f1ae45916050f35741f9201.tar.gz
puppet-4e96031745a215b84f1ae45916050f35741f9201.tar.xz
puppet-4e96031745a215b84f1ae45916050f35741f9201.zip
Adding a NetInfo provider for hosts. Yay!
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1865 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/provider/nameservice/netinfo.rb')
-rw-r--r--lib/puppet/provider/nameservice/netinfo.rb142
1 files changed, 75 insertions, 67 deletions
diff --git a/lib/puppet/provider/nameservice/netinfo.rb b/lib/puppet/provider/nameservice/netinfo.rb
index 00d1e4478..879bb7757 100644
--- a/lib/puppet/provider/nameservice/netinfo.rb
+++ b/lib/puppet/provider/nameservice/netinfo.rb
@@ -6,6 +6,9 @@ require 'puppet/provider/nameservice'
class Puppet::Provider::NameService
class NetInfo < Puppet::Provider::NameService
+ class << self
+ attr_writer :netinfodir
+ end
# Attempt to flush the database, but this doesn't seem to work at all.
def self.flush
begin
@@ -34,6 +37,68 @@ class NetInfo < Puppet::Provider::NameService
noautogen
end
end
+
+ # Convert a NetInfo line into a hash of data.
+ def self.line2hash(line, params)
+ values = line.split(/\t/)
+
+ hash = {}
+ params.zip(values).each do |param, value|
+ next if value == '#NoValue#'
+ hash[param] = if value =~ /^[-0-9]+$/
+ Integer(value)
+ else
+ value
+ end
+ end
+ hash
+ end
+
+ def self.list
+ report(@model.validstates).collect do |hash|
+ @model.hash2obj(hash)
+ end
+ end
+
+ # What field the value is stored under.
+ def self.netinfokey(name)
+ name = symbolize(name)
+ self.option(name, :key) || name
+ end
+
+ # Retrieve the data, yo.
+ # FIXME This should retrieve as much information as possible,
+ # rather than retrieving it one at a time.
+ def self.report(*params)
+ dir = self.netinfodir()
+ cmd = [command(:nireport), "/", "/%s" % dir]
+
+ # We require the name in order to know if we match. There's no
+ # way to just report on our individual object, we have to get the
+ # whole list.
+ params.unshift :name unless params.include? :name
+
+ params.each do |param|
+ if key = netinfokey(param)
+ cmd << key.to_s
+ else
+ raise Puppet::DevError,
+ "Could not find netinfokey for state %s" %
+ self.class.name
+ end
+ end
+
+ begin
+ output = execute(cmd.join(" "))
+ rescue Puppet::ExecutionFailure => detail
+ Puppet.err "Failed to call nireport: %s" % detail
+ return nil
+ end
+
+ return output.split("\n").collect { |line|
+ line2hash(line, params)
+ }
+ end
# How to add an object.
def addcmd
@@ -52,6 +117,10 @@ class NetInfo < Puppet::Provider::NameService
def deletecmd
creatorcmd("-destroy")
end
+
+ def destroy
+ delete()
+ end
def ensure=(arg)
super
@@ -91,7 +160,7 @@ class NetInfo < Puppet::Provider::NameService
if refresh or (! defined? @infohash or ! @infohash)
states = [:name] + self.class.model.validstates
states.delete(:ensure) if states.include? :ensure
- @infohash = report(*states)
+ @infohash = single_report(*states)
end
return @infohash
@@ -115,73 +184,12 @@ class NetInfo < Puppet::Provider::NameService
# Determine the flag to pass to our command.
def netinfokey(name)
- name = symbolize(name)
- self.class.option(name, :key) || name
+ self.class.netinfokey(name)
end
-
- # Retrieve the data, yo.
- # FIXME This should retrieve as much information as possible,
- # rather than retrieving it one at a time.
- def report(*params)
- dir = self.class.netinfodir()
- cmd = [command(:nireport), "/", "/%s" % dir]
-
- # We require the name in order to know if we match. There's no
- # way to just report on our individual object, we have to get the
- # whole list.
- params.unshift :name unless params.include? :name
-
- params.each do |param|
- if key = netinfokey(param)
- cmd << key.to_s
- else
- raise Puppet::DevError,
- "Could not find netinfokey for state %s" %
- self.class.name
- end
- end
-
- begin
- output = execute(cmd.join(" "))
- rescue Puppet::ExecutionFailure => detail
- Puppet.err "Failed to call nireport: %s" % detail
- return nil
- end
-
- output.split("\n").each { |line|
- values = line.split(/\t/)
-
- hash = {}
- params.zip(values).each do |param, value|
- next if value == '#NoValue#'
- hash[param] = if value =~ /^[-0-9]+$/
- Integer(value)
- else
- value
- end
- end
-
- if hash[:name] == @model[:name]
- return hash
- else
- next
- end
-
-#
-# if line =~ /^(\w+)\s+(.+)$/
-# name = $1
-# value = $2.sub(/\s+$/, '')
-#
-# if name == @model[:name]
-# if value =~ /^[-0-9]+$/
-# return Integer(value)
-# else
-# return value
-# end
-# end
- }
-
- return nil
+
+ # Get a report for a single resource, not the whole table
+ def single_report(*states)
+ self.class.report(*states).find do |hash| hash[:name] == @model[:name] end
end
def setuserlist(group, list)