Skip to content

Commit

Permalink
StorageCluster: remove node taints during uninstall
Browse files Browse the repository at this point in the history
Signed-off-by: Raghavendra Talur <raghavendra.talur@gmail.com>
(cherry picked from commit 6c1d49d)
  • Loading branch information
raghavendra-talur committed Jun 22, 2020
1 parent d94ae46 commit b524798
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
5 changes: 5 additions & 0 deletions pkg/controller/storagecluster/reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -1170,6 +1170,11 @@ func (r *ReconcileStorageCluster) deleteResources(sc *ocsv1.StorageCluster, reqL
finalerr = fmt.Errorf("%w, %v", finalerr, err)
}

err = r.deleteNodeTaint(sc, reqLogger)
if err != nil {
finalerr = fmt.Errorf("%w, %v", finalerr, err)
}

return finalerr
}

Expand Down
49 changes: 49 additions & 0 deletions pkg/controller/storagecluster/uninstall_reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/go-logr/logr"
ocsv1 "github.com/openshift/ocs-operator/pkg/apis/ocs/v1"
"github.com/openshift/ocs-operator/pkg/controller/defaults"
corev1 "k8s.io/api/core/v1"
storagev1 "k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/types"
Expand Down Expand Up @@ -93,3 +94,51 @@ func (r *ReconcileStorageCluster) deleteNodeAffinityKeyFromNodes(sc *ocsv1.Stora
}
return nil
}

// deleteNodeTaint deletes the default NodeTolerationKey from the OCS nodes
func (r *ReconcileStorageCluster) deleteNodeTaint(sc *ocsv1.StorageCluster, reqLogger logr.Logger) (err error) {

nodes, err := r.getStorageClusterEligibleNodes(sc, reqLogger)
if err != nil {
reqLogger.Error(err, fmt.Sprintf("Unable to obtain the list of nodes eligible for the Storage Cluster"))
return nil
}
for _, node := range nodes.Items {
reqLogger.Info(fmt.Sprintf("Deleting OCS NodeTolerationKey from the node %s", node.Name))
new := node.DeepCopy()
new.Spec.Taints = make([]corev1.Taint, 0)
for _, taint := range node.Spec.Taints {
if defaults.NodeTolerationKey == taint.Key {
continue
}
new.Spec.Taints = append(new.Spec.Taints, taint)
}

oldJSON, err := json.Marshal(node)
if err != nil {
reqLogger.Error(err, fmt.Sprintf("Unable to remove the NodeTolerationKey from the node %s", node.Name))
continue
}

newJSON, err := json.Marshal(new)
if err != nil {
reqLogger.Error(err, fmt.Sprintf("Unable to remove the NodeTolerationKey from the node %s", node.Name))
continue
}

patch, err := strategicpatch.CreateTwoWayMergePatch(oldJSON, newJSON, node)
if err != nil {
reqLogger.Error(err, fmt.Sprintf("Unable to remove the NodeTolerationKey from the node %s", node.Name))
continue
}

err = r.client.Patch(context.TODO(), &node, client.RawPatch(types.StrategicMergePatchType, patch))
if err != nil {
reqLogger.Error(err, fmt.Sprintf("Unable to remove the NodeTolerationKey from the node %s", node.Name))
continue
}

}

return nil
}

0 comments on commit b524798

Please sign in to comment.