summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2020-02-28 10:42:29 +0100
committerGitHub <noreply@github.com>2020-02-28 10:42:29 +0100
commite9bd3c234bfe4529befabf81b39cc802f7434abb (patch)
treea5c9f308f9a3b2b0706df708c0502dfc2d91543a
parentc192a5997f8e65c8a8d51e3e42442a39b5f5e187 (diff)
parent4fd3f9276e3c9368cc00dc02eec2820e67df822b (diff)
Merge pull request #12369 from vespa-engine/gjoranv/new-services-syntax
Gjoranv/new services syntax
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/builder/xml/XmlHelper.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/CloudWatch.java22
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/CloudWatchBuilder.java24
-rw-r--r--config-model/src/main/resources/schema/admin.rnc14
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/TelegrafTest.java12
-rw-r--r--config-model/src/test/schema-test-files/services.xml9
-rw-r--r--metrics-proxy/src/main/resources/configdefinitions/telegraf.def1
8 files changed, 60 insertions, 31 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/builder/xml/XmlHelper.java b/config-model/src/main/java/com/yahoo/config/model/builder/xml/XmlHelper.java
index a9677d4b34c..4cd0c1815dd 100644
--- a/config-model/src/main/java/com/yahoo/config/model/builder/xml/XmlHelper.java
+++ b/config-model/src/main/java/com/yahoo/config/model/builder/xml/XmlHelper.java
@@ -133,6 +133,11 @@ public final class XmlHelper {
return Optional.ofNullable(element.getAttribute(name)).filter(s -> !s.isEmpty());
}
+ public static Optional<Element> getOptionalChild(Element parent, String childName) {
+ return Optional.ofNullable(XML.getChild(parent, childName));
+
+ }
+
public static Optional<String> getOptionalChildValue(Element parent, String childName) {
Element child = XML.getChild(parent, childName);
if (child == null) return Optional.empty();
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
index 9c68b3eb28a..a1ec308c808 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
@@ -190,7 +190,9 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC
cloudWatch.hostedAuth().ifPresent(hostedAuth -> cloudWatchBuilder
.accessKeyName(hostedAuth.accessKeyName)
.secretKeyName(hostedAuth.secretKeyName));
- cloudWatch.profile().ifPresent(cloudWatchBuilder::profile);
+ cloudWatch.sharedCredentials().ifPresent(sharedCredentials -> cloudWatchBuilder
+ .profile(sharedCredentials.profile)
+ .file(sharedCredentials.file));
builder.cloudWatch(cloudWatchBuilder);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/CloudWatch.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/CloudWatch.java
index fd290409ea5..0f3543d3c36 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/CloudWatch.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/CloudWatch.java
@@ -13,7 +13,7 @@ public class CloudWatch {
private final MetricsConsumer consumer;
private HostedAuth hostedAuth;
- private String profile;
+ private SharedCredentials sharedCredentials;
public CloudWatch(String region, String namespace, MetricsConsumer consumer) {
this.region = region;
@@ -26,14 +26,14 @@ public class CloudWatch {
public String consumer() { return consumer.getId(); }
public Optional<HostedAuth> hostedAuth() {return Optional.ofNullable(hostedAuth); }
- public Optional<String> profile() { return Optional.ofNullable(profile); }
+ public Optional<SharedCredentials> sharedCredentials() {return Optional.ofNullable(sharedCredentials); }
- public void setHostedAuth(HostedAuth hostedAuth) {
- this.hostedAuth = hostedAuth;
+ public void setHostedAuth(String accessKeyName, String secretKeyName) {
+ hostedAuth = new HostedAuth(accessKeyName, secretKeyName);
}
- public void setProfile(String profile) {
- this.profile = profile;
+ public void setSharedCredentials(String profile, String file) {
+ sharedCredentials = new SharedCredentials(profile, file);
}
public static class HostedAuth {
@@ -46,4 +46,14 @@ public class CloudWatch {
}
}
+ public static class SharedCredentials {
+ public final String profile;
+ public final String file;
+
+ public SharedCredentials(String profile, String file) {
+ this.profile = profile;
+ this.file = file;
+ }
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/CloudWatchBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/CloudWatchBuilder.java
index 4b9d5542aa9..5ce941d6638 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/CloudWatchBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/CloudWatchBuilder.java
@@ -5,7 +5,7 @@ import com.yahoo.vespa.model.admin.monitoring.CloudWatch.HostedAuth;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import org.w3c.dom.Element;
-import static com.yahoo.config.model.builder.xml.XmlHelper.getOptionalChildValue;
+import static com.yahoo.config.model.builder.xml.XmlHelper.getOptionalChild;
/**
* @author gjoranv
@@ -14,22 +14,26 @@ public class CloudWatchBuilder {
private static final String REGION_ATTRIBUTE = "region";
private static final String NAMESPACE_ATTRIBUTE = "namespace";
- private static final String ACCESS_KEY_ELEMENT = "access-key-name";
- private static final String SECRET_KEY_ELEMENT = "secret-key-name";
- private static final String PROFILE_ELEMENT = "profile";
+ private static final String CREDENTIALS_ELEMENT = "credentials";
+ private static final String ACCESS_KEY_ATTRIBUTE = "access-key-name";
+ private static final String SECRET_KEY_ATTRIBUTE = "secret-key-name";
+ private static final String SHARED_CREDENTIALS_ELEMENT = "shared-credentials";
+ private static final String PROFILE_ATTRIBUTE = "profile";
+ private static final String FILE_ATTRIBUTE = "file";
public static CloudWatch buildCloudWatch(Element cloudwatchElement, MetricsConsumer consumer) {
CloudWatch cloudWatch = new CloudWatch(cloudwatchElement.getAttribute(REGION_ATTRIBUTE),
cloudwatchElement.getAttribute(NAMESPACE_ATTRIBUTE),
consumer);
- getOptionalChildValue(cloudwatchElement, PROFILE_ELEMENT).ifPresent(cloudWatch::setProfile);
+ getOptionalChild(cloudwatchElement, CREDENTIALS_ELEMENT)
+ .ifPresent(elem -> cloudWatch.setHostedAuth(elem.getAttribute(ACCESS_KEY_ATTRIBUTE),
+ elem.getAttribute(SECRET_KEY_ATTRIBUTE)));
+
+ getOptionalChild(cloudwatchElement, SHARED_CREDENTIALS_ELEMENT)
+ .ifPresent(elem -> cloudWatch.setSharedCredentials(elem.getAttribute(PROFILE_ATTRIBUTE),
+ elem.getAttribute(FILE_ATTRIBUTE)));
- getOptionalChildValue(cloudwatchElement, ACCESS_KEY_ELEMENT)
- .ifPresent(accessKey -> cloudWatch.setHostedAuth(
- new HostedAuth(accessKey,
- getOptionalChildValue(cloudwatchElement, SECRET_KEY_ELEMENT)
- .orElseThrow(() -> new IllegalArgumentException("Access key given without a secret key.")))));
return cloudWatch;
}
diff --git a/config-model/src/main/resources/schema/admin.rnc b/config-model/src/main/resources/schema/admin.rnc
index e3ba7dc500d..f4585b3cf3f 100644
--- a/config-model/src/main/resources/schema/admin.rnc
+++ b/config-model/src/main/resources/schema/admin.rnc
@@ -91,14 +91,16 @@ Cloudwatch = element cloudwatch {
attribute region { xsd:Name } &
attribute namespace { xsd:string { pattern = "[\w_\-/#:\.]+" } } &
(
- (
- element access-key-name { xsd:Name } &
- element secret-key-name { xsd:Name }
- )
+ element credentials {
+ attribute access-key-name { xsd:Name } &
+ attribute secret-key-name { xsd:Name }
+ }
|
- element profile { xsd:Name }
+ element shared-credentials {
+ attribute profile { xsd:Name } &
+ attribute file { string }?
+ }
)?
-
}
ClusterControllers = element cluster-controllers {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/TelegrafTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/TelegrafTest.java
index dbcbad7bf49..9be94e4198e 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/TelegrafTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/TelegrafTest.java
@@ -14,6 +14,7 @@ import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
/**
* @author gjoranv
@@ -53,6 +54,7 @@ public class TelegrafTest {
String services = servicesWithCloudwatch();
VespaModel hostedModel = getModel(services, hosted);
TelegrafConfig config = hostedModel.getConfig(TelegrafConfig.class, CLUSTER_CONFIG_ID);
+ assertTrue(config.isHostedVespa());
var cloudWatch0 = config.cloudWatch(0);
assertEquals("cloudwatch-consumer", cloudWatch0.consumer());
@@ -72,8 +74,8 @@ public class TelegrafTest {
" <consumer id='cloudwatch-consumer'>",
" <metric id='my-metric'/>",
" <cloudwatch region='us-east-1' namespace='my-namespace' >",
- " <access-key-name>my-access-key</access-key-name>",
- " <secret-key-name>my-secret-key</secret-key-name>",
+ " <credentials access-key-name='my-access-key' ",
+ " secret-key-name='my-secret-key' />",
" </cloudwatch>",
" </consumer>",
" </metrics>",
@@ -92,11 +94,11 @@ public class TelegrafTest {
" <consumer id='cloudwatch-consumer'>",
" <metric id='my-metric'/>",
" <cloudwatch region='us-east-1' namespace='namespace-1' >",
- " <access-key-name>access-key-1</access-key-name>",
- " <secret-key-name>secret-key-1</secret-key-name>",
+ " <credentials access-key-name='access-key-1' ",
+ " secret-key-name='secret-key-1' />",
" </cloudwatch>",
" <cloudwatch region='us-east-1' namespace='namespace-2' >",
- " <profile>profile-2</profile>",
+ " <shared-credentials profile='profile-2' />",
" </cloudwatch>",
" </consumer>",
" </metrics>",
diff --git a/config-model/src/test/schema-test-files/services.xml b/config-model/src/test/schema-test-files/services.xml
index 604e2abbbae..0c395fedb96 100644
--- a/config-model/src/test/schema-test-files/services.xml
+++ b/config-model/src/test/schema-test-files/services.xml
@@ -15,26 +15,29 @@
<slobrok hostalias="rtc-1" />
</slobroks>
<metrics>
+
<consumer id="cloudwatch-hosted">
<metric-set id="my-set" />
<metric id="my-metric"/>
<metric id="my-metric2" display-name="my-metric3"/>
<metric display-name="my-metric4" id="my-metric4.avg"/>
<cloudwatch region="us-east1" namespace="my-namespace">
- <access-key-name>my-access-key</access-key-name>
- <secret-key-name>my-secret-key</secret-key-name>
+ <credentials access-key-name="my-access-key" secret-key-name="my-secret-key" />
</cloudwatch>
</consumer>
+
<consumer id="cloudwatch-self-hosted-with-default-auth">
<metric-set id="public" />
<cloudwatch region="us-east1" namespace="namespace_legal.chars:/#1" />
</consumer>
+
<consumer id="cloudwatch-self-hosted-with-profile">
<metric id="my-custom-metric" />
<cloudwatch region="us-east1" namespace="another-namespace">
- <profile>profile-in-credentials-file</profile>
+ <shared-credentials profile="profile-in-credentials-file" file="/user/.aws/credentials"/>
</cloudwatch>
</consumer>
+
</metrics>
<logforwarding>
<splunk deployment-server="foo:8989" client-name="foobar" splunk-home="/opt/splunk" phone-home-interval="900"/>
diff --git a/metrics-proxy/src/main/resources/configdefinitions/telegraf.def b/metrics-proxy/src/main/resources/configdefinitions/telegraf.def
index cb03ce6f1f6..8a87b92cd60 100644
--- a/metrics-proxy/src/main/resources/configdefinitions/telegraf.def
+++ b/metrics-proxy/src/main/resources/configdefinitions/telegraf.def
@@ -19,3 +19,4 @@ cloudWatch[].secretKeyName string default=""
# Only valid and optional for self-hosted Vespa
cloudWatch[].profile string default=""
+cloudWatch[].file string default=""