summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ohai/plugins/aix/cpu.rb62
-rw-r--r--lib/ohai/plugins/aix/filesystem.rb98
-rw-r--r--lib/ohai/plugins/aix/kernel.rb3
-rw-r--r--lib/ohai/plugins/aix/memory.rb5
-rw-r--r--lib/ohai/plugins/aix/network.rb10
-rw-r--r--lib/ohai/plugins/aix/os.rb30
-rw-r--r--lib/ohai/plugins/aix/platform.rb3
-rw-r--r--lib/ohai/plugins/aix/uptime.rb5
-rw-r--r--lib/ohai/plugins/aix/virtualization.rb118
-rw-r--r--lib/ohai/plugins/hostname.rb13
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