A Brief Aside: What’s the rest of this stuff?

If you’ve taken a peek at the rest of the files in theapi/v1/directory, you might have noticed two additional files beyondcronjob_types.go: groupversion_info.go and zz_generated.deepcopy.go.

Neither of these files ever needs to be edited (the former stays the sameand the latter is autogenerated), but it’s useful to know what’s in them.

groupversion_info.go

groupversion_info.go contains common metadata about the group-version:

Apache License

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

  1. http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License. First, we have some package-level markers that denote that there areKubernetes objects in this package, and that this package represents the groupbatch.tutorial.kubebuilder.io. The object generator makes use of theformer, while the latter is used by the CRD generator to generate the rightmetadata for the CRDs it creates from this package.

  1. // Package v1 contains API Schema definitions for the batch v1 API group
  2. // +kubebuilder:object:generate=true
  3. // +groupName=batch.tutorial.kubebuilder.io
  4. package v1
  5. import (
  6. "k8s.io/apimachinery/pkg/runtime/schema"
  7. "sigs.k8s.io/controller-runtime/pkg/scheme"
  8. )

Then, we have the commonly useful variables that help us set up our Scheme.Since we need to use all the types in this package in our controller, it’shelpful (and the convention) to have a convenient method to add all the types tosome other Scheme. SchemeBuilder makes this easy for us.

  1. var (
  2. // GroupVersion is group version used to register these objects
  3. GroupVersion = schema.GroupVersion{Group: "batch.tutorial.kubebuilder.io", Version: "v1"}
  4. // SchemeBuilder is used to add go types to the GroupVersionKind scheme
  5. SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
  6. // AddToScheme adds the types in this group-version to the given scheme.
  7. AddToScheme = SchemeBuilder.AddToScheme
  8. )

zz_generated.deepcopy.go

zz_generated.deepcopy.go contains the autogenerated implementation ofthe aforementioned runtime.Object interface, which marks all of our roottypes as representing Kinds.

The core of the runtime.Object interface is a deep-copy method,DeepCopyObject.

The object generator in controller-tools also generates two other handymethods for each root type and all its sub-types: DeepCopy andDeepCopyInto.