@@ -19,6 +19,7 @@ package controllers
1919import (
2020 "context"
2121 "fmt"
22+ "strings"
2223
2324 "github.com/go-logr/logr"
2425 "github.com/pkg/errors"
@@ -29,7 +30,9 @@ import (
2930 kerrors "k8s.io/apimachinery/pkg/util/errors"
3031 "k8s.io/client-go/tools/record"
3132 clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
33+ "sigs.k8s.io/cluster-api/controllers/external"
3234 "sigs.k8s.io/cluster-api/util"
35+ utilconversion "sigs.k8s.io/cluster-api/util/conversion"
3336 "sigs.k8s.io/cluster-api/util/patch"
3437 ctrl "sigs.k8s.io/controller-runtime"
3538 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -131,7 +134,7 @@ func (r *MachineDeploymentReconciler) Reconcile(req ctrl.Request) (_ ctrl.Result
131134 return result , nil
132135}
133136
134- func (r * MachineDeploymentReconciler ) reconcile (_ context.Context , cluster * clusterv1.Cluster , d * clusterv1.MachineDeployment ) (ctrl.Result , error ) {
137+ func (r * MachineDeploymentReconciler ) reconcile (ctx context.Context , cluster * clusterv1.Cluster , d * clusterv1.MachineDeployment ) (ctrl.Result , error ) {
135138 logger := r .Log .WithValues ("machinedeployment" , d .Name , "namespace" , d .Namespace )
136139 logger .V (4 ).Info ("Reconcile MachineDeployment" )
137140
@@ -166,6 +169,17 @@ func (r *MachineDeploymentReconciler) reconcile(_ context.Context, cluster *clus
166169 return ctrl.Result {}, nil
167170 }
168171
172+ // Make sure to reconcile the external infrastructure reference.
173+ if err := r .reconcileExternalReference (ctx , cluster , & d .Spec .Template .Spec .InfrastructureRef ); err != nil {
174+ return ctrl.Result {}, err
175+ }
176+ // Make sure to reconcile the external bootstrap reference, if any.
177+ if d .Spec .Template .Spec .Bootstrap .ConfigRef != nil {
178+ if err := r .reconcileExternalReference (ctx , cluster , d .Spec .Template .Spec .Bootstrap .ConfigRef ); err != nil {
179+ return ctrl.Result {}, err
180+ }
181+ }
182+
169183 msList , err := r .getMachineSetsForDeployment (d )
170184 if err != nil {
171185 return ctrl.Result {}, err
@@ -182,6 +196,18 @@ func (r *MachineDeploymentReconciler) reconcile(_ context.Context, cluster *clus
182196 return ctrl.Result {}, errors .Errorf ("unexpected deployment strategy type: %s" , d .Spec .Strategy .Type )
183197}
184198
199+ func (r * MachineDeploymentReconciler ) reconcileExternalReference (ctx context.Context , cluster * clusterv1.Cluster , ref * corev1.ObjectReference ) error {
200+ if ! strings .HasSuffix (ref .Kind , external .TemplateSuffix ) {
201+ return nil
202+ }
203+
204+ if err := utilconversion .ConvertReferenceAPIContract (ctx , r .Client , ref ); err != nil {
205+ return err
206+ }
207+
208+ return nil
209+ }
210+
185211// getMachineSetsForDeployment returns a list of MachineSets associated with a MachineDeployment.
186212func (r * MachineDeploymentReconciler ) getMachineSetsForDeployment (d * clusterv1.MachineDeployment ) ([]* clusterv1.MachineSet , error ) {
187213 logger := r .Log .WithValues ("machinedeployemnt" , d .Name , "namespace" , d .Namespace )
0 commit comments