Skip to content

Commit de362f3

Browse files
committed
added secrets for ecs container
1 parent 13ac969 commit de362f3

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
@@ -63,6 +63,7 @@
6363
import software.amazon.awssdk.services.ecs.model.RegisterTaskDefinitionResponse;
6464
import software.amazon.awssdk.services.ecs.model.RunTaskResponse;
6565
import software.amazon.awssdk.services.ecs.model.RuntimePlatform;
66+
import software.amazon.awssdk.services.ecs.model.Secret;
6667
import software.amazon.awssdk.services.ecs.model.Tag;
6768
import software.amazon.awssdk.services.ecs.model.Task;
6869
import software.amazon.awssdk.services.ecs.model.Volume;
@@ -281,6 +282,8 @@ private String getTaskDefinition(Authentication user, ContainerSpec spec, EcsSpe
281282

282283
Pair<List<Volume>, List<MountPoint>> volumes = getVolumes(spec, specExtension);
283284

285+
List<Secret> secrets = getSecrets(spec, specExtension);
286+
284287
EphemeralStorage ephemeralStorage = EphemeralStorage
285288
.builder()
286289
.sizeInGiB(specExtension.ecsEphemeralStorageSize.getValueOrDefault(21))
@@ -295,8 +298,9 @@ private String getTaskDefinition(Authentication user, ContainerSpec spec, EcsSpe
295298
.environment(env)
296299
.stopTimeout(2)
297300
.dockerLabels(dockerLabels)
298-
.logConfiguration(getLogConfiguration(proxy.getSpecId()))
301+
.logConfiguration(getLogConfiguration(proxy.getId()))
299302
.mountPoints(volumes.getSecond())
303+
.secrets(secrets)
300304
.build())
301305
.networkMode(NetworkMode.AWSVPC) // only option when using fargate
302306
.requiresCompatibilities(Compatibility.FARGATE)
@@ -391,6 +395,17 @@ private Pair<List<Volume>, List<MountPoint>> getVolumes(ContainerSpec spec, EcsS
391395
return Pair.of(efsVolumeConfigurations, mountPoints);
392396
}
393397

398+
private List<Secret> getSecrets(ContainerSpec spec, EcsSpecExtension specExtension) {
399+
List<Secret> secrets = new ArrayList<>();
400+
for (EcsManagedSecret managedSecrets : specExtension.getEcsManagedSecrets()) {
401+
Secret.Builder secretBuilder = Secret.builder();
402+
secretBuilder.name(managedSecrets.getName().getValue());
403+
secretBuilder.valueFrom(managedSecrets.getValueFrom().getValue());
404+
secrets.add(secretBuilder.build());
405+
}
406+
return secrets;
407+
}
408+
394409
@Override
395410
protected void doStopProxy(Proxy proxy) throws Exception {
396411
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

@@ -77,6 +80,7 @@ public ISpecExtension firstResolve(SpecExpressionResolver resolver, SpecExpressi
7780
.ecsOperationSystemFamily(ecsOperationSystemFamily.resolve(resolver, context))
7881
.ecsEphemeralStorageSize(ecsEphemeralStorageSize.resolve(resolver, context))
7982
.ecsEfsVolumes(ecsEfsVolumes.stream().map(p -> p.resolve(resolver, context)).collect(Collectors.toList()))
83+
.ecsManagedSecrets(ecsManagedSecrets.stream().map(p -> p.resolve(resolver, context)).collect(Collectors.toList()))
8084
.ecsEnableExecuteCommand(ecsEnableExecuteCommand.resolve(resolver, context))
8185
.build();
8286
}

0 commit comments

Comments
 (0)