code: func (e *Engine) updateVservers() {
  	e.clusterLock.RLock()
  	cluster := e.cluster
  	e.clusterLock.RUnlock()
  
  	// Delete vservers that no longer exist in the new configuration.
  	for name, vserver := range e.vservers {
  		if cluster.Vservers[name] == nil {
  			log.Infof("Stopping unconfigured vserver %s", name)
  			vserver.stop()
  			<-vserver.stopped
  			delete(e.vservers, name)
  			e.vserverLock.Lock()
  			delete(e.vserverSnapshots, name)
  			e.vserverLock.Unlock()
  		}
  	}
  
  	// Spawn new vservers and provide current configurations.
  	for _, config := range cluster.Vservers {
  		if e.vservers[config.Name] == nil {
  			vserver := newVserver(e)
  			go vserver.run()
  			e.vservers[config.Name] = vserver
  		}
  	}
  	for _, override := range e.overrides {
  		e.distributeOverride(override)
  	}
  	for _, config := range cluster.Vservers {
  		e.vservers[config.Name].updateConfig(config)
  	}
  }
docs: // updateVservers processes a list of vserver configurations then stops
  // deleted vservers, spawns new vservers and updates the existing vservers.