code: func (e *Engine) updateVLANs() {
  	e.clusterLock.RLock()
  	cluster := e.cluster
  	e.clusterLock.RUnlock()
  
  	add := make([]*seesaw.VLAN, 0)
  	remove := make([]*seesaw.VLAN, 0)
  
  	e.vlanLock.Lock()
  	defer e.vlanLock.Unlock()
  
  	for key, vlan := range e.vlans {
  		if cluster.VLANs[key] == nil {
  			remove = append(remove, vlan)
  		} else if !vlan.Equal(cluster.VLANs[key]) {
  			// TODO(angusc): This will break any VIPs that are currently configured
  			// on the VLAN interface. Fix!
  			remove = append(remove, vlan)
  			add = append(add, cluster.VLANs[key])
  		}
  	}
  	for key, vlan := range cluster.VLANs {
  		if e.vlans[key] == nil {
  			add = append(add, vlan)
  		}
  	}
  
  	if err := e.ncc.Dial(); err != nil {
  		log.Fatalf("Failed to connect to NCC: %v", err)
  	}
  	defer e.ncc.Close()
  
  	for _, vlan := range remove {
  		log.Infof("Removing VLAN interface %v", vlan)
  		if err := e.lbInterface.DeleteVLAN(vlan); err != nil {
  			log.Fatalf("Failed to remove VLAN interface %v: %v", vlan, err)
  		}
  	}
  	for _, vlan := range add {
  		log.Infof("Adding VLAN interface %v", vlan)
  		if err := e.lbInterface.AddVLAN(vlan); err != nil {
  			log.Fatalf("Failed to add VLAN interface %v: %v", vlan, err)
  		}
  	}
  
  	e.vlans = cluster.VLANs
  }
docs: // updateVLANs creates and destroys VLAN interfaces for the load balancer per
  // the cluster configuration.