Go语言 deepcopy-gen无法为自定义Kubernetes API服务器生成deepcopy函数的故障排除

rsl1atfo  于 2023-03-27  发布在  Go
关注(0)|答案(1)|浏览(206)

我正在尝试创建一个定制的API服务器,并且我已经在目录pkg/apis/baz/v1 alpha 1中定义了types.go文件,

package v1alpha1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type Foo struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`

    Spec FooSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
}

type FooSpec struct {
    Bar []string `json:"bar" protobuf:"bytes,1,rep,name=bar"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type FooList struct {
    metav1.TypeMeta `json:",inline"`
    metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    Items []Foo `json:"items" protobuf:"bytes,2,rep,name=items`
}

// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type Bar struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    Spec BarSpec
}

type BarSpec struct {
    Description string `json:"description" protobuf:"bytes,1,opt,name=description"`
}

// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type BarList struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    Items []Bar `json:"items" protobuf:"bytes,2,rep,name=items"`
}

我有另一个types.go文件,它是用于内部类型的,位于pkg/apis/baz位置

package baz

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type Foo struct {
    metav1.TypeMeta
    metav1.ObjectMeta

    Spec FooSpec
}

type FooSpec struct {
    Bar []FooBar
}

type FooBar struct {
    Name string
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type FooList struct {
    metav1.TypeMeta
    metav1.ListMeta

    Items []Foo
}

// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type Bar struct {
    metav1.TypeMeta
    metav1.ObjectMeta

    Spec BarSpec
}

type BarSpec struct {
    // cost is the cost of one instance of this topping.
    Description string
}

我尝试使用deepcopy-gen为这些生成deepcopy函数,我尝试在deepcopy-gen所在的目录中运行以下命令,

./deepcopy-gen --input-dirs "$(PROJECT_ROOT)/pkg/apis/baz/v1alpha1" -O zz_generated.deepcopy

对于不同位置的内部类型也是一样。它似乎不起作用,在我运行此命令后,似乎没有创建zz_generated.deepcopy文件。它没有显示任何错误,但没有生成deepcopy函数文件。我做错了什么?

gab6jxml

gab6jxml1#

我在尝试运行命令时遇到了同样的问题:

deepcopy-gen --input-dirs github.com/NickTaporuk/myresource-crd/pkg/apis/mygroup.example.com/v1alpha1 \
     -O zz_generated.deepcopy \
     --output-base ../../.. \
     -v=8 \
     --go-header-file ./hack/boilerplate.go.txt

我没有看到文件zz_generated.deepcopy.go。只有当我从根目录中删除了软件包“vendor”后,这个命令才开始工作

相关问题