in images/controller/cmd/reservation_broker/reservation_broker.go [700:750]
func deleteApp(app broker.AppConfigSpec, appCtx *AppContext, user, username string) (int, string) {
statusCode := http.StatusOK
msg := "shutdown"
// Lock the reservation table
appCtx.Lock()
// Remove the reservation from the table.
defer delete(appCtx.ReservedPods, user)
defer appCtx.Unlock()
if bPod, ok := appCtx.ReservedPods[user]; ok {
podName := bPod.Name
// Remove instance label from the pod.
// This is done so that subsequest GET requests don't return the terminating pod.
cmd := exec.Command("sh", "-c", fmt.Sprintf("kubectl label pod -n %s %s app.kubernetes.io/instance- 1>&2", app.Name, podName))
stdoutStderr, err := cmd.CombinedOutput()
if err != nil {
log.Printf("warning: failed to remove instance label from pod: %s: %s\n%v", podName, stdoutStderr, err)
}
// Delete the pod from K8S
log.Printf("deleting pod for user %s: %s", user, podName)
cmd = exec.Command("sh", "-c", fmt.Sprintf("kubectl delete pod -n %s %s --wait=false 1>&2", app.Name, podName))
stdoutStderr, err = cmd.CombinedOutput()
if err != nil {
log.Printf("failed to delete pod for user %s: %s: %s\n%v", user, podName, stdoutStderr, err)
statusCode = http.StatusInternalServerError
msg = "error deleting app"
return statusCode, msg
}
// Delete the per-user resources
if len(bPod.UserObjects) > 0 {
objectTypes := strings.Join(bPod.UserObjects, ",")
fullName := fmt.Sprintf("%s-%s", app.Name, broker.MakePodID(user))
cmdStr := fmt.Sprintf("kubectl delete %s -n %s -l \"app.kubernetes.io/instance=%s\" --wait=false", objectTypes, app.Name, fullName)
cmd = exec.Command("sh", "-o", "pipefail", "-c", cmdStr)
stdoutStderr, err = cmd.CombinedOutput()
if err != nil {
log.Printf("error deleting per-user resources for %s: %v\n%s", user, err, stdoutStderr)
statusCode = http.StatusInternalServerError
msg = "error deleting app"
return statusCode, msg
}
}
}
return statusCode, msg
}