plugins { id 'org.opensearch.migrations.java-library-conventions' id "com.avast.gradle.docker-compose" version "0.16.12" id 'com.bmuschko.docker-remote-api' } import org.opensearch.migrations.common.CommonUtils import java.security.MessageDigest import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage import org.apache.tools.ant.taskdefs.condition.Os def getTrafficComparatorDirectory() { String overrideTrafficComparatorDirectory = System.getenv(TRAFFIC_COMPARATOR_DIRECTORY_ENV) String rval = overrideTrafficComparatorDirectory != null ? overrideTrafficComparatorDirectory : TRAFFIC_COMPARATOR_REPO_DIRECTORY; return rval } ext { TRAFFIC_COMPARATOR_REPO_DIRECTORY = "build/traffic-comparator" TRAFFIC_COMPARATOR_DIRECTORY_ENV = "TRAFFIC_COMPARATOR_DIRECTORY" REALIZED_TRAFFIC_COMPARATOR_DIRECTORY = project.file(getTrafficComparatorDirectory()) } def calculateDockerHash = { projectName -> CommonUtils.calculateDockerHash(projectName, project) } dependencies { implementation project(':trafficCaptureProxyServer') implementation project(':trafficReplayer') } task cloneComparatorRepoIfNeeded(type: Exec) { String comparatorDirectory = project.file(REALIZED_TRAFFIC_COMPARATOR_DIRECTORY); String repo = 'https://github.com/opensearch-project/traffic-comparator.git' onlyIf { !(new File(comparatorDirectory).exists()) } commandLine = Os.isFamily(Os.FAMILY_WINDOWS) ? ['git', 'clone', repo, TRAFFIC_COMPARATOR_REPO_DIRECTORY ] : ['/bin/sh', '-c', "git clone ${repo} ${TRAFFIC_COMPARATOR_REPO_DIRECTORY}"] } def dockerFilesForExternalServices = [ "elasticsearchWithSearchGuard": "elasticsearch_searchguard", "openSearchBenchmark": "open_search_benchmark" ] // Create the static docker files that aren't hosting migrations java code from this repo dockerFilesForExternalServices.each { projectName, dockerImageName -> task("buildDockerImage_${projectName}", type: DockerBuildImage) { def hash = calculateDockerHash(projectName) images.add("migrations/${dockerImageName}:$hash") images.add("migrations/${dockerImageName}:latest") inputDir = project.file("src/main/docker/${projectName}") } } def trafficComparatorServices = [ "trafficComparator": "traffic_comparator", "jupyterNotebook": "jupyter_notebook" ] trafficComparatorServices.forEach {projectName, dockerImageName -> def dockerBuildDir = "build/docker/${projectName}" task("copyArtifact_${projectName}", type: Copy) { dependsOn(tasks.getByName('cloneComparatorRepoIfNeeded')) from REALIZED_TRAFFIC_COMPARATOR_DIRECTORY into dockerBuildDir include '*.py' include '/traffic_comparator/*' if (projectName == 'jupyterNotebook') { include '*.ipynb' } } task "createDockerfile_${projectName}"(type: com.bmuschko.gradle.docker.tasks.image.Dockerfile) { dependsOn "copyArtifact_${projectName}" destFile = project.file("${dockerBuildDir}/Dockerfile") from 'python:3.10.10' runCommand("apt-get update && apt-get install -y netcat lsof") copyFile("setup.py", "/setup.py") copyFile(".", "/containerTC/") runCommand("pip3 install --editable \".[data]\"") // container stay-alive defaultCommand('tail', '-f', '/dev/null') } } def javaContainerServices = [ "trafficCaptureProxyServer": "capture_proxy", "trafficReplayer": "traffic_replayer" ] def baseImageProjectOverrides = [ "trafficCaptureProxyServer": "elasticsearchWithSearchGuard" ] javaContainerServices.each { projectName, dockerImageName -> def dockerBuildDir = "build/docker/${projectName}" def artifactsDir = "${dockerBuildDir}/jars"; CommonUtils.copyArtifact(project, projectName) CommonUtils.createDockerfile(project, projectName, baseImageProjectOverrides, dockerFilesForExternalServices) } (javaContainerServices + trafficComparatorServices).forEach { projectName, dockerImageName -> def dockerBuildDir = "build/docker/${projectName}" task "buildDockerImage_${projectName}"(type: DockerBuildImage) { dependsOn "createDockerfile_${projectName}" inputDir = project.file("${dockerBuildDir}") images.add("migrations/${dockerImageName}:${version}") images.add("migrations/${dockerImageName}:latest") } } dockerCompose { String overrideTrafficComparatorDirectory = System.getenv(TRAFFIC_COMPARATOR_DIRECTORY_ENV) if (overrideTrafficComparatorDirectory == null) { environment.put(TRAFFIC_COMPARATOR_DIRECTORY_ENV, REALIZED_TRAFFIC_COMPARATOR_DIRECTORY) exposeAsEnvironment(this) } useComposeFiles.add("src/main/docker/docker-compose.yml") } task buildDockerImages { dependsOn buildDockerImage_elasticsearchWithSearchGuard dependsOn buildDockerImage_openSearchBenchmark dependsOn buildDockerImage_trafficCaptureProxyServer dependsOn buildDockerImage_trafficReplayer dependsOn buildDockerImage_trafficComparator dependsOn buildDockerImage_jupyterNotebook } tasks.getByName('composeUp') .dependsOn(tasks.getByName('buildDockerImages')) .dependsOn(tasks.getByName('cloneComparatorRepoIfNeeded'))