我正在創建一個程式,該程式從 Kuberentes 獲取所有部署的串列作為*v1.DeploymentList. 我設法做到了,并且有效。然后我對這個串列進行一些處理,然后執行許多操作。現在,我有一個新要求;還需要能夠只提取一個部署并對其應用相同的邏輯。問題是當我使用獲取部署時,我得到*v1.Deployment的當然是不同于*v1.DeploymentList這是一個串列。現在,這個 DeploymentList 不是一個切片,所以我不能只使用append也不知道如何轉換/轉換。作為一個“務實”的解決方案,我試圖做的只是將該部署轉換為部署串列,然后將我的其余邏輯應用為部署,因為此時更改其他所有內容將意味著很多負擔。
我有以下代碼:
func listK8sDeployments(the_clientset *kubernetes.Clientset, mirrorDeploy *string) *v1.DeploymentList {
if mirrorDeploy != nil {
tmp_deployments, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).Get(context.TODO(), *mirrorDeploy, metav1.GetOptions{})
if err != nil {
panic(err.Error())
}
// Here would need to convert the *v1.Deployment into *v1.DeploymentList a list to retun it according to my EXISTING logic. If I can do this, I do not need to change anything else on the program.
// return the Deployment list with one single deployment inside and finish.
}
deployments_list, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
return deployments_list
}
它回傳一個*v1.Deployment,但我需要這個資料作為一個串列,即使*v1.DeploymentList我試圖附加它,但*v1.DeploymentList它不是一個切片,所以我不能這樣做。關于如何實作這一目標或我應該改變做事方式的任何想法?請解釋。僅供參考:我是 Go 新手,也對 k8s 相關的東西編程。
編輯:基于@Mendi Neymark 回答的解決方案:
func listK8sDeployments(the_clientset *kubernetes.Clientset, mirrorDeploy *string) *v1.DeploymentList {
if *mirrorDeploy != "" {
tmp_deployments, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).Get(context.TODO(), *mirrorDeploy, metav1.GetOptions{})
if err != nil {
panic(err.Error())
}
// create a new list with your deployment and return it
deployments_list := v1.DeploymentList{Items: []v1.Deployment{*tmp_deployments}}
return &deployments_list
}
deployments_list, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
return deployments_list
}
uj5u.com熱心網友回復:
當您查看 v1.DeploymentList 的定義時,您可以看到 Deployment 所在的位置:
// DeploymentList is a list of Deployments.
type DeploymentList struct {
metav1.TypeMeta `json:",inline"`
// Standard list metadata.
// optional
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
// Items is the list of Deployments.
Items []Deployment `json:"items" protobuf:"bytes,2,rep,name=items"`
}
然后您可以輕松地使用您的值創建它的新實體:
func listK8sDeployments(the_clientset *kubernetes.Clientset, mirrorDeploy *string) *v1.DeploymentList {
if mirrorDeploy != nil {
tmp_deployments, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).Get(context.TODO(), *mirrorDeploy, metav1.GetOptions{})
if err != nil {
panic(err.Error())
}
// create a new list with your deployment and return it
deployments_list := V1.DeploymentList{Items: []V1.Deployment{*tmp_deployments}}
return deployments_list
}
deployments_list, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
return deployments_list
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434757.html
標籤:走 Kubernetes kubernetes-go-client
