Skip to content

Commit ebadc5a

Browse files
committed
(SERVER-2470) Draft implementation for list_all_transports
To test out, run `rake spec_prep` and use the following setup in pry: ``` require 'puppet' require 'puppet/resource_api/transport' require 'puppet/settings' Puppet.initialize_settings Puppet[:modulepath] = 'spec/fixtures/modules' # env = Puppet.lookup(:environments).get!('production') # files = Puppet::Util::Autoload.files_to_load('puppet/transport/schema', env) Puppet::ResourceApi::Transport.list_all_transports('production') ```
1 parent d249941 commit ebadc5a

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

lib/puppet/resource_api/transport.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,39 @@ def register(schema)
2020
module_function :register # rubocop:disable Style/AccessModifierDeclarations
2121

2222
# retrieve a Hash of transport schemas, keyed by their name.
23+
# Only already loaded transports are returned.
2324
def list
2425
Marshal.load(Marshal.dump(transports))
2526
end
2627
module_function :list # rubocop:disable Style/AccessModifierDeclarations
2728

29+
# retrieve a Hash of transport schemas, keyed by their name.
30+
# This uses the Puppet autoloader, so beware of your setup.
31+
# @api private
32+
def list_all_transports(force_environment = nil)
33+
if force_environment.nil?
34+
load_all_schemas
35+
Marshal.load(Marshal.dump(transports))
36+
else
37+
env = Puppet.lookup(:environments).get!(force_environment)
38+
Puppet.override({ current_environment: env }, 'current env for list_all_transports') do
39+
load_all_schemas
40+
Marshal.load(Marshal.dump(transports))
41+
end
42+
end
43+
end
44+
module_function :list_all_transports # rubocop:disable Style/AccessModifierDeclarations
45+
46+
# Loads all schemas using the Puppet Autoloader.
47+
def self.load_all_schemas
48+
require 'puppet'
49+
require 'puppet/settings'
50+
require 'puppet/util/autoload'
51+
autoloader = Puppet::Util::Autoload.new(self, 'puppet/transport/schema')
52+
autoloader.loadall(Puppet.lookup(:current_environment))
53+
end
54+
private_class_method :load_all_schemas
55+
2856
def connect(name, connection_info)
2957
validate(name, connection_info)
3058
require "puppet/transport/#{name}"

0 commit comments

Comments
 (0)