diff --git a/pkg/ctl/BUILD.bazel b/pkg/ctl/BUILD.bazel index 4dc39869a..8e4904a37 100644 --- a/pkg/ctl/BUILD.bazel +++ b/pkg/ctl/BUILD.bazel @@ -9,10 +9,14 @@ go_library( "//pkg/internal/apis/acme/install:go_default_library", "//pkg/internal/apis/certmanager/install:go_default_library", "//pkg/internal/apis/meta/install:go_default_library", + "@io_k8s_api//core/v1:go_default_library", "@io_k8s_apimachinery//pkg/apis/meta/internalversion:go_default_library", "@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library", + "@io_k8s_apimachinery//pkg/conversion:go_default_library", "@io_k8s_apimachinery//pkg/runtime:go_default_library", "@io_k8s_apimachinery//pkg/runtime/schema:go_default_library", + "@io_k8s_apimachinery//pkg/util/runtime:go_default_library", + "@io_k8s_client_go//kubernetes/scheme:go_default_library", ], ) diff --git a/pkg/ctl/scheme.go b/pkg/ctl/scheme.go index 4bc958ece..b29b77053 100644 --- a/pkg/ctl/scheme.go +++ b/pkg/ctl/scheme.go @@ -17,16 +17,17 @@ limitations under the License. package ctl import ( + acmeinstall "github.com/jetstack/cert-manager/pkg/internal/apis/acme/install" + cminstall "github.com/jetstack/cert-manager/pkg/internal/apis/certmanager/install" + metainstall "github.com/jetstack/cert-manager/pkg/internal/apis/meta/install" + corev1 "k8s.io/api/core/v1" metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" utilruntime "k8s.io/apimachinery/pkg/util/runtime" kscheme "k8s.io/client-go/kubernetes/scheme" - - acmeinstall "github.com/jetstack/cert-manager/pkg/internal/apis/acme/install" - cminstall "github.com/jetstack/cert-manager/pkg/internal/apis/certmanager/install" - metainstall "github.com/jetstack/cert-manager/pkg/internal/apis/meta/install" ) // Define a Scheme that has all cert-manager API types registered, including @@ -47,7 +48,25 @@ func init() { // This is used to add the List object type listGroupVersion := schema.GroupVersionKind{Group: "", Version: runtime.APIVersionInternal, Kind: "List"} Scheme.AddKnownTypeWithName(listGroupVersion, &metainternalversion.List{}) - metav1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(kscheme.AddToScheme(Scheme)) + utilruntime.Must(metainternalversion.AddToScheme(Scheme)) + + // Adds the conversion between internalmeta.List and corev1.List + Scheme.AddConversionFunc((*corev1.List)(nil), (*metainternalversion.List)(nil), func(a, b interface{}, scope conversion.Scope) error { + metaList := &metav1.List{} + metaList.Items = a.(*corev1.List).Items + return metainternalversion.Convert_v1_List_To_internalversion_List(metaList, b.(*metainternalversion.List), scope) + }) + + Scheme.AddConversionFunc((*metainternalversion.List)(nil), (*corev1.List)(nil), func(a, b interface{}, scope conversion.Scope) error { + metaList := &metav1.List{} + err := metainternalversion.Convert_internalversion_List_To_v1_List(a.(*metainternalversion.List), metaList, scope) + if err != nil { + return err + } + b.(*corev1.List).Items = metaList.Items + return nil + }) }