function wait_for_services_removed() {
    set +e # Ignore error when kubectl command fails

    local -n service_list="$1"
    local timeout="${JOB_TIMEOUT:-600}"  # 10 mins
    local interval="${JOB_CHECK_INTERVAL:-10}"

    echo "waiting for services removed"

    start_time=$(date +%s)
    while [[ $(($(date +%s) - $start_time)) -lt $timeout ]]; do
        all_removed=true
        for svc in "${!service_list[@]}"; do
            if [[ ${service_list[$svc]} == "true" ]]; then
                continue
            else
                all_removed=false
            fi

            result=$(kubectl get ${svc} --ignore-not-found 2>/dev/null)
            if [[ $? -eq 0 ]]; then
              if [ -z "$result" ]; then
                service_list[$svc]="true"
              fi
            elif [[ $result == *"the server doesn't have a resource type"* ]]; then
              services_ref[$svc]="true"
              echo "service type of ${svc} was not found"
            else
              echo "failed to get service ${svc} status"
              return 1
            fi
        done

        if $all_removed; then
            echo "All services removed!"
            return 0
        else
            sleep "$interval"
        fi
    done

    # Report unready services
    echo "Following service_list are still not removed:"
    for svc in "${!service_list[@]}"; do
        if [[ ${service_list[$svc]} == "false" ]]; then
            echo $svc
        fi
    done
    return 1
}
