From 80ad3857986e6dbaa0d28dcf9167fc0dc8191007 Mon Sep 17 00:00:00 2001 From: Yuvaraj Kakaraparthi Date: Thu, 14 Jul 2022 17:31:08 -0700 Subject: [PATCH] rename CloneTemplate to CreateFromTemplate --- controllers/external/util.go | 57 +++++++++++++++++++ controllers/external/util_test.go | 8 +-- .../kubeadm/internal/controllers/helpers.go | 2 +- .../src/developer/providers/v1.2-to-v1.3.md | 2 +- .../machineset/machineset_controller.go | 4 +- 5 files changed, 65 insertions(+), 8 deletions(-) diff --git a/controllers/external/util.go b/controllers/external/util.go index e43cc2ae7e3e..5c2f734d8701 100644 --- a/controllers/external/util.go +++ b/controllers/external/util.go @@ -60,6 +60,7 @@ func Delete(ctx context.Context, c client.Writer, ref *corev1.ObjectReference) e } // CloneTemplateInput is the input to CloneTemplate. +// Deprecated: use CreateFromTemplateInput instead. This type will be removed in a future release. type CloneTemplateInput struct { // Client is the controller runtime client. Client client.Client @@ -87,6 +88,7 @@ type CloneTemplateInput struct { } // CloneTemplate uses the client and the reference to create a new object from the template. +// Deprecated: use CreateFromTemplate instead. This function will be removed in a future release. func CloneTemplate(ctx context.Context, in *CloneTemplateInput) (*corev1.ObjectReference, error) { from, err := Get(ctx, in.Client, in.TemplateRef, in.Namespace) if err != nil { @@ -114,6 +116,61 @@ func CloneTemplate(ctx context.Context, in *CloneTemplateInput) (*corev1.ObjectR return GetObjectReference(to), nil } +// CreateFromTemplateInput is the input to CreateFromTemplate. +type CreateFromTemplateInput struct { + // Client is the controller runtime client. + Client client.Client + + // TemplateRef is a reference to the template that needs to be cloned. + TemplateRef *corev1.ObjectReference + + // Namespace is the Kubernetes namespace the cloned object should be created into. + Namespace string + + // ClusterName is the cluster this object is linked to. + ClusterName string + + // OwnerRef is an optional OwnerReference to attach to the cloned object. + // +optional + OwnerRef *metav1.OwnerReference + + // Labels is an optional map of labels to be added to the object. + // +optional + Labels map[string]string + + // Annotations is an optional map of annotations to be added to the object. + // +optional + Annotations map[string]string +} + +// CreateFromTemplate uses the client and the reference to create a new object from the template. +func CreateFromTemplate(ctx context.Context, in *CreateFromTemplateInput) (*corev1.ObjectReference, error) { + from, err := Get(ctx, in.Client, in.TemplateRef, in.Namespace) + if err != nil { + return nil, err + } + generateTemplateInput := &GenerateTemplateInput{ + Template: from, + TemplateRef: in.TemplateRef, + Namespace: in.Namespace, + ClusterName: in.ClusterName, + OwnerRef: in.OwnerRef, + Labels: in.Labels, + Annotations: in.Annotations, + } + to, err := GenerateTemplate(generateTemplateInput) + if err != nil { + return nil, err + } + + // Create the external clone. + if err := in.Client.Create(ctx, to); err != nil { + return nil, err + } + + return GetObjectReference(to), nil +} + // GenerateTemplateInput is the input needed to generate a new template. type GenerateTemplateInput struct { // Template is the TemplateRef turned into an unstructured. diff --git a/controllers/external/util_test.go b/controllers/external/util_test.go index 3deb8c0840bf..c78d7a363980 100644 --- a/controllers/external/util_test.go +++ b/controllers/external/util_test.go @@ -97,7 +97,7 @@ func TestCloneTemplateResourceNotFound(t *testing.T) { } fakeClient := fake.NewClientBuilder().Build() - _, err := CloneTemplate(ctx, &CloneTemplateInput{ + _, err := CreateFromTemplate(ctx, &CreateFromTemplateInput{ Client: fakeClient, TemplateRef: testResourceReference, Namespace: metav1.NamespaceDefault, @@ -169,7 +169,7 @@ func TestCloneTemplateResourceFound(t *testing.T) { fakeClient := fake.NewClientBuilder().WithObjects(template.DeepCopy()).Build() - ref, err := CloneTemplate(ctx, &CloneTemplateInput{ + ref, err := CreateFromTemplate(ctx, &CreateFromTemplateInput{ Client: fakeClient, TemplateRef: templateRef.DeepCopy(), Namespace: metav1.NamespaceDefault, @@ -261,7 +261,7 @@ func TestCloneTemplateResourceFoundNoOwner(t *testing.T) { fakeClient := fake.NewClientBuilder().WithObjects(template.DeepCopy()).Build() - ref, err := CloneTemplate(ctx, &CloneTemplateInput{ + ref, err := CreateFromTemplate(ctx, &CreateFromTemplateInput{ Client: fakeClient, TemplateRef: templateRef, Namespace: metav1.NamespaceDefault, @@ -315,7 +315,7 @@ func TestCloneTemplateMissingSpecTemplate(t *testing.T) { fakeClient := fake.NewClientBuilder().WithObjects(template.DeepCopy()).Build() - _, err := CloneTemplate(ctx, &CloneTemplateInput{ + _, err := CreateFromTemplate(ctx, &CreateFromTemplateInput{ Client: fakeClient, TemplateRef: templateRef, Namespace: metav1.NamespaceDefault, diff --git a/controlplane/kubeadm/internal/controllers/helpers.go b/controlplane/kubeadm/internal/controllers/helpers.go index 31034141ca9f..6a916c4bf5b6 100644 --- a/controlplane/kubeadm/internal/controllers/helpers.go +++ b/controlplane/kubeadm/internal/controllers/helpers.go @@ -166,7 +166,7 @@ func (r *KubeadmControlPlaneReconciler) cloneConfigsAndGenerateMachine(ctx conte } // Clone the infrastructure template - infraRef, err := external.CloneTemplate(ctx, &external.CloneTemplateInput{ + infraRef, err := external.CreateFromTemplate(ctx, &external.CreateFromTemplateInput{ Client: r.Client, TemplateRef: &kcp.Spec.MachineTemplate.InfrastructureRef, Namespace: kcp.Namespace, diff --git a/docs/book/src/developer/providers/v1.2-to-v1.3.md b/docs/book/src/developer/providers/v1.2-to-v1.3.md index e3ee7bdf0122..fc92cbee9049 100644 --- a/docs/book/src/developer/providers/v1.2-to-v1.3.md +++ b/docs/book/src/developer/providers/v1.2-to-v1.3.md @@ -18,7 +18,7 @@ in Cluster API are kept in sync with the versions used by `sigs.k8s.io/controlle ### Deprecation -- +- `sigs.k8s.io/cluster-api/controllers/external.CloneTemplate` has been deprecated and will be removed in a future release. Please use `sigs.k8s.io/cluster-api/controllers/external.CreateFromTemplate` instead. ### Removals diff --git a/internal/controllers/machineset/machineset_controller.go b/internal/controllers/machineset/machineset_controller.go index 6a4a5a7b1dad..49da6c01e259 100644 --- a/internal/controllers/machineset/machineset_controller.go +++ b/internal/controllers/machineset/machineset_controller.go @@ -371,7 +371,7 @@ func (r *Reconciler) syncReplicas(ctx context.Context, ms *clusterv1.MachineSet, ) if machine.Spec.Bootstrap.ConfigRef != nil { - bootstrapRef, err = external.CloneTemplate(ctx, &external.CloneTemplateInput{ + bootstrapRef, err = external.CreateFromTemplate(ctx, &external.CreateFromTemplateInput{ Client: r.Client, TemplateRef: machine.Spec.Bootstrap.ConfigRef, Namespace: machine.Namespace, @@ -392,7 +392,7 @@ func (r *Reconciler) syncReplicas(ctx context.Context, ms *clusterv1.MachineSet, machine.Spec.Bootstrap.ConfigRef = bootstrapRef } - infraRef, err = external.CloneTemplate(ctx, &external.CloneTemplateInput{ + infraRef, err = external.CreateFromTemplate(ctx, &external.CreateFromTemplateInput{ Client: r.Client, TemplateRef: &machine.Spec.InfrastructureRef, Namespace: machine.Namespace,