summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MailerException.java14
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java10
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/ProjectInfo.java31
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java21
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java6
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java2
8 files changed, 88 insertions, 6 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
index fe7beb538da..68ebc5e86aa 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
@@ -20,6 +20,6 @@ public class NodeRepoStats {
public Load load() { return load; }
public Load activeLoad() { return activeLoad; }
- public List<ApplicationStats> applicationStats() { return applicationStats; }
+ public List<ApplicationStats> applicationStats() { return applicationStats; }
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java
index 6ee5b5a314f..dc8b22ac32d 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java
@@ -100,4 +100,12 @@ public interface IssueHandler {
*/
boolean issueExists(Issue issue);
+ /**
+ * Returns information about project identified by the project key
+ *
+ * @param projectKey The project key to find information for
+ * @return Project info for project
+ * @throws RuntimeException exception if project not found
+ */
+ ProjectInfo projectInfo(String projectKey);
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MailerException.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MailerException.java
new file mode 100644
index 00000000000..0febc296fc8
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MailerException.java
@@ -0,0 +1,14 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.organization;
+
+/**
+ * MailerException wrap all possible Mailer implementation exceptions
+ *
+ * @author enygaard
+ */
+public class MailerException extends RuntimeException {
+
+ public MailerException(Throwable ex) {
+ super(ex);
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java
index 021f05f4d1f..257d2ff5e67 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java
@@ -24,6 +24,7 @@ public class MockIssueHandler implements IssueHandler {
private final Clock clock;
private final AtomicLong counter = new AtomicLong();
private final Map<IssueId, MockIssue> issues = new HashMap<>();
+ private final Map<String, ProjectInfo> projects = new HashMap<>();
@Inject
@SuppressWarnings("unused")
@@ -112,6 +113,11 @@ public class MockIssueHandler implements IssueHandler {
return issues.values().stream().anyMatch(i -> i.issue.summary().equals(issue.summary()));
}
+ @Override
+ public ProjectInfo projectInfo(String projectKey) {
+ return projects.get(projectKey);
+ }
+
public MockIssueHandler close(IssueId issueId) {
issues.get(issueId).open = false;
touch(issueId);
@@ -137,6 +143,10 @@ public class MockIssueHandler implements IssueHandler {
issues.get(issueId).updated = clock.instant();
}
+ public void addProject(String projectKey, ProjectInfo projectInfo) {
+ projects.put(projectKey, projectInfo);
+ }
+
private static class PropertyInfo {
private List<List<User>> contacts = Collections.emptyList();
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/ProjectInfo.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/ProjectInfo.java
new file mode 100644
index 00000000000..8bf2ebfd092
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/ProjectInfo.java
@@ -0,0 +1,31 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.organization;
+
+import java.util.Map;
+
+/**
+ * @author jvenstad
+ * @author mortent
+ */
+public class ProjectInfo {
+
+ private final String id;
+ private final Map<String, String> componentIds;
+
+ public ProjectInfo(String id, Map<String, String> componentIds) {
+ this.id = id;
+ this.componentIds = componentIds;
+ }
+
+ public boolean hasComponent(String component) {
+ return componentIds.containsKey(component);
+ }
+
+ public String id() {
+ return id;
+ }
+
+ public Map<String, String> componentIds() {
+ return componentIds;
+ }
+} \ No newline at end of file
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java
index 6050f238da7..cb2b76d845c 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java
@@ -12,9 +12,25 @@ import java.util.Map;
public class MockMailer implements Mailer {
public final Map<String, List<Mail>> mails = new HashMap<>();
+ public final boolean blackhole;
+
+ public MockMailer() {
+ this(false);
+ }
+
+ MockMailer(boolean blackhole) {
+ this.blackhole = blackhole;
+ }
+
+ public static MockMailer blackhole() {
+ return new MockMailer(true);
+ }
@Override
public void send(Mail mail) {
+ if (blackhole) {
+ return;
+ }
for (String recipient : mail.recipients()) {
mails.putIfAbsent(recipient, new ArrayList<>());
mails.get(recipient).add(mail);
@@ -33,7 +49,10 @@ public class MockMailer implements Mailer {
/** Returns the list of mails sent to the given recipient. Modifications affect the set of mails stored in this. */
public List<Mail> inbox(String recipient) {
- return mails.get(recipient);
+ return mails.getOrDefault(recipient, List.of());
}
+ public void reset() {
+ mails.clear();
+ }
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
index 30a086a59a0..cc667175316 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
@@ -238,11 +238,11 @@ enum PathGroup {
horizonProxy("/horizon/v1/{*}"),
/** Paths used to list and request access to tenant resources */
- accessRequests(Matcher.tenant, "/application/v4/tenant/{tenant}/access/request/{*}"),
+ accessRequests(Matcher.tenant, "/application/v4/tenant/{tenant}/access/request/operator"),
/** Paths used to approve requests to access tenant resources */
- accessRequestApproval(Matcher.tenant, "/application/v4/tenant/{tenant}/access/approve/{*}",
- "/application/v4/tenant/{tenant}/access/managed/{*}");
+ accessRequestApproval(Matcher.tenant, "/application/v4/tenant/{tenant}/access/approve/operator",
+ "/application/v4/tenant/{tenant}/access/managed/operator");
final List<String> pathSpecs;
final List<Matcher> matchers;
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java
index 4d9a16c34f0..afecbf9d2e3 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java
@@ -190,7 +190,7 @@ enum Policy {
accessRequests(Privilege.grant(Action.all())
.on(PathGroup.accessRequests, PathGroup.accessRequestApproval)
- .in(SystemName.PublicCd)),
+ .in(SystemName.PublicCd, SystemName.Public)),
/** Invoice management */
hostedAccountant(Privilege.grant(Action.all())