lib/ide-services-config-map.ts (87 lines of code) (raw):
import * as cdk from 'aws-cdk-lib';
import {Construct} from 'constructs';
import * as eks from 'aws-cdk-lib/aws-eks';
import {CognitoConfig} from './ide-services-cognito'
interface IdeServicesConfigMapProps extends cdk.NestedStackProps {
cluster: eks.Cluster;
serviceAccount: eks.ServiceAccount;
deploymentUrl: string;
cognitoConfig: CognitoConfig;
}
export class IdeServicesConfigMap extends cdk.NestedStack {
constructor(scope: Construct, id: string, props: IdeServicesConfigMapProps) {
super(scope, id, props);
const {cluster, serviceAccount, deploymentUrl, cognitoConfig} = props;
const updateConfigMap = new eks.KubernetesPatch(this, 'UpdateConfigMap', {
cluster,
resourceName: 'configmap/jb-ide-services-ide-services-helm-common',
resourceNamespace: serviceAccount.serviceAccountNamespace,
patchType: eks.PatchType.STRATEGIC,
applyPatch: {
data: {
'override.yaml': `tbe:
deployment:
url: ${deploymentUrl}
allowed-origins:
- \${tbe.deployment.url}
browser-url: \${tbe.deployment.url}
storage:
type: s3
minio:
check-bucket: false
auth:
login-url: "${cognitoConfig.authBaseUrl}/oauth2/authorize"
token-url: "${cognitoConfig.authBaseUrl}/oauth2/token"
jwt-certs-url: "https://cognito-idp.${this.region}.amazonaws.com/${cognitoConfig.userPoolId}/.well-known/jwks.json"
client-id: "${cognitoConfig.clientId}"
client-secret: "${cognitoConfig.clientSecret}"
required-scopes: [ "email", "openid", "profile" ]
root-admin-emails:
- "${cognitoConfig.adminUserEmail}"
spring:
flyway:
enabled: true
logging:
level:
root: INFO
reactor: INFO
io.netty: INFO
io.r2dbc.postgresql: INFO
org.eclipse.jetty: INFO
org.postgresql: INFO
org.springframework.core: INFO
org.springframework.context: INFO
org.springframework.beans: INFO
org.springframework.boot: INFO
org.springframework.data: INFO
org.springframework.security.web.server: INFO
_org.springframework.web.reactive: INFO
org.quartz: INFO
Exposed: INFO
org.springframework.transaction: INFO
org.springframework.transaction.interceptor: INFO`,
},
},
restorePatch: {}, // keep the new value on stack updates
});
const restartPods = new eks.KubernetesPatch(this, 'RestartPods', {
cluster,
resourceName: 'deployment/jb-ide-services-ide-services-helm',
resourceNamespace: serviceAccount.serviceAccountNamespace,
patchType: eks.PatchType.STRATEGIC,
applyPatch: {
spec: {
template: {
metadata: {
annotations: {
'kubectl.kubernetes.io/restartedAt': new Date().toISOString(), // Adds a timestamp to force a pod restart
},
},
},
},
},
restorePatch: {}
});
restartPods.node.addDependency(updateConfigMap)
}
}