func()

in src/terraform/providers/terraform-provider-avere/averevfxt.go [2121:2161]


func (a *AvereVfxt) scaleUpCluster(newNodeCount int) error {
	for {
		currentNodeCount, err := a.GetCurrentNodeCount()
		if err != nil {
			return err
		}
		// check if cluster sizing is complete
		if currentNodeCount >= newNodeCount {
			log.Printf("[INFO] vfxt: node count %d >= %d", currentNodeCount, newNodeCount)
			return nil
		}
		log.Printf("[INFO] vfxt: add node to cluster %d (target %d)", currentNodeCount, newNodeCount)

		// the cluster should be stable before and after the addition of the cluster node
		if err = a.EnsureClusterStable(); err != nil {
			return err
		}

		// only add a single node at a time
		err = a.Platform.AddIaasNodeToCluster(a)
		if err != nil {
			return err
		}

		// wait until the node is added
		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 add node after %d retries trying to add node", retries)
			}
			time.Sleep(NodeChangeRetrySleepSeconds * time.Second)
		}
	}
}