in cloudstack/resource_cloudstack_loadbalancer_rule.go [241:336]
func resourceCloudStackLoadBalancerRuleUpdate(d *schema.ResourceData, meta interface{}) error {
cs := meta.(*cloudstack.CloudStackClient)
// Make sure all required parameters are there
if err := verifyLoadBalancerRule(d); err != nil {
return err
}
if d.HasChange("name") || d.HasChange("description") || d.HasChange("algorithm") {
name := d.Get("name").(string)
// Create new parameter struct
p := cs.LoadBalancer.NewUpdateLoadBalancerRuleParams(d.Id())
if d.HasChange("name") {
log.Printf("[DEBUG] Name has changed for load balancer rule %s, starting update", name)
p.SetName(name)
}
if d.HasChange("description") {
log.Printf(
"[DEBUG] Description has changed for load balancer rule %s, starting update", name)
p.SetDescription(d.Get("description").(string))
}
if d.HasChange("algorithm") {
algorithm := d.Get("algorithm").(string)
log.Printf(
"[DEBUG] Algorithm has changed to %s for load balancer rule %s, starting update",
algorithm,
name,
)
// Set the new Algorithm
p.SetAlgorithm(algorithm)
}
_, err := cs.LoadBalancer.UpdateLoadBalancerRule(p)
if err != nil {
return fmt.Errorf(
"Error updating load balancer rule %s", name)
}
}
if d.HasChange("certificate_id") {
p := cs.LoadBalancer.NewRemoveCertFromLoadBalancerParams(d.Id())
if _, err := cs.LoadBalancer.RemoveCertFromLoadBalancer(p); err != nil {
return err
}
_, certificateID := d.GetChange("certificate_id")
cp := cs.LoadBalancer.NewAssignCertToLoadBalancerParams(certificateID.(string), d.Id())
if _, err := cs.LoadBalancer.AssignCertToLoadBalancer(cp); err != nil {
return err
}
}
if d.HasChange("member_ids") {
o, n := d.GetChange("member_ids")
ombs, nmbs := o.(*schema.Set), n.(*schema.Set)
setToStringList := func(s *schema.Set) []string {
l := make([]string, s.Len())
for i, v := range s.List() {
l[i] = v.(string)
}
return l
}
membersToAdd := setToStringList(nmbs.Difference(ombs))
membersToRemove := setToStringList(ombs.Difference(nmbs))
log.Printf("[DEBUG] Members to add: %v, remove: %v", membersToAdd, membersToRemove)
if len(membersToAdd) > 0 {
p := cs.LoadBalancer.NewAssignToLoadBalancerRuleParams(d.Id())
p.SetVirtualmachineids(membersToAdd)
if _, err := cs.LoadBalancer.AssignToLoadBalancerRule(p); err != nil {
return err
}
}
if len(membersToRemove) > 0 {
p := cs.LoadBalancer.NewRemoveFromLoadBalancerRuleParams(d.Id())
p.SetVirtualmachineids(membersToRemove)
if _, err := cs.LoadBalancer.RemoveFromLoadBalancerRule(p); err != nil {
return err
}
}
}
return resourceCloudStackLoadBalancerRuleRead(d, meta)
}