This repository has been archived by the owner on Jun 19, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(FACT-2638) Use puppet AIO VERSION file to specify AIO version (#549)
* (FACT-2638) Add AIO version to gem if it exists. * (FACT-2638) Update AIO version resolver. * (FACT-2638) Add aio_agent_version fact for all platforms. * (FACT-2638) Remove AIO_VERSION file from gem, as the AIO version will be determined by other means. * (FACT-2638) Add resolver that read puppet path from registry * (FACT-2638) Read Puppet AIO path from registry. * (FACT-2638) Append VERSION file to path. * (FACT-2638) Rubocop fixes. * (FACT-2638) Read from different registry record if os is 32 bit. * (FACT-2638) Remove unused resolver and comment AIO agent facts for platforms that are not yet implemented. * (FACT-2638) Move AioAgentVersion windows resolver to windows module. * (FACT-2638) Add puppet aio version resolver for unix like systems. * (FACT-2638) Add test for mscos. * (FACT-2638) Add agent aio resolver for linux. * (FACT-2638) Add logic to agent aio version resolver for AIX. * (FACT-2638) Add logic to aio_agent_version fact for Solaris. * (FACT-2638) Add test fro aio_agent_version resolver. * (FACT-2638) Add test for aio_agent_version windows resolver. * (FACT-2638) Use open block to avoid closing the register. * (FACT-2638) Catch exception for incorrect registry path. * (FACT-2638) Add test for incorrect registry path. * (FACT-2638) Add nil check before chomp. * (FACT-2638) Improve return condition when there is no path or an empty one detected in registry. Added tests for this case. * (FACT-2638) Only consider the first 4 groups of digits. * (FACT-2638) Add test for AIO dev builds.
- Loading branch information
Bogdan Irimie
authored
Jun 16, 2020
1 parent
66470df
commit cc66565
Showing
16 changed files
with
366 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.