@@ -12,7 +12,7 @@ def register(schema)
12
12
unless transports [ schema [ :name ] ] . nil?
13
13
raise Puppet ::DevError , 'Transport `%{name}` is already registered for `%{environment}`' % {
14
14
name : schema [ :name ] ,
15
- environment : current_environment ,
15
+ environment : current_environment_name ,
16
16
}
17
17
end
18
18
transports [ schema [ :name ] ] = Puppet ::ResourceApi ::TransportSchemaDef . new ( schema )
@@ -27,7 +27,7 @@ def list
27
27
module_function :list # rubocop:disable Style/AccessModifierDeclarations
28
28
29
29
# retrieve a Hash of transport schemas, keyed by their name.
30
- # This uses the Puppet autoloader, provide a environment name as `force_environment`
30
+ # This uses the Puppet autoloader, provide an environment name as `force_environment`
31
31
# to choose where to load from.
32
32
# @api private
33
33
def list_all_transports ( force_environment )
@@ -45,7 +45,7 @@ def self.load_all_schemas
45
45
require 'puppet/settings'
46
46
require 'puppet/util/autoload'
47
47
@autoloader ||= Puppet ::Util ::Autoload . new ( self , 'puppet/transport/schema' )
48
- @autoloader . loadall ( Puppet . lookup ( : current_environment) )
48
+ @autoloader . loadall ( current_environment )
49
49
end
50
50
private_class_method :load_all_schemas
51
51
@@ -74,7 +74,7 @@ def self.validate(name, connection_info)
74
74
if transport_schema . nil?
75
75
raise Puppet ::DevError , 'Transport for `%{target}` not registered with `%{environment}`' % {
76
76
target : name ,
77
- environment : current_environment ,
77
+ environment : current_environment_name ,
78
78
}
79
79
end
80
80
@@ -108,21 +108,26 @@ def self.wrap_sensitive(name, connection_info)
108
108
private_class_method :wrap_sensitive
109
109
110
110
def self . transports
111
- @transports ||= { }
112
- @transports [ current_environment ] ||= { }
111
+ env = current_environment
112
+ if env
113
+ ObjectIdCacheAdapter . adapt ( env ) . retrieve ( :rsapi_transport_cache )
114
+ else
115
+ @transports_default ||= { }
116
+ end
113
117
end
114
118
private_class_method :transports
115
119
116
120
def self . current_environment
117
- if Puppet . respond_to? :lookup
118
- env = Puppet . lookup ( :current_environment )
119
- env . nil? ? :transports_default : env . name
120
- else
121
- :transports_default
122
- end
121
+ Puppet . lookup ( :current_environment ) if Puppet . respond_to? :lookup
123
122
end
124
123
private_class_method :current_environment
125
124
125
+ def self . current_environment_name
126
+ env = current_environment
127
+ env . nil? ? :transports_default : env . name
128
+ end
129
+ private_class_method :current_environment_name
130
+
126
131
def self . clean_bolt_attributes ( transport_schema , connection_info )
127
132
context = get_context ( transport_schema . name )
128
133
@@ -154,4 +159,19 @@ def self.clean_bolt_attributes(transport_schema, connection_info)
154
159
nil
155
160
end
156
161
private_class_method :clean_bolt_attributes
162
+
163
+ # copy from https://github.com/puppetlabs/puppet/blob/8cae8a17dbac08d2db0238d5bce2f1e4d1898d65/lib/puppet/pops/adapters.rb#L6-L17
164
+ # to keep backwards compatibility with puppet4 and 5, which don't have this yet.
165
+ class ObjectIdCacheAdapter < Puppet ::Pops ::Adaptable ::Adapter
166
+ attr_accessor :cache
167
+
168
+ def initialize
169
+ @cache = { }
170
+ end
171
+
172
+ # Retrieves a mutable hash with all stored values
173
+ def retrieve ( o )
174
+ @cache [ o . __id__ ] ||= { }
175
+ end
176
+ end
157
177
end
0 commit comments