42
42
DEV_CONTAINER_NAME : ' {{.DEV_CONTAINER_NAME | default "wg-easy-tools"}}'
43
43
CONTAINER_RUNTIME : ' {{.CONTAINER_RUNTIME | default "podman"}}'
44
44
45
+ # CMX VM configuration
46
+ CMX_VM_NAME : ' {{.CMX_VM_NAME | default (printf "%s-cmx-vm" (or (env "USER") "dev"))}}'
47
+ CMX_VM_DISTRIBUTION : ' {{.CMX_VM_DISTRIBUTION | default "ubuntu"}}'
48
+ CMX_VM_VERSION : ' {{.CMX_VM_VERSION | default "24.04"}}'
49
+ CMX_VM_INSTANCE_TYPE : ' {{.CMX_VM_INSTANCE_TYPE | default "r1.medium"}}'
50
+ CMX_VM_DISK_SIZE : ' {{.CMX_VM_DISK_SIZE | default "100"}}'
51
+ CMX_VM_TTL : ' {{.CMX_VM_TTL | default "1h"}}'
52
+ CMX_VM_USER : ' {{.CMX_VS_USER}}'
53
+ CMX_VM_PUBLIC_KEY : ' {{.CMX_VM_PUBLIC_KEY}}'
54
+
45
55
tasks :
46
56
default :
47
57
desc : Show available tasks
@@ -424,7 +434,6 @@ tasks:
424
434
silent : false
425
435
vars :
426
436
CHANNEL : ' {{.CHANNEL | default "Unstable"}}'
427
- AUTH_TOKEN : ' {{.AUTH_TOKEN | default "2usDXzovcJNcpn54yS5tFQVNvCq"}}'
428
437
deps :
429
438
- gcp-vm-create
430
439
status :
@@ -437,7 +446,7 @@ tasks:
437
446
OPERATION : " setup-embedded"
438
447
APP_SLUG : ' {{.APP_SLUG}}'
439
448
CHANNEL : ' {{.CHANNEL}}'
440
- AUTH_TOKEN : ' {{.AUTH_TOKEN }}'
449
+ AUTH_TOKEN : ' {{.REPLICATED_LICENSE_ID }}'
441
450
GCP_PROJECT : ' {{.GCP_PROJECT}}'
442
451
GCP_ZONE : ' {{.GCP_ZONE}}'
443
452
VM_NAME : ' {{.VM_NAME}}'
@@ -519,3 +528,99 @@ tasks:
519
528
- task : helm-install
520
529
- task : test
521
530
- task : cluster-delete
531
+
532
+ cmx-vm-create :
533
+ desc : Create a CMX VM instance using Replicated CLI
534
+ run : once
535
+ silent : true
536
+ status :
537
+ - |
538
+ # Check if VM is running
539
+ replicated vm ls | grep "{{.CMX_VM_NAME}}" | grep running
540
+ cmds :
541
+ - |
542
+ echo "Creating CMX VM {{.CMX_VM_NAME}}..."
543
+ replicated vm create --distribution {{.CMX_VM_DISTRIBUTION}} --version {{.CMX_VM_VERSION}} --instance-type {{.CMX_VM_INSTANCE_TYPE}} --disk {{.CMX_VM_DISK_SIZE}} --name {{.CMX_VM_NAME}} --ttl {{.CMX_VM_TTL}}
544
+
545
+ echo "Waiting for VM to be running (timeout: 120s)..."
546
+ for i in $(seq 1 60); do
547
+ replicated vm ls | grep "{{.CMX_VM_NAME}}"
548
+ if replicated vm ls | grep "{{.CMX_VM_NAME}}" | grep running; then
549
+ echo "VM {{.CMX_VM_NAME}} is ready!"
550
+ break
551
+ fi
552
+ if [ $i -eq 60 ]; then
553
+ echo "Timeout reached after 120s. VM may still be initializing."
554
+ exit 1
555
+ fi
556
+ sleep 2
557
+ done
558
+
559
+ cmx-vm-delete :
560
+ desc : Delete a CMX VM instance
561
+ silent : true
562
+ cmds :
563
+ - |
564
+ echo "Deleting CMX VM {{.CMX_VM_NAME}}..."
565
+ replicated vm rm {{.CMX_VM_NAME}}
566
+
567
+ cmx-vm-install :
568
+ desc : Download and install the app as Embedded Cluster on CMX VM
569
+ silent : true
570
+ requires :
571
+ vars : [REPLICATED_LICENSE_ID]
572
+ vars :
573
+ CHANNEL : ' {{.CHANNEL | default "Unstable"}}'
574
+ SKIP_INSTALL : ' {{.SKIP_INSTALL | default "false"}}'
575
+ ADMIN_CONSOLE_PASSWORD :
576
+ sh : uuidgen | cut -c1-13
577
+ deps :
578
+ - cmx-vm-create
579
+ status :
580
+ - replicated vm port ls {{.CMX_VM_NAME}}
581
+ - curl -sL $(replicated vm port ls {{.CMX_VM_NAME}} --output=json | jq -r ".[0].hostname")/healthz
582
+ cmds :
583
+ - |
584
+ echo "Check if user is set..."
585
+ if [ -z "{{.CMX_VM_USER}}" ]; then
586
+ echo "CMX_VM_USER is not set. Set it to your Github handle. E.g. task cmx-vm-install CMX_VM_USER=nvanthao"
587
+ exit 1
588
+ fi
589
+
590
+ echo "Check if license ID is set..."
591
+ if [ -z "{{.REPLICATED_LICENSE_ID}}" ]; then
592
+ echo "REPLICATED_LICENSE_ID is not set. Set it to your DEV Customer License ID. E.g. task cmx-vm-install REPLICATED_LICENSE_ID=1234567890"
593
+ exit 1
594
+ fi
595
+
596
+ echo "SSH into the VM and download the app binary..."
597
+ SSH_BASE_CMD="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
598
+ if [ -n "{{.CMX_VM_PUBLIC_KEY}}" ]; then
599
+ SSH_BASE_CMD="$SSH_BASE_CMD -i {{.CMX_VM_PUBLIC_KEY}}"
600
+ fi
601
+ VM_SSH_CMD=$(replicated vm ls --output=json | jq -r ".[] | select(.name == \"{{.CMX_VM_NAME}}\") | \"$SSH_BASE_CMD -p \(.direct_ssh_port) {{.CMX_VM_USER}}@\(.direct_ssh_endpoint)\"")
602
+
603
+ echo "SSH base command : $SSH_BASE_CMD"
604
+ $VM_SSH_CMD << 'EOF'
605
+ set -e
606
+ echo 'Downloading {{.APP_NAME}} installer...'
607
+ curl -f 'https://replicated.app/embedded/{{.APP_NAME}}/{{.CHANNEL}}' -H 'Authorization : {{.REPLICATED_LICENSE_ID}}' -o {{.APP_NAME}}-{{.CHANNEL}}.tgz
608
+
609
+ echo 'Extracting installer...'
610
+ tar -xvzf {{.APP_NAME}}-{{.CHANNEL}}.tgz
611
+
612
+ if [ "{{.SKIP_INSTALL}}" = "false" ]; then
613
+ echo "Installing {{.APP_NAME}}..."
614
+ sudo ./{{.APP_NAME}} install --license license.yaml --admin-console-password {{.ADMIN_CONSOLE_PASSWORD}} --yes
615
+ else
616
+ echo "Skipping installation as requested. Binary is available at ./{{.APP_NAME}}"
617
+ fi
618
+ EOF
619
+
620
+ if [ "{{.SKIP_INSTALL}}" = "false" ]; then
621
+ echo "Exposing port 30000 on the VM..."
622
+ replicated vm port expose --port 30000 {{.CMX_VM_NAME}}
623
+
624
+ echo "Visit above URL to access the Admin Console, password : {{.ADMIN_CONSOLE_PASSWORD}}"
625
+ fi
626
+
0 commit comments