Skip to content

Commit e7ab23f

Browse files
authored
Merge branch 'master' into add-audit-logs
2 parents 154bafd + 799ab77 commit e7ab23f

File tree

592 files changed

+18813
-4785
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

592 files changed

+18813
-4785
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ target/
1414
mta-assembly
1515
.DS_Store
1616
!com.sap.cloud.lm.sl.cf.process/src/test/resources/com/sap/cloud/lm/sl/cf/process/steps/web.zip
17+
!multiapps-controller-client/src/test/resources/org/cloudfoundry/multiapps/controller/client/facade/staticfile.zip

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ In order to use the CF MultiApps Controller you should install the [multiapps](h
9595

9696
If you're using a different [host](multiapps-controller-web/manifests/manifest.yml#L4) than the default for your CF MultiApps Controller either set the following environment variable `MULTIAPPS_CONTROLLER_URL=<URL>` or run CF MTA plugin commands with `-u <URL>` so that they are executed against your instance(s) of the MultiApps Controller.
9797

98-
You could use a modified [spring-music](https://github.com/nvvalchev/spring-music) application, which is extended and adapted to the MTA model to test your newly deployed MultiApps Controller.
98+
You could try out various [MTA examples](https://github.com/SAP-samples/cf-mta-examples) to test your newly deployed MultiApps Controller.
9999

100100
# How to contribute
101101
* [Did you find a bug?](CONTRIBUTING.md#did-you-find-a-bug)

multiapps-controller-api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>org.cloudfoundry.multiapps</groupId>
1212
<artifactId>multiapps-controller-parent</artifactId>
13-
<version>1.194.0-SNAPSHOT</version>
13+
<version>1.197.0-SNAPSHOT</version>
1414
</parent>
1515

1616
<dependencies>
Lines changed: 118 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44

55
<artifactId>multiapps-controller-client</artifactId>
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>org.cloudfoundry.multiapps</groupId>
1111
<artifactId>multiapps-controller-parent</artifactId>
12-
<version>1.194.0-SNAPSHOT</version>
12+
<version>1.197.0-SNAPSHOT</version>
1313
</parent>
1414

1515
<dependencies>
@@ -22,17 +22,13 @@
2222
<artifactId>log4j-core</artifactId>
2323
</dependency>
2424
<dependency>
25-
<groupId>org.apache.logging.log4j</groupId>
26-
<artifactId>log4j-api</artifactId>
25+
<groupId>org.apache.logging.log4j</groupId>
26+
<artifactId>log4j-api</artifactId>
2727
</dependency>
2828
<dependency>
2929
<groupId>org.slf4j</groupId>
3030
<artifactId>slf4j-api</artifactId>
3131
</dependency>
32-
<dependency>
33-
<groupId>com.sap.cloud.lm.sl</groupId>
34-
<artifactId>cloudfoundry-client-facade</artifactId>
35-
</dependency>
3632
<dependency>
3733
<groupId>org.cloudfoundry.multiapps</groupId>
3834
<artifactId>multiapps-common</artifactId>
@@ -44,18 +40,129 @@
4440
<dependency>
4541
<groupId>org.springframework.security</groupId>
4642
<artifactId>spring-security-config</artifactId>
47-
<version>${spring-security.version}</version>
4843
</dependency>
4944
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
5045
<dependency>
5146
<groupId>org.springframework.security</groupId>
5247
<artifactId>spring-security-web</artifactId>
53-
<version>${spring-security.version}</version>
48+
</dependency>
49+
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webflux -->
50+
<dependency>
51+
<groupId>org.springframework</groupId>
52+
<artifactId>spring-webflux</artifactId>
53+
<exclusions>
54+
<!-- Prevents "module foo reads package org.apache.commons.logging.impl
55+
from both spring.jcl and org.apache.commons.logging" errors during compilation
56+
(org.apache.commons.logging comes from jcl-over-slf4j). -->
57+
<exclusion>
58+
<groupId>org.springframework</groupId>
59+
<artifactId>spring-jcl</artifactId>
60+
</exclusion>
61+
</exclusions>
5462
</dependency>
5563
<dependency>
5664
<groupId>org.springframework.security</groupId>
5765
<artifactId>spring-security-oauth2-client</artifactId>
58-
<version>${spring-security.version}</version>
66+
</dependency>
67+
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
68+
<dependency>
69+
<groupId>com.fasterxml.jackson.core</groupId>
70+
<artifactId>jackson-core</artifactId>
71+
</dependency>
72+
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
73+
<dependency>
74+
<groupId>com.fasterxml.jackson.core</groupId>
75+
<artifactId>jackson-databind</artifactId>
76+
</dependency>
77+
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
78+
<dependency>
79+
<groupId>commons-io</groupId>
80+
<artifactId>commons-io</artifactId>
81+
</dependency>
82+
<!-- https://mvnrepository.com/artifact/org.immutables/value -->
83+
<dependency>
84+
<groupId>org.immutables</groupId>
85+
<artifactId>value</artifactId>
86+
<scope>provided</scope>
87+
</dependency>
88+
<!-- https://mvnrepository.com/artifact/org.cloudfoundry/cloudfoundry-client-reactor -->
89+
<dependency>
90+
<groupId>org.cloudfoundry</groupId>
91+
<artifactId>cloudfoundry-client-reactor</artifactId>
92+
</dependency>
93+
<!-- Transitive dependency from cloudfoundry-client. Pin the version, because the one they're using (1.0.3) contains vulnerabilities -->
94+
<!-- https://mvnrepository.com/artifact/io.projectreactor.netty/reactor-netty -->
95+
<dependency>
96+
<groupId>io.projectreactor.netty</groupId>
97+
<artifactId>reactor-netty</artifactId>
98+
</dependency>
99+
<!-- Required dependency due to enabled metrics of reactor-netty client -->
100+
<!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-jmx -->
101+
<dependency>
102+
<groupId>io.micrometer</groupId>
103+
<artifactId>micrometer-core</artifactId>
104+
<version>${micrometer.version}</version>
59105
</dependency>
60106
</dependencies>
107+
108+
<profiles>
109+
<profile>
110+
<id>integration</id>
111+
<build>
112+
<plugins>
113+
<plugin>
114+
<groupId>org.apache.maven.plugins</groupId>
115+
<artifactId>maven-surefire-plugin</artifactId>
116+
<version>3.5.3</version>
117+
<configuration>
118+
<excludes>
119+
<exclude>**/*</exclude>
120+
</excludes>
121+
</configuration>
122+
</plugin>
123+
<plugin>
124+
<artifactId>maven-failsafe-plugin</artifactId>
125+
<version>3.2.5</version>
126+
<executions>
127+
<execution>
128+
<goals>
129+
<goal>integration-test</goal>
130+
<goal>verify</goal>
131+
</goals>
132+
</execution>
133+
</executions>
134+
<configuration>
135+
<includes>
136+
<include>**/*IntegrationTest</include>
137+
</includes>
138+
</configuration>
139+
</plugin>
140+
</plugins>
141+
</build>
142+
<dependencies>
143+
<dependency>
144+
<groupId>org.cloudfoundry</groupId>
145+
<artifactId>cloudfoundry-client-reactor</artifactId>
146+
<version>${cloudfoundry-client.version}</version>
147+
<exclusions>
148+
<exclusion>
149+
<!-- Excluding the dependency as it will be overridden by commons-logging (see below)
150+
because they expose the same module, but jcl-over-slf4j 2.0.9 which comes as a transitive
151+
dependency does not expose "org.apache.commons.logging.impl" package from "org.apache.commons.logging"
152+
module which is used by org.springframework.core.log.CompositeLog and leads to java.lang.IllegalAccessError
153+
during integration tests. -->
154+
<groupId>org.slf4j</groupId>
155+
<artifactId>jcl-over-slf4j</artifactId>
156+
</exclusion>
157+
</exclusions>
158+
</dependency>
159+
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging-->
160+
<dependency>
161+
<groupId>commons-logging</groupId>
162+
<artifactId>commons-logging</artifactId>
163+
<version>${commons-logging.version}</version>
164+
</dependency>
165+
</dependencies>
166+
</profile>
167+
</profiles>
61168
</project>

multiapps-controller-client/src/main/java/module-info.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,32 @@
44
exports org.cloudfoundry.multiapps.controller.client.lib.domain;
55
exports org.cloudfoundry.multiapps.controller.client.uaa;
66
exports org.cloudfoundry.multiapps.controller.client.util;
7+
exports org.cloudfoundry.multiapps.controller.client.facade;
8+
exports org.cloudfoundry.multiapps.controller.client.facade.rest;
9+
exports org.cloudfoundry.multiapps.controller.client.facade.oauth2;
10+
exports org.cloudfoundry.multiapps.controller.client.facade.domain;
11+
exports org.cloudfoundry.multiapps.controller.client.facade.adapters;
12+
exports org.cloudfoundry.multiapps.controller.client.facade.util;
13+
exports org.cloudfoundry.multiapps.controller.client.facade.dto;
714

815
requires transitive org.cloudfoundry.client;
9-
requires transitive com.sap.cloudfoundry.client.facade;
1016
requires spring.security.oauth2.core;
1117
requires transitive spring.web;
1218

19+
requires com.fasterxml.jackson.databind;
1320
requires org.apache.commons.collections4;
21+
requires org.apache.commons.io;
22+
requires org.apache.commons.logging;
23+
requires org.cloudfoundry.client.reactor;
1424
requires org.cloudfoundry.multiapps.common;
25+
requires org.cloudfoundry.util;
1526
requires org.slf4j;
27+
requires java.net.http;
1628
requires spring.core;
1729
requires spring.webflux;
1830
requires reactor.core;
31+
requires reactor.netty.core;
32+
requires reactor.netty.http;
1933
requires org.reactivestreams;
2034
requires io.netty.handler;
2135
requires io.netty.transport;

multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/CloudFoundryTokenProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.cloudfoundry.multiapps.controller.client;
22

3-
import com.sap.cloudfoundry.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
4-
import com.sap.cloudfoundry.client.facade.oauth2.OAuthClient;
3+
import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
4+
import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuthClient;
55

66
public class CloudFoundryTokenProvider implements TokenProvider {
77

multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClient.java

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,39 +12,39 @@
1212

1313
import org.cloudfoundry.client.v3.Metadata;
1414
import org.cloudfoundry.multiapps.controller.client.util.ResilientCloudOperationExecutor;
15+
import org.cloudfoundry.multiapps.controller.client.facade.ApplicationServicesUpdateCallback;
16+
import org.cloudfoundry.multiapps.controller.client.facade.CloudControllerClient;
17+
import org.cloudfoundry.multiapps.controller.client.facade.CloudControllerClientImpl;
18+
import org.cloudfoundry.multiapps.controller.client.facade.ServiceBindingOperationCallback;
19+
import org.cloudfoundry.multiapps.controller.client.facade.UploadStatusCallback;
20+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudApplication;
21+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudAsyncJob;
22+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudBuild;
23+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudDomain;
24+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudEvent;
25+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudPackage;
26+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudProcess;
27+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudRoute;
28+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudServiceBinding;
29+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudServiceBroker;
30+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudServiceInstance;
31+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudServiceKey;
32+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudServiceOffering;
33+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudSpace;
34+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudStack;
35+
import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudTask;
36+
import org.cloudfoundry.multiapps.controller.client.facade.domain.DockerInfo;
37+
import org.cloudfoundry.multiapps.controller.client.facade.domain.DropletInfo;
38+
import org.cloudfoundry.multiapps.controller.client.facade.domain.InstancesInfo;
39+
import org.cloudfoundry.multiapps.controller.client.facade.domain.ServicePlanVisibility;
40+
import org.cloudfoundry.multiapps.controller.client.facade.domain.Staging;
41+
import org.cloudfoundry.multiapps.controller.client.facade.domain.Upload;
42+
import org.cloudfoundry.multiapps.controller.client.facade.domain.UserRole;
43+
import org.cloudfoundry.multiapps.controller.client.facade.dto.ApplicationToCreateDto;
44+
import org.cloudfoundry.multiapps.controller.client.facade.rest.CloudControllerRestClient;
45+
import org.cloudfoundry.multiapps.controller.client.util.ResilientCloudOperationExecutor;
1546
import org.springframework.http.HttpStatus;
1647

17-
import com.sap.cloudfoundry.client.facade.ApplicationServicesUpdateCallback;
18-
import com.sap.cloudfoundry.client.facade.CloudControllerClient;
19-
import com.sap.cloudfoundry.client.facade.CloudControllerClientImpl;
20-
import com.sap.cloudfoundry.client.facade.ServiceBindingOperationCallback;
21-
import com.sap.cloudfoundry.client.facade.UploadStatusCallback;
22-
import com.sap.cloudfoundry.client.facade.domain.CloudApplication;
23-
import com.sap.cloudfoundry.client.facade.domain.CloudAsyncJob;
24-
import com.sap.cloudfoundry.client.facade.domain.CloudBuild;
25-
import com.sap.cloudfoundry.client.facade.domain.CloudDomain;
26-
import com.sap.cloudfoundry.client.facade.domain.CloudEvent;
27-
import com.sap.cloudfoundry.client.facade.domain.CloudPackage;
28-
import com.sap.cloudfoundry.client.facade.domain.CloudProcess;
29-
import com.sap.cloudfoundry.client.facade.domain.CloudRoute;
30-
import com.sap.cloudfoundry.client.facade.domain.CloudServiceBinding;
31-
import com.sap.cloudfoundry.client.facade.domain.CloudServiceBroker;
32-
import com.sap.cloudfoundry.client.facade.domain.CloudServiceInstance;
33-
import com.sap.cloudfoundry.client.facade.domain.CloudServiceKey;
34-
import com.sap.cloudfoundry.client.facade.domain.CloudServiceOffering;
35-
import com.sap.cloudfoundry.client.facade.domain.CloudSpace;
36-
import com.sap.cloudfoundry.client.facade.domain.CloudStack;
37-
import com.sap.cloudfoundry.client.facade.domain.CloudTask;
38-
import com.sap.cloudfoundry.client.facade.domain.DockerInfo;
39-
import com.sap.cloudfoundry.client.facade.domain.DropletInfo;
40-
import com.sap.cloudfoundry.client.facade.domain.InstancesInfo;
41-
import com.sap.cloudfoundry.client.facade.domain.ServicePlanVisibility;
42-
import com.sap.cloudfoundry.client.facade.domain.Staging;
43-
import com.sap.cloudfoundry.client.facade.domain.Upload;
44-
import com.sap.cloudfoundry.client.facade.domain.UserRole;
45-
import com.sap.cloudfoundry.client.facade.dto.ApplicationToCreateDto;
46-
import com.sap.cloudfoundry.client.facade.rest.CloudControllerRestClient;
47-
4848
public class ResilientCloudControllerClient implements CloudControllerClient {
4949

5050
private final CloudControllerClientImpl delegate;
@@ -191,6 +191,11 @@ public boolean getApplicationSshEnabled(UUID applicationGuid) {
191191
return executeWithRetry(() -> delegate.getApplicationSshEnabled(applicationGuid));
192192
}
193193

194+
@Override
195+
public Map<String, Boolean> getApplicationFeatures(UUID applicationGuid) {
196+
return executeWithRetry(() -> delegate.getApplicationFeatures(applicationGuid));
197+
}
198+
194199
@Override
195200
public List<CloudApplication> getApplications() {
196201
return executeWithRetry(delegate::getApplications, HttpStatus.NOT_FOUND);
@@ -400,11 +405,11 @@ public void updateServiceSyslogDrainUrl(String serviceName, String syslogDrainUr
400405
public CloudPackage asyncUploadApplicationWithExponentialBackoff(String applicationName, Path file, UploadStatusCallback callback,
401406
Duration overrideTimeout) {
402407
if (overrideTimeout != null) {
403-
return executeWithRetry(() -> delegate.asyncUploadApplicationWithExponentialBackoff(applicationName, file, callback,
404-
overrideTimeout));
408+
return executeWithRetry(
409+
() -> delegate.asyncUploadApplicationWithExponentialBackoff(applicationName, file, callback, overrideTimeout));
405410
}
406-
return executeWithExponentialBackoff(timeout -> delegate.asyncUploadApplicationWithExponentialBackoff(applicationName, file,
407-
callback, timeout));
411+
return executeWithExponentialBackoff(
412+
timeout -> delegate.asyncUploadApplicationWithExponentialBackoff(applicationName, file, callback, timeout));
408413
}
409414

410415
@Override
@@ -550,8 +555,8 @@ public List<CloudBuild> getBuildsForApplication(UUID applicationGuid) {
550555
@Override
551556
public Optional<String> unbindServiceInstance(String applicationName, String serviceInstanceName,
552557
ApplicationServicesUpdateCallback applicationServicesUpdateCallback) {
553-
return executeWithRetry(() -> delegate.unbindServiceInstance(applicationName, serviceInstanceName,
554-
applicationServicesUpdateCallback));
558+
return executeWithRetry(
559+
() -> delegate.unbindServiceInstance(applicationName, serviceInstanceName, applicationServicesUpdateCallback));
555560
}
556561

557562
@Override

multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/TokenProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.cloudfoundry.multiapps.controller.client;
22

3-
import com.sap.cloudfoundry.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
3+
import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
44

55
public interface TokenProvider {
66

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.cloudfoundry.multiapps.controller.client.facade;
2+
3+
import org.cloudfoundry.multiapps.controller.client.facade.domain.ApplicationLog;
4+
5+
public interface ApplicationLogListener {
6+
7+
void onComplete();
8+
9+
void onError(Throwable exception);
10+
11+
void onMessage(ApplicationLog log);
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.cloudfoundry.multiapps.controller.client.facade;
2+
3+
public interface ApplicationServicesUpdateCallback {
4+
5+
void onError(CloudOperationException e, String applicationName, String serviceInstanceName);
6+
}

0 commit comments

Comments
 (0)