亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang kubernetes go-client 將 Deployment 轉換為

Golang kubernetes go-client 將 Deployment 轉換為

Go
心有法竹 2022-11-15 10:46:02
我正在創建一個程序,它從 Kubernetes 獲取所有部署的列表作為*v1.DeploymentList. 我設法做到了并且有效。然后我對該列表進行一些處理,然后執行許多操作?,F在,我有一個新的要求;還需要能夠僅提取一個部署并對其應用相同的邏輯。問題是當我使用 get 部署時,我得到*v1.Deployment的當然與*v1.DeploymentList列表不同?,F在,這個 DeploymentList 不是切片,所以我不能只使用append也不知道如何轉換/轉換。作為一個“務實”的解決方案,我試圖做的只是將該 Deployment 轉換為 DeploymentList,然后將我的其余邏輯僅作為部署應用,因為此時更改其他所有內容都意味著很多負擔。我有以下代碼: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 相關編程的新手。
查看完整描述

1 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

當您查看 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 != "" {

        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

}


查看完整回答
反對 回復 2022-11-15
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號