Skip to content

Commit 7772c4b

Browse files
committed
Merge branch 'axel-nagel-master' into develop
2 parents 00a5953 + de362f3 commit 7772c4b

3 files changed

Lines changed: 77 additions & 1 deletion

File tree

src/main/java/eu/openanalytics/containerproxy/backend/ecs/EcsBackend.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import software.amazon.awssdk.services.ecs.model.RepositoryCredentials;
6868
import software.amazon.awssdk.services.ecs.model.RunTaskResponse;
6969
import software.amazon.awssdk.services.ecs.model.RuntimePlatform;
70+
import software.amazon.awssdk.services.ecs.model.Secret;
7071
import software.amazon.awssdk.services.ecs.model.Tag;
7172
import software.amazon.awssdk.services.ecs.model.Task;
7273
import software.amazon.awssdk.services.ecs.model.Volume;
@@ -295,6 +296,8 @@ private String getTaskDefinition(Authentication user, ContainerSpec spec, EcsSpe
295296

296297
Pair<List<Volume>, List<MountPoint>> volumes = getVolumes(spec, specExtension);
297298

299+
List<Secret> secrets = getSecrets(spec, specExtension);
300+
298301
EphemeralStorage ephemeralStorage = EphemeralStorage
299302
.builder()
300303
.sizeInGiB(specExtension.ecsEphemeralStorageSize.getValueOrDefault(21))
@@ -312,7 +315,8 @@ private String getTaskDefinition(Authentication user, ContainerSpec spec, EcsSpe
312315
.stopTimeout(2)
313316
.dockerLabels(dockerLabels)
314317
.logConfiguration(getLogConfiguration(proxy.getSpecId()))
315-
.mountPoints(volumes.getSecond());
318+
.mountPoints(volumes.getSecond())
319+
.secrets(secrets);
316320

317321
String credentials = specExtension.getEcsRepositoryCredentialsParameter().getValueOrDefault(defaultRepositoryCredentialsParameter);
318322
if (credentials != null && !credentials.isBlank()) {
@@ -416,6 +420,17 @@ private Pair<List<Volume>, List<MountPoint>> getVolumes(ContainerSpec spec, EcsS
416420
return Pair.of(efsVolumeConfigurations, mountPoints);
417421
}
418422

423+
private List<Secret> getSecrets(ContainerSpec spec, EcsSpecExtension specExtension) {
424+
List<Secret> secrets = new ArrayList<>();
425+
for (EcsManagedSecret managedSecrets : specExtension.getEcsManagedSecrets()) {
426+
Secret.Builder secretBuilder = Secret.builder();
427+
secretBuilder.name(managedSecrets.getName().getValue());
428+
secretBuilder.valueFrom(managedSecrets.getValueFrom().getValue());
429+
secrets.add(secretBuilder.build());
430+
}
431+
return secrets;
432+
}
433+
419434
@Override
420435
protected void doStopProxy(Proxy proxy) throws Exception {
421436
for (Container container : proxy.getContainers()) {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* ContainerProxy
3+
*
4+
* Copyright (C) 2016-2024 Open Analytics
5+
*
6+
* ===========================================================================
7+
*
8+
* This program is free software: you can redistribute it and/or modify
9+
* it under the terms of the Apache License as published by
10+
* The Apache Software Foundation, either version 2 of the License, or
11+
* (at your option) any later version.
12+
*
13+
* This program is distributed in the hope that it will be useful,
14+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16+
* Apache License for more details.
17+
*
18+
* You should have received a copy of the Apache License
19+
* along with this program. If not, see <http://www.apache.org/licenses/>
20+
*/
21+
package eu.openanalytics.containerproxy.backend.ecs;
22+
23+
import eu.openanalytics.containerproxy.spec.expression.SpecExpressionContext;
24+
import eu.openanalytics.containerproxy.spec.expression.SpecExpressionResolver;
25+
import eu.openanalytics.containerproxy.spec.expression.SpelField;
26+
import lombok.AccessLevel;
27+
import lombok.AllArgsConstructor;
28+
import lombok.Builder;
29+
import lombok.Data;
30+
import lombok.Getter;
31+
import lombok.NoArgsConstructor;
32+
import lombok.Setter;
33+
34+
35+
@Data
36+
@Setter
37+
@Getter
38+
@Builder(toBuilder = true)
39+
@AllArgsConstructor(access = AccessLevel.PRIVATE) // force Spring to not use constructor
40+
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) // Jackson deserialize compatibility
41+
public class EcsManagedSecret {
42+
43+
@Builder.Default
44+
SpelField.String name = new SpelField.String();
45+
46+
@Builder.Default
47+
SpelField.String valueFrom = new SpelField.String();
48+
49+
50+
public EcsManagedSecret resolve(SpecExpressionResolver resolver, SpecExpressionContext context) {
51+
return toBuilder()
52+
.name(name.resolve(resolver, context))
53+
.valueFrom(valueFrom.resolve(resolver, context))
54+
.build();
55+
}
56+
57+
}

src/main/java/eu/openanalytics/containerproxy/backend/ecs/EcsSpecExtension.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ public class EcsSpecExtension extends AbstractSpecExtension {
6565
@Builder.Default
6666
List<EcsEfsVolume> ecsEfsVolumes = new ArrayList<>();
6767

68+
@Builder.Default
69+
List<EcsManagedSecret> ecsManagedSecrets = new ArrayList<>();
70+
6871
@Builder.Default
6972
SpelField.Boolean ecsEnableExecuteCommand = new SpelField.Boolean();
7073

@@ -80,6 +83,7 @@ public ISpecExtension firstResolve(SpecExpressionResolver resolver, SpecExpressi
8083
.ecsOperationSystemFamily(ecsOperationSystemFamily.resolve(resolver, context))
8184
.ecsEphemeralStorageSize(ecsEphemeralStorageSize.resolve(resolver, context))
8285
.ecsEfsVolumes(ecsEfsVolumes.stream().map(p -> p.resolve(resolver, context)).collect(Collectors.toList()))
86+
.ecsManagedSecrets(ecsManagedSecrets.stream().map(p -> p.resolve(resolver, context)).collect(Collectors.toList()))
8387
.ecsEnableExecuteCommand(ecsEnableExecuteCommand.resolve(resolver, context))
8488
.ecsRepositoryCredentialsParameter(ecsRepositoryCredentialsParameter.resolve(resolver, context))
8589
.build();

0 commit comments

Comments
 (0)