package Ġio . data wire . loom ctl ĊĊ Ċ import Ġio . data wire . loom . core . Json Ċ import Ġio . data wire . loom . core . Yaml Ċ import Ġio . data wire . loom . persistence . Filesystem Dao Ċ import Ġio . data wire . loom . terraform . Difference Ċ import Ġnet . sourceforge . arg parse 4 j . inf . ArgumentParser Ċ import Ġnet . sourceforge . arg parse 4 j . inf . ArgumentParser Exception Ċ import Ġnet . sourceforge . arg parse 4 j . inf . Namespace Ċ import Ġorg . eclipse . j git . api . Git Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . system . exit Process Ċ Ċ private Ġval Ġlo om ctl Content Root ĠĠ Ġ= ĠPaths . get ( System . getProperty (" user . home "), Ġ". loom ctl ") Ċ private Ġval Ġlo om ctl External Tools Ġ= Ġlo om ctl Content Root . resolve (" bin ") Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ Ġdownload Tools ( loom ctl External Tools ) ĊĊĠ Ġget Workspace () ĊĠĠĠĠĠ Ġ? . let Ġ{ Ġws Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfig Workspace ( clone Git ( ws . config . config Repository Url )) ĊĠĠĠĠĠĠĠ Ġval Ġarg Parser Ġ= Ġcreate Arg Parser ( ws , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Command ( arg Parser . parse Args ( args )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ape : ĠArgument Parser Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġarg Parser . handleError ( ape ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ?: Ġhandle Workspace NotFound () Ċ } Ċ Ċ private Ġfun Ġprocess Command ( namespace : ĠNamespace ) Ġ{ ĊĠ Ġprintln ("-- ĠDEBUG Ġ=> Ġ$ namespace ") ĊĊĠ Ġval Ġworkspace Ġ= Ġnamespace . get < Workspace >(" workspace ") ĊĊĠ Ġval Ġconfig Dao Ġ= ĠFile system Dao ( namespace . get < Config Workspace >(" config "). path ) ĊĠ Ġval Ġfabric Dao Ġ= ĠFile system Dao ( workspace . path ) ĊĊĠ Ġval Ġlo om Repo Ġ= ĠL oom Repository ( config Dao , Ġfabric Dao , ĠJson (), ĠYaml ()) ĊĊĠ Ġlo om Repo . get Backing Resource Model ByName (" rds - postgresql - standalone - v 1 ") ĊĊĠ Ġwhen ( namespace . getString (" command ")) Ġ{ ĊĠĠĠ Ġ" plan " Ġ-> Ġ{ ĊĠĠĠĠĠ Ġval Ġfabric Name Ġ= Ġnamespace . getString (" name ") ĊĠĠĠĠĠ Ġval Ġfabric Workspace Ġ= ĠFabric Workspace ( workspace . resolve (" fab r ics /$ fabric Name ")) ĊĠĠĠĠĠ Ġval Ġtf Ġ= ĠTerraform . new T erraform ( fabric Workspace ) ĊĠĠĠĠĠ Ġval Ġplan Ġ= Ġtf . plan () ĊĠĠĠĠĠ Ġprintln ( plan ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" apply " ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠ Ġval Ġfabric Name Ġ= Ġnamespace . getString (" name ") ĊĠĠĠĠĠ Ġval Ġfabric Workspace Ġ= ĠFabric Workspace ( workspace . resolve (" fab r ics /$ fabric Name ")) ĊĠĠĠĠĠ Ġval Ġtf Ġ= ĠTerraform . new T erraform ( fabric Workspace ) ĊĠĠĠĠĠ Ġval Ġplan Ġ= Ġtf . plan () ĊĠĠĠĠĠ Ġwhen ( plan ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠD ifference Ġ-> Ġtf . apply ( plan ) ĊĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ Ġprintln ( plan ) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" create - fabric " ĠĠĠĠĠĠĠĠĠ Ġ-> Ġcreate Fabric ( namespace ) ĊĠĠĠ Ġ" delete - fabric " ĠĠĠĠĠĠĠĠĠ Ġ-> Ġdelete Fabric ( namespace ) ĊĠĠĠ Ġ" get - back ing - service - model " Ġ-> Ġ{ ĊĠĠĠĠĠ Ġval Ġmodel Name Ġ= Ġnamespace . getString (" name ") ĊĠĠĠĠĠ Ġval Ġmsg Ġ= Ġlo om Repo . get Backing Resource Model ByName ( model Name ) Ġ?: Ġ" back ing Ġservice Ġmodel Ġnot Ġfound : Ġ$ model Name " ĊĠĠĠĠĠ Ġprintln ( msg ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ" add - back ing - service " ĠĠĠ Ġ-> Ġ{} ĊĠĠĠ Ġ" remove - back ing - service " Ġ-> Ġ{} ĊĠĠĠ Ġ" get - cluster - kube config " Ġ-> Ġget Cluster Kube config ( namespace ) ĊĠĠĠ Ġ" get - cluster - status " ĠĠĠĠ Ġ-> Ġget Cluster Status ( namespace ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget Cluster Kube config ( ns : ĠNamespace ) Ġ{ ĊĠ Ġval Ġfabric Name Ġ= Ġns . getString (" name ") ĊĠ Ġval Ġworkspace Ġ Ġ= Ġns . get < Workspace >(" workspace ") ĊĊĠ Ġval Ġres Ġ= Ġworkspace . get Fabric Spec ( fabric Name )?. let Ġ{ Ġspec Ġ-> ĊĠĠĠ Ġval Ġk ops Ġ= ĠK ops . new K ops ( workspace . path , Ġworkspace . config . state Store ) ĊĠĠĠ Ġk ops . export Cluster Context ( spec . cluster Domain )?. let Ġ{ Ġkube config Ġ-> Ġprintln ( kube config ) Ġ} ĊĠ Ġ} Ġ?: Ġ" Fabric Ġnot Ġfound : Ġ$ fabric Name " ĊĊĠ Ġprintln ( res ) Ċ } Ċ Ċ private Ġfun Ġget Cluster Status ( ns : ĠNamespace ) Ġ{ ĊĠ Ġval Ġfabric Name Ġ= Ġns . getString (" name ") ĊĠ Ġval Ġworkspace Ġ Ġ= Ġns . get < Workspace >(" workspace ") ĊĊĠ Ġworkspace . get Fabric Spec ( fabric Name )?. let Ġ{ Ġspec Ġ-> ĊĠĠĠ Ġval Ġk ops Ġ= ĠK ops . new K ops ( workspace . path , Ġworkspace . config . state Store ) ĊĠĠĠ Ġk ops . export Cluster Context ( spec . cluster Domain )?. let Ġ{ Ġkube config Ġ-> ĊĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġdelete Fabric ( ns : ĠNamespace ) Ġ{ ĊĠ Ġval Ġfabric Name Ġ= Ġns . getString (" name ") ĊĠ Ġval Ġworkspace Ġ Ġ= Ġns . get < Workspace >(" workspace ") ĊĊĠ Ġif Ġ( workspace . is Fabric ( fabric Name )) Ġ{ ĊĠĠĠ Ġprintln (" Fabric Ġnamed Ġ'$ fabric Name ' Ġfound . ĠDe leting Ġconfiguration ...") ĊĠĠĠ Ġworkspace . delete Fabric ( fabric Name ) ĊĠĠĠ Ġprintln (" Fabric Ġnamed Ġ'$ fabric Name ' Ġremoved . ĠCommit Ġand Ġpush Ġchanges Ġto ĠGit Ġto Ġcomplete Ġthe Ġoperation .") ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġprintln (" Fabric Ġnamed Ġ'$ fabric Name ' Ġnot Ġfound . ĠNo Ġwork Ġto Ġperform Ġand Ġno Ġfurther Ġuser Ġinteraction Ġis Ġrequired .") ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcreate Fabric ( ns : ĠNamespace ) Ġ{ ĊĠ Ġval Ġfabric Name Ġ Ġ= Ġns . getString (" name ") ĊĠ Ġval Ġworkspace ĠĠ Ġ= Ġns . get < Workspace >(" workspace ") ĊĠ Ġval Ġconfig Ws ĠĠĠ Ġ= Ġns . get < Config Workspace >(" config ") ĊĊĠ Ġval Ġfabric Model Ġ= Ġns . getString (" model ") ĊĊĠ Ġif Ġ( fabric Model Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġprintln (" Fabric Ġmodel Ġnot Ġconfigured . ĠEither Ġpass Ġin Ġ-- model Ġor Ġset Ġdefault Ġin Ġlo om . json ") ĊĠĠĠ Ġexit Process ( 1 ) ĊĠ Ġ} ĊĊĠ Ġif Ġ(! config Ws . is Fabric Model ( fabric Model )) Ġ{ ĊĠĠĠ Ġprintln (" Fabric Ġmodel Ġnamed Ġ'$ fabric Model ' Ġdoes Ġnot Ġexist .") ĊĠĠĠ Ġexit Process ( 1 ) ĊĠ Ġ} ĊĊĠ Ġif Ġ(! workspace . is Fabric ( fabric Name )) Ġ{ ĊĠĠĠ Ġprintln (" Fabric Ġnamed Ġ'$ fabric Name ' Ġnot Ġfound . ĠCreating Ġfabric Ġusing Ġconfiguration Ġmodel : Ġ$ fabric Model ") ĊĠĠĠ Ġworkspace . create Fabric ( fabric Name ) ĊĊĠĠĠ Ġprintln (" Fabric Ġnamed Ġ'$ fabric Name ' Ġconfigured . ĠCommit Ġand Ġpush Ġchanges Ġto ĠGit Ġto Ġcomplete Ġthe Ġoperation .") ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġprintln (" Fabric Ġnamed Ġ'$ fabric Name ' Ġfound . ĠNo Ġwork Ġto Ġperform Ġand Ġno Ġfurther Ġuser Ġinteraction Ġis Ġrequired .") ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġhandle Workspace NotFound () Ġ{ ĊĠ Ġprintln (" Lo om Ġworkspace Ġnot Ġfound Ġat Ġ'${ System . getProperty (" user . dir ") }'. ĠThe Ġlo om Ġworkspace Ġis Ġthe Ġdirectory Ġthat Ġcontains Ġa ĠL oom Ġconfig Ġ' loom . json '. ") ĊĠ ĠSystem . exit ( 1 ) Ċ } Ċ Ċ private Ġfun Ġclone Git ( repository Url : ĠString ): ĠPath Ġ{ ĊĠ Ġval Ġname Ġ= Ġrepository Url . substring After ("/ "). substring Before (".") ĊĠ Ġval Ġclone Path Ġ= ĠFiles . create Temp Directory ("$ name - ") ĊĊĠ Ġprintln (" Cl oning Ġrepository Ġ( from : Ġ$ repository Url , Ġinto : Ġ$ clone Path )") ĊĠ Ġval Ġclone Ġ= ĠGit . clone Repository () ĊĠĠĠĠĠ Ġ. set URI ( repository Url ) ĊĠĠĠĠĠ Ġ. set Directory ( clone Path . to File ()) ĊĠĠĠĠĠ Ġ. set Branch (" master ") ĊĊĠ Ġclone . call (). use Ġ{ Ġgit Ġ-> Ġgit . checkout (). setName (" master "). call () Ġ} ĊĊĠ Ġreturn Ġclone Path Ċ } Ċ Ċ private Ġfun Ġcreate Arg Parser ( workspace : ĠWorkspace , Ġconfig Workspace : ĠConfig Workspace ): ĠArgument Parser Ġ{ ĊĠ Ġval Ġparser Ġ= Ġnet . sourceforge . arg parse 4 j . Argument Parsers ĊĠĠĠĠĠ Ġ. new ArgumentParser (" loom ctl ") ĊĠĠĠĠĠ Ġ. description (" Manage ĠL oom Ġfabric Ġconfiguration ") ĊĊĠ Ġparser . apply Ġ{ ĊĠĠĠ Ġadd Argument ("-- workspace "). default Ġ= Ġworkspace ĊĠĠĠ Ġadd Argument ("-- config "). default ĠĠĠ Ġ= Ġconfig Workspace ĊĠ Ġ} ĊĊĠ Ġval Ġcommands Ġ= Ġparser . add Sub parsers (). dest (" command ") ĊĊĠ Ġval Ġapply Command Ġ= Ġcommands . add Parser (" apply "). apply Ġ{ ĊĠĠĠ Ġadd Argument (" name ") ĊĠ Ġ} ĊĊĠ Ġval Ġplan Command Ġ= Ġcommands . add Parser (" plan "). apply Ġ{ ĊĠĠĠ Ġadd Argument (" name ") ĊĠ Ġ} ĊĊĠ Ġval Ġdelete Command Ġ= Ġcommands . add Parser (" delete - fabric "). apply Ġ{ ĊĠĠĠ Ġadd Argument (" name ") ĊĠ Ġ} ĊĊĠ Ġval Ġcreate Command Ġ= Ġcommands . add Parser (" create - fabric "). apply Ġ{ ĊĠĠĠ Ġadd Argument (" name ") ĊĊĠĠĠ Ġadd Argument ("-- model ") ĊĠĠĠ ĠsetDefault (" model ", Ġworkspace . config . defaults [" fabric Model "]) ĊĠ Ġ} ĊĊĠ Ġval Ġget Backing ServiceModel Info Ġ= Ġcommands . add Parser (" get - back ing - service - model "). apply Ġ{ ĊĠĠĠ Ġadd Argument (" name ") ĊĠ Ġ} ĊĊĠ Ġval Ġcluster Status Ġ= Ġcommands . add Parser (" get - cluster - status "). apply Ġ{ Ġadd Argument (" name ") Ġ} ĊĠ Ġval Ġcluster Config Ġ= Ġcommands . add Parser (" get - cluster - kube config "). apply Ġ{ Ġadd Argument (" name ") Ġ} ĊĊĠ Ġval Ġadd Backing Service Ġ= Ġcommands . add Parser (" add - back ing - service "). apply Ġ{ Ġadd Argument (" name ") Ġ} ĊĠ Ġval Ġremove Backing Service Ġ= Ġcommands . add Parser (" remove - back ing - service "). apply Ġ{ Ġadd Argument (" name ") Ġ} ĊĊĠ Ġreturn Ġparser Ċ } ĊĊ