Skip to content
This repository has been archived by the owner on Jun 19, 2020. It is now read-only.

Commit

Permalink
Merge branch 'master' into bsd-os-family
Browse files Browse the repository at this point in the history
  • Loading branch information
Bogdan Irimie committed Apr 29, 2020
2 parents f6a1bd9 + 717e08e commit 4aafb3d
Show file tree
Hide file tree
Showing 16 changed files with 247 additions and 42 deletions.
6 changes: 4 additions & 2 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.

# Offense count: 80
# Offense count: 81
# Configuration parameters: CustomTransform, IgnoreMethods.
RSpec/FilePath:
Exclude:
Expand Down Expand Up @@ -37,6 +37,7 @@ RSpec/FilePath:
- 'spec/facter/resolvers/aix/architecture_resolver_spec.rb'
- 'spec/facter/resolvers/aix/ffi_helper_spec.rb'
- 'spec/facter/resolvers/aix/hardware_resolver_spec.rb'
- 'spec/facter/resolvers/bsd/ffi_helper_spec.rb'
- 'spec/facter/resolvers/disk_resolver_spec.rb'
- 'spec/facter/resolvers/dmi_resolver_spec.rb'
- 'spec/facter/resolvers/filesystems_resolver_spec.rb'
Expand Down Expand Up @@ -191,7 +192,7 @@ RSpec/SubjectStub:
- 'spec/custom_facts/util/fact_spec.rb'
- 'spec/custom_facts/util/resolution_spec.rb'

# Offense count: 169
# Offense count: 180
# Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
RSpec/VerifiedDoubles:
Exclude:
Expand Down Expand Up @@ -227,6 +228,7 @@ RSpec/VerifiedDoubles:
- 'spec/facter/resolvers/aix/architecture_resolver_spec.rb'
- 'spec/facter/resolvers/aix/ffi_helper_spec.rb'
- 'spec/facter/resolvers/aix/hardware_resolver_spec.rb'
- 'spec/facter/resolvers/bsd/ffi_helper_spec.rb'
- 'spec/facter/resolvers/macosx/mountpoints_resolver_spec.rb'
- 'spec/facter/resolvers/mountpoints_resolver_spec.rb'
- 'spec/facter/resolvers/solaris/current_zone_resolver_spec.rb'
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@


## [4.0.19](https://github.com/puppetlabs/facter-ng/tree/4.0.19) (2020-04-29)

[Full Changelog](https://github.com/puppetlabs/facter-ng/compare/4.0.18...4.0.19)

### Added

- \(FACT-2555\)Create OS hierarchy and mechanism for loading it [\#470](https://github.com/puppetlabs/facter-ng/pull/470) ([IrimieBogdan](https://github.com/IrimieBogdan))
- \(FACT-2552\) Add Solaris processors facts [\#451](https://github.com/puppetlabs/facter-ng/pull/451) ([oanatmaria](https://github.com/oanatmaria))
- \(Fact 2486\) Add facts cache [\#430](https://github.com/puppetlabs/facter-ng/pull/430) ([florindragos](https://github.com/florindragos))

### Fixed

- \(FACT-2585\) Mountpoints fact returns ASCI-8BIT instead of UTF-8 in some cases [\#472](https://github.com/puppetlabs/facter-ng/pull/472) ([IrimieBogdan](https://github.com/IrimieBogdan))
- \(FACT-2570\) Use Facter options to store custom and external facts [\#467](https://github.com/puppetlabs/facter-ng/pull/467) ([IrimieBogdan](https://github.com/IrimieBogdan))
- \(FACT-2565\) Debian development versions causes fatal error when resolving os.release [\#466](https://github.com/puppetlabs/facter-ng/pull/466) ([Filipovici-Andrei](https://github.com/Filipovici-Andrei))



## [4.0.18](https://github.com/puppetlabs/facter-ng/tree/4.0.18) (2020-04-24)

[Full Changelog](https://github.com/puppetlabs/facter-ng/compare/4.0.17...4.0.18)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.18
4.0.19
14 changes: 14 additions & 0 deletions lib/facts/bsd/load_averages.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Facts
module Bsd
class LoadAverages
FACT_NAME = 'load_averages'

def call_the_resolver
fact_value = Facter::Resolvers::Bsd::LoadAverages.resolve(:load_averages)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end
end
end
end
27 changes: 17 additions & 10 deletions lib/facts/debian/os/distro/release.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,7 @@ class Release
def call_the_resolver
fact_value = determine_release_for_os

return Facter::ResolvedFact.new(FACT_NAME, nil) unless fact_value

versions = fact_value.split('.')
release = {}
release['full'] = fact_value
release['major'] = versions[0]
release['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
Facter::ResolvedFact.new(FACT_NAME, release)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end

private
Expand All @@ -26,9 +19,23 @@ def determine_release_for_os
os_name = Facter::Resolvers::OsRelease.resolve(:name)

if os_name =~ /Debian|Raspbian/
Facter::Resolvers::DebianVersion.resolve(:version)
release = Facter::Resolvers::DebianVersion.resolve(:version)
return unless release

versions = release.split('.')
fact_value = {}
fact_value['full'] = release
fact_value['major'] = versions[0]
fact_value['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
fact_value
else
Facter::Resolvers::OsRelease.resolve(:version_id)
release = Facter::Resolvers::OsRelease.resolve(:version_id)
return unless release

{
'full' => release,
'major' => release
}
end
end
end
Expand Down
32 changes: 20 additions & 12 deletions lib/facts/debian/os/release.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,11 @@ class Release
def call_the_resolver
fact_value = determine_release_for_os

return Facter::ResolvedFact.new(FACT_NAME, nil) unless fact_value
return Facter::ResolvedFact.new(FACT_NAME, fact_value) unless fact_value

versions = fact_value.split('.')
release = {}
release['full'] = fact_value
release['major'] = versions[0]
release['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]

[Facter::ResolvedFact.new(FACT_NAME, release),
Facter::ResolvedFact.new(ALIASES.first, versions[0], :legacy),
Facter::ResolvedFact.new(ALIASES.last, fact_value, :legacy)]
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
Facter::ResolvedFact.new(ALIASES.first, fact_value['major'], :legacy),
Facter::ResolvedFact.new(ALIASES.last, fact_value['full'], :legacy)]
end

private
Expand All @@ -29,9 +23,23 @@ def determine_release_for_os
os_name = Facter::Resolvers::OsRelease.resolve(:name)

if os_name =~ /Debian|Raspbian/
Facter::Resolvers::DebianVersion.resolve(:version)
release = Facter::Resolvers::DebianVersion.resolve(:version)
return unless release

versions = release.split('.')
fact_value = {}
fact_value['full'] = release
fact_value['major'] = versions[0]
fact_value['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
fact_value
else
Facter::Resolvers::OsRelease.resolve(:version_id)
release = Facter::Resolvers::OsRelease.resolve(:version_id)
return unless release

{
'full' => release,
'major' => release
}
end
end
end
Expand Down
25 changes: 25 additions & 0 deletions lib/resolvers/bsd/ffi/ffi_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# frozen_string_literal: true

require 'ffi'

module Facter
module Bsd
module FfiHelper
module Libc
extend FFI::Library

ffi_lib 'c'
attach_function :getloadavg, %i[pointer int], :int
end

def self.read_load_averages
raw_loadavg = FFI::MemoryPointer.new(:double, 3)

res = Libc.getloadavg(raw_loadavg, 3)
return unless res == 3

raw_loadavg.read_array_of_double(res)
end
end
end
end
26 changes: 26 additions & 0 deletions lib/resolvers/bsd/load_averages_resolver.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

module Facter
module Resolvers
module Bsd
class LoadAverages < BaseResolver
@semaphore = Mutex.new
@fact_list ||= {}
class << self
private

def post_resolve(fact_name)
@fact_list.fetch(fact_name) { read_load_averages(fact_name) }
end

def read_load_averages(fact_name)
require_relative 'ffi/ffi_helper'
@fact_list[:load_averages] = %w[1m 5m 15m].zip(Facter::Bsd::FfiHelper.read_load_averages).to_h

@fact_list[fact_name]
end
end
end
end
end
end
5 changes: 5 additions & 0 deletions lib/resolvers/os_release_resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def read_os_release_file(fact_name)

fill_fact_list(pairs)
process_name
pad_version_id

@fact_list[fact_name]
end
Expand All @@ -47,6 +48,10 @@ def fill_fact_list(pairs)
@fact_list[:identifier] = @fact_list[:id]
end

def pad_version_id
@fact_list[:version_id] = "#{@fact_list[:version_id]}.0" unless @fact_list[:version_id] =~ /\./
end

def process_name
return unless @fact_list[:name]

Expand Down
23 changes: 23 additions & 0 deletions spec/facter/facts/bsd/load_averages_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

describe Facts::Bsd::LoadAverages do
describe '#call_the_resolver' do
subject(:fact) { Facts::Bsd::LoadAverages.new }

let(:value) { { '1m' => 0.01, '5m' => 0.02, '15m' => 0.03 } }

before do
allow(Facter::Resolvers::Bsd::LoadAverages).to receive(:resolve).with(:load_averages).and_return(value)
end

it 'calls Facter::Resolvers::Bsd::LoadAverages' do
fact.call_the_resolver
expect(Facter::Resolvers::Bsd::LoadAverages).to have_received(:resolve).with(:load_averages)
end

it 'returns load_averages fact' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'load_averages', value: value)
end
end
end
4 changes: 2 additions & 2 deletions spec/facter/facts/debian/os/distro/release_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@

let(:os_name) { 'Ubuntu' }

context 'when version_id is retrieved successfully' do
context 'when version_id is retrieved successful' do
let(:os_release_value) { '18.04' }
let(:fact_value) { { 'full' => '18.04', 'major' => '18', 'minor' => '4' } }
let(:fact_value) { { 'full' => '18.04', 'major' => '18.04' } }

it_behaves_like 'calls Facter::Resolvers::OsRelease with :name'

Expand Down
2 changes: 1 addition & 1 deletion spec/facter/facts/debian/os/release_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

context 'when version_id is retrieved successful' do
let(:os_release_value) { '18.04' }
let(:fact_value) { { 'full' => '18.04', 'major' => '18', 'minor' => '4' } }
let(:fact_value) { { 'full' => '18.04', 'major' => '18.04' } }

it_behaves_like 'calls Facter::Resolvers::OsRelease with :name'

Expand Down
26 changes: 26 additions & 0 deletions spec/facter/resolvers/bsd/ffi_helper_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

describe Facter::Bsd::FfiHelper do
let(:averages) { double('FFI::MemoryPointer') }

before do
allow(FFI::MemoryPointer).to receive(:new).with(:double, 3).and_return(averages)
allow(averages).to receive(:size).and_return(24)
end

after do
Facter::Resolvers::Bsd::LoadAverages.invalidate_cache
end

it 'returns load average' do
allow(Facter::Bsd::FfiHelper::Libc).to receive(:getloadavg).and_return(3)
allow(averages).to receive(:read_array_of_double).with(3).and_return([0.19482421875, 0.2744140625, 0.29296875])

expect(Facter::Bsd::FfiHelper.read_load_averages).to eq([0.19482421875, 0.2744140625, 0.29296875])
end

it 'does not return load average' do
allow(Facter::Bsd::FfiHelper::Libc).to receive(:getloadavg).and_return(-1)
expect(Facter::Bsd::FfiHelper.read_load_averages).to be_nil
end
end
16 changes: 16 additions & 0 deletions spec/facter/resolvers/bsd/load_averages_resolver_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

describe Facter::Resolvers::Bsd::LoadAverages do
let(:load_averages) { [0.01, 0.02, 0.03] }

before do
allow(Facter::Bsd::FfiHelper).to receive(:read_load_averages)
.and_return(load_averages)
end

it 'returns load average' do
result = Facter::Resolvers::Bsd::LoadAverages.resolve(:load_averages)

expect(result).to eq('15m' => 0.03, '1m' => 0.01, '5m' => 0.02)
end
end
Loading

0 comments on commit 4aafb3d

Please sign in to comment.