package Ġno . sk at te et aten . aur ora . b oo ber . facade Ċ Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġmu . Kotlin Logging Ċ import Ġno . sk at te et aten . aur ora . b oo ber . feature . application Deployment Ref Ċ import Ġno . sk at te et aten . aur ora . b oo ber . feature . cluster Ċ import Ġno . sk at te et aten . aur ora . b oo ber . feature . env Auto Deploy Ċ import Ġno . sk at te et aten . aur ora . b oo ber . feature . env Name Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . Application Deployment Ref Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Config Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora ConfigFile Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Context Command Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Deployment Spec Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . to Ad r Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . A ur ora Config Ref Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . A ur ora Config Service Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . A ur ora Deployment Context Service Ċ import Ġno . sk at te et aten . aur ora . b oo ber . utils . parallel Map Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ @ Service Ċ class ĠA ur ora Config Facade ( ĊĠĠĠ Ġprivate Ġval Ġa ur ora Config Service : ĠA ur ora Config Service , ĊĠĠĠ Ġprivate Ġval Ġa ur ora Deployment Context Service : ĠA ur ora Deployment Context Service Ċ Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġfind A ur ora Deployment Spec ( ĊĠĠĠĠĠĠĠ Ġref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ Ġad r List : ĠList < Application Deployment Ref > ĊĠĠĠ Ġ): ĠList < A ur ora Deployment Spec > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġad r List . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Deployment Context Service . find Application Deployment Spec ( A ur ora Context Command ( aur ora Config , Ġit , Ġref )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind A ur ora Deployment Spec For Environment ( ĊĠĠĠĠĠĠĠ Ġref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ Ġenvironment : ĠString , ĊĠĠĠĠĠĠĠ Ġerrors As Warnings : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠList < A ur ora Deployment Spec > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġa ur ora Config . getApplication Deployment Refs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . environment Ġ== Ġenvironment Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Deployment Context Service . find Application Deployment Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Context Command ( aur ora Config , Ġit , Ġref , Ġempty List (), Ġerrors As Warnings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind A ur ora Deployment Spec Single ( ĊĠĠĠĠĠĠĠ Ġref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ Ġad r : ĠApplication Deployment Ref , ĊĠĠĠĠĠĠĠ Ġoverride Files : ĠList < A ur ora ConfigFile >, ĊĠĠĠĠĠĠĠ Ġerrors As Warnings : ĠBoolean ĊĠĠĠ Ġ): ĠA ur ora Deployment Spec Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= ĠA ur ora Context Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config Ġ= Ġa ur ora Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Deployment Ref Ġ= Ġad r , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config Ref Ġ= Ġref , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides Ġ= Ġoverride Files , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors As Warnings Ġ= Ġerrors As Warnings ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġa ur ora Deployment Context Service . find Application Deployment Spec ( cmd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind A ur ora Config Files For Application Deployment ( ĊĠĠĠĠĠĠĠ Ġref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ Ġad r : ĠApplication Deployment Ref ĊĠĠĠ Ġ): ĠList < A ur ora ConfigFile > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġa ur ora Config Service . find A ur ora Config ( ref ). get Files For Application ( adr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind A ur ora Config ( ref : ĠA ur ora Config Ref ): ĠA ur ora Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind A ur ora ConfigFile Names ( ref : ĠA ur ora Config Ref ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġa ur ora Config . files . map Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġa Ġmap Ġof ĠA DR Ġ-> ĠWarning s Ġif Ġthat Ġad r Ġhas Ġwarnings . ĠIn Ġcase Ġof Ġerrors Ġan Ġexception Ġis Ġthrown ĊĠĠĠ Ġfun Ġvalidate A ur ora Config ( ĊĠĠĠĠĠĠĠ Ġlocal A ur ora Config : ĠA ur ora Config , ĊĠĠĠĠĠĠĠ Ġresource Validation : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġa ur ora Config Ref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ Ġmerge With Remote Config : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠMap < Application Deployment Ref , ĠList < String >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġif Ġ( merge With Remote Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote A ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( aur ora Config Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote A ur ora Config . merge ( local A ur ora Config ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal A ur ora Config ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= Ġa ur ora Config . getApplication Deployment Refs (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġto Ġvalidate Ġthat Ġthere Ġare Ġno Ġd angling Ġfiles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config . get Files For Application ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Context Command ( aur ora Config , Ġit , Ġa ur ora Config Ref , Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Deployment Context Service . create Validated A ur ora Deployment Contexts ( commands , Ġresource Validation ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . filter Ġ{ Ġit . warnings . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cmd . application Deployment Ref Ġto Ġit . warnings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind A ur ora ConfigFile ( ref : ĠA ur ora Config Ref , ĠfileName : ĠString ): ĠA ur ora ConfigFile Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġa ur ora Config . files . find Ġ{ Ġit . name Ġ== ĠfileName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" No Ġsuch Ġfile Ġ$ fileName Ġin ĠA ur ora Config Ġ${ ref . name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate A ur ora ConfigFile ( ĊĠĠĠĠĠĠĠ Ġref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ ĠfileName : ĠString , ĊĠĠĠĠĠĠĠ Ġcontents : ĠString , ĊĠĠĠĠĠĠĠ Ġprevious Version : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠA ur ora ConfigFile Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġold A ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġval Ġ( new File , Ġa ur ora Config ) Ġ= Ġold A ur ora Config . update File ( fileName , Ġcontents , Ġprevious Version ) ĊĊĠĠĠĠĠĠĠ Ġa ur ora Config Service . save File ( new File , Ġa ur ora Config , Ġref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnew File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpatch A ur ora ConfigFile ( ĊĠĠĠĠĠĠĠ Ġref : ĠA ur ora Config Ref , ĊĠĠĠĠĠĠĠ Ġfilename : ĠString , ĊĠĠĠĠĠĠĠ Ġjson Patch Op : ĠString ĊĠĠĠ Ġ): ĠA ur ora ConfigFile Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġa ur ora Config Service . find A ur ora Config ( ref ) ĊĠĠĠĠĠĠĠ Ġval Ġ( new File , Ġupdated A ur ora Config ) Ġ= Ġa ur ora Config . patch File ( filename , Ġjson Patch Op ) ĊĠĠĠĠĠĠĠ Ġa ur ora Config Service . save File ( new File , Ġupdated A ur ora Config , Ġref ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠfindAll A ur ora Config Names () Ġ= Ġa ur ora Config Service . findAll A ur ora Config Names () ĊĊĠĠĠ Ġfun Ġsearch For Applications ( ref Name : ĠString , Ġenvironment : ĠString ): ĠList < Application SearchResult > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . findAll A ur ora Config Names (). parallel Map Ġ{ Ġaff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Ġ= ĠA ur ora Config Ref ( aff , Ġref Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . find A ur ora Deployment Spec For Environment ( ref , Ġenvironment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cluster Ġ== Ġ" ut v " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Deployment Ref Ġ= Ġit . application Deployment Ref . to Ad r () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication SearchResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaffili ation Ġ= Ġaff , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Deploy Ġ= Ġit . env Auto Deploy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Deployment Ref Ġ= Ġapplication Deployment Ref , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarning Message Ġ= Ġif Ġ( application Deployment Ref . environment Ġ!= Ġit . env Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Environment Ġname Ġis Ġoverwritten Ġin Ġconfig Ġfile . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Application Deployment Ref . environment : Ġ${ application Deployment Ref . environment }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A ur ora Deployment Spec . env Name : Ġ${ it . env Name }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Application SearchResult ( aff iliation Ġ= Ġaff , ĠerrorMessage Ġ= Ġe . message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. flatten () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ JsonInclude ( JsonInclude . Include . NON _ NULL ) Ċ data Ġclass ĠApplication SearchResult ( ĊĠĠĠ Ġval Ġaffili ation : ĠString , ĊĠĠĠ Ġval Ġauto Deploy : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġapplication Deployment Ref : ĠApplication Deployment Ref ? Ġ= Ġnull , ĊĠĠĠ Ġval ĠerrorMessage : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġwarning Message : ĠString ? Ġ= Ġnull Ċ ) Ċ