/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.elasticsearch.gradle.MavenFilteringHack import org.elasticsearch.gradle.info.BuildParams import org.elasticsearch.gradle.test.AntFixture import org.elasticsearch.gradle.test.RestIntegTestTask import org.elasticsearch.gradle.test.rest.YamlRestTestPlugin import static org.elasticsearch.gradle.PropertyNormalization.IGNORE_VALUE apply plugin: 'elasticsearch.yaml-rest-test' dependencies { yamlRestTestImplementation project(':plugins:discovery-ec2') } restResources { restApi { includeCore '_common', 'cluster', 'nodes' } } final int ec2NumberOfNodes = 3 Map expansions = [ 'expected_nodes': ec2NumberOfNodes ] processYamlRestTestResources { inputs.properties(expansions) MavenFilteringHack.filter(it, expansions) } // disable default yamlRestTest task, use spezialized ones below yamlRestTest.enabled = false /* * Test using various credential providers (see also https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/credentials.html): * - Elasticsearch Keystore (secure settings discovery.ec2.access_key and discovery.ec2.secret_key) * - Java system properties (aws.accessKeyId and aws.secretAccessKey) * - Environment variables (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY) * - ECS container credentials (loaded from ECS if the environment variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI is set) * - Instance profile credentials (delivered through the EC2 metadata service) * * Notably missing is a test for the default credential profiles file, which is located at ~/.aws/credentials and would at least require a * custom Java security policy to work. */ ['KeyStore', 'EnvVariables', 'SystemProperties', 'ContainerCredentials', 'InstanceProfile'].forEach { action -> AntFixture fixture = tasks.create(name: "ec2Fixture${action}", type: AntFixture) { dependsOn project.sourceSets.yamlRestTest.runtimeClasspath env 'CLASSPATH', "${-> project.sourceSets.yamlRestTest.runtimeClasspath.asPath}" executable = "${BuildParams.runtimeJavaHome}/bin/java" args 'org.elasticsearch.discovery.ec2.AmazonEC2Fixture', baseDir, "${buildDir}/testclusters/yamlRestTest${action}-1/config/unicast_hosts.txt" } tasks.create(name: "yamlRestTest${action}", type: RestIntegTestTask) { dependsOn fixture } SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); SourceSet yamlRestTestSourceSet = sourceSets.getByName(YamlRestTestPlugin.SOURCE_SET_NAME) "yamlRestTest${action}" { setTestClassesDirs(yamlRestTestSourceSet.getOutput().getClassesDirs()) setClasspath(yamlRestTestSourceSet.getRuntimeClasspath()) } check.dependsOn("yamlRestTest${action}") testClusters."yamlRestTest${action}" { numberOfNodes = ec2NumberOfNodes plugin ':plugins:discovery-ec2' setting 'discovery.seed_providers', 'ec2' setting 'network.host', '_ec2_' setting 'discovery.ec2.endpoint', { "http://${-> fixture.addressAndPort}" }, IGNORE_VALUE systemProperty "com.amazonaws.sdk.ec2MetadataServiceEndpointOverride", { "http://${-> fixture.addressAndPort}" }, IGNORE_VALUE } } // Extra config for KeyStore testClusters.yamlRestTestKeyStore { keystore 'discovery.ec2.access_key', 'ec2_integration_test_access_key' keystore 'discovery.ec2.secret_key', 'ec2_integration_test_secret_key' } // Extra config for EnvVariables testClusters.yamlRestTestEnvVariables { environment 'AWS_ACCESS_KEY_ID', 'ec2_integration_test_access_key' environment 'AWS_SECRET_ACCESS_KEY', 'ec2_integration_test_secret_key' } // Extra config for SystemProperties testClusters.yamlRestTestSystemProperties { systemProperty 'aws.accessKeyId', 'ec2_integration_test_access_key' systemProperty 'aws.secretKey', 'ec2_integration_test_secret_key' } // Extra config for ContainerCredentials ec2FixtureContainerCredentials.env 'ACTIVATE_CONTAINER_CREDENTIALS', true testClusters.yamlRestTestContainerCredentials { environment 'AWS_CONTAINER_CREDENTIALS_FULL_URI', { "http://${-> tasks.findByName("ec2FixtureContainerCredentials").addressAndPort}/ecs_credentials_endpoint" }, IGNORE_VALUE } // Extra config for InstanceProfile ec2FixtureInstanceProfile.env 'ACTIVATE_INSTANCE_PROFILE', true