@@ -7,12 +7,12 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder
77import ch.qos.logback.classic.spi.ILoggingEvent
88import ch.qos.logback.core.ConsoleAppender
99import com.cloudogu.gitops.Application
10+ import com.cloudogu.gitops.Feature
1011import com.cloudogu.gitops.config.ApplicationConfigurator
1112import com.cloudogu.gitops.config.Config
1213import com.cloudogu.gitops.config.schema.JsonSchemaValidator
1314import com.cloudogu.gitops.destroy.Destroyer
1415import com.cloudogu.gitops.utils.CommandExecutor
15- import com.cloudogu.gitops.utils.FeatureUtils
1616import com.cloudogu.gitops.utils.FileSystemUtils
1717import com.cloudogu.gitops.utils.K8sClient
1818import groovy.util.logging.Slf4j
@@ -21,9 +21,8 @@ import io.micronaut.context.ApplicationContext
2121import org.slf4j.LoggerFactory
2222import picocli.CommandLine
2323
24-
2524import static com.cloudogu.gitops.config.ConfigConstants.APP_NAME
26- import static com.cloudogu.gitops.utils.MapUtils.deepMerge
25+ import static com.cloudogu.gitops.utils.MapUtils.deepMerge
2726/**
2827 * Provides the entrypoint to the application as well as all config parameters.
2928 * When changing parameters, make sure to update the Config for the config file as well
@@ -75,7 +74,7 @@ class GitopsPlaygroundCli {
7574 config = applicationConfigurator. initConfig(config)
7675 log. debug(" Actual config: ${ config.toYaml(true)} " )
7776
78- FeatureUtils . runHook(app, ' postConfigValidation' , config)
77+ runHook(app, ' postConfigValidation' , config)
7978 register(config, context)
8079
8180 if (config. application. destroy) {
@@ -213,7 +212,7 @@ class GitopsPlaygroundCli {
213212 new CommandLine (mergedConfig). parseArgs(args)
214213
215214 def app = ApplicationContext . run(). getBean(Application )
216- FeatureUtils . runHook(app, ' preConfigValidation' , mergedConfig)
215+ runHook(app, ' preConfigValidation' , mergedConfig)
217216
218217 return mergedConfig
219218 }
@@ -245,4 +244,18 @@ class GitopsPlaygroundCli {
245244 |----------------------------------------------------------------------------------------------|
246245'''
247246 }
247+
248+ static void runHook (Application app , String methodName , def config ) {
249+
250+
251+
252+ app. features. each { feature ->
253+ // Executing only the method if the derived feature class has implemented the passed specific hook method
254+ def mm = feature. metaClass. getMetaMethod(methodName, config)
255+ if (mm && mm. declaringClass. theClass != Feature ) {
256+ log. debug(" Executing ${ methodName} hook on feature ${ feature.class.name} " )
257+ mm. invoke(feature, config)
258+ }
259+ }
260+ }
248261}
0 commit comments