Skip to content

Commit 38fca35

Browse files
Philipp WestrichPhilipp Westrich
authored andcommitted
feat: adds schema support for app features
1 parent a8f7c09 commit 38fca35

File tree

3 files changed

+53
-30
lines changed

3 files changed

+53
-30
lines changed

cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/ApplicationManifestUtilsCommon.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,25 @@
1616

1717
package org.cloudfoundry.operations.applications;
1818

19-
import static java.util.Collections.emptyMap;
19+
import org.cloudfoundry.util.tuple.Consumer2;
20+
import org.yaml.snakeyaml.DumperOptions;
21+
import org.yaml.snakeyaml.Yaml;
22+
import reactor.core.Exceptions;
2023

2124
import java.io.IOException;
2225
import java.io.InputStream;
2326
import java.nio.file.Files;
2427
import java.nio.file.Path;
2528
import java.nio.file.StandardOpenOption;
26-
import java.util.Collection;
27-
import java.util.HashMap;
28-
import java.util.List;
29-
import java.util.Map;
30-
import java.util.NoSuchElementException;
31-
import java.util.Optional;
32-
import java.util.TreeMap;
29+
import java.util.*;
3330
import java.util.concurrent.atomic.AtomicReference;
3431
import java.util.function.Consumer;
3532
import java.util.function.Function;
3633
import java.util.regex.Matcher;
3734
import java.util.regex.Pattern;
3835
import java.util.stream.Collectors;
39-
import org.cloudfoundry.util.tuple.Consumer2;
40-
import org.yaml.snakeyaml.DumperOptions;
41-
import org.yaml.snakeyaml.Yaml;
42-
import reactor.core.Exceptions;
36+
37+
import static java.util.Collections.emptyMap;
4338

4439
/**
4540
* Common base class for dealing with manifests
@@ -71,6 +66,7 @@ static <T extends _ApplicationManifestCommon.Builder> T toApplicationManifestCom
7166
asString(application, "domain", variables, builder::domain);
7267
asListOfString(application, "domains", variables, builder::domain);
7368
asMapOfStringString(application, "env", variables, builder::environmentVariable);
69+
asMap(application, "features", variables, String::valueOf, (k,v) -> builder.feature(k, Boolean.valueOf(v)));
7470
asString(
7571
application,
7672
"health-check-http-endpoint",
@@ -430,6 +426,7 @@ static Map<String, Object> toApplicationYaml(_ApplicationManifestCommon applicat
430426
ApplicationManifestUtilsCommon::toDockerYaml);
431427
putIfPresent(yaml, "domains", applicationManifest.getDomains());
432428
putIfPresent(yaml, "env", applicationManifest.getEnvironmentVariables());
429+
putIfPresent(yaml, "features", applicationManifest.getFeatures());
433430
putIfPresent(
434431
yaml,
435432
"health-check-http-endpoint",

cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/_ApplicationManifestCommon.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ interface Builder {
4646
Builder environmentVariable(Map.Entry<String, ? extends Object> entry);
4747
Builder environmentVariables(@Nullable Map<String, ? extends Object> entries);
4848
Builder putAllEnvironmentVariables(Map<String, ? extends Object> entries);
49+
Builder feature(String key, Object value);
50+
Builder feature(Map.Entry<String, ? extends Object> entry);
51+
Builder features(@Nullable Map<String, ? extends Object> entries);
52+
Builder putAllFeatures(Map<String, ? extends Object> entries);
4953
Builder healthCheckHttpEndpoint(@Nullable String healthCheckHttpEndpoint);
5054
Builder healthCheckType(@Nullable ApplicationHealthCheck healthCheckType);
5155
Builder host(String element);
@@ -142,6 +146,13 @@ void check() {
142146
@Nullable
143147
abstract Map<String, Object> getEnvironmentVariables();
144148

149+
/**
150+
* Manage whether optional capabilities are enabled
151+
*/
152+
@AllowNulls
153+
@Nullable
154+
abstract Map<String, Object> getFeatures();
155+
145156
/**
146157
* The HTTP health check endpoint
147158
*/

cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/applications/ApplicationManifestUtilsV3Test.java

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,44 @@
11
package org.cloudfoundry.operations.applications;
22

3-
import static org.junit.jupiter.api.Assertions.*;
3+
import org.cloudfoundry.client.v3.Metadata;
4+
import org.cloudfoundry.client.v3.processes.ReadinessHealthCheckType;
5+
import org.junit.jupiter.api.Test;
46

57
import java.io.IOException;
68
import java.nio.file.Files;
79
import java.nio.file.Path;
8-
import org.cloudfoundry.client.v3.Metadata;
9-
import org.cloudfoundry.client.v3.processes.ReadinessHealthCheckType;
10-
import org.junit.jupiter.api.Test;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
1112

1213
class ApplicationManifestUtilsV3Test {
14+
@Test
15+
void testWithDockerApp() throws IOException {
16+
ManifestV3 manifest =
17+
ManifestV3.builder()
18+
.application(
19+
ManifestV3Application.builder()
20+
.name("test-app")
21+
.docker(Docker.builder().image("test-image").build())
22+
.build())
23+
.build();
24+
25+
assertSerializeDeserialize(manifest);
26+
}
27+
28+
@Test
29+
void testWithFeature() throws IOException {
30+
ManifestV3 manifest =
31+
ManifestV3.builder()
32+
.application(
33+
ManifestV3Application.builder()
34+
.name("test-app")
35+
.feature("file-based-vcap-services", true)
36+
.build())
37+
.build();
38+
39+
assertSerializeDeserialize(manifest);
40+
}
41+
1342
@Test
1443
void testGenericApplication() throws IOException {
1544
ManifestV3 manifest =
@@ -47,20 +76,6 @@ void testGenericApplication() throws IOException {
4776
assertSerializeDeserialize(manifest);
4877
}
4978

50-
@Test
51-
void testWithDockerApp() throws IOException {
52-
ManifestV3 manifest =
53-
ManifestV3.builder()
54-
.application(
55-
ManifestV3Application.builder()
56-
.name("test-app")
57-
.docker(Docker.builder().image("test-image").build())
58-
.build())
59-
.build();
60-
61-
assertSerializeDeserialize(manifest);
62-
}
63-
6479
@Test
6580
void testWithMetadata() throws IOException {
6681
ManifestV3 manifest =

0 commit comments

Comments
 (0)