func()

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
		}
	}
}