Skip to content

Commit 6beec93

Browse files
raulavilaroyclarkson
authored andcommitted
Configure properties in backing app when updating instance
- As the have to be whitelisted, for now we map only instances, diskQuota and memory
1 parent 29be9d7 commit 6beec93

File tree

3 files changed

+56
-8
lines changed

3 files changed

+56
-8
lines changed

spring-cloud-app-broker-acceptance-tests/src/test/java/org.springframework.cloud.appbroker.acceptance/UpdateInstanceAcceptanceTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ class UpdateInstanceAcceptanceTest extends CloudFoundryAcceptanceTest {
4848
"spring.cloud.appbroker.services[0].apps[0].environment.parameter3=config3",
4949
"spring.cloud.appbroker.services[0].apps[0].environment.parameter4=config4",
5050
"spring.cloud.appbroker.services[0].apps[0].parameters-transformers[0].name=EnvironmentMapping",
51-
"spring.cloud.appbroker.services[0].apps[0].parameters-transformers[0].args.include=parameter1,parameter3"
51+
"spring.cloud.appbroker.services[0].apps[0].parameters-transformers[0].args.include=parameter1,parameter3",
52+
"spring.cloud.appbroker.services[0].apps[0].parameters-transformers[1].name=PropertyMapping",
53+
"spring.cloud.appbroker.services[0].apps[0].parameters-transformers[1].args.include=count"
5254
})
5355
void deployAppsOnUpdateService() {
5456
// given a service instance is created
@@ -72,6 +74,7 @@ void deployAppsOnUpdateService() {
7274
parameters.put("parameter1", "value1");
7375
parameters.put("parameter2", "value2");
7476
parameters.put("parameter3", "value3");
77+
parameters.put("count", 2);
7578
updateServiceInstance(SI_NAME, parameters);
7679

7780
// then the backing application was updated with zero downtime
@@ -86,6 +89,10 @@ void deployAppsOnUpdateService() {
8689
assertThat(json.read("$.parameter3").toString()).isEqualTo("value3");
8790
assertThat(json.read("$.parameter4").toString()).isEqualTo("config4");
8891

92+
backingApplication = getApplicationSummary(APP_NAME);
93+
assertThat(backingApplication).hasValueSatisfying(app ->
94+
assertThat(app.getRunningInstances()).isEqualTo(2));
95+
8996
// when the service instance is deleted
9097
deleteServiceInstance(SI_NAME);
9198

spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppDeployer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ public Mono<UpdateApplicationResponse> update(UpdateApplicationRequest request)
193193
.doOnError(e -> logger.warn(String.format("Error getting application %s: %s", name, e.getMessage())))
194194
.map(ApplicationDetail::getId)
195195
.flatMap(applicationId ->
196-
updateApplicationEnvironment(applicationId, environmentVariables).thenReturn(applicationId)
196+
updateApplicationEnvironment(applicationId, environmentVariables, request.getProperties()).thenReturn(applicationId)
197197
)
198198
.flatMap(applicationId -> Mono.zip(Mono.just(applicationId),
199199
createPackageForApplication(applicationId)))
@@ -342,12 +342,15 @@ private Mono<CreatePackageResponse> createPackageForApplication(String applicati
342342
}
343343

344344
private Mono<org.cloudfoundry.client.v2.applications.UpdateApplicationResponse> updateApplicationEnvironment(
345-
String applicationId, Map<String, Object> environmentVariables) {
345+
String applicationId, Map<String, Object> environmentVariables, Map<String, String> properties) {
346346
return this.client
347347
.applicationsV2()
348348
.update(org.cloudfoundry.client.v2.applications.UpdateApplicationRequest
349349
.builder()
350350
.applicationId(applicationId)
351+
.instances(instances(properties))
352+
.diskQuota(diskQuota(properties))
353+
.memory(memory(properties))
351354
.putAllEnvironmentJsons(environmentVariables)
352355
.build())
353356
.doOnRequest(l -> logger.debug("Updating environment for application {}", applicationId))

spring-cloud-app-broker-deployer-cloudfoundry/src/test/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppDeployerUpdateApplicationTest.java

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.cloud.appbroker.deployer.cloudfoundry;
1818

19+
import java.util.HashMap;
20+
import java.util.Map;
21+
1922
import org.cloudfoundry.client.CloudFoundryClient;
2023
import org.cloudfoundry.client.v2.applications.ApplicationsV2;
2124
import org.cloudfoundry.client.v2.applications.UpdateApplicationResponse;
@@ -46,6 +49,7 @@
4649
import org.junit.jupiter.api.BeforeEach;
4750
import org.junit.jupiter.api.Test;
4851
import org.junit.jupiter.api.extension.ExtendWith;
52+
import org.mockito.ArgumentCaptor;
4953
import org.mockito.Mock;
5054
import org.mockito.junit.jupiter.MockitoExtension;
5155
import org.mockito.junit.jupiter.MockitoSettings;
@@ -118,14 +122,10 @@ void setUp() {
118122

119123
appDeployer = new CloudFoundryAppDeployer(deploymentProperties,
120124
cloudFoundryOperations, cloudFoundryClient, operationsUtils, targetProperties, resourceLoader);
121-
}
122125

123-
@Test
124-
void updateApp() {
125126
when(operationsApplications.get(any()))
126127
.thenReturn(Mono.just(createApplicationDetail()));
127-
when(applicationsV2.update(any()))
128-
.thenReturn(Mono.just(UpdateApplicationResponse.builder().build()));
128+
129129
when(packages.create(any()))
130130
.thenReturn(Mono.just(CreatePackageResponse
131131
.builder()
@@ -193,17 +193,55 @@ void updateApp() {
193193
.createdAt("DATETIME")
194194
.id("deployment-id")
195195
.build()));
196+
}
197+
198+
199+
@Test
200+
void updateApp() {
201+
when(applicationsV2.update(any()))
202+
.thenReturn(Mono.just(UpdateApplicationResponse.builder().build()));
203+
204+
UpdateApplicationRequest request =
205+
UpdateApplicationRequest
206+
.builder()
207+
.name(APP_NAME)
208+
.path(APP_PATH)
209+
.build();
210+
211+
StepVerifier.create(appDeployer.update(request))
212+
.assertNext(response -> assertThat(response.getName()).isEqualTo(APP_NAME))
213+
.verifyComplete();
214+
}
215+
216+
@Test
217+
void updateAppProperties() {
218+
ArgumentCaptor<org.cloudfoundry.client.v2.applications.UpdateApplicationRequest> updateApplicationRequestCaptor =
219+
ArgumentCaptor.forClass(org.cloudfoundry.client.v2.applications.UpdateApplicationRequest.class);
220+
221+
when(applicationsV2.update(updateApplicationRequestCaptor.capture()))
222+
.thenReturn(Mono.just(UpdateApplicationResponse.builder().build()));
223+
224+
Map<String, String> properties = new HashMap<>();
225+
properties.put("count", "2");
226+
properties.put("disk", "2G");
227+
properties.put("memory", "1G");
196228

197229
UpdateApplicationRequest request =
198230
UpdateApplicationRequest
199231
.builder()
200232
.name(APP_NAME)
201233
.path(APP_PATH)
234+
.properties(properties)
202235
.build();
203236

204237
StepVerifier.create(appDeployer.update(request))
205238
.assertNext(response -> assertThat(response.getName()).isEqualTo(APP_NAME))
206239
.verifyComplete();
240+
241+
org.cloudfoundry.client.v2.applications.UpdateApplicationRequest updateApplicationRequest = updateApplicationRequestCaptor.getValue();
242+
assertThat(updateApplicationRequest.getInstances()).isEqualTo(2);
243+
assertThat(updateApplicationRequest.getDiskQuota()).isEqualTo(2048);
244+
assertThat(updateApplicationRequest.getMemory()).isEqualTo(1024);
207245
}
208246

209247
private ApplicationDetail createApplicationDetail() {

0 commit comments

Comments
 (0)