diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ohai/plugins/aix/cpu.rb | 62 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/filesystem.rb | 98 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/kernel.rb | 3 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/memory.rb | 5 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/network.rb | 10 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/os.rb | 30 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/platform.rb | 3 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/uptime.rb | 5 | ||||
-rw-r--r-- | lib/ohai/plugins/aix/virtualization.rb | 118 | ||||
-rw-r--r-- | lib/ohai/plugins/hostname.rb | 13 |
10 files changed, 263 insertions, 84 deletions
diff --git a/lib/ohai/plugins/aix/cpu.rb b/lib/ohai/plugins/aix/cpu.rb index 107ca9b4..32e294dc 100644 --- a/lib/ohai/plugins/aix/cpu.rb +++ b/lib/ohai/plugins/aix/cpu.rb @@ -1,7 +1,8 @@ # # Author:: Joshua Timberman <joshua@opscode.com> # Author:: Prabhu Das (<prabhu.das@clogeny.com>) -# Copyright:: Copyright (c) 2013, Opscode, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,36 +23,41 @@ Ohai.plugin(:CPU) do collect_data(:aix) do cpu Mash.new - + cpu[:total] = shell_out("pmcycles -m").stdout.lines.length - # At least one CPU will be available, but we'll wait to increment this later. - cpu[:available] = 0 - cpudevs = shell_out("lsdev -Cc processor").stdout.lines - #from http://www-01.ibm.com/software/passportadvantage/pvu_terminology_for_customers.html - #on AIX number of cores and processors are considered same - cpu[:real] = cpu[:cores] = cpudevs.length - cpudevs.each.with_index do |c,i| - name, status, location = c.split - index = i.to_s - cpu[index] = Mash.new - cpu[index][:status] = status - cpu[index][:location] = location - if status =~ /Available/ - cpu[:available] += 1 - lsattr = shell_out("lsattr -El #{name}").stdout.lines - lsattr.each do |attribute| - attrib, value = attribute.split - if attrib == "type" - cpu[index][:model_name] = value - elsif attrib == "frequency" - cpu[index][:mhz] = value.to_i / (1000 * 1000) #convert from hz to MHz - else - cpu[index][attrib] = value + # The below is only relevent on an LPAR + if shell_out('uname -W').stdout.strip == "0" + + # At least one CPU will be available, but we'll wait to increment this later. + cpu[:available] = 0 + + cpudevs = shell_out("lsdev -Cc processor").stdout.lines + #from http://www-01.ibm.com/software/passportadvantage/pvu_terminology_for_customers.html + #on AIX number of cores and processors are considered same + cpu[:real] = cpu[:cores] = cpudevs.length + cpudevs.each.with_index do |c,i| + name, status, location = c.split + index = i.to_s + cpu[index] = Mash.new + cpu[index][:status] = status + cpu[index][:location] = location + if status =~ /Available/ + cpu[:available] += 1 + lsattr = shell_out("lsattr -El #{name}").stdout.lines + lsattr.each do |attribute| + attrib, value = attribute.split + if attrib == "type" + cpu[index][:model_name] = value + elsif attrib == "frequency" + cpu[index][:mhz] = value.to_i / (1000 * 1000) #convert from hz to MHz + else + cpu[index][attrib] = value + end end - end - # IBM is the only maker of CPUs for AIX systems. - cpu[index][:vendor_id] = "IBM" + # IBM is the only maker of CPUs for AIX systems. + cpu[index][:vendor_id] = "IBM" + end end end end diff --git a/lib/ohai/plugins/aix/filesystem.rb b/lib/ohai/plugins/aix/filesystem.rb index ac35dc2d..8b7419a9 100644 --- a/lib/ohai/plugins/aix/filesystem.rb +++ b/lib/ohai/plugins/aix/filesystem.rb @@ -1,7 +1,8 @@ # # Author:: Deepali Jagtap (<deepali.jagtap@clogeny.com>) # Author:: Prabhu Das (<prabhu.das@clogeny.com>) -# Copyright:: Copyright (c) 2013 Opscode, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,52 +22,69 @@ Ohai.plugin(:Filesystem) do provides "filesystem" - collect_data(:aix) do - fs = Mash.new + def parse_df_or_mount(shell_out) + oldie = Mash.new - # Grab filesystem data from df - so = shell_out("df -P") - so.stdout.lines.each do |line| + shell_out.lines.each do |line| + fields = line.split case line - when /^Filesystem\s+1024-blocks/ + # headers and horizontal rules to skip + when /^\s*(node|---|^Filesystem\s+1024-blocks)/ next - when /^(.+?)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+\%)\s+(.+)$/ - filesystem = $1 - fs[filesystem] = Mash.new - fs[filesystem][:kb_size] = $2 - fs[filesystem][:kb_used] = $3 - fs[filesystem][:kb_available] = $4 - fs[filesystem][:percent_used] = $5 - fs[filesystem][:mount] = $6 + # strictly a df entry + when /^(.+?)\s+([0-9-]+)\s+([0-9-]+)\s+([0-9-]+)\s+([0-9-]+\%*)\s+(.+)$/ + if $1 == "Global" + key = "#{$1}:#{$6}" + else + key = $1 + end + oldie[key] ||= Mash.new + oldie[key][:kb_size] = $2 + oldie[key][:kb_used] = $3 + oldie[key][:kb_available] = $4 + oldie[key][:percent_used] = $5 + oldie[key][:mount] = $6 + # an entry starting with 'G' or / (E.G. /tmp or /var) + when /^\s*(G.*?|\/\w)/ + if fields[0] == "Global" + key = fields[0] + ":" + fields[1] + else + key = fields[0] + end + oldie[key] ||= Mash.new + oldie[key][:mount] = fields[1] + oldie[key][:fs_type] = fields[2] + oldie[key][:mount_options] = fields[6].split(',') + # entries occupying the 'Node' column parsed here + else + key = fields[0] + ":" + fields[1] + oldie[key] ||= Mash.new + oldie[key][:mount] = fields[1] + oldie[key][:fs_type] = fields[3] + oldie[key][:mount_options] = fields[7].split(',') end end + oldie + end - # Grab mount information from /bin/mount - so = shell_out("mount") - so.stdout.lines.each do |line| - case line - when /^\s*node/ - next - when /^\s*---/ - next - when /^\s*\/\w/ - fields = line.split - filesystem = fields[0] - fs[filesystem] = Mash.new unless fs.has_key?(filesystem) - fs[filesystem][:mount] = fields[1] - fs[filesystem][:fs_type] = fields[2] - fs[filesystem][:mount_options] = fields[6] - else - fields = line.split - filesystem = fields[0] + ":" + fields[1] - fs[filesystem] = Mash.new unless fs.has_key?(filesystem) - fs[filesystem][:mount] = fields[2] - fs[filesystem][:fs_type] = fields[3] - fs[filesystem][:mount_options] = fields[7] - end + def collect_old_version(shell_outs) + mount_hash = parse_df_or_mount shell_outs[:mount] + df_hash = parse_df_or_mount shell_outs[:df_Pk] + + mount_hash.each do |key, hash| + df_hash[key].merge!(hash) if df_hash.has_key?(key) end - # Set the filesystem data - filesystem fs + mount_hash.merge(df_hash) + end + + collect_data(:aix) do + + # Cache the command output + shell_outs = Mash.new + shell_outs[:mount] = shell_out("mount").stdout + shell_outs[:df_Pk] = shell_out("df -Pk").stdout + + filesystem collect_old_version(shell_outs) end end diff --git a/lib/ohai/plugins/aix/kernel.rb b/lib/ohai/plugins/aix/kernel.rb index bf84de8c..5fe61a70 100644 --- a/lib/ohai/plugins/aix/kernel.rb +++ b/lib/ohai/plugins/aix/kernel.rb @@ -1,6 +1,7 @@ # # Author:: Joshua Timberman <joshua@opscode.com> -# Copyright:: Copyright (c) 2013 Opscode, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/lib/ohai/plugins/aix/memory.rb b/lib/ohai/plugins/aix/memory.rb index c6729ea1..9e3cf527 100644 --- a/lib/ohai/plugins/aix/memory.rb +++ b/lib/ohai/plugins/aix/memory.rb @@ -1,6 +1,7 @@ # # Author:: Joshua Timberman <joshua@opscode.com> -# Copyright:: Copyright (c) 2013, Opscode, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +28,7 @@ Ohai.plugin(:Memory) do total_in_mb, u, free_in_mb = meminfo.split memory[:total] = "#{total_in_mb.to_i * 1024}kB" memory[:free] = "#{free_in_mb.to_i * 1024}kB" - + swapinfo = shell_out("swap -s").stdout.split #returns swap info in 4K blocks memory[:swap]['total'] = "#{(swapinfo[2].to_i) * 4}kB" memory[:swap]['free'] = "#{(swapinfo[10].to_i) * 4}kB" diff --git a/lib/ohai/plugins/aix/network.rb b/lib/ohai/plugins/aix/network.rb index bd4214ff..3ac01d7a 100644 --- a/lib/ohai/plugins/aix/network.rb +++ b/lib/ohai/plugins/aix/network.rb @@ -2,7 +2,7 @@ # Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>) # Author:: Prabhu Das (<prabhu.das@clogeny.com>) # Author:: Isa Farnik (<isa@chef.io>) -# Copyright:: Copyright (c) 2015 Chef, Inc. +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,7 @@ Ohai.plugin(:Network) do require 'ipaddr' - provides "network", "counters/network" + provides "network", "counters/network", "macaddress" # Helpers def hex_to_dec_netmask(netmask) @@ -115,7 +115,10 @@ Ohai.plugin(:Network) do e_so = shell_out("entstat -d #{interface} | grep \"Hardware Address\"") iface[interface][:addresses] = Mash.new unless iface[interface][:addresses] e_so.stdout.lines.each do |line| - iface[interface][:addresses][$1.upcase] = { "family" => "lladdr" } if line =~ /Hardware Address: (\S+)/ + if line =~ /Hardware Address: (\S+)/ + iface[interface][:addresses][$1.upcase] = { "family" => "lladdr" } + macaddress $1.upcase unless shell_out("uname -W").stdout.to_i > 0 + end end end #ifconfig stdout @@ -145,7 +148,6 @@ Ohai.plugin(:Network) do count += 1 end end - network["interfaces"] = iface end end diff --git a/lib/ohai/plugins/aix/os.rb b/lib/ohai/plugins/aix/os.rb new file mode 100644 index 00000000..fd2abfed --- /dev/null +++ b/lib/ohai/plugins/aix/os.rb @@ -0,0 +1,30 @@ +# +# Author:: Adam Jacob (<adam@chef.io>) +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'ohai/mixin/os' + +Ohai.plugin(:OS) do + provides "os", "os_version" + depends 'kernel' + + collect_data(:aix) do + os collect_os + os_version kernel[:version] + end +end diff --git a/lib/ohai/plugins/aix/platform.rb b/lib/ohai/plugins/aix/platform.rb index 29239a28..c65c511b 100644 --- a/lib/ohai/plugins/aix/platform.rb +++ b/lib/ohai/plugins/aix/platform.rb @@ -1,6 +1,7 @@ # # Author:: Joshua Timberman <joshua@opscode.com> -# Copyright:: Copyright (c) 2013, Opscode, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/lib/ohai/plugins/aix/uptime.rb b/lib/ohai/plugins/aix/uptime.rb index 270a692f..287b0ecf 100644 --- a/lib/ohai/plugins/aix/uptime.rb +++ b/lib/ohai/plugins/aix/uptime.rb @@ -1,6 +1,7 @@ # # Author:: Kurt Yoder (<ktyopscode@yoderhome.com>) -# Copyright:: Copyright (c) 2013 Opscode, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,4 +34,4 @@ Ohai.plugin(:Uptime) do end end end -end
\ No newline at end of file +end diff --git a/lib/ohai/plugins/aix/virtualization.rb b/lib/ohai/plugins/aix/virtualization.rb index ad625d9b..4653b462 100644 --- a/lib/ohai/plugins/aix/virtualization.rb +++ b/lib/ohai/plugins/aix/virtualization.rb @@ -1,6 +1,7 @@ # # Author:: Julian C. Dunn (<jdunn@getchef.com>) -# Copyright:: Copyright (c) 2014 Chef Software, Inc. +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2013-2015 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,7 +18,7 @@ # Ohai.plugin(:Virtualization) do - provides "virtualization" + provides "virtualization", "virtualization/wpars" collect_data(:aix) do virtualization Mash.new @@ -33,7 +34,116 @@ Ohai.plugin(:Virtualization) do so = shell_out("uname -W") wpar_no = so.stdout.split($/)[0] - virtualization[:wpar_no] = wpar_no unless wpar_no.to_i == 0 + if wpar_no.to_i > 0 + virtualization[:wpar_no] = wpar_no + else + # the below parses the output of lswpar in the long format + so = shell_out("lswpar -L").stdout.scan(/={65}.*?(?:EXPORTED\n\n)+/m) + wpars = Mash.new + so.each do |wpar| + wpar_name = wpar.lines[1].split[0] + wpars[wpar_name] = Mash.new + wpar.scan(/^[A-Z]{4,}.*?[A-Z\:0-9]$.*?\n\n/m).each do |section| + + # retrieve title of section + title = section.lines.first[0..-2].downcase + wpars[wpar_name][title] = Mash.new + + # discard trailing section newline+title + # and save as array + sections = section.lines[1..-2] + + sections.each do |line| + case title + when 'network' + next if line =~ /^Interface|^---/ + splat = line.strip.split + key = splat[0].downcase + value = { + 'address' => splat[1], + 'netmask' => splat[2], + 'broadcast' => splat[3], + } + wpars[wpar_name][title][key] = value + when 'user-specified routes' + next if line =~ /^Type|^---/ + splat = line.strip.split + key = splat[2].downcase + value = { + 'destination' => splat[0], + 'gateway' => splat[1], + } + wpars[wpar_name][title][key] = value + when 'file systems' + next if line =~ /^MountPoint|^---/ + splat = line.strip.split + key = splat[1].downcase + value = { + 'mountpoint' => splat[0], + 'device' => splat[1], + 'vfs' => splat[2], + 'options' => splat[3].split(','), + } + wpars[wpar_name][title][key] = value + when 'security settings' + privileges ||= '' + wpars[wpar_name][title]['Privileges'] ||= [] + + if line =~ /^Privileges/ + privileges << line.split(':')[1].strip + else + privileges << line.strip + end + + wpars[wpar_name][title]['Privileges'] += privileges.split(',') + when 'device exports' + next if line =~ /^Name|^---/ + splat = line.strip.split + key = splat[0].downcase + value = { + 'type' => splat[1], + 'status' => splat[2], + } + wpars[wpar_name][title][key] = value + else + # key-value pairs are handled here + # such as GENERAL and RESOURCE- + # CONTROL + splat = line.strip.split(':') + key = splat[0].downcase + value = splat[1..-1].join(', ').strip + value = value.empty? ? nil : value + case value + when "yes" + value = true + when "no" + value = false + end + wpars[wpar_name][title][key] = value + end + end + end + top_level = [ + "general.directory", + "general.hostname", + "general.private /usr", + "general.type", + "general.uuid", + "resource controls.active", + "network.en0.address", + ] + + top_level.each do |attribute| + evalstr = "wpars['#{wpar_name}']" + breadcrumb = attribute.split('.') + breadcrumb.each do |node| + evalstr << "[\'#{node}\']" + end + wpars[wpar_name][breadcrumb[-1]] = eval evalstr + end + end + virtualization[:wpars] = wpars unless wpars.empty? + end end -end
\ No newline at end of file +end diff --git a/lib/ohai/plugins/hostname.rb b/lib/ohai/plugins/hostname.rb index 834aee8d..02a83eb0 100644 --- a/lib/ohai/plugins/hostname.rb +++ b/lib/ohai/plugins/hostname.rb @@ -5,6 +5,8 @@ # Author:: Daniel DeLeo (<dan@kallistec.com>) # Author:: Doug MacEachern (<dougm@vmware.com>) # Author:: James Gartrell (<jgartrel@gmail.com>) +# Author:: Isa Farnik (<isa@chef.io>) +# Copyright:: Copyright (c) 2015 Chef Software, Inc. # Copyright:: Copyright (c) 2008, 2009 Opscode, Inc. # Copyright:: Copyright (c) 2009 Bryan McLellan # Copyright:: Copyright (c) 2009 Daniel DeLeo @@ -67,7 +69,7 @@ Ohai.plugin(:Hostname) do def collect_hostname # Hostname is everything before the first dot if machinename - machinename =~ /(\w+)\.?/ + machinename =~ /([^.]+)\.?/ hostname $1 elsif fqdn fqdn =~ /(.+?)\./ @@ -90,13 +92,20 @@ Ohai.plugin(:Hostname) do end end - collect_data(:aix, :hpux, :default) do + collect_data(:hpux, :default) do machinename from_cmd("hostname") fqdn sigar_is_available? ? get_fqdn_from_sigar : resolve_fqdn collect_hostname collect_domain end + collect_data(:aix) do + machinename from_cmd("hostname -s") + fqdn resolve_fqdn || from_cmd("hostname") + collect_hostname + collect_domain + end + collect_data(:darwin, :netbsd, :openbsd, :dragonflybsd) do hostname from_cmd("hostname -s") fqdn resolve_fqdn |