Skip to content

Allow machine controller to function without the need of a cluster object #644

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 17, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 10 additions & 37 deletions pkg/controller/machine/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,13 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
name := m.Name
klog.Infof("Running reconcile Machine for %s\n", name)

// Cluster might be nil as some providers might not require a cluster object
// for machine management.
cluster, err := r.getCluster(ctx, m)
if err != nil {
// Just log the error here.
klog.V(4).Infof("Cluster not found, machine actuation might fail: %v", err)
}
// If object hasn't been deleted and doesn't have a finalizer, add one
// Add a finalizer to newly created objects.
if m.ObjectMeta.DeletionTimestamp.IsZero() &&
Expand All @@ -138,7 +145,7 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
return reconcile.Result{}, nil
}
klog.Infof("reconciling machine object %v triggers delete.", name)
if err := r.delete(ctx, m); err != nil {
if err := r.actuator.Delete(ctx, cluster, m); err != nil {
klog.Errorf("Error deleting machine object %v; %v", name, err)
if requeueErr, ok := err.(*controllerError.RequeueAfterError); ok {
klog.Infof("Actuator returned requeue-after error: %v", requeueErr)
Expand All @@ -157,19 +164,14 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
return reconcile.Result{}, nil
}

cluster, err := r.getCluster(ctx, m)
if err != nil {
return reconcile.Result{}, err
}

exist, err := r.actuator.Exists(ctx, cluster, m)
if err != nil {
klog.Errorf("Error checking existence of machine instance for machine object %v; %v", name, err)
return reconcile.Result{}, err
}
if exist {
klog.Infof("Reconciling machine object %v triggers idempotent update.", name)
if err := r.update(ctx, m); err != nil {
if err := r.actuator.Update(ctx, cluster, m); err != nil {
if requeueErr, ok := err.(*controllerError.RequeueAfterError); ok {
klog.Infof("Actuator returned requeue-after error: %v", requeueErr)
return reconcile.Result{Requeue: true, RequeueAfter: requeueErr.RequeueAfter}, nil
Expand All @@ -180,7 +182,7 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
}
// Machine resource created. Machine does not yet exist.
klog.Infof("Reconciling machine object %v triggers idempotent create.", m.ObjectMeta.Name)
if err := r.create(ctx, m); err != nil {
if err := r.actuator.Create(ctx, cluster, m); err != nil {
klog.Warningf("unable to create machine %v: %v", name, err)
if requeueErr, ok := err.(*controllerError.RequeueAfterError); ok {
klog.Infof("Actuator returned requeue-after error: %v", requeueErr)
Expand All @@ -191,35 +193,6 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
return reconcile.Result{}, nil
}

func (r *ReconcileMachine) create(ctx context.Context, machine *clusterv1.Machine) error {
cluster, err := r.getCluster(ctx, machine)
if err != nil {
return err
}

return r.actuator.Create(ctx, cluster, machine)
}

func (r *ReconcileMachine) update(ctx context.Context, new_machine *clusterv1.Machine) error {
cluster, err := r.getCluster(ctx, new_machine)
if err != nil {
return err
}

// TODO: Assume single master for now.
// TODO: Assume we never change the role for the machines. (Master->Node, Node->Master, etc)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've lost these comments, but I agree I don't really see why they belong here

return r.actuator.Update(ctx, cluster, new_machine)
}

func (r *ReconcileMachine) delete(ctx context.Context, machine *clusterv1.Machine) error {
cluster, err := r.getCluster(ctx, machine)
if err != nil {
return err
}

return r.actuator.Delete(ctx, cluster, machine)
}

func (r *ReconcileMachine) getCluster(ctx context.Context, machine *clusterv1.Machine) (*clusterv1.Cluster, error) {
clusterList := clusterv1.ClusterList{}
listOptions := &client.ListOptions{
Expand Down