Skip to content

Commit b9b5a91

Browse files
committed
release create and customer create tasks
1 parent 3cd58c3 commit b9b5a91

File tree

2 files changed

+133
-9
lines changed

2 files changed

+133
-9
lines changed

applications/wg-easy/Taskfile.yaml

Lines changed: 99 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ includes:
66

77
vars:
88
# Application configuration
9-
APP_SLUG: '{{.REPLICATED_APP | default "wg-easy"}}'
9+
APP_NAME: '{{.REPLICATED_APP | default "wg-easy"}}'
10+
APP_SLUG: '{{.REPLICATED_APP_SLUG | default "wg-easy-cre"}}'
11+
12+
# Release configuration
13+
RELEASE_CHANNELd: '{{.RELEASE_CHANNEL | default "Unstable"}}'
14+
RELEASE_VERSION: '{{.RELEASE_VERSION | default "0.0.1"}}'
15+
RELEASE_NOTES: '{{.RELEASE_NOTES | default "Release created via task release-create"}}'
1016

1117
# Cluster configuration
1218
CLUSTER_NAME: '{{.CLUSTER_NAME | default "test-cluster"}}'
@@ -137,8 +143,8 @@ tasks:
137143
done
138144
- echo "All dependencies updated!"
139145

140-
ports-expose:
141-
desc: Expose configured ports and capture exposed URLs
146+
cluster-ports-expose:
147+
desc: Expose configured ports for a cluster and capture exposed URLs
142148
silent: false
143149
run: once
144150
status:
@@ -166,8 +172,8 @@ tasks:
166172
deps:
167173
- cluster-create
168174

169-
helm-deploy:
170-
desc: Deploy all charts using helmfile
175+
helm-install:
176+
desc: Install all charts using helmfile
171177
silent: false
172178
cmds:
173179
- echo "Installing all charts via helmfile"
@@ -185,10 +191,10 @@ tasks:
185191
# Deploy with helmfile
186192
echo "Using $ENV_VARS"
187193
eval "KUBECONFIG={{.KUBECONFIG_FILE}} $ENV_VARS helmfile sync --wait"
188-
- echo "All charts deployed!"
194+
- echo "All charts installed!"
189195
deps:
190196
- setup-kubeconfig
191-
- ports-expose
197+
- cluster-ports-expose
192198

193199
cluster-delete:
194200
desc: Delete all test clusters with matching name and clean up kubeconfig
@@ -300,6 +306,53 @@ tasks:
300306
deps:
301307
- release-prepare
302308

309+
customer-create:
310+
desc: Create a new customer or get existing customer with matching name and return their ID
311+
silent: false
312+
run: once
313+
vars:
314+
CUSTOMER_NAME: '{{.CUSTOMER_NAME | default "test-customer"}}'
315+
CUSTOMER_EMAIL: '{{.CUSTOMER_EMAIL | default "test@example.com"}}'
316+
CHANNEL: '{{.CHANNEL | default "Unstable"}}'
317+
LICENSE_TYPE: '{{.LICENSE_TYPE | default "dev"}}'
318+
EXPIRES_IN: '{{.EXPIRES_IN | default ""}}'
319+
requires:
320+
vars: [APP_SLUG]
321+
cmds:
322+
- |
323+
# First check if customer already exists
324+
echo "Looking for existing customer {{.CUSTOMER_NAME}} for app {{.APP_SLUG}}..."
325+
EXISTING_CUSTOMER=$(replicated customer ls --app {{.APP_SLUG}} --output json | jq -r '.[] | select(.name=="{{.CUSTOMER_NAME}}") | .id' | head -1)
326+
327+
if [ -n "$EXISTING_CUSTOMER" ]; then
328+
echo "Found existing customer {{.CUSTOMER_NAME}} with ID: $EXISTING_CUSTOMER"
329+
echo "$EXISTING_CUSTOMER"
330+
exit 0
331+
fi
332+
333+
# No existing customer found, create a new one
334+
echo "Creating new customer {{.CUSTOMER_NAME}} for app {{.APP_SLUG}}..."
335+
336+
# Build the command with optional expiration
337+
CMD="replicated customer create \
338+
--app {{.APP_SLUG}} \
339+
--name {{.CUSTOMER_NAME}} \
340+
--email {{.CUSTOMER_EMAIL}} \
341+
--channel {{.CHANNEL}} \
342+
--type {{.LICENSE_TYPE}} \
343+
--output json"
344+
345+
# Add expiration if specified
346+
if [ -n "{{.EXPIRES_IN}}" ]; then
347+
CMD="$CMD --expires-in {{.EXPIRES_IN}}"
348+
fi
349+
350+
# Create the customer and capture the output
351+
CUSTOMER_JSON=$($CMD)
352+
353+
# Extract and output just the customer ID
354+
echo "$CUSTOMER_JSON" | jq -r '.id'
355+
303356
gcp-vm-create:
304357
desc: Create a simple GCP VM instance
305358
silent: false
@@ -357,14 +410,51 @@ tasks:
357410
GCP_ZONE: '{{.GCP_ZONE}}'
358411
VM_NAME: '{{.VM_NAME}}'
359412

413+
customer-ls:
414+
desc: List customers for the application
415+
silent: false
416+
vars:
417+
OUTPUT_FORMAT: '{{.OUTPUT_FORMAT | default "table"}}'
418+
requires:
419+
vars: [APP_SLUG]
420+
cmds:
421+
- echo "Listing customers for app {{.APP_SLUG}}..."
422+
- replicated customer ls --app {{.APP_SLUG}} --output {{.OUTPUT_FORMAT}}
423+
424+
customer-delete:
425+
desc: Archive a customer by ID
426+
silent: false
427+
vars:
428+
CUSTOMER_ID: '{{.CUSTOMER_ID}}'
429+
requires:
430+
vars: [APP_SLUG, CUSTOMER_ID]
431+
cmds:
432+
- echo "Archiving customer with ID {{.CUSTOMER_ID}} from app {{.APP_SLUG}}..."
433+
- |
434+
# Verify customer exists before attempting to archive
435+
CUSTOMER_EXISTS=$(replicated customer ls --app {{.APP_SLUG}} --output json | jq -r '.[] | select(.id=="{{.CUSTOMER_ID}}") | .id')
436+
if [ -z "$CUSTOMER_EXISTS" ]; then
437+
echo "Error: Customer with ID {{.CUSTOMER_ID}} not found for app {{.APP_SLUG}}"
438+
exit 1
439+
fi
440+
441+
# Get customer name for confirmation message
442+
CUSTOMER_NAME=$(replicated customer ls --app {{.APP_SLUG}} --output json | jq -r '.[] | select(.id=="{{.CUSTOMER_ID}}") | .name')
443+
444+
# Archive the customer
445+
replicated customer archive {{.CUSTOMER_ID}} --app {{.APP_SLUG}}
446+
447+
# Confirm archiving
448+
echo "Customer '$CUSTOMER_NAME' (ID: {{.CUSTOMER_ID}}) successfully archived"
449+
360450
full-test-cycle:
361451
desc: Create cluster, get kubeconfig, expose ports, update dependencies, deploy charts, test, and delete
362452
silent: false
363453
cmds:
364454
- task: cluster-create
365455
- task: setup-kubeconfig
366-
- task: ports-expose
456+
- task: cluster-ports-expose
367457
- task: dependencies-update
368-
- task: helm-deploy
458+
- task: helm-install
369459
- task: test
370460
- task: cluster-delete

applications/wg-easy/taskfiles/utils.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,40 @@ tasks:
132132
echo "TF_EXPOSED_URL=$TF_EXPOSED_URL TF_EXPOSED_HTTP_URL=$TF_EXPOSED_HTTP_URL"
133133
fi
134134
135+
vendor-api-auth:
136+
desc: Verify authorization against Replicated Vendor API
137+
silent: false
138+
vars:
139+
API_TOKEN: '{{.REPLICATED_API_TOKEN | default (env "REPLICATED_API_TOKEN")}}'
140+
cmds:
141+
- |
142+
echo "Verifying Replicated Vendor API authorization..."
143+
144+
# Check if API token is provided
145+
if [ -z "{{.API_TOKEN}}" ]; then
146+
echo "ERROR: No API token provided."
147+
echo "Please set the REPLICATED_API_TOKEN environment variable or provide it as a task variable."
148+
echo "You can generate an API token in the Replicated Vendor Portal under 'API Tokens'."
149+
echo "Documentation: https://docs.replicated.com/reference/vendor-api-using"
150+
exit 1
151+
fi
152+
153+
# Make API request to check authentication
154+
AUTH_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
155+
-H "Authorization: {{.API_TOKEN}}" \
156+
-H "Content-Type: application/json" \
157+
-H "Accept: application/json" \
158+
"https://api.replicated.com/vendor/v3/auth")
159+
160+
if [ "$AUTH_RESPONSE" = "200" ]; then
161+
echo "Authentication successful! Token is valid."
162+
exit 0
163+
else
164+
echo "ERROR: Authentication failed with status code $AUTH_RESPONSE."
165+
echo "Please check your API token and try again."
166+
exit 1
167+
fi
168+
135169
gcp-operations:
136170
desc: GCP VM operations
137171
internal: true

0 commit comments

Comments
 (0)