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

(FACT-2638) Use puppet AIO VERSION file to specify AIO version #549

Merged
merged 26 commits into from
Jun 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
cbfa1b0
(FACT-2638) Add AIO version to gem if it exists.
Jun 11, 2020
0c7f2e9
(FACT-2638) Update AIO version resolver.
Jun 11, 2020
1cccddc
(FACT-2638) Add aio_agent_version fact for all platforms.
Jun 11, 2020
cbb420b
(FACT-2638) Remove AIO_VERSION file from gem, as the AIO version will…
Jun 12, 2020
a907859
(FACT-2638) Add resolver that read puppet path from registry
Jun 12, 2020
bf67529
(FACT-2638) Read Puppet AIO path from registry.
Jun 12, 2020
d3901bb
(FACT-2638) Append VERSION file to path.
Jun 15, 2020
99c977b
(FACT-2638) Rubocop fixes.
Jun 15, 2020
499068d
(FACT-2638) Read from different registry record if os is 32 bit.
Jun 15, 2020
caaead0
Merge branch 'master' into FACT-2638
Jun 15, 2020
4299f20
(FACT-2638) Remove unused resolver and comment AIO agent facts for pl…
Jun 15, 2020
cc77ed4
(FACT-2638) Move AioAgentVersion windows resolver to windows module.
Jun 15, 2020
26778d5
(FACT-2638) Add puppet aio version resolver for unix like systems.
Jun 15, 2020
36387a0
(FACT-2638) Add test for mscos.
Jun 15, 2020
015a3ae
(FACT-2638) Add agent aio resolver for linux.
Jun 15, 2020
552aa46
(FACT-2638) Add logic to agent aio version resolver for AIX.
Jun 15, 2020
04d946c
(FACT-2638) Add logic to aio_agent_version fact for Solaris.
Jun 15, 2020
3fbb486
(FACT-2638) Add test fro aio_agent_version resolver.
Jun 15, 2020
1acfed9
(FACT-2638) Add test for aio_agent_version windows resolver.
Jun 15, 2020
f9485a5
(FACT-2638) Use open block to avoid closing the register.
Jun 16, 2020
5bdfaf5
(FACT-2638) Catch exception for incorrect registry path.
Jun 16, 2020
83660ce
(FACT-2638) Add test for incorrect registry path.
Jun 16, 2020
5564e16
(FACT-2638) Add nil check before chomp.
Jun 16, 2020
d775e63
(FACT-2638) Improve return condition when there is no path or an empt…
Jun 16, 2020
a8b70d9
(FACT-2638) Only consider the first 4 groups of digits.
Jun 16, 2020
2cfd758
(FACT-2638) Add test for AIO dev builds.
Jun 16, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
name: RuboCop TODO
steps:
- uses: actions/checkout@v1
- uses: gimmyxd/[email protected].0
- uses: gimmyxd/[email protected].1
env:
RTC_TOKEN: ${{ secrets.RTC_TOKEN }}
UPDATE_PR: false
Expand Down
14 changes: 14 additions & 0 deletions lib/facts/aix/aio_agent_version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Facts
module Aix
class AioAgentVersion
FACT_NAME = 'aio_agent_version'

def call_the_resolver
fact_value = Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end
end
end
end
14 changes: 14 additions & 0 deletions lib/facts/linux/aio_agent_version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Facts
module Linux
class AioAgentVersion
FACT_NAME = 'aio_agent_version'

def call_the_resolver
fact_value = Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end
end
end
end
14 changes: 14 additions & 0 deletions lib/facts/macosx/aio_agent_version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Facts
module Macosx
class AioAgentVersion
FACT_NAME = 'aio_agent_version'

def call_the_resolver
fact_value = Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end
end
end
end
14 changes: 14 additions & 0 deletions lib/facts/solaris/aio_agent_version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Facts
module Solaris
class AioAgentVersion
FACT_NAME = 'aio_agent_version'

def call_the_resolver
fact_value = Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end
end
end
end
14 changes: 14 additions & 0 deletions lib/facts/windows/aio_agent_version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Facts
module Windows
class AioAgentVersion
FACT_NAME = 'aio_agent_version'

def call_the_resolver
fact_value = Facter::Resolvers::Windows::AioAgentVersion.resolve(:aio_agent_version)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

module Facter
module Resolvers
class Agent < BaseResolver
class AioAgentVersion < BaseResolver
@semaphore = Mutex.new
@fact_list ||= {}

Expand All @@ -14,8 +14,9 @@ def post_resolve(fact_name)
end

def read_agent_version
version_file = ::File.join(ROOT_DIR, 'lib/puppet/VERSION')
@fact_list[:aio_agent_version] = ::File.read(version_file)
aio_agent_version = Util::FileHelper.safe_read('/opt/puppetlabs/puppet/VERSION', nil).chomp
gimmyxd marked this conversation as resolved.
Show resolved Hide resolved
aio_agent_version = aio_agent_version&.match(/^\d+\.\d+\.\d+(\.\d+){0,2}/)&.to_s
@fact_list[:aio_agent_version] = aio_agent_version
end
end
end
Expand Down
56 changes: 56 additions & 0 deletions lib/resolvers/windows/aio_agent_version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# frozen_string_literal: true

module Facter
module Resolvers
module Windows
class AioAgentVersion < BaseResolver
REGISTRY_PATH = 'SOFTWARE\\Puppet Labs\\Puppet'
@semaphore = Mutex.new
@fact_list ||= {}

class << self
private

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

def read_version(fact_name)
::Win32::Registry::HKEY_LOCAL_MACHINE.open(REGISTRY_PATH) do |reg|
build_fact_list(reg)
end

@fact_list[fact_name]
rescue Win32::Registry::Error
log.debug("The registry path #{REGISTRY_PATH} does not exist")
end

def build_fact_list(reg)
puppet_aio_path = read_for_64_bit(reg) || read_for_32_bit(reg)

return if puppet_aio_path.nil? || puppet_aio_path.empty?

puppet_aio_version_path = File.join(puppet_aio_path, 'VERSION')
aio_agent_version = Util::FileHelper.safe_read(puppet_aio_version_path, nil)&.chomp

@fact_list[:aio_agent_version] = aio_agent_version&.match(/^\d+\.\d+\.\d+(\.\d+){0,2}/)&.to_s
end

def read_for_64_bit(reg)
reg.read('RememberedInstallDir64')[1]
gimmyxd marked this conversation as resolved.
Show resolved Hide resolved
rescue Win32::Registry::Error
log.debug('Could not read Puppet AIO path from 64 bit registry')
nil
end

def read_for_32_bit(reg)
reg.read('RememberedInstallDir')[1]
rescue Win32::Registry::Error
log.debug('Could not read Puppet AIO path from 32 bit registry')
nil
end
end
end
end
end
end
23 changes: 23 additions & 0 deletions spec/facter/facts/aix/aio_agent_version_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

describe Facts::Aix::AioAgentVersion do
describe '#call_the_resolver' do
subject(:fact) { Facts::Aix::AioAgentVersion.new }

let(:value) { '1.2.3' }

before do
allow(Facter::Resolvers::AioAgentVersion).to receive(:resolve).with(:aio_agent_version).and_return(value)
end

it 'calls Facter::Resolvers::Agent' do
fact.call_the_resolver
expect(Facter::Resolvers::AioAgentVersion).to have_received(:resolve).with(:aio_agent_version)
end

it 'returns aio_agent_version fact' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'aio_agent_version', value: value)
end
end
end
23 changes: 23 additions & 0 deletions spec/facter/facts/linux/aio_agent_version_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

describe Facts::Linux::AioAgentVersion do
describe '#call_the_resolver' do
subject(:fact) { Facts::Linux::AioAgentVersion.new }

let(:value) { '1.2.3' }

before do
allow(Facter::Resolvers::AioAgentVersion).to receive(:resolve).with(:aio_agent_version).and_return(value)
end

it 'calls Facter::Resolvers::Agent' do
fact.call_the_resolver
expect(Facter::Resolvers::AioAgentVersion).to have_received(:resolve).with(:aio_agent_version)
end

it 'returns aio_agent_version fact' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'aio_agent_version', value: value)
end
end
end
23 changes: 23 additions & 0 deletions spec/facter/facts/macosx/aio_agent_version_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

describe Facts::Macosx::AioAgentVersion do
describe '#call_the_resolver' do
subject(:fact) { Facts::Macosx::AioAgentVersion.new }

let(:value) { '1.2.3' }

before do
allow(Facter::Resolvers::AioAgentVersion).to receive(:resolve).with(:aio_agent_version).and_return(value)
end

it 'calls Facter::Resolvers::Agent' do
fact.call_the_resolver
expect(Facter::Resolvers::AioAgentVersion).to have_received(:resolve).with(:aio_agent_version)
end

it 'returns aio_agent_version fact' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'aio_agent_version', value: value)
end
end
end
23 changes: 23 additions & 0 deletions spec/facter/facts/solaris/aio_agent_version_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

describe Facts::Solaris::AioAgentVersion do
describe '#call_the_resolver' do
subject(:fact) { Facts::Solaris::AioAgentVersion.new }

let(:value) { '1.2.3' }

before do
allow(Facter::Resolvers::AioAgentVersion).to receive(:resolve).with(:aio_agent_version).and_return(value)
end

it 'calls Facter::Resolvers::Agent' do
fact.call_the_resolver
expect(Facter::Resolvers::AioAgentVersion).to have_received(:resolve).with(:aio_agent_version)
end

it 'returns aio_agent_version fact' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'aio_agent_version', value: value)
end
end
end
35 changes: 32 additions & 3 deletions spec/facter/resolvers/aio_agent_version_spec.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,39 @@
# frozen_string_literal: true

describe Facter::Resolvers::Agent do
describe Facter::Resolvers::AioAgentVersion do
describe '#resolve' do
before do
allow(Facter::Util::FileHelper)
.to receive(:safe_read)
.with('/opt/puppetlabs/puppet/VERSION', nil)
.and_return('7.0.1')
end

after do
Facter::Resolvers::AioAgentVersion.invalidate_cache
end

it 'calls FileHelper.safe_read' do
Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)

expect(Facter::Util::FileHelper).to have_received(:safe_read).with('/opt/puppetlabs/puppet/VERSION', nil)
end

it 'detects puppet version' do
allow(File).to receive(:read).with("#{ROOT_DIR}/lib/puppet/VERSION").and_return('7.0.1')
expect(Facter::Resolvers::Agent.resolve(:aio_agent_version)).to eql('7.0.1')
expect(Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)).to eql('7.0.1')
end

context 'when AIO puppet agent is a dev build' do
before do
allow(Facter::Util::FileHelper)
.to receive(:safe_read)
.with('/opt/puppetlabs/puppet/VERSION', nil)
.and_return('7.0.1.8.g12345678')
end

it 'only shows the first 4 groups of digits' do
expect(Facter::Resolvers::AioAgentVersion.resolve(:aio_agent_version)).to eql('7.0.1.8')
end
end
end
end
Loading