开发 k8s 管理平台 - k8sailor 15. 根据名字删除 deployment 和 pod

原文地址: https://tangx.in/posts/books/k8sailor/chapter02/15-delete-deployment-and-pod-by-name/

tag: https://github.com/tangx/k8sailor/tree/feat/15-delete-deployment-and-pod-by-name

调用 k8s api 没什么好说的。

k8sdao

1
2
3
4
5

func DeleteDeploymentByName(ctx context.Context, namespace string, name string) error {
	opts := metav1.DeleteOptions{}
	return clientset.AppsV1().Deployments(namespace).Delete(ctx, name, opts)
}

biz

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

type DeleteDeploymentByNameInput struct {
	Name      string `uri:"name"`
	Namespace string `query:"namespace"`
}

// DeleteDeploymentByName 根据名字删除 deployment
func DeleteDeploymentByName(ctx context.Context, input DeleteDeploymentByNameInput) error {
	err := k8sdao.DeleteDeploymentByName(ctx, input.Namespace, input.Name)
	if err != nil {
		return fmt.Errorf("k8s internal error: %w", err)
	}
	return nil
}

api

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
func handlerDeleteDeploymentByName(c *gin.Context) {
	input := deployment.DeleteDeploymentByNameInput{}
	if err := ginbinder.ShouldBindRequest(c, &input); err != nil {
		httpresponse.Error(c, http.StatusBadRequest, err)
		return
	}

	if err := deployment.DeleteDeploymentByName(c, input); err != nil {
		httpresponse.Error(c, http.StatusInternalServerError, err)
		return
	}

	httpresponse.OK(c, true)
}