import groovy.json.JsonOutput import groovy.json.JsonSlurper def owHome = System.getenv("OPENWHISK_HOME") assert owHome : "Cannot determine OpenWhisk home via environment variable 'OPENWHISK_HOME'" def containerNames = 'docker ps --format {{.Names}}'.execute().text.split("\n") def transformEnvScript = "/bin/bash $owHome/common/scala/transformEnvironment.sh" def text = ''' ''' def meta = [ controller : [main:"whisk.core.controller.Controller"], invoker : [main:"whisk.core.invoker.Invoker"] ] containerNames.each{cn -> if (cn.contains("controller") || cn.contains("invoker")){ def type = cn.contains("controller") ? "controller" : "invoker" def inspectResult = "docker inspect $cn".execute().text def json = new JsonSlurper().parseText(inspectResult) def mappedPort = json.'NetworkSettings'.'Ports'.'8080/tcp'[0].'HostPort' def env = json[0].'Config'.'Env' def envMap = env.collectEntries {String e -> def eqIndex = e.indexOf('=') def k = e.substring(0, eqIndex) def v = e.substring(eqIndex + 1).replace('"', '"') if (k == 'PORT') {v = mappedPort} [(k):v] } def sysProps = transformEnvScript.execute(env, new File(".")).text sysProps = sysProps.replace('\'','') def templateBinding = [ main: meta[type].main, type:type, name:cn, env: envMap, sysProps : sysProps, USER_HOME : '$USER_HOME$' ] def engine = new groovy.text.SimpleTemplateEngine() def template = engine.createTemplate(text).make(templateBinding) def launchFile = new File("$owHome/.idea/runConfigurations/${cn}.xml") launchFile.parentFile.mkdirs() launchFile.text = template println "Created ${launchFile.absolutePath}" } }