func()

in pkg/controller/controller.go [2108:2149]


func (c *FrameworkController) deletePod(
	f *ci.Framework, taskRoleName string, taskIndex int32,
	podUID types.UID, confirm bool, force bool) error {
	podName := f.TaskStatus(taskRoleName, taskIndex).PodName()
	errPfx := fmt.Sprintf(
		"[%v][%v][%v]: Failed to delete Pod %v, %v: confirm: %v, force: %v: ",
		f.Key(), taskRoleName, taskIndex, podName, podUID, confirm, force)

	deleteOptions := &meta.DeleteOptions{Preconditions: &meta.Preconditions{UID: &podUID}}
	if force {
		deleteOptions.GracePeriodSeconds = common.PtrInt64(0)
	}
	deleteErr := c.kClient.CoreV1().Pods(f.Namespace).Delete(podName, deleteOptions)
	if deleteErr != nil {
		if !apiErrors.IsNotFound(deleteErr) {
			return fmt.Errorf(errPfx+"%v", deleteErr)
		}
	} else {
		if confirm {
			// Confirm it is deleted instead of still deleting.
			pod, getErr := c.kClient.CoreV1().Pods(f.Namespace).Get(podName,
				meta.GetOptions{})
			if getErr != nil {
				if !apiErrors.IsNotFound(getErr) {
					return fmt.Errorf(errPfx+
						"Pod cannot be got from remote: %v", getErr)
				}
			} else {
				if podUID == pod.UID {
					return fmt.Errorf(errPfx+
						"Pod with DeletionTimestamp %v still exist after deletion",
						pod.DeletionTimestamp)
				}
			}
		}
	}

	klog.Infof(
		"[%v][%v][%v]: Succeeded to delete Pod %v, %v: confirm: %v, force: %v",
		f.Key(), taskRoleName, taskIndex, podName, podUID, confirm, force)
	return nil
}