Skip to content

Commit 5c4fa39

Browse files
add minikube resource and configure caster to use k8s jobs (#34)
- added host.docker.internal to dev certs - moved minikube start out of poststart script - created aspire resource to start minikube when launching caster - added explicit start resources to stop or delete minikube - moved welcome message to poststart script - added env vars to Caster to use kubernetes jobs for terraform
1 parent b355fe5 commit 5c4fa39

File tree

6 files changed

+119
-80
lines changed

6 files changed

+119
-80
lines changed
Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIDOTCCAiGgAwIBAgIUc8yFoEkzTVhG+Y9QdNpVj0O3X5AwDQYJKoZIhvcNAQEL
3-
BQAwFzEVMBMGA1UEAwwMY3J1Y2libGUtZGV2MB4XDTI1MTExMjE1MDYxN1oXDTI2
4-
MTExMjE1MDYxN1owFzEVMBMGA1UEAwwMY3J1Y2libGUtZGV2MIIBIjANBgkqhkiG
5-
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt2MDM5HxJ9Vqvbc4fHwvGi90cuff0hyAQsDu
6-
UabiGtBBrdg4O4uF0bgR5uD2CAYAxR0FXwjUgKm/YZ/1IWWu7LRf4KWXYwIEWbxF
7-
sRUloB2E2za3k5d8OeTlnqR60BbrYey3iFXMzYShbkxVcjKNpGAuO4kaFNXWn2Z4
8-
GbLmnIpQy8ei+RJIm1/vtsTMCV5yFxzikcSDN2kQn22dF+rtstu7HoTx0DIKEFSB
9-
Me7SKx2sntEgTBxN6apmePt35t9+AE4LPQk+K5A8jkpu06dV05YowD6W8dmm42ej
10-
dxyN5nfL+2VAwKeuJn7xv8oyrEP/SN/V2YWdQNuE/2hoqG7JZwIDAQABo30wezAd
11-
BgNVHQ4EFgQUdF8TpH2aBIUmaQ7rh+q0GVhb5XowHwYDVR0jBBgwFoAUdF8TpH2a
12-
BIUmaQ7rh+q0GVhb5XowDwYDVR0TAQH/BAUwAwEB/zAoBgNVHREEITAfgglsb2Nh
13-
bGhvc3SCCGNydWNpYmxlgghrZXljbG9hazANBgkqhkiG9w0BAQsFAAOCAQEAgk5q
14-
OHMY/YlDy6dQ7nKu8cQHEkSrYCAA3z83umznN9xdeO8WYpU5cE9ejQpN2arkRu3Y
15-
/85pthnxCPdUDhjJufCiEpEc4ba/Bwlatzvkf+9/pXCZWrExcYxJTY/5NK9XvqpT
16-
zoy5DWxdjlBDerVuE31FolcQvMMkNeStsgfh6nVq8VZQrQdbhQnMJKoKSascxAoz
17-
uWel7kh2d8MIlYhegHSo9K4THSFAhp3KNwh+IHFUa0EuxjoUEK+ltbVxnfttAw6h
18-
eXTs6qHa9ZgbPu5CDJP6QYE8tFRSMPJVATp99cuzDXLn3Ui1Ni/i+cddyiajWeZs
19-
mMmE9qW9zXMcvKF/dA==
2+
MIIDYzCCAkugAwIBAgIUPYuI1pg34l1j4t8mq5Mk7Y7SBBswDQYJKoZIhvcNAQEL
3+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MTIxNTE3MjQ0NVoXDTI2MTIx
4+
NTE3MjQ0NVowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
5+
AAOCAQ8AMIIBCgKCAQEAr/iJdVH8DRCE6d92/2L6tTb5OgMHElnmarjVdjRp8eAo
6+
MKk5Egq3zy11B5NnjhMG54NgEPjYTsH64cVxduaht+j/GmYwJ3Wm3yMsZ6nV6LLV
7+
2k/6aWxIu9yzTfDI0BGv5JtoGfe5UWb1HJHLY1wXaIvFfYkBiVLzQx6QaGCttp6V
8+
3DZpKgWE4edXP2ilMbWslRo0IdnZcX0kNd1nIOAmLjOx/enTXLiqzHW8fFvJ4bSl
9+
wnHXNallGl9lKZEbmUAddK4l1QyqIqnWb3d58grdYdZau7RIGiFSwKSrJkbIvtXZ
10+
CpnSmP/l4AEd13cQVE/ji4vPDPj2vjroFYY/9/CqEwIDAQABo4GsMIGpMB0GA1Ud
11+
DgQWBBTWA+a+/GyBdY8TFth4NCoRX2XhgTAfBgNVHSMEGDAWgBTWA+a+/GyBdY8T
12+
Fth4NCoRX2XhgTAPBgNVHRMBAf8EBTADAQH/MFYGA1UdEQRPME2CCWxvY2FsaG9z
13+
dIIIY3J1Y2libGWCCGtleWNsb2FrghRob3N0LmRvY2tlci5pbnRlcm5hbIIWaG9z
14+
dC5taW5pa3ViZS5pbnRlcm5hbDANBgkqhkiG9w0BAQsFAAOCAQEAQI/LN9NlADA6
15+
5Lg+jR4j9NrBMn4UMwHdXwNQNv1lTiTpqUgwu0M+whr8jFktOpFn9+5O1fsXPuM+
16+
7M2G8JpkPIrlB/bEd5GLSbTW8/T+b2scV3zLX7/P/lQTlSdO0pjgtRl27mDB3osj
17+
+pgXNMt4bdmsoLt8iosemBTm/+XL+X8CACw3z5vgSHw1hQS9GHU8DK9I00kaKUxi
18+
Mc4HljAn3s4/2Iht600IFjja3JWrbrVsG3SP170hVFoQoGDg9poolzgVx81ci6XI
19+
bfJJObgox9AbVQFpikTcpYeJFV1VDbbPOt2damEcsfbMHRucDRB1GPAu+WLrdbfa
20+
uUf8Ihsevw==
2021
-----END CERTIFICATE-----
Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC3YwMzkfEn1Wq9
3-
tzh8fC8aL3Ry59/SHIBCwO5RpuIa0EGt2Dg7i4XRuBHm4PYIBgDFHQVfCNSAqb9h
4-
n/UhZa7stF/gpZdjAgRZvEWxFSWgHYTbNreTl3w55OWepHrQFuth7LeIVczNhKFu
5-
TFVyMo2kYC47iRoU1dafZngZsuacilDLx6L5EkibX++2xMwJXnIXHOKRxIM3aRCf
6-
bZ0X6u2y27sehPHQMgoQVIEx7tIrHaye0SBMHE3pqmZ4+3fm334ATgs9CT4rkDyO
7-
Sm7Tp1XTlijAPpbx2abjZ6N3HI3md8v7ZUDAp64mfvG/yjKsQ/9I39XZhZ1A24T/
8-
aGiobslnAgMBAAECggEAVQVihpYy5/TZ9/rqBUzNyaYWpu85pX/xNwGbe9+TFDtZ
9-
N+/2oiSddg2Qvyms5ythUAGUa+r8GmqYf/pY+5LY9oTpro0XEp/sxG21IdRcDU+i
10-
OL+1fIfO4Ehu7I31ImR93HiS3nJo8R98eFaLhtZJNNwikxeNL/uz9VLce42lvQza
11-
X/RRvXqHCmF1Tk9tnW7u48mhBmcBFNXFwrmEn7UZGPrVkWocjmpjpwtWcu8G+JPN
12-
e+gKNvKpY8X/Yxfp+3/OKVQ6rjn2DGjoL7Ec4VlWuY3+QTPUkQ9C3uoLbJiVf69U
13-
52HhXf63eQtOOLRpn8nAXTHhJMEKEeR5khSaXhoBgQKBgQDY03ibN2jRhUmafpPI
14-
tmRnJ9R8rI163HrYW41uGVXA5yxsTw1MEYH4NUC13S3bcPbFQsFaezPTFwYYugX7
15-
UeMPMhvsvG35wdtJhwWLR2GX9LoeQZrHB52aP3kmAEd8CRvEnYOrT3HFZTufC8u/
16-
Xg9lzA73Lu1ZNNGx8qER5BZmVQKBgQDYhOybOJgJcjlis8UzehmeZDlk0Q+bD6Zp
17-
qwJ/ZaD2wQB5cPhFa5ZwWA16uwbYd1TSd4QPbfxLLnN6BWbid8j9Wuo7maRDamPB
18-
ncVjurqNULt8jIHtQwpoMLJp3HGQYSkq5j/gIHXDFAL1Yd+x0idjGfueLCBufJ16
19-
KAZ1evkUywKBgF33d8M8xi5XJ0jPJljLwsN53XqShVYDizGMq8RVMnbBON1PfSHE
20-
TKE24u5uBludnzRp88W0swb+aWP56nG6UT7apoN4PekJfHFnFJ4Bt2fVZXuLTvqG
21-
cGTSsTwoztIQWHpjERcC/PlhH++Tex9aMi4ZuzqgmbgZTe9iiS9pu9NpAoGAE2+j
22-
Oa/T3g0134lZq2xLfm9qw4UMzJOUEao7OCpsT5o1q7EbaEfnIkCVPS4qyCW2JIp7
23-
/VKXMjyCOzLe8HdmQG/31M/O8gpL2CaMgI5TjrnvipemViENfxrX+S7Dtv0xz9sJ
24-
YtonGBLkzRgzF2hRBtFfR+yYILLpA/0xzzvxvg8CgYEAxHSeoThUQn5mpAmdrFuY
25-
f+Fe/DWeWaOSu0qkmM9bOgYyr5RS+O4Q+fPxvjILnT/rdBvtlp1P+auGW0n7sgsb
26-
qvQnkVskhj5HajQKdg+JBiT1Yvtr0PvGP1khMvxeQYfHzVQBKOV7nWj/lHYJlL4D
27-
6Our+X0caDKiAshcfssQNT0=
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCv+Il1UfwNEITp
3+
33b/Yvq1Nvk6AwcSWeZquNV2NGnx4CgwqTkSCrfPLXUHk2eOEwbng2AQ+NhOwfrh
4+
xXF25qG36P8aZjAndabfIyxnqdXostXaT/ppbEi73LNN8MjQEa/km2gZ97lRZvUc
5+
kctjXBdoi8V9iQGJUvNDHpBoYK22npXcNmkqBYTh51c/aKUxtayVGjQh2dlxfSQ1
6+
3Wcg4CYuM7H96dNcuKrMdbx8W8nhtKXCcdc1qWUaX2UpkRuZQB10riXVDKoiqdZv
7+
d3nyCt1h1lq7tEgaIVLApKsmRsi+1dkKmdKY/+XgAR3XdxBUT+OLi88M+Pa+OugV
8+
hj/38KoTAgMBAAECggEAF03ZAmZU9MlNw4flGKWb4c4sdlrP9RsJG/QWIj0xv1G6
9+
G4D6/mEt/iwdILThlMap9j9cmb14Lqybft/Tisq4pa71GHgVA3zIwynuJ7JYZ6Sb
10+
aU8zMK1MT+4b+YPxoYszb0Pc0aeQGBrZoNV2s9YOgY6/x5ln0IRhk+94cgzvpHdR
11+
gEm/e2LoyECwNZc7vggv93AmAI38IxpGHYZjunF3ZevsuzBlNifuL7x6RAEAAijz
12+
+XSjhXwGxwu2NwSS7vOQI1/SEMSrVtJffgAre9Im9mJVEWUagLlMs2yTtromuHU5
13+
DJZLQalGjsjUxtQLPh3xUPaSZknc6+EPumuP5AtMwQKBgQDWEX3bXjkJ0X/kMTuA
14+
xvQTrwqw6vJJm4iMAE6c7ToeJbUoCnlYBF0e5dhsCci8F2hMjNVR83+LAQV75dHA
15+
CliP3GtZOQzPgsci0RYLj2q+jWMMgTJVrLMDLIlg35ypqfj+x1QH+1i13km+q/nR
16+
3BhKnING07gx/1Ic/STLj/F0wQKBgQDScKNQU9oVTGKKG6hciPZOd4k26E7hYm1u
17+
09PrupJoEf4GixL802fNQQPA5rs6GSRX1y6Kb68hoSGOdGW8WSxBnDbwUkb8M3UL
18+
1HdmtO4JDlAN8L461dAd20gqA2Xtqu4GH7hMmw0z2WdQKBt/U42eim0RbtWdDod3
19+
6E77KP4v0wKBgQDLX8zZd7fq2w2NBzUH0HycosUedegABHMCx1vofPylHZ/xTZoh
20+
A+xQaX9mjRkXkYl2iKo19Ids0WibYCkZMPsYmgmmt6uzDgUQz+II05VPOdYrUCc4
21+
/B0KW+qcjXUyP5ievVLZTnLmPiyDqLFsLpUpdW7HAGhTn8UsY1fsyXFVQQKBgCxe
22+
p3B2XZMECfrInhT0o8ojlgDHtmn7EMu/Sf131wquUHscs6IvCMHUJXB0taEoT+td
23+
aWiy56AVkzev/wtZWeVzhHnjPyhJyTH3WD2FhHLQW7y0t8c78ad55ptFICaeVZVg
24+
9sDgKEZ4XjoeWr3b5g45bYmxbsSwnYuApbZ7DC0VAoGAG1dQORTUn+UoqarN/VMH
25+
bjqPdMUhrw6SxgemVG2cGtbZ97tsMvPSv3y5WKmfEKDx75tudEHmrGdhisI7xfiT
26+
95S5uQbpe75HwUH7RYkoLlVkLJ/A/qNpsrk/OGAYlsHSnvNjnyQ63gcBRj/dYDwV
27+
lSl0LbAfIIUpgGNqgzV1Aiw=
2828
-----END PRIVATE KEY-----

.devcontainer/postcreate.sh

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -33,36 +33,5 @@ else
3333
echo "No custom CA certificates found in ${CUSTOM_CERT_SOURCE}; skipping copy."
3434
fi
3535

36-
# Welcome message
37-
cat <<'EOF'
38-
39-
@@@@
40-
@@@@@@@@
41-
@@@@@@@@@@@@
42-
@@@@@@@@@@@@@@@
43-
@@@@@@@@@@@@@@@@@@@
44-
@@@@@@ @@@@@@
45-
@@@@@ @@@@
46-
@@@@@ @@@@@@
47-
@@@@@@ @@@@@ @@@@@@@@@
48-
@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@
49-
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
50-
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
51-
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
52-
@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
53-
@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@
54-
@@@@@@@@@@@ @@@@@ @@@@@@@@@@
55-
@@@@@@@@@@@@ @@@@@@@
56-
@@@@@@@@@@@@@@ @@@@@
57-
@@@@@@@@@@@@@@@@ @@@@@@
58-
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
59-
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
60-
@@@@@@@@@@@@@@@@@@@@@@@@
61-
@@@@@@@@@@@@@@@@@@@@
62-
@@@@@@@@@@@@@@
63-
64-
Welcome to the Crucible Dev Container!
65-
66-
Type Ctrl-Shift-` (backtick) to open a new terminal and get started building. 🤓
67-
68-
EOF
36+
# Install dotnet-ef globally
37+
dotnet tool install --global dotnet-ef --version 10

.devcontainer/poststart.sh

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,35 @@
11
#!/bin/bash
22

3-
# Start minikube
4-
minikube start --mount-string="/mnt/data/terraform/root:/terraform/root" --embed-certs
3+
# Welcome message
4+
cat <<'EOF'
5+
6+
@@@@
7+
@@@@@@@@
8+
@@@@@@@@@@@@
9+
@@@@@@@@@@@@@@@
10+
@@@@@@@@@@@@@@@@@@@
11+
@@@@@@ @@@@@@
12+
@@@@@ @@@@
13+
@@@@@ @@@@@@
14+
@@@@@@ @@@@@ @@@@@@@@@
15+
@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@
16+
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
17+
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
18+
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
19+
@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
20+
@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@
21+
@@@@@@@@@@@ @@@@@ @@@@@@@@@@
22+
@@@@@@@@@@@@ @@@@@@@
23+
@@@@@@@@@@@@@@ @@@@@
24+
@@@@@@@@@@@@@@@@ @@@@@@
25+
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
26+
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
27+
@@@@@@@@@@@@@@@@@@@@@@@@
28+
@@@@@@@@@@@@@@@@@@@@
29+
@@@@@@@@@@@@@@
30+
31+
Welcome to the Crucible Dev Container!
32+
33+
Type Ctrl-Shift-` (backtick) to open a new terminal and get started building. 🤓
34+
35+
EOF

Crucible.AppHost/AppHost.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,17 +187,40 @@ public static void AddCaster(this IDistributedApplicationBuilder builder, IResou
187187
"cmu-sei-crucible-caster-api",
188188
casterDb.Resource.ConnectionStringExpression);
189189

190+
var minikubeStart = builder.AddExecutable("minikube", "bash", $"{builder.AppHostDirectory}/../scripts/", [
191+
"-c",
192+
"./start-minikube.sh"
193+
]);
194+
195+
var minikubeStop = builder.AddExecutable("stop-minikube", "minikube", "",
196+
[
197+
"stop",
198+
])
199+
.WithExplicitStart()
200+
.WithParentRelationship(minikubeStart);
201+
202+
var minikubeDelete = builder.AddExecutable("delete-minikube", "minikube", "",
203+
[
204+
"delete",
205+
])
206+
.WithExplicitStart()
207+
.WithParentRelationship(minikubeStart); ;
208+
190209
var casterApi = builder.AddProject<Projects.Caster_Api>("caster-api", launchProfileName: "Caster.Api")
191210
.WaitFor(postgres)
192211
.WaitFor(keycloak)
212+
.WaitForCompletion(minikubeStart)
193213
.WithHttpHealthCheck("api/health/ready")
194214
.WithReference(casterDb, "PostgreSQL")
195215
.WithEnvironment("Database__Provider", "PostgreSQL")
196216
.WithEnvironment("Database__DevModeRecreate", "false")
197217
.WithEnvironment("Authorization__Authority", "https://localhost:8443/realms/crucible")
198218
.WithEnvironment("Authorization__AuthorizationUrl", "https://localhost:8443/realms/crucible/protocol/openid-connect/auth")
199219
.WithEnvironment("Authorization__TokenUrl", "https://localhost:8443/realms/crucible/protocol/openid-connect/token")
200-
.WithEnvironment("Authorization__ClientId", "caster.api");
220+
.WithEnvironment("Authorization__ClientId", "caster.api")
221+
.WithEnvironment("Terraform__RootWorkingDirectory", "/mnt/data/terraform/root")
222+
.WithEnvironment("Terraform__KubernetesJobs__Enabled", "true")
223+
.WithEnvironment("Terraform__KubernetesJobs__UseHostVolume", "true");
201224

202225
var casterUiRoot = "/mnt/data/crucible/caster/caster.ui";
203226

scripts/start-minikube.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
STATUS=$(minikube status --output json)
4+
5+
# Extract specific states using jq
6+
HOST_STATE=$(echo $STATUS | jq -r .Host)
7+
KUBELET_STATE=$(echo $STATUS | jq -r .Kubelet)
8+
APISERVER_STATE=$(echo $STATUS | jq -r .APIServer)
9+
10+
if [[ "$HOST_STATE" == "Running" && "$KUBELET_STATE" == "Running" && "$APISERVER_STATE" == "Running" ]]; then
11+
echo "minikube is operational."
12+
else
13+
echo "minikube is not running. Starting now..."
14+
minikube start --mount-string="/mnt/data/terraform:/mnt/data/terraform" --embed-certs
15+
fi

0 commit comments

Comments
 (0)