diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2023-07-31 11:01:24 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2023-07-31 11:01:24 +0200 |
commit | 95ec5f8dc1480b1be93d16e01596d2f6b593a88d (patch) | |
tree | 0e7c242c1bb83375c11f90457d7f595f6ec52ebf /controller-api | |
parent | e32a2809bfc1a1302b2f66b5104d77f6d475c5dc (diff) |
Add environment dimension
Diffstat (limited to 'controller-api')
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"); |