Skip to content

Commit f09b52b

Browse files
committed
Add ODS config defaults and a common base class
1 parent f312d37 commit f09b52b

File tree

3 files changed

+77
-13
lines changed

3 files changed

+77
-13
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.compassion.commons.iac;
2+
3+
import org.jooq.lambda.Seq;
4+
5+
import com.compassion.commons.config.CredentialConfig;
6+
import com.compassion.commons.iac.CDKUtils.ParamFromSecretBuilder;
7+
import com.fasterxml.jackson.core.JsonProcessingException;
8+
9+
import software.amazon.awscdk.SecretValue;
10+
import software.amazon.awscdk.services.secretsmanager.ISecret;
11+
import software.amazon.awscdk.services.secretsmanager.Secret;
12+
import software.constructs.Construct;
13+
14+
public interface CDKCredentials extends CredentialConfig {
15+
default Secret.Builder asSecret(Construct stack, String id) {
16+
try {
17+
return Secret.Builder.create(stack, id).secretStringValue(SecretValue.unsafePlainText(toPlaceholderJson()));
18+
} catch (JsonProcessingException e) {
19+
throw new IllegalArgumentException("Cannot generate placeholder JSON from " + this, e);
20+
}
21+
}
22+
23+
/**
24+
* Create parameters from this credential object. Secrets should reference the secret to lookup the value.
25+
* Regular parameters should specify the value using the values in this credentials objects.
26+
* @param utils the utils to create the customized parameter builder
27+
* @param path the path of the parent node for these credentials
28+
* @param secret the related secret
29+
* @return parameter builders with names (paths), path descriptions, and values configured
30+
* @see CDKUtils#newParam(String)
31+
* @see ParamFromSecretBuilder#pathDescription(String)
32+
* @see ParamFromSecretBuilder#secret(ISecret)
33+
*/
34+
Seq<ParamFromSecretBuilder> asParams(CDKUtils utils, String path, ISecret secret);
35+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.compassion.commons.iac;
2+
3+
import org.jooq.lambda.Seq;
4+
5+
import com.compassion.commons.Utilities;
6+
import com.compassion.commons.config.CIEnvironment;
7+
import com.compassion.commons.config.CredentialConfig.ConfigWithUserPassword;
8+
import com.compassion.commons.iac.CDKUtils.ParamFromSecretBuilder;
9+
10+
import lombok.Getter;
11+
import lombok.Setter;
12+
import lombok.experimental.Accessors;
13+
import software.amazon.awscdk.services.secretsmanager.ISecret;
14+
15+
@Getter @Setter @Accessors(chain = true)
16+
public class CIODS extends ConfigWithUserPassword implements CDKCredentials {
17+
private static final String CLUSTER = "odf-ods-cluster.cluster-cp7ohq9jqeo2.us-east-2.rds.amazonaws.com";
18+
19+
private String hostURL;
20+
21+
public CIODS withDefaults(CIEnvironment env) {
22+
switch (env) {
23+
case Prod -> setHostURL("prod-" + CLUSTER + "/prod-odf-ods");
24+
case Stage -> setHostURL("dev-" + CLUSTER + "/stage-odf-ods");
25+
default -> setHostURL("dev-" + CLUSTER + "/dev-odf-ods");
26+
case Cloud -> throw new IllegalArgumentException("ODS does not support the Cloud environment");
27+
}
28+
setUser("odf_svc");
29+
return this;
30+
}
31+
32+
@Override
33+
public Seq<ParamFromSecretBuilder> asParams(CDKUtils utils, String path, ISecret secret) {
34+
return Seq.of(
35+
utils.newParam(path + "/user").pathDescription("Username").secret(secret),
36+
utils.newParam(path + "/password").pathDescription("Password").secret(secret),
37+
Utilities.cast(utils.newParam(path + "/hostURL").pathDescription("Host URL and Database").value(getHostURL()))
38+
);
39+
}
40+
}

iac/src/main/java/com/compassion/commons/iac/CISnowflake.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@
66
import com.compassion.commons.config.CIEnvironment;
77
import com.compassion.commons.config.CredentialConfig.ConfigWithUserPassword;
88
import com.compassion.commons.iac.CDKUtils.ParamFromSecretBuilder;
9-
import com.fasterxml.jackson.core.JsonProcessingException;
109

1110
import lombok.Getter;
1211
import lombok.Setter;
1312
import lombok.experimental.Accessors;
14-
import software.amazon.awscdk.SecretValue;
1513
import software.amazon.awscdk.services.secretsmanager.ISecret;
16-
import software.amazon.awscdk.services.secretsmanager.Secret;
17-
import software.constructs.Construct;
1814

1915
@Getter @Setter @Accessors(chain = true)
20-
public class CISnowflake extends ConfigWithUserPassword {
16+
public class CISnowflake extends ConfigWithUserPassword implements CDKCredentials {
2117
public enum CISnowflakeRole {
2218
WRITER,
2319
READER,
@@ -36,14 +32,7 @@ public CISnowflake withDefaults(CIEnvironment env, String svc, String domain, CI
3632
return this;
3733
}
3834

39-
public Secret.Builder asSecret(Construct stack, String id) {
40-
try {
41-
return Secret.Builder.create(stack, id).secretStringValue(SecretValue.unsafePlainText(toPlaceholderJson()));
42-
} catch (JsonProcessingException e) {
43-
throw new IllegalArgumentException("Cannot generate placeholder JSON from " + this, e);
44-
}
45-
}
46-
35+
@Override
4736
public Seq<ParamFromSecretBuilder> asParams(CDKUtils utils, String path, ISecret secret) {
4837
return Seq.of(
4938
utils.newParam(path + "/user").pathDescription("Username").secret(secret),

0 commit comments

Comments
 (0)