ohai 17.3.1 → 17.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile +5 -5
 - data/lib/ohai/config.rb +1 -1
 - data/lib/ohai/mixin/constant_helper.rb +1 -1
 - data/lib/ohai/mixin/ec2_metadata.rb +26 -4
 - data/lib/ohai/mixin/network_helper.rb +26 -0
 - data/lib/ohai/mixin/os.rb +2 -2
 - data/lib/ohai/plugins/azure.rb +1 -1
 - data/lib/ohai/plugins/cpu.rb +1 -1
 - data/lib/ohai/plugins/hostname.rb +9 -87
 - data/lib/ohai/plugins/linux/tc.rb +61 -0
 - data/lib/ohai/plugins/os.rb +6 -0
 - data/lib/ohai/plugins/packages.rb +2 -2
 - data/lib/ohai/version.rb +1 -1
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9624a58f805a1092cf71a19d5cc1501104c297df8b5f5cb9dafc8f288a77a62b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: fa2839c8ca0d39f53629fc186b77addb1ef02e8783dba59a10f94d94406388ce
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4252161549ecd67b7bfd91c7b01673071b54d76179472ac2824965281147a5b40b14b2cc120fc8d2d1a41bc1956041c1c39bf820f3d538f2ee85b61771d11c66
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3f1be719448a8c6cb39be6b5cb2f1c9017e05abd223d3b2bc23aedb4891a8663e259f6a3f2828a8a7e5809f52dde821fcefaeeb534af80cc4729ba19bcc63514
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -3,20 +3,20 @@ source "https://rubygems.org" 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            gemspec
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            # pull these gems from  
     | 
| 
       7 
     | 
    
         
            -
            gem "chef-config", git: "https://github.com/chef/chef", branch: " 
     | 
| 
       8 
     | 
    
         
            -
            gem "chef-utils", git: "https://github.com/chef/chef", branch: " 
     | 
| 
      
 6 
     | 
    
         
            +
            # pull these gems from main of chef/chef so that we're testing against what we will release
         
     | 
| 
      
 7 
     | 
    
         
            +
            gem "chef-config", git: "https://github.com/chef/chef", branch: "main", glob: "chef-config/chef-config.gemspec"
         
     | 
| 
      
 8 
     | 
    
         
            +
            gem "chef-utils", git: "https://github.com/chef/chef", branch: "main", glob: "chef-utils/chef-utils.gemspec"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            # NOTE: do not submit PRs to add pry as a dep, add to your Gemfile.local
         
     | 
| 
       11 
11 
     | 
    
         
             
            group :development do
         
     | 
| 
       12 
     | 
    
         
            -
              gem "chefstyle", "2. 
     | 
| 
      
 12 
     | 
    
         
            +
              gem "chefstyle", "2.1.2"
         
     | 
| 
       13 
13 
     | 
    
         
             
              gem "ipaddr_extensions"
         
     | 
| 
       14 
14 
     | 
    
         
             
              gem "rake", ">= 10.1.0"
         
     | 
| 
       15 
15 
     | 
    
         
             
              gem "rspec-collection_matchers", "~> 1.0"
         
     | 
| 
       16 
16 
     | 
    
         
             
              gem "rspec-core", "~> 3.0"
         
     | 
| 
       17 
17 
     | 
    
         
             
              gem "rspec-expectations", "~> 3.0"
         
     | 
| 
       18 
18 
     | 
    
         
             
              gem "rspec-mocks", "~> 3.0"
         
     | 
| 
       19 
     | 
    
         
            -
              gem "rubocop-performance", "1.11. 
     | 
| 
      
 19 
     | 
    
         
            +
              gem "rubocop-performance", "1.11.5"
         
     | 
| 
       20 
20 
     | 
    
         
             
              gem "rubocop-rspec"
         
     | 
| 
       21 
21 
     | 
    
         
             
            end
         
     | 
| 
       22 
22 
     | 
    
         | 
    
        data/lib/ohai/config.rb
    CHANGED
    
    | 
         @@ -26,7 +26,7 @@ module Ohai 
     | 
|
| 
       26 
26 
     | 
    
         
             
              Config = ChefConfig::Config
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
              # Reopens ChefConfig::Config to add Ohai configuration settings.
         
     | 
| 
       29 
     | 
    
         
            -
              # see: https://github.com/chef/chef/blob/ 
     | 
| 
      
 29 
     | 
    
         
            +
              # see: https://github.com/chef/chef/blob/main/lib/chef/config.rb
         
     | 
| 
       30 
30 
     | 
    
         
             
              class Config
         
     | 
| 
       31 
31 
     | 
    
         
             
                config_context :ohai do
         
     | 
| 
       32 
32 
     | 
    
         
             
                  default :disabled_plugins, []
         
     | 
| 
         @@ -23,7 +23,7 @@ module Ohai 
     | 
|
| 
       23 
23 
     | 
    
         
             
                module ConstantHelper
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                  def remove_constants
         
     | 
| 
       26 
     | 
    
         
            -
                    new_object_constants = Object.constants - @object_pristine.constants
         
     | 
| 
      
 26 
     | 
    
         
            +
                    new_object_constants = Object.constants - @object_pristine.constants - [ :SortedSet ]
         
     | 
| 
       27 
27 
     | 
    
         
             
                    new_object_constants.each do |constant|
         
     | 
| 
       28 
28 
     | 
    
         
             
                      Object.send(:remove_const, constant) unless Object.const_get(constant).is_a?(Module)
         
     | 
| 
       29 
29 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -41,10 +41,32 @@ module Ohai 
     | 
|
| 
       41 
41 
     | 
    
         
             
                module Ec2Metadata
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                  EC2_METADATA_ADDR ||= "169.254.169.254"
         
     | 
| 
       44 
     | 
    
         
            -
                  EC2_SUPPORTED_VERSIONS ||= %w{ 1.0 
     | 
| 
       45 
     | 
    
         
            -
                                                  
     | 
| 
       46 
     | 
    
         
            -
                                                  
     | 
| 
       47 
     | 
    
         
            -
                                                  
     | 
| 
      
 44 
     | 
    
         
            +
                  EC2_SUPPORTED_VERSIONS ||= %w{ 1.0
         
     | 
| 
      
 45 
     | 
    
         
            +
                                                 2007-01-19
         
     | 
| 
      
 46 
     | 
    
         
            +
                                                 2007-03-01
         
     | 
| 
      
 47 
     | 
    
         
            +
                                                 2007-08-29
         
     | 
| 
      
 48 
     | 
    
         
            +
                                                 2007-10-10
         
     | 
| 
      
 49 
     | 
    
         
            +
                                                 2007-12-15
         
     | 
| 
      
 50 
     | 
    
         
            +
                                                 2008-02-01
         
     | 
| 
      
 51 
     | 
    
         
            +
                                                 2008-09-01
         
     | 
| 
      
 52 
     | 
    
         
            +
                                                 2009-04-04
         
     | 
| 
      
 53 
     | 
    
         
            +
                                                 2011-01-01
         
     | 
| 
      
 54 
     | 
    
         
            +
                                                 2011-05-01
         
     | 
| 
      
 55 
     | 
    
         
            +
                                                 2012-01-12
         
     | 
| 
      
 56 
     | 
    
         
            +
                                                 2014-02-25
         
     | 
| 
      
 57 
     | 
    
         
            +
                                                 2014-11-05
         
     | 
| 
      
 58 
     | 
    
         
            +
                                                 2015-10-20
         
     | 
| 
      
 59 
     | 
    
         
            +
                                                 2016-04-19
         
     | 
| 
      
 60 
     | 
    
         
            +
                                                 2016-06-30
         
     | 
| 
      
 61 
     | 
    
         
            +
                                                 2016-09-02
         
     | 
| 
      
 62 
     | 
    
         
            +
                                                 2018-03-28
         
     | 
| 
      
 63 
     | 
    
         
            +
                                                 2018-08-17
         
     | 
| 
      
 64 
     | 
    
         
            +
                                                 2018-09-24
         
     | 
| 
      
 65 
     | 
    
         
            +
                                                 2019-10-01
         
     | 
| 
      
 66 
     | 
    
         
            +
                                                 2020-10-27
         
     | 
| 
      
 67 
     | 
    
         
            +
                                                 2021-01-03
         
     | 
| 
      
 68 
     | 
    
         
            +
                                                 2021-03-23
         
     | 
| 
      
 69 
     | 
    
         
            +
                                                 2021-07-15 }.freeze
         
     | 
| 
       48 
70 
     | 
    
         
             
                  EC2_ARRAY_VALUES ||= %w{security-groups local_ipv4s}.freeze
         
     | 
| 
       49 
71 
     | 
    
         
             
                  EC2_ARRAY_DIR    ||= %w{network/interfaces/macs}.freeze
         
     | 
| 
       50 
72 
     | 
    
         
             
                  EC2_JSON_DIR     ||= %w{iam}.freeze
         
     | 
| 
         @@ -18,6 +18,8 @@ 
     | 
|
| 
       18 
18 
     | 
    
         
             
            # limitations under the License.
         
     | 
| 
       19 
19 
     | 
    
         
             
            #
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
            require "socket" unless defined?(Socket)
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       21 
23 
     | 
    
         
             
            module Ohai
         
     | 
| 
       22 
24 
     | 
    
         
             
              module Mixin
         
     | 
| 
       23 
25 
     | 
    
         
             
                module NetworkHelper
         
     | 
| 
         @@ -32,6 +34,30 @@ module Ohai 
     | 
|
| 
       32 
34 
     | 
    
         
             
                    [2, 4, 6].each { |n| dec = dec + "." + netmask[n..n + 1].to_i(16).to_s(10) }
         
     | 
| 
       33 
35 
     | 
    
         
             
                    dec
         
     | 
| 
       34 
36 
     | 
    
         
             
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  # This does a forward and reverse lookup on the hostname to return what should be
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # the FQDN for the host determined by name lookup (generally DNS).  If the forward
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # lookup fails this will throw.  If the reverse lookup fails this will return the
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # hostname back.  The behavior on failure of the reverse lookup is both vitally important
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # to this API, and completely untested, so changes to this method (not recommended) need
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # to be manually validated by hand by setting up a DNS server with a broken A record to
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # an IP without a PTR record (e.g. any RFC1918 space not served by the configured DNS
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # server), and the method should return the hostname and not the IP address.
         
     | 
| 
      
 46 
     | 
    
         
            +
                  #
         
     | 
| 
      
 47 
     | 
    
         
            +
                  def canonicalize_hostname(hostname)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    Addrinfo.getaddrinfo(hostname, nil, nil, nil, nil, Socket::AI_CANONNAME).first.canonname
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  def canonicalize_hostname_with_retries(hostname)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    retries = 3
         
     | 
| 
      
 53 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 54 
     | 
    
         
            +
                      canonicalize_hostname(hostname)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 56 
     | 
    
         
            +
                      retries -= 1
         
     | 
| 
      
 57 
     | 
    
         
            +
                      retry if retries > 0
         
     | 
| 
      
 58 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
       35 
61 
     | 
    
         
             
                end
         
     | 
| 
       36 
62 
     | 
    
         
             
              end
         
     | 
| 
       37 
63 
     | 
    
         
             
            end
         
     | 
    
        data/lib/ohai/mixin/os.rb
    CHANGED
    
    | 
         @@ -82,13 +82,13 @@ module Ohai 
     | 
|
| 
       82 
82 
     | 
    
         
             
                    else
         
     | 
| 
       83 
83 
     | 
    
         
             
                      # now we have something like an IPMI console that isn't Unix-like or Windows, presumably cannot run ruby, and
         
     | 
| 
       84 
84 
     | 
    
         
             
                      # so we just trust the train O/S information.
         
     | 
| 
       85 
     | 
    
         
            -
                      transport_connection.os
         
     | 
| 
      
 85 
     | 
    
         
            +
                      transport_connection.os.name
         
     | 
| 
       86 
86 
     | 
    
         
             
                    end
         
     | 
| 
       87 
87 
     | 
    
         
             
                  end
         
     | 
| 
       88 
88 
     | 
    
         | 
| 
       89 
89 
     | 
    
         
             
                  # @api private
         
     | 
| 
       90 
90 
     | 
    
         
             
                  def nonruby_target?
         
     | 
| 
       91 
     | 
    
         
            -
                    transport_connection && !transport_connection.os.unix? && !transport_connection.os.windows
         
     | 
| 
      
 91 
     | 
    
         
            +
                    transport_connection && !transport_connection.os.unix? && !transport_connection.os.windows?
         
     | 
| 
       92 
92 
     | 
    
         
             
                  end
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
                  # @api private
         
     | 
    
        data/lib/ohai/plugins/azure.rb
    CHANGED
    
    | 
         @@ -48,7 +48,7 @@ Ohai.plugin(:Azure) do 
     | 
|
| 
       48 
48 
     | 
    
         
             
              # check for either the waagent or the unknown-245 DHCP option that Azure uses
         
     | 
| 
       49 
49 
     | 
    
         
             
              # http://blog.mszcool.com/index.php/2015/04/detecting-if-a-virtual-machine-runs-in-microsoft-azure-linux-windows-to-protect-your-software-when-distributed-via-the-azure-marketplace/
         
     | 
| 
       50 
50 
     | 
    
         
             
              def has_waagent?
         
     | 
| 
       51 
     | 
    
         
            -
                if file_exist?("/usr/sbin/waagent") || dir_exist?( 
     | 
| 
      
 51 
     | 
    
         
            +
                if file_exist?("/usr/sbin/waagent") || dir_exist?("C:\\WindowsAzure")
         
     | 
| 
       52 
52 
     | 
    
         
             
                  logger.trace("Plugin Azure: Found waagent used by Azure.")
         
     | 
| 
       53 
53 
     | 
    
         
             
                  true
         
     | 
| 
       54 
54 
     | 
    
         
             
                end
         
     | 
    
        data/lib/ohai/plugins/cpu.rb
    CHANGED
    
    | 
         @@ -499,7 +499,7 @@ Ohai.plugin(:CPU) do 
     | 
|
| 
       499 
499 
     | 
    
         | 
| 
       500 
500 
     | 
    
         
             
                cpu[:total] = shell_out("pmcycles -m").stdout.lines.length
         
     | 
| 
       501 
501 
     | 
    
         | 
| 
       502 
     | 
    
         
            -
                # The below is only  
     | 
| 
      
 502 
     | 
    
         
            +
                # The below is only relevant on an LPAR
         
     | 
| 
       503 
503 
     | 
    
         
             
                if shell_out("uname -W").stdout.strip == "0"
         
     | 
| 
       504 
504 
     | 
    
         | 
| 
       505 
505 
     | 
    
         
             
                  # At least one CPU will be available, but we'll wait to increment this later.
         
     | 
| 
         @@ -26,7 +26,11 @@ 
     | 
|
| 
       26 
26 
     | 
    
         
             
            # limitations under the License.
         
     | 
| 
       27 
27 
     | 
    
         
             
            #
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
            require_relative "../mixin/network_helper"
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       29 
31 
     | 
    
         
             
            Ohai.plugin(:Hostname) do
         
     | 
| 
      
 32 
     | 
    
         
            +
              include Ohai::Mixin::NetworkHelper
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       30 
34 
     | 
    
         
             
              provides "domain", "hostname", "fqdn", "machinename"
         
     | 
| 
       31 
35 
     | 
    
         | 
| 
       32 
36 
     | 
    
         
             
              # hostname : short hostname
         
     | 
| 
         @@ -42,38 +46,8 @@ Ohai.plugin(:Hostname) do 
     | 
|
| 
       42 
46 
     | 
    
         
             
              end
         
     | 
| 
       43 
47 
     | 
    
         | 
| 
       44 
48 
     | 
    
         
             
              # forward and reverse lookup to canonicalize FQDN (hostname -f equivalent)
         
     | 
| 
       45 
     | 
    
         
            -
              # this is ipv6-safe, works on ruby 1.8.7+
         
     | 
| 
       46 
49 
     | 
    
         
             
              def resolve_fqdn
         
     | 
| 
       47 
     | 
    
         
            -
                 
     | 
| 
       48 
     | 
    
         
            -
                require "ipaddr" unless defined?(IPAddr)
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                hostname = from_cmd("hostname")
         
     | 
| 
       51 
     | 
    
         
            -
                begin
         
     | 
| 
       52 
     | 
    
         
            -
                  addrinfo = Socket.getaddrinfo(hostname, nil).first
         
     | 
| 
       53 
     | 
    
         
            -
                rescue SocketError
         
     | 
| 
       54 
     | 
    
         
            -
                  # In the event that we got an exception from Socket, it's possible
         
     | 
| 
       55 
     | 
    
         
            -
                  # that it will work if we restrict it to IPv4 only either because of
         
     | 
| 
       56 
     | 
    
         
            -
                  # IPv6 misconfiguration or other bugs.
         
     | 
| 
       57 
     | 
    
         
            -
                  #
         
     | 
| 
       58 
     | 
    
         
            -
                  # Specifically it's worth noting that on macOS, getaddrinfo() will choke
         
     | 
| 
       59 
     | 
    
         
            -
                  # if it gets back a link-local address (say if you have 'fe80::1 myhost'
         
     | 
| 
       60 
     | 
    
         
            -
                  # in /etc/hosts). This will raise:
         
     | 
| 
       61 
     | 
    
         
            -
                  #    SocketError (getnameinfo: Non-recoverable failure in name resolution)
         
     | 
| 
       62 
     | 
    
         
            -
                  #
         
     | 
| 
       63 
     | 
    
         
            -
                  # But general misconfiguration could cause similar issues, so attempt to
         
     | 
| 
       64 
     | 
    
         
            -
                  # fall back to v4-only
         
     | 
| 
       65 
     | 
    
         
            -
                  begin
         
     | 
| 
       66 
     | 
    
         
            -
                    addrinfo = Socket.getaddrinfo(hostname, nil, :INET).first
         
     | 
| 
       67 
     | 
    
         
            -
                  rescue
         
     | 
| 
       68 
     | 
    
         
            -
                    # and if *that* fails, then try v6-only, in case we're in a v6-only
         
     | 
| 
       69 
     | 
    
         
            -
                    # environment with v4 config issues
         
     | 
| 
       70 
     | 
    
         
            -
                    addrinfo = Socket.getaddrinfo(hostname, nil, :INET6).first
         
     | 
| 
       71 
     | 
    
         
            -
                  end
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
     | 
    
         
            -
                iaddr = IPAddr.new(addrinfo[3])
         
     | 
| 
       74 
     | 
    
         
            -
                Socket.gethostbyaddr(iaddr.hton)[0]
         
     | 
| 
       75 
     | 
    
         
            -
              rescue
         
     | 
| 
       76 
     | 
    
         
            -
                nil
         
     | 
| 
      
 50 
     | 
    
         
            +
                canonicalize_hostname_with_retries(from_cmd("hostname"))
         
     | 
| 
       77 
51 
     | 
    
         
             
              end
         
     | 
| 
       78 
52 
     | 
    
         | 
| 
       79 
53 
     | 
    
         
             
              def collect_domain
         
     | 
| 
         @@ -119,58 +93,21 @@ Ohai.plugin(:Hostname) do 
     | 
|
| 
       119 
93 
     | 
    
         
             
              collect_data(:darwin) do
         
     | 
| 
       120 
94 
     | 
    
         
             
                hostname from_cmd("hostname -s")
         
     | 
| 
       121 
95 
     | 
    
         
             
                machinename from_cmd("hostname")
         
     | 
| 
       122 
     | 
    
         
            -
                 
     | 
| 
       123 
     | 
    
         
            -
                  our_fqdn = resolve_fqdn
         
     | 
| 
       124 
     | 
    
         
            -
                  # Sometimes... very rarely, but sometimes, 'hostname --fqdn' falsely
         
     | 
| 
       125 
     | 
    
         
            -
                  # returns a blank string. WTF.
         
     | 
| 
       126 
     | 
    
         
            -
                  if our_fqdn.nil? || our_fqdn.empty?
         
     | 
| 
       127 
     | 
    
         
            -
                    logger.trace("Plugin Hostname: hostname returned an empty string, retrying once.")
         
     | 
| 
       128 
     | 
    
         
            -
                    our_fqdn = resolve_fqdn
         
     | 
| 
       129 
     | 
    
         
            -
                  end
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                  if our_fqdn.nil? || our_fqdn.empty?
         
     | 
| 
       132 
     | 
    
         
            -
                    logger.trace("Plugin Hostname: hostname returned an empty string twice and will" +
         
     | 
| 
       133 
     | 
    
         
            -
                                    "not be set.")
         
     | 
| 
       134 
     | 
    
         
            -
                  else
         
     | 
| 
       135 
     | 
    
         
            -
                    fqdn our_fqdn
         
     | 
| 
       136 
     | 
    
         
            -
                  end
         
     | 
| 
       137 
     | 
    
         
            -
                rescue
         
     | 
| 
       138 
     | 
    
         
            -
                  logger.trace(
         
     | 
| 
       139 
     | 
    
         
            -
                    "Plugin Hostname: hostname returned an error, probably no domain set"
         
     | 
| 
       140 
     | 
    
         
            -
                  )
         
     | 
| 
       141 
     | 
    
         
            -
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
                fqdn resolve_fqdn
         
     | 
| 
       142 
97 
     | 
    
         
             
                domain collect_domain
         
     | 
| 
       143 
98 
     | 
    
         
             
              end
         
     | 
| 
       144 
99 
     | 
    
         | 
| 
       145 
100 
     | 
    
         
             
              collect_data(:freebsd) do
         
     | 
| 
       146 
101 
     | 
    
         
             
                hostname from_cmd("hostname -s")
         
     | 
| 
       147 
102 
     | 
    
         
             
                machinename from_cmd("hostname")
         
     | 
| 
       148 
     | 
    
         
            -
                fqdn  
     | 
| 
      
 103 
     | 
    
         
            +
                fqdn resolve_fqdn
         
     | 
| 
       149 
104 
     | 
    
         
             
                collect_domain
         
     | 
| 
       150 
105 
     | 
    
         
             
              end
         
     | 
| 
       151 
106 
     | 
    
         | 
| 
       152 
107 
     | 
    
         
             
              collect_data(:linux) do
         
     | 
| 
       153 
108 
     | 
    
         
             
                hostname from_cmd("hostname -s")
         
     | 
| 
       154 
109 
     | 
    
         
             
                machinename from_cmd("hostname")
         
     | 
| 
       155 
     | 
    
         
            -
                 
     | 
| 
       156 
     | 
    
         
            -
                  our_fqdn = from_cmd("hostname --fqdn")
         
     | 
| 
       157 
     | 
    
         
            -
                  # Sometimes... very rarely, but sometimes, 'hostname --fqdn' falsely
         
     | 
| 
       158 
     | 
    
         
            -
                  # returns a blank string. WTF.
         
     | 
| 
       159 
     | 
    
         
            -
                  if our_fqdn.nil? || our_fqdn.empty?
         
     | 
| 
       160 
     | 
    
         
            -
                    logger.trace("Plugin Hostname: hostname --fqdn returned an empty string, retrying " +
         
     | 
| 
       161 
     | 
    
         
            -
                                    "once.")
         
     | 
| 
       162 
     | 
    
         
            -
                    our_fqdn = from_cmd("hostname --fqdn")
         
     | 
| 
       163 
     | 
    
         
            -
                  end
         
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
                  if our_fqdn.nil? || our_fqdn.empty?
         
     | 
| 
       166 
     | 
    
         
            -
                    logger.trace("Plugin Hostname: hostname --fqdn returned an empty string twice and " +
         
     | 
| 
       167 
     | 
    
         
            -
                                    "will not be set.")
         
     | 
| 
       168 
     | 
    
         
            -
                  else
         
     | 
| 
       169 
     | 
    
         
            -
                    fqdn our_fqdn
         
     | 
| 
       170 
     | 
    
         
            -
                  end
         
     | 
| 
       171 
     | 
    
         
            -
                rescue
         
     | 
| 
       172 
     | 
    
         
            -
                  logger.trace("Plugin Hostname: hostname --fqdn returned an error, probably no domain set")
         
     | 
| 
       173 
     | 
    
         
            -
                end
         
     | 
| 
      
 110 
     | 
    
         
            +
                fqdn resolve_fqdn
         
     | 
| 
       174 
111 
     | 
    
         
             
                domain collect_domain
         
     | 
| 
       175 
112 
     | 
    
         
             
              end
         
     | 
| 
       176 
113 
     | 
    
         | 
| 
         @@ -190,22 +127,7 @@ Ohai.plugin(:Hostname) do 
     | 
|
| 
       190 
127 
     | 
    
         | 
| 
       191 
128 
     | 
    
         
             
                hostname host["dnshostname"].to_s
         
     | 
| 
       192 
129 
     | 
    
         
             
                machinename host["name"].to_s
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                info = Socket.gethostbyname(Socket.gethostname)
         
     | 
| 
       195 
     | 
    
         
            -
                if /.+?\.(.*)/.match?(info.first)
         
     | 
| 
       196 
     | 
    
         
            -
                  fqdn info.first
         
     | 
| 
       197 
     | 
    
         
            -
                else
         
     | 
| 
       198 
     | 
    
         
            -
                  # host is not in dns. optionally use:
         
     | 
| 
       199 
     | 
    
         
            -
                  # C:\WINDOWS\system32\drivers\etc\hosts
         
     | 
| 
       200 
     | 
    
         
            -
                  info[3..info.length].reverse_each do |addr|
         
     | 
| 
       201 
     | 
    
         
            -
                    hostent = Socket.gethostbyaddr(addr)
         
     | 
| 
       202 
     | 
    
         
            -
                    if /.+?\.(.*)/.match?(hostent.first)
         
     | 
| 
       203 
     | 
    
         
            -
                      fqdn hostent.first
         
     | 
| 
       204 
     | 
    
         
            -
                      break
         
     | 
| 
       205 
     | 
    
         
            -
                    end
         
     | 
| 
       206 
     | 
    
         
            -
                  end
         
     | 
| 
       207 
     | 
    
         
            -
                  fqdn info.first unless fqdn
         
     | 
| 
       208 
     | 
    
         
            -
                end
         
     | 
| 
      
 130 
     | 
    
         
            +
                fqdn canonicalize_hostname_with_retries(Socket.gethostname)
         
     | 
| 
       209 
131 
     | 
    
         
             
                domain collect_domain
         
     | 
| 
       210 
132 
     | 
    
         
             
              end
         
     | 
| 
       211 
133 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,61 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Author:: Matthew Massey <matthewmassey@fb.com>
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright:: Copyright (c) 2021 Facebook
         
     | 
| 
      
 4 
     | 
    
         
            +
            # License:: Apache License, Version 2.0
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
      
 7 
     | 
    
         
            +
            # you may not use this file except in compliance with the License.
         
     | 
| 
      
 8 
     | 
    
         
            +
            # You may obtain a copy of the License at
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            #     http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 11 
     | 
    
         
            +
            #
         
     | 
| 
      
 12 
     | 
    
         
            +
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 13 
     | 
    
         
            +
            # distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
      
 14 
     | 
    
         
            +
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
      
 15 
     | 
    
         
            +
            # See the License for the specific language governing permissions and
         
     | 
| 
      
 16 
     | 
    
         
            +
            # limitations under the License.
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            Ohai.plugin(:Tc) do
         
     | 
| 
      
 20 
     | 
    
         
            +
              provides "tc"
         
     | 
| 
      
 21 
     | 
    
         
            +
              optional true
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              collect_data(:linux) do
         
     | 
| 
      
 24 
     | 
    
         
            +
                tc_path = which("tc")
         
     | 
| 
      
 25 
     | 
    
         
            +
                if tc_path
         
     | 
| 
      
 26 
     | 
    
         
            +
                  cmd = "#{tc_path} qdisc show"
         
     | 
| 
      
 27 
     | 
    
         
            +
                  tc_output = shell_out(cmd)
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  tc_data = Mash.new
         
     | 
| 
      
 30 
     | 
    
         
            +
                  tc_data[:qdisc] = Mash.new
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  tc_output.stdout.split("\n").each do |line|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    line = line.strip
         
     | 
| 
      
 34 
     | 
    
         
            +
                    if /dev (\w+)/ =~ line
         
     | 
| 
      
 35 
     | 
    
         
            +
                      dev = $1
         
     | 
| 
      
 36 
     | 
    
         
            +
                      tc_data[:qdisc][dev] ||= Mash.new
         
     | 
| 
      
 37 
     | 
    
         
            +
                    else
         
     | 
| 
      
 38 
     | 
    
         
            +
                      next
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                    if /qdisc (\w+)/ =~ line
         
     | 
| 
      
 41 
     | 
    
         
            +
                      qdisc = $1
         
     | 
| 
      
 42 
     | 
    
         
            +
                      tc_data[:qdisc][dev][:qdiscs] ||= []
         
     | 
| 
      
 43 
     | 
    
         
            +
                      tc_data[:qdisc][dev][:qdiscs] << Mash.new
         
     | 
| 
      
 44 
     | 
    
         
            +
                      qdisc_idx = tc_data[:qdisc][dev][:qdiscs].length - 1
         
     | 
| 
      
 45 
     | 
    
         
            +
                      tc_data[:qdisc][dev][:qdiscs][qdisc_idx] ||= Mash.new
         
     | 
| 
      
 46 
     | 
    
         
            +
                      tc_data[:qdisc][dev][:qdiscs][qdisc_idx][:type] = qdisc
         
     | 
| 
      
 47 
     | 
    
         
            +
                      tc_data[:qdisc][dev][:qdiscs][qdisc_idx][:parms] ||= Mash.new
         
     | 
| 
      
 48 
     | 
    
         
            +
                    else
         
     | 
| 
      
 49 
     | 
    
         
            +
                      next
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
                    if qdisc == "fq" && /buckets (\d+)/ =~ line
         
     | 
| 
      
 52 
     | 
    
         
            +
                      buckets = $1.to_i
         
     | 
| 
      
 53 
     | 
    
         
            +
                      tc_data[:qdisc][dev][:qdiscs][qdisc_idx][:parms][:buckets] = buckets
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  tc tc_data
         
     | 
| 
      
 57 
     | 
    
         
            +
                else
         
     | 
| 
      
 58 
     | 
    
         
            +
                  logger.trace("Plugin Tc: Could not find tc. Skipping plugin.")
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/ohai/plugins/os.rb
    CHANGED
    
    
| 
         @@ -134,9 +134,9 @@ Ohai.plugin(:Packages) do 
     | 
|
| 
       134 
134 
     | 
    
         
             
                require "win32/registry" unless defined?(Win32::Registry)
         
     | 
| 
       135 
135 
     | 
    
         
             
                packages Mash.new
         
     | 
| 
       136 
136 
     | 
    
         
             
                collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall')
         
     | 
| 
       137 
     | 
    
         
            -
                 
     | 
| 
      
 137 
     | 
    
         
            +
                # on 64 bit systems, 32 bit programs are stored here moved before HKEY_CURRENT_USER otherwise it is not collected (impacts both ohai 16 & 17)
         
     | 
| 
       138 
138 
     | 
    
         
             
                collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall')
         
     | 
| 
       139 
     | 
    
         
            -
                 
     | 
| 
      
 139 
     | 
    
         
            +
                collect_programs_from_registry_key(Win32::Registry::HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall') rescue nil
         
     | 
| 
       140 
140 
     | 
    
         
             
              end
         
     | 
| 
       141 
141 
     | 
    
         | 
| 
       142 
142 
     | 
    
         
             
              collect_data(:aix) do
         
     | 
    
        data/lib/ohai/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ohai
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 17. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 17.7.8
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Adam Jacob
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-10-28 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: chef-config
         
     | 
| 
         @@ -315,6 +315,7 @@ files: 
     | 
|
| 
       315 
315 
     | 
    
         
             
            - lib/ohai/plugins/linux/sessions.rb
         
     | 
| 
       316 
316 
     | 
    
         
             
            - lib/ohai/plugins/linux/sysctl.rb
         
     | 
| 
       317 
317 
     | 
    
         
             
            - lib/ohai/plugins/linux/systemd_paths.rb
         
     | 
| 
      
 318 
     | 
    
         
            +
            - lib/ohai/plugins/linux/tc.rb
         
     | 
| 
       318 
319 
     | 
    
         
             
            - lib/ohai/plugins/linux/virtualization.rb
         
     | 
| 
       319 
320 
     | 
    
         
             
            - lib/ohai/plugins/lua.rb
         
     | 
| 
       320 
321 
     | 
    
         
             
            - lib/ohai/plugins/mono.rb
         
     |