Skip to content

Commit b29fe99

Browse files
authored
Merge pull request #2479 from natemccurdy/FACT-1557/cloud_provider_gce
(FACT-1557) Extend the cloud.provider fact to Google Compute Engine
2 parents 366e6f9 + 71be25d commit b29fe99

File tree

6 files changed

+57
-1
lines changed

6 files changed

+57
-1
lines changed

.rubocop.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ Metrics/CyclomaticComplexity:
8787
- 'lib/facter/custom_facts/util/confine.rb'
8888
- 'lib/facter/custom_facts/core/execution/windows.rb'
8989
- 'lib/facter/custom_facts/core/execution/posix.rb'
90+
- 'lib/facter/facts/linux/cloud/provider.rb'
91+
- 'lib/facter/facts/windows/cloud/provider.rb'
9092
- 'lib/facter/framework/detector/os_detector.rb'
9193
- 'install.rb'
9294
- 'scripts/generate_changelog.rb'

lib/facter/facts/linux/cloud/provider.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ def call_the_resolver
1212
'azure' unless Facter::Resolvers::Az.resolve(:metadata).empty?
1313
when 'kvm', 'xen'
1414
'aws' unless Facter::Resolvers::Ec2.resolve(:metadata).empty?
15+
when 'gce'
16+
'gce' unless Facter::Resolvers::Gce.resolve(:metadata).empty?
1517
end
1618

1719
Facter::ResolvedFact.new(FACT_NAME, provider)

lib/facter/facts/windows/cloud/provider.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ def call_the_resolver
1313
'azure' unless Facter::Resolvers::Az.resolve(:metadata).empty?
1414
when 'kvm', 'xen'
1515
'aws' unless Facter::Resolvers::Ec2.resolve(:metadata).empty?
16+
when 'gce'
17+
'gce' unless Facter::Resolvers::Gce.resolve(:metadata).empty?
1618
end
1719

1820
Facter::ResolvedFact.new(FACT_NAME, provider)

lib/schema/facter.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ chassistype:
197197
198198
cloud:
199199
type: map
200-
description: Information about the cloud instance of the node. This is currently only populated on nodes running in Microsoft Azure and Amazon Web Service.
200+
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.
201201
elements:
202202
provider:
203203
type: string

spec/facter/facts/linux/cloud/provider_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,5 +89,30 @@
8989
end
9090
end
9191
end
92+
93+
describe 'when on gce' do
94+
before do
95+
allow(Facter::Resolvers::Gce).to receive(:resolve).with(:metadata).and_return(value)
96+
allow(Facter::Util::Facts::Posix::VirtualDetector).to receive(:platform).and_return('gce')
97+
end
98+
99+
describe 'and the "gce" fact has content' do
100+
let(:value) { { 'some' => 'metadata' } }
101+
102+
it 'resolves a provider of "gce"' do
103+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
104+
have_attributes(name: 'cloud.provider', value: 'gce')
105+
end
106+
end
107+
108+
context 'when the "gce" fact has no content' do
109+
let(:value) { {} }
110+
111+
it 'resolves to nil' do
112+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
113+
have_attributes(name: 'cloud.provider', value: nil)
114+
end
115+
end
116+
end
92117
end
93118
end

spec/facter/facts/windows/cloud/provider_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,31 @@
7979
end
8080
end
8181

82+
context 'when on gce' do
83+
before do
84+
allow(Facter::Resolvers::Gce).to receive(:resolve).with(:metadata).and_return(value)
85+
allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return('gce')
86+
end
87+
88+
describe 'with the "gce" fact having data' do
89+
let(:value) { { 'some' => 'metadata' } }
90+
91+
it 'resolves a provider of "gce"' do
92+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
93+
have_attributes(name: 'cloud.provider', value: 'gce')
94+
end
95+
end
96+
97+
context 'with the "gce" fact being empty' do
98+
let(:value) { {} }
99+
100+
it 'resolves to nil' do
101+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
102+
have_attributes(name: 'cloud.provider', value: nil)
103+
end
104+
end
105+
end
106+
82107
context 'when on a physical machine' do
83108
before do
84109
allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return(nil)

0 commit comments

Comments
 (0)