Skip to content

Commit 73e2615

Browse files
author
James Pogran
authored
Merge pull request #246 from glennsarti/gh245refactorfacts
(GH-245) Use object cache for fact data
2 parents 4702628 + 10ff9fe commit 73e2615

File tree

8 files changed

+34
-46
lines changed

8 files changed

+34
-46
lines changed

lib/puppet-languageserver/facter_helper.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,11 @@ def self.fact_names
4646
return [] if @facts_loaded == false
4747
cache.object_names_by_section(:fact).map(&:to_s)
4848
end
49+
50+
def self.facts_to_hash
51+
fact_hash = {}
52+
cache.objects_by_section(:fact) { |factname, fact| fact_hash[factname.to_s] = fact.value }
53+
fact_hash
54+
end
4955
end
5056
end

lib/puppet-languageserver/message_handler.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def request_puppet_getversion(_, _json_rpc_message)
4646
end
4747

4848
def request_puppet_getfacts(_, _json_rpc_message)
49-
results = PuppetLanguageServer::PuppetHelper.get_all_facts(documents.store_root_path)
49+
results = PuppetLanguageServer::FacterHelper.facts_to_hash
5050
LSP::PuppetFactResponse.new('facts' => results)
5151
end
5252

lib/puppet-languageserver/puppet_helper.rb

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,6 @@ def self.get_node_graph(content, local_workspace)
5454
end
5555
end
5656

57-
def self.get_all_facts(local_workspace)
58-
ap = PuppetLanguageServer::Sidecar::Protocol::ActionParams.new
59-
60-
args = ['--action-parameters=' + ap.to_json]
61-
args << "--local-workspace=#{local_workspace}" unless local_workspace.nil?
62-
63-
sidecar_queue.execute_sync('facts_all', args, false)
64-
end
65-
6657
def self.get_puppet_resource(typename, title, local_workspace)
6758
ap = PuppetLanguageServer::Sidecar::Protocol::ActionParams.new
6859
ap['typename'] = typename

lib/puppet-languageserver/sidecar_queue.rb

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,6 @@ def execute_sync(action, additional_args, handle_errors = false)
118118

119119
PuppetLanguageServer::FacterHelper.assert_facts_loaded
120120

121-
when 'facts_all'
122-
list = {}
123-
PuppetLanguageServer::Sidecar::Protocol::FactList
124-
.new
125-
.from_json!(result)
126-
.map { |element| list[element.key] = element.value }
127-
PuppetLanguageServer.log_message(:debug, "SidecarQueue Thread: facts returned #{list.count} items")
128-
129-
return list
130-
131121
when 'node_graph'
132122
return PuppetLanguageServer::Sidecar::Protocol::PuppetNodeGraph.new.from_json!(result)
133123

lib/puppet_languageserver_sidecar.rb

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ def self.require_gems(options)
119119
workspace_functions
120120
workspace_types
121121
facts
122-
facts_all
123122
].freeze
124123

125124
class CommandLineParser
@@ -400,14 +399,6 @@ def self.execute(options)
400399
inject_workspace_as_environment unless injected
401400
PuppetLanguageServerSidecar::FacterHelper.retrieve_facts(cache)
402401

403-
when 'facts_all'
404-
# Can't cache for facts
405-
cache = PuppetLanguageServerSidecar::Cache::Null.new
406-
# Inject the workspace etc. if present
407-
injected = inject_workspace_as_module
408-
inject_workspace_as_environment unless injected
409-
PuppetLanguageServerSidecar::FacterHelper.retrieve_facts(cache)
410-
411402
else
412403
log_message(:error, "Unknown action #{options[:action]}. Expected one of #{ACTION_LIST}")
413404
end

spec/languageserver-sidecar/integration/puppet-languageserver-sidecar/facter_helper_spec.rb

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,6 @@ def run_sidecar(cmd_options)
5151
end
5252
end
5353

54-
describe 'when running facts_all action' do
55-
let (:cmd_options) { ['--action', 'facts_all'] }
56-
57-
it 'should return a deserializable facts object with all default facts' do
58-
result = run_sidecar(cmd_options)
59-
deserial = PuppetLanguageServer::Sidecar::Protocol::FactList.new
60-
expect { deserial.from_json!(result) }.to_not raise_error
61-
default_fact_names.each do |name|
62-
expect(deserial).to contain_child_with_key(name)
63-
end
64-
65-
module_fact_names.each do |name|
66-
expect(deserial).to_not contain_child_with_key(name)
67-
end
68-
end
69-
end
70-
7154
context 'given a workspace containing a module' do
7255
# Test fixtures used is fixtures/valid_module_workspace
7356
let(:workspace) { File.join($fixtures_dir, 'valid_module_workspace') }

spec/languageserver/acceptance/end_to_end_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# Diagnostics response | X | | |
1515
# Hover (Class) | X | | |
1616
# Puppet resource | X | | |
17+
# Puppet facts | X | | |
1718
# Node graph preview | X | | |
1819
# Completion (Typing) | X | - | - |
1920
# Completion (Invoked) | X | - | - |
@@ -127,6 +128,23 @@ def path_to_uri(path)
127128
expect(result['result']['contents']).not_to be_nil
128129
expect(result['result']['contents']).not_to be_empty
129130

131+
# Puppet Facts request
132+
@client.clear_messages!
133+
@client.send_data(@client.puppet_getfacts_request(@client.next_seq_id))
134+
expect(@client).to receive_message_with_request_id_within_timeout([@client.current_seq_id, 15])
135+
result = @client.data_from_request_seq_id(@client.current_seq_id)
136+
# Expect there to be some facts
137+
expect(result['result']['facts']).not_to be_nil
138+
expect(result['result']['facts']).not_to be_empty
139+
# Expect core facts. Ref https://puppet.com/docs/facter/latest/core_facts.html
140+
%w[facterversion kernel os system_uptime].each do |factname|
141+
expect(result['result']['facts'][factname]).not_to be_nil
142+
expect(result['result']['facts'][factname]).not_to be_empty
143+
end
144+
# Expect nested core facts. Ref https://puppet.com/docs/facter/latest/core_facts.html
145+
expect(result['result']['facts']['os']['release']).not_to be_nil
146+
expect(result['result']['facts']['os']['release']).not_to be_empty
147+
130148
# Puppet Resource request
131149
@client.clear_messages!
132150
@client.send_data(@client.puppet_getresource_request(@client.next_seq_id, 'user'))

spec/languageserver/spec_editor_client.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,15 @@ def puppet_getversion_request(seq_id)
191191
})
192192
end
193193

194+
def puppet_getfacts_request(seq_id)
195+
::JSON.generate({
196+
'jsonrpc' => '2.0',
197+
'id' => seq_id,
198+
'method' => 'puppet/getFacts',
199+
'params' => {}
200+
})
201+
end
202+
194203
def puppet_getresource_request(seq_id, type_name)
195204
::JSON.generate({
196205
'jsonrpc' => '2.0',

0 commit comments

Comments
 (0)