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