summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2023-07-31 11:01:24 +0200
committerHåkon Hallingstad <hakon@yahooinc.com>2023-07-31 11:01:24 +0200
commit95ec5f8dc1480b1be93d16e01596d2f6b593a88d (patch)
tree0e7c242c1bb83375c11f90457d7f595f6ec52ebf /controller-api
parente32a2809bfc1a1302b2f66b5104d77f6d475c5dc (diff)
Add environment dimension
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/FlagsTarget.java6
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java2
-rw-r--r--controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java4
3 files changed, 10 insertions, 2 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/FlagsTarget.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/FlagsTarget.java
index b42b22d3eff..bad53620c81 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/FlagsTarget.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/FlagsTarget.java
@@ -23,6 +23,7 @@ import java.util.Optional;
import java.util.Set;
import static com.yahoo.vespa.flags.FetchVector.Dimension.CLOUD;
+import static com.yahoo.vespa.flags.FetchVector.Dimension.ENVIRONMENT;
import static com.yahoo.vespa.flags.FetchVector.Dimension.SYSTEM;
import static com.yahoo.vespa.flags.FetchVector.Dimension.ZONE_ID;
@@ -79,7 +80,7 @@ public interface FlagsTarget {
static String zoneFile(SystemName system, ZoneId zone) { return jsonFile(system.value() + "." + zone.environment().value() + "." + zone.region().value()); }
static String controllerFile(SystemName system) { return jsonFile(system.value() + ".controller"); }
- /** Partially resolve the system, cloud, and zone dimensions, except those dimensions defined by the flag for a controller zone. */
+ /** Partially resolve inter-zone dimensions, except those dimensions defined by the flag for a controller zone. */
static FlagData partialResolve(FlagData data, SystemName system, CloudName cloud, ZoneId virtualZoneId) {
Set<FetchVector.Dimension> flagDimensions =
virtualZoneId.equals(ZoneId.ofVirtualControllerZone()) ?
@@ -91,8 +92,9 @@ public interface FlagsTarget {
EnumSet.noneOf(FetchVector.Dimension.class);
var fetchVector = new FetchVector();
- if (!flagDimensions.contains(SYSTEM)) fetchVector = fetchVector.with(SYSTEM, system.value());
if (!flagDimensions.contains(CLOUD)) fetchVector = fetchVector.with(CLOUD, cloud.value());
+ if (!flagDimensions.contains(ENVIRONMENT)) fetchVector = fetchVector.with(ENVIRONMENT, virtualZoneId.environment().value());
+ if (!flagDimensions.contains(SYSTEM)) fetchVector = fetchVector.with(SYSTEM, system.value());
if (!flagDimensions.contains(ZONE_ID)) fetchVector = fetchVector.with(ZONE_ID, virtualZoneId.value());
return fetchVector.isEmpty() ? data : data.partialResolve(fetchVector);
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java
index 169387fd2ab..1c547fea8ba 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java
@@ -8,6 +8,7 @@ import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.SystemName;
@@ -253,6 +254,7 @@ public class SystemFlagsDataArchive {
});
case CLUSTER_ID -> validateStringValues(condition, ClusterSpec.Id::from);
case CLUSTER_TYPE -> validateStringValues(condition, ClusterSpec.Type::from);
+ case ENVIRONMENT -> validateStringValues(condition, Environment::from);
case HOSTNAME -> validateStringValues(condition, HostName::of);
case NODE_TYPE -> validateStringValues(condition, NodeType::valueOf);
case SYSTEM -> validateStringValues(condition, system -> {
diff --git a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java
index 655f31a96bd..a24bed54a8a 100644
--- a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java
+++ b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java
@@ -196,6 +196,9 @@ public class SystemFlagsDataArchiveTest {
normalizeJson("cluster-type", "\"container\"");
normalizeJson("cluster-type", "\"content\"");
normalizeJson("console-user-email", "\"name@domain.com\"");
+ normalizeJson("environment", "\"prod\"");
+ normalizeJson("environment", "\"staging\"");
+ normalizeJson("environment", "\"test\"");
normalizeJson("hostname", "\"2080046-v6-11.ostk.bm2.prod.gq1.yahoo.com\"");
normalizeJson("node-type", "\"tenant\"");
normalizeJson("node-type", "\"host\"");
@@ -239,6 +242,7 @@ public class SystemFlagsDataArchiveTest {
// failNormalizeJson("cluster-id", ... any String is valid
failNormalizeJson("cluster-type", "\"foo\"", "Illegal cluster type 'foo'");
failNormalizeJson("console-user-email", "123", "Non-string value in console-user-email whitelist condition: 123");
+ failNormalizeJson("environment", "\"foo\"", "'foo' is not a valid environment identifier");
failNormalizeJson("hostname", "\"not:a:hostname\"", "hostname must match '(([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])\\.?', but got: 'not:a:hostname'");
failNormalizeJson("node-type", "\"footype\"", "No enum constant com.yahoo.config.provision.NodeType.footype");
failNormalizeJson("system", "\"bar\"", "'bar' is not a valid system");