in src/terraform/providers/terraform-provider-avere/averevfxt.go [2164:2217]
func (a *AvereVfxt) scaleDownCluster(newNodeCount int) error {
// the cluster should be stable before and after the removal of the cluster node
if err := a.EnsureClusterStable(); err != nil {
return err
}
for {
currentNodeCount, err := a.GetCurrentNodeCount()
if err != nil {
return err
}
// check if cluster sizing is complete
if currentNodeCount <= newNodeCount {
return nil
}
// remove the last node
lastNode, err := a.GetLastNode()
if err != nil {
return err
}
if err = a.removeNodeFromCluster(lastNode); err != nil {
return err
}
// wait until the node is removed
targetNodeCount := currentNodeCount - 1
for retries := 0; ; retries++ {
nodeCount, err := a.GetCurrentNodeCount()
if err != nil {
return err
}
if nodeCount <= targetNodeCount {
break
}
if retries > NodeChangeRetryCount {
return fmt.Errorf("Failure to delete after %d retries trying to delete node", retries)
}
time.Sleep(NodeChangeRetrySleepSeconds * time.Second)
}
if err = a.EnsureClusterStable(); err != nil {
return err
}
// only delete the IaaS Node after the cluster is stable
if err = a.Platform.DeleteVfxtIaasNode(a, lastNode); err != nil {
return err
}
}
}