目錄
摘要:
編寫pkg/apis:
pkg/apis/example/register.go
pkg/apis/v1/doc.go:
pkg/apis/v1/register.go:
pkg/apis/v1/types.go
hack/boilerplate.go.txt
代碼自動生成腳本:
代碼生成執行結果:
摘要:
編寫pkg/apis:
[root@ccos-autodeploy-14-67 sample]# tree
.
├── gene.sh
├── hack
│ ├── boilerplate.go.txt
│ ├── custom-boilerplate.go.txt
│ ├── tools.go
│ ├── update-codegen.sh
│ └── verify-codegen.sh
└── pkg
├── apis
│ ├── example
│ │ └── register.go
│ └── v1
│ ├── doc.go
│ ├── register.go
│ └── types.go
pkg/apis/example/register.go
package example
const (
GroupName = "example.k8s.io"
Version = "v1"
)
pkg/apis/v1/doc.go:
// +k8s:deepcopy-gen=package
// +groupName=example.k8s.io
package v1
pkg/apis/v1/register.go:
package v1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"crd_controller/pkg/apis/example"
)
var SchemeGroupVersion = schema.GroupVersion{
Group: example.GroupName,
Version: example.Version,
}
var (
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
AddToScheme = SchemeBuilder.AddToScheme
)
func Resource(resource string) schema.GroupResource {
return SchemeGroupVersion.WithResource(resource).GroupResource()
}
func Kind(kind string) schema.GroupKind {
return SchemeGroupVersion.WithKind(kind).GroupKind()
}
func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(
SchemeGroupVersion,
&Student{},
&StudentList{},
)
// register the type in the scheme
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
return nil
}
pkg/apis/v1/types.go
package v1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// +genclient
// +genclient:noStatus
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type Student struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec StudentSpec `json:"spec"`
}
type StudentSpec struct {
name string `json:"name"`
school string `json:"school"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// StudentList is a list of Student resources
type StudentList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata"`
Items []Student `json:"items"`
}
hack/boilerplate.go.txt
/*
Copyright The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
代碼自動生成腳本:
#!/bin/bash
go env -w GOPROXY=https://goproxy.cn,direct
generate-groups.sh all \
./pkg/client \
./pkg/apis \
example:v1 \
--go-header-file ./hack/boilerplate.go.txt
代碼生成執行結果:
[root@ccos-autodeploy-14-67 sample]# bash gene.sh
Generating deepcopy funcs
Generating clientset for example:v1 at ./pkg/client/clientset
Generating listers for example:v1 at ./pkg/client/listers
Generating informers for example:v1 at ./pkg/client/informers
代碼生成後所有檔案的目錄結構:
[root@ccos-autodeploy-14-67 sample]# tree
.
├── gene.sh
├── hack
│ ├── boilerplate.go.txt
│ ├── custom-boilerplate.go.txt
│ ├── tools.go
│ ├── update-codegen.sh
│ └── verify-codegen.sh
└── pkg
├── apis
│ ├── example
│ │ └── register.go
│ └── v1
│ ├── doc.go
│ ├── register.go
│ └── types.go
└── client
└── clientset
└── versioned
├── clientset.go
├── doc.go
├── fake
│ ├── clientset_generated.go
│ ├── doc.go
│ └── register.go
├── scheme
│ ├── doc.go
│ └── register.go
└── typed
└── example
└── v1
├── doc.go
├── example_client.go
├── fake
│ ├── doc.go
│ └── fake_example_client.go
└── generated_expansion.go
14 directories, 22 files