private void propagateRuntimeConfiguration ( ) { // If pipeline wasn't loaded or there if there are no stages, there is nothing to propagate if ( pipelineBean == null || pipelineBean . getPipelineStageBeans ( ) == null ) { return ; } for ( StageBean stageBean : pipelineBean . getPipelineStageBeans ( ) . getStages ( ) ) { for ( ServiceDependencyDefinition serviceDependency : stageBean . getDefinition ( ) . getServices ( ) ) { ServiceBean stageService = stageBean . getService ( serviceDependency . getService ( ) ) ; if ( stageService == null ) { continue ; } ServiceConfiguration serviceConfiguration = stageService . getConf ( ) ; List < Config > configs = serviceConfiguration . getConfiguration ( ) ; // Simply remove all RUNTIME configs configs . removeAll ( serviceDependency . getConfiguration ( ) . keySet ( ) . stream ( ) . map ( serviceConfiguration :: getConfig ) . collect ( Collectors . toList ( ) ) ) ; // And insert them with the stage-instance-constant values serviceDependency . getConfiguration ( ) . forEach ( ( key , value ) -> configs . add ( new Config ( key , value ) ) ) ; // And overwrite the new state serviceConfiguration . setConfig ( configs ) ; } } }
We have special type of a ConfigDef called RUNTIME . This config is never displayed in UI and instead it s values are supplied at runtime . This method is the runtime method that propagates them .