@@ -12,7 +12,7 @@ def register(schema)
1212 unless transports [ schema [ :name ] ] . nil?
1313 raise Puppet ::DevError , 'Transport `%{name}` is already registered for `%{environment}`' % {
1414 name : schema [ :name ] ,
15- environment : current_environment ,
15+ environment : current_environment_name ,
1616 }
1717 end
1818 transports [ schema [ :name ] ] = Puppet ::ResourceApi ::TransportSchemaDef . new ( schema )
@@ -27,7 +27,7 @@ def list
2727 module_function :list # rubocop:disable Style/AccessModifierDeclarations
2828
2929 # 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`
3131 # to choose where to load from.
3232 # @api private
3333 def list_all_transports ( force_environment )
@@ -45,7 +45,7 @@ def self.load_all_schemas
4545 require 'puppet/settings'
4646 require 'puppet/util/autoload'
4747 @autoloader ||= Puppet ::Util ::Autoload . new ( self , 'puppet/transport/schema' )
48- @autoloader . loadall ( Puppet . lookup ( : current_environment) )
48+ @autoloader . loadall ( current_environment )
4949 end
5050 private_class_method :load_all_schemas
5151
@@ -74,7 +74,7 @@ def self.validate(name, connection_info)
7474 if transport_schema . nil?
7575 raise Puppet ::DevError , 'Transport for `%{target}` not registered with `%{environment}`' % {
7676 target : name ,
77- environment : current_environment ,
77+ environment : current_environment_name ,
7878 }
7979 end
8080
@@ -108,21 +108,26 @@ def self.wrap_sensitive(name, connection_info)
108108 private_class_method :wrap_sensitive
109109
110110 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
113117 end
114118 private_class_method :transports
115119
116120 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
123122 end
124123 private_class_method :current_environment
125124
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+
126131 def self . clean_bolt_attributes ( transport_schema , connection_info )
127132 context = get_context ( transport_schema . name )
128133
@@ -154,4 +159,19 @@ def self.clean_bolt_attributes(transport_schema, connection_info)
154159 nil
155160 end
156161 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 ( obj )
174+ @cache [ obj . __id__ ] ||= { }
175+ end
176+ end
157177end
0 commit comments