func resourceCloudStackKubernetesClusterUpdate()

in cloudstack/resource_cloudstack_kubernetes_cluster.go [251:321]


func resourceCloudStackKubernetesClusterUpdate(d *schema.ResourceData, meta interface{}) error {
	cs := meta.(*cloudstack.CloudStackClient)
	d.Partial(true)

	if d.HasChange("service_offering") || d.HasChange("size") {
		p := cs.Kubernetes.NewScaleKubernetesClusterParams(d.Id())
		serviceOfferingID, e := retrieveID(cs, "service_offering", d.Get("service_offering").(string))
		if e != nil {
			return e.Error()
		}
		p.SetServiceofferingid(serviceOfferingID)
		p.SetSize(int64(d.Get("size").(int)))
		_, err := cs.Kubernetes.ScaleKubernetesCluster(p)
		if err != nil {
			return fmt.Errorf(
				"Error Scaling Kubernetes Cluster %s: %s", d.Id(), err)
		}
		d.SetPartial("service_offering")
		d.SetPartial("size")
	}

	if d.HasChange("autoscaling_enabled") || d.HasChange("min_size") || d.HasChange("max_size") {
		err := autoscaleKubernetesCluster(d, meta)
		if err != nil {
			return err
		}
		d.SetPartial("autoscaling_enabled")
		d.SetPartial("min_size")
		d.SetPartial("max_size")
	}

	if d.HasChange("kubernetes_version") {
		kubernetesVersionID, e := retrieveID(cs, "kubernetes_version", d.Get("kubernetes_version").(string))
		if e != nil {
			return e.Error()
		}
		p := cs.Kubernetes.NewUpgradeKubernetesClusterParams(d.Id(), kubernetesVersionID)
		_, err := cs.Kubernetes.UpgradeKubernetesCluster(p)
		if err != nil {
			return fmt.Errorf(
				"Error Upgrading Kubernetes Cluster %s: %s", d.Id(), err)
		}
		d.SetPartial("kubernetes_version")
	}

	if d.HasChange("state") {
		state := d.Get("state").(string)
		switch state {
		case "Running":
			p := cs.Kubernetes.NewStartKubernetesClusterParams(d.Id())
			_, err := cs.Kubernetes.StartKubernetesCluster(p)
			if err != nil {
				return fmt.Errorf(
					"Error Starting Kubernetes Cluster %s: %s", d.Id(), err)
			}
		case "Stopped":
			p := cs.Kubernetes.NewStopKubernetesClusterParams(d.Id())
			_, err := cs.Kubernetes.StopKubernetesCluster(p)
			if err != nil {
				return fmt.Errorf(
					"Error Stopping Kubernetes Cluster %s: %s", d.Id(), err)
			}
		default:
			return fmt.Errorf("State must either be 'Running' or 'Stopped'")
		}
		d.SetPartial("state")
	}

	d.Partial(false)
	return resourceCloudStackKubernetesClusterRead(d, meta)
}