Skip to content

Commit 4eff382

Browse files
committed
Package serverless for better local debugging
1 parent d12b23e commit 4eff382

File tree

4 files changed

+166
-2
lines changed

4 files changed

+166
-2
lines changed

.evergreen/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ functions:
212212
export SERVERLESS_API_PRIVATE_KEY=${SERVERLESS_API_PRIVATE_KEY}
213213
export SERVERLESS_ATLAS_USER=${SERVERLESS_ATLAS_USER}
214214
export SERVERLESS_ATLAS_PASSWORD=${SERVERLESS_ATLAS_PASSWORD}
215-
DRIVERS_TOOLS="${DRIVERS_TOOLS}" sh ${DRIVERS_TOOLS}/.evergreen/serverless/create-instance.sh
215+
sh ${PROJECT_DIRECTORY}/.evergreen/serverless/create-instance.sh
216216
- command: expansions.update
217217
params:
218218
file: src/serverless-expansion.yml
@@ -229,7 +229,7 @@ functions:
229229
export SERVERLESS_ATLAS_USER=${SERVERLESS_ATLAS_USER}
230230
export SERVERLESS_ATLAS_PASSWORD=${SERVERLESS_ATLAS_PASSWORD}
231231
export SERVERLESS_INSTANCE_NAME=${SERVERLESS_INSTANCE_NAME}
232-
DRIVERS_TOOLS="${DRIVERS_TOOLS}" sh ${DRIVERS_TOOLS}/.evergreen/serverless/delete-instance.sh
232+
sh ${PROJECT_DIRECTORY}/.evergreen/serverless/delete-instance.sh
233233
234234
"run tests":
235235
- command: shell.exec
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#!/bin/bash
2+
3+
set -o errexit
4+
set +o xtrace # disable xtrace to ensure credentials aren't leaked
5+
6+
if [ -z "$PROJECT" ]; then
7+
echo "Project name must be provided via PROJECT environment variable"
8+
exit 1
9+
fi
10+
INSTANCE_NAME="$RANDOM-$PROJECT"
11+
12+
if [ -z "$SERVERLESS_DRIVERS_GROUP" ]; then
13+
echo "Drivers Atlas group must be provided via SERVERLESS_DRIVERS_GROUP environment variable"
14+
exit 1
15+
fi
16+
17+
if [ -z "$SERVERLESS_API_PRIVATE_KEY" ]; then
18+
echo "Atlas API private key must be provided via SERVERLESS_API_PRIVATE_KEY environment variable"
19+
exit 1
20+
fi
21+
22+
if [ -z "$SERVERLESS_API_PUBLIC_KEY" ]; then
23+
echo "Atlas API public key must be provided via SERVERLESS_API_PUBLIC_KEY environment variable"
24+
exit 1
25+
fi
26+
27+
echo "creating new serverless instance \"${INSTANCE_NAME}\"..."
28+
29+
DIR=$(dirname $0)
30+
API_BASE_URL="https://account-dev.mongodb.com/api/atlas/v1.0/groups/$SERVERLESS_DRIVERS_GROUP"
31+
32+
curl \
33+
-u "$SERVERLESS_API_PUBLIC_KEY:$SERVERLESS_API_PRIVATE_KEY" \
34+
--silent \
35+
--show-error \
36+
-X POST \
37+
--digest \
38+
--header "Accept: application/json" \
39+
--header "Content-Type: application/json" \
40+
"$API_BASE_URL/serverless?pretty=true" \
41+
--data "
42+
{
43+
\"name\" : \"${INSTANCE_NAME}\",
44+
\"providerSettings\" : {
45+
\"providerName\": \"SERVERLESS\",
46+
\"backingProviderName\": \"GCP\",
47+
\"instanceSizeName\" : \"SERVERLESS_V2\",
48+
\"regionName\" : \"CENTRAL_US\"
49+
}
50+
}"
51+
52+
echo ""
53+
54+
if [ "Windows_NT" = "$OS" ]; then
55+
PYTHON_BINARY=C:/python/Python38/python.exe
56+
else
57+
PYTHON_BINARY=python
58+
fi
59+
60+
SECONDS=0
61+
while [ true ]; do
62+
API_RESPONSE=`SERVERLESS_INSTANCE_NAME=$INSTANCE_NAME bash $DIR/get-instance.sh`
63+
STATE_NAME=`echo $API_RESPONSE | $PYTHON_BINARY -c "import sys, json; print(json.load(sys.stdin)['stateName'])" | tr -d '\r\n'`
64+
65+
if [ "$STATE_NAME" = "IDLE" ]; then
66+
duration="$SECONDS"
67+
echo "setup done! ($(($duration / 60))m $(($duration % 60))s elapsed)"
68+
echo "SERVERLESS_INSTANCE_NAME=\"$INSTANCE_NAME\""
69+
SRV_ADDRESS=$(echo $API_RESPONSE | $PYTHON_BINARY -c "import sys, json; print(json.load(sys.stdin)['connectionStrings']['standardSrv'])" | tr -d '\r\n')
70+
echo "MONGODB_SRV_URI=\"$SRV_ADDRESS\""
71+
STANDARD_ADDRESS=$(echo $API_RESPONSE | $PYTHON_BINARY -c "import sys, json; print(json.load(sys.stdin)['connectionStrings']['standard'].replace('&authSource=admin', ''))" | tr -d '\r\n')
72+
echo "MONGODB_URI=\"$STANDARD_ADDRESS\""
73+
cat <<EOF > serverless-expansion.yml
74+
MONGODB_URI: "$STANDARD_ADDRESS"
75+
MONGODB_SRV_URI: "$SRV_ADDRESS"
76+
SERVERLESS_INSTANCE_NAME: "$INSTANCE_NAME"
77+
SSL: ssl
78+
AUTH: auth
79+
TOPOLOGY: sharded_cluster
80+
SERVERLESS: serverless
81+
EOF
82+
exit 0
83+
else
84+
echo "setup still in progress, status=$STATE_NAME, sleeping for 1 minute..."
85+
sleep 60
86+
fi
87+
done
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/bin/bash
2+
3+
set -o errexit
4+
set +o xtrace
5+
6+
if [ -z "$SERVERLESS_INSTANCE_NAME" ]; then
7+
echo "Instance name must be provided via SERVERLESS_INSTANCE_NAME environment variable"
8+
exit 1
9+
fi
10+
11+
if [ -z "$SERVERLESS_DRIVERS_GROUP" ]; then
12+
echo "Drivers Atlas group must be provided via SERVERLESS_DRIVERS_GROUP environment variable"
13+
exit 1
14+
fi
15+
16+
if [ -z "$SERVERLESS_API_PRIVATE_KEY" ]; then
17+
echo "Atlas API private key must be provided via SERVERLESS_API_PRIVATE_KEY environment variable"
18+
exit 1
19+
fi
20+
21+
if [ -z "$SERVERLESS_API_PUBLIC_KEY" ]; then
22+
echo "Atlas API public key must be provided via SERVERLESS_API_PUBLIC_KEY environment variable"
23+
exit 1
24+
fi
25+
26+
echo "deleting serverless instance \"${SERVERLESS_INSTANCE_NAME}\"..."
27+
28+
API_BASE_URL="https://account-dev.mongodb.com/api/atlas/v1.0/groups/$SERVERLESS_DRIVERS_GROUP"
29+
30+
curl \
31+
--silent \
32+
--show-error \
33+
-u "$SERVERLESS_API_PUBLIC_KEY:$SERVERLESS_API_PRIVATE_KEY" \
34+
-X DELETE \
35+
--digest \
36+
--header "Accept: application/json" \
37+
--header "Content-Type: application/json" \
38+
"${API_BASE_URL}/serverless/${SERVERLESS_INSTANCE_NAME}?pretty=true"
39+
40+
echo ""

.evergreen/serverless/get-instance.sh

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/bin/bash
2+
3+
set -o errexit
4+
set +o xtrace
5+
6+
if [ -z "$SERVERLESS_INSTANCE_NAME" ]; then
7+
echo "Instance name must be provided via SERVERLESS_INSTANCE_NAME environment variable"
8+
exit 1
9+
fi
10+
11+
if [ -z "$SERVERLESS_DRIVERS_GROUP" ]; then
12+
echo "Drivers Atlas group must be provided via SERVERLESS_DRIVERS_GROUP environment variable"
13+
exit 1
14+
fi
15+
16+
if [ -z "$SERVERLESS_API_PRIVATE_KEY" ]; then
17+
echo "Atlas API private key must be provided via SERVERLESS_API_PRIVATE_KEY environment variable"
18+
exit 1
19+
fi
20+
21+
if [ -z "$SERVERLESS_API_PUBLIC_KEY" ]; then
22+
echo "Atlas API public key must be provided via SERVERLESS_API_PUBLIC_KEY environment variable"
23+
exit 1
24+
fi
25+
26+
API_BASE_URL="https://account-dev.mongodb.com/api/private/nds/serverless/groups/$SERVERLESS_DRIVERS_GROUP"
27+
28+
curl \
29+
--silent \
30+
--show-error \
31+
-u "$SERVERLESS_API_PUBLIC_KEY:$SERVERLESS_API_PRIVATE_KEY" \
32+
-X GET \
33+
--digest \
34+
--header "Accept: application/json" \
35+
"${API_BASE_URL}/instances/${SERVERLESS_INSTANCE_NAME}?pretty=true" \
36+
37+
echo ""

0 commit comments

Comments
 (0)