github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/demo/vm/setup.sh (about) 1 #!/usr/bin/env bash 2 3 set -o errexit 4 set -o nounset 5 set -o pipefail 6 7 dir=$(dirname "$0") 8 region="us-central1" 9 project="engineering-test-353509" 10 user=$USER 11 cloud_resource_suffix="redis-demo" 12 for arg in "$@" 13 do 14 case $arg in 15 --user=*) 16 user="${arg#*=}" 17 shift 18 ;; 19 esac 20 done 21 22 echo "User: ${user}" 23 echo "Region: ${region}" 24 echo "Project: ${project}" 25 26 get_external_ip() { 27 local name="${1}" 28 echo $(gcloud compute addresses describe $name --region=$region --project=$project --format=json | jq -r '.address') 29 } 30 31 create_external_ip() { 32 local name="${1}" 33 gcloud compute addresses create $name --region=$region --project=$project 34 } 35 36 check_instance() { 37 local name="${1}" 38 gcloud compute instances describe $name --zone="${region}-a" --project=$project >>/dev/null 2>&1 39 } 40 41 create_firewall_rules() { 42 local name="${1}" 43 gcloud compute firewall-rules create $name \ 44 --project=$project \ 45 --allow=tcp:80,tcp:443,tcp:6379 \ 46 --description="Allow incoming traffic for http and redis" \ 47 --direction=INGRESS \ 48 --target-tags="$name" 49 } 50 51 create_instance() { 52 local name="${1}" 53 local address="${2}" 54 55 gcloud compute instances create $name \ 56 --address=$address \ 57 --zone="${region}-a" \ 58 --project=$project \ 59 --boot-disk-size=100 \ 60 --image=ubuntu-2004-focal-v20220303a \ 61 --image-project=ubuntu-os-cloud \ 62 --machine-type=e2-small \ 63 --can-ip-forward \ 64 --tags="$name" \ 65 --metadata-from-file=startup-script=${dir}/init_script.sh \ 66 --metadata=user=${user} 67 } 68 69 cloud_resource_name="${user}-${cloud_resource_suffix}" 70 external_ip=$(get_external_ip $cloud_resource_name) 71 if [ "${external_ip}" == "" ]; then 72 echo "Creating external IP '${cloud_resource_name}'" 73 create_external_ip $cloud_resource_name 74 external_ip=$(get_external_ip $cloud_resource_name) 75 fi 76 echo "ExternalIP: ${external_ip}" 77 78 if ! check_instance "$cloud_resource_name"; then 79 echo "Creating instance '${cloud_resource_name}'" 80 create_instance "$cloud_resource_name" "$external_ip" 81 82 echo "Creating firewall rules '${cloud_resource_name}'" 83 create_firewall_rules "$cloud_resource_name" 84 fi