gpt4 book ai didi

go - 无法返回任何 k8s client-go 对象

转载 作者:行者123 更新时间:2023-12-01 22:45:24 24 4
gpt4 key购买 nike

我必须遵循代码:

包分析器

import (
"context"
"os"
"path/filepath"

"k8s.io/api/apps/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"k8s.io/client-go/kubernetes"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.io/client-go/tools/clientcmd"
)

func getClientSetFromConfig() (*kubernetes.Clientset, error) {
kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube/config")
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
panic(err)
}

return kubernetes.NewForConfig(config)
}

func GetDeploys() []v1beta1.Deployment {
clientset, err := getClientSetFromConfig()
if err != nil {
panic(err)
}

deploys, err := clientset.ExtensionsV1beta1().Deployments("").List(context.Background(), metav1.ListOptions{})
if err != nil {
panic(err)
}

return deploys.Items
}

我收到以下错误:
cannot use deploys.Items (variable of type []v1beta1.Deployment) as []v1beta1.Deployment value in return statement

这似乎没有意义。我试图改为返回 v1beta1.DeploymentList直接本身,但我得到同样的错误。我以前在 Golang 中从未遇到过这种情况。

这种模式在 k8s.io/client-go 中似乎是故意的.
  • 这背后的理由是什么?
  • 编写这样的函数的惯用方式是什么?
  • golang 的哪些功能/模式允许人们编写这样的函数,其他人可以调用和检查返回的对象但不能进一步返回它们?

  • 另外,附上 go.mod文件供引用
    module upgrades

    go 1.14

    require (
    github.com/fsnotify/fsnotify v1.4.9 // indirect
    github.com/imdario/mergo v0.3.9 // indirect
    github.com/mitchellh/go-homedir v1.1.0
    github.com/mitchellh/mapstructure v1.3.2 // indirect
    github.com/pelletier/go-toml v1.8.0 // indirect
    github.com/spf13/afero v1.2.2 // indirect
    github.com/spf13/cast v1.3.1 // indirect
    github.com/spf13/cobra v1.0.0
    github.com/spf13/jwalterweatherman v1.1.0 // indirect
    github.com/spf13/pflag v1.0.5 // indirect
    github.com/spf13/viper v1.7.0
    github.com/tealeg/xlsx v1.0.5
    golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
    gopkg.in/ini.v1 v1.57.0 // indirect
    k8s.io/api v0.18.3
    k8s.io/apimachinery v0.18.3
    k8s.io/client-go v0.18.3
    k8s.io/utils v0.0.0-20200603063816-c1c6865ac451 // indirect
    )

    最佳答案

    您返回的类型与声明的类型相同,但它会引发错误,cannot use deploys.Items (variable of type []v1beta1.Deployment) as []v1beta1.Deployment value in the return statement. 因为你导入了错误的包( "k8s.io/api/apps/v1beta1" )对应于部署 apiGroup 扩展/v1beta1 .

  • 如果您正在导入包 "k8s.io/api/apps/v1beta1"那么您应该通过以下方式获取部署:deployments, _ := clientset.AppsV1beta1().Deployments("").List(metav1.ListOptions{})
  • 如果您正在导入包 "k8s.io/api/extensions/v1beta1"那么您可以列出部署,例如:
  • deployments, _:=clientset.ExtensionsV1beta1().Deployments("").List(metav1.ListOptions{})

    关于go - 无法返回任何 k8s client-go 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62388902/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com