Skip to content

Commit

Permalink
Merge pull request #2479 from natemccurdy/FACT-1557/cloud_provider_gce
Browse files Browse the repository at this point in the history
(FACT-1557) Extend the cloud.provider fact to Google Compute Engine
  • Loading branch information
joshcooper authored Jun 14, 2022
2 parents 366e6f9 + 71be25d commit b29fe99
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ Metrics/CyclomaticComplexity:
- 'lib/facter/custom_facts/util/confine.rb'
- 'lib/facter/custom_facts/core/execution/windows.rb'
- 'lib/facter/custom_facts/core/execution/posix.rb'
- 'lib/facter/facts/linux/cloud/provider.rb'
- 'lib/facter/facts/windows/cloud/provider.rb'
- 'lib/facter/framework/detector/os_detector.rb'
- 'install.rb'
- 'scripts/generate_changelog.rb'
Expand Down
2 changes: 2 additions & 0 deletions lib/facter/facts/linux/cloud/provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ def call_the_resolver
'azure' unless Facter::Resolvers::Az.resolve(:metadata).empty?
when 'kvm', 'xen'
'aws' unless Facter::Resolvers::Ec2.resolve(:metadata).empty?
when 'gce'
'gce' unless Facter::Resolvers::Gce.resolve(:metadata).empty?
end

Facter::ResolvedFact.new(FACT_NAME, provider)
Expand Down
2 changes: 2 additions & 0 deletions lib/facter/facts/windows/cloud/provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ def call_the_resolver
'azure' unless Facter::Resolvers::Az.resolve(:metadata).empty?
when 'kvm', 'xen'
'aws' unless Facter::Resolvers::Ec2.resolve(:metadata).empty?
when 'gce'
'gce' unless Facter::Resolvers::Gce.resolve(:metadata).empty?
end

Facter::ResolvedFact.new(FACT_NAME, provider)
Expand Down
2 changes: 1 addition & 1 deletion lib/schema/facter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ chassistype:
cloud:
type: map
description: Information about the cloud instance of the node. This is currently only populated on nodes running in Microsoft Azure and Amazon Web Service.
description: Information about the cloud instance of the node. This is currently only populated on nodes running in Microsoft Azure, Amazon Web Services, and Google Compute Engine.
elements:
provider:
type: string
Expand Down
25 changes: 25 additions & 0 deletions spec/facter/facts/linux/cloud/provider_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,30 @@
end
end
end

describe 'when on gce' do
before do
allow(Facter::Resolvers::Gce).to receive(:resolve).with(:metadata).and_return(value)
allow(Facter::Util::Facts::Posix::VirtualDetector).to receive(:platform).and_return('gce')
end

describe 'and the "gce" fact has content' do
let(:value) { { 'some' => 'metadata' } }

it 'resolves a provider of "gce"' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'cloud.provider', value: 'gce')
end
end

context 'when the "gce" fact has no content' do
let(:value) { {} }

it 'resolves to nil' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'cloud.provider', value: nil)
end
end
end
end
end
25 changes: 25 additions & 0 deletions spec/facter/facts/windows/cloud/provider_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,31 @@
end
end

context 'when on gce' do
before do
allow(Facter::Resolvers::Gce).to receive(:resolve).with(:metadata).and_return(value)
allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return('gce')
end

describe 'with the "gce" fact having data' do
let(:value) { { 'some' => 'metadata' } }

it 'resolves a provider of "gce"' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'cloud.provider', value: 'gce')
end
end

context 'with the "gce" fact being empty' do
let(:value) { {} }

it 'resolves to nil' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'cloud.provider', value: nil)
end
end
end

context 'when on a physical machine' do
before do
allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return(nil)
Expand Down

0 comments on commit b29fe99

Please sign in to comment.