code: func (w *wizard) manageComponents() {
  	// List all the components we can tear down, along with an entry to deploy a new one
  	fmt.Println()
  
  	var serviceHosts, serviceNames []string
  	for server, services := range w.services {
  		for _, service := range services {
  			serviceHosts = append(serviceHosts, server)
  			serviceNames = append(serviceNames, service)
  
  			fmt.Printf(" %d. Tear down %s on %s\n", len(serviceHosts), strings.Title(service), server)
  		}
  	}
  	fmt.Printf(" %d. Deploy new network component\n", len(serviceHosts)+1)
  
  	choice := w.readInt()
  	if choice < 0 || choice > len(serviceHosts)+1 {
  		log.Error("Invalid component choice, aborting")
  		return
  	}
  	// If the user selected an existing service, destroy it
  	if choice <= len(serviceHosts) {
  		// Figure out the service to destroy and execute it
  		service := serviceNames[choice-1]
  		server := serviceHosts[choice-1]
  		client := w.servers[server]
  
  		if out, err := tearDown(client, w.network, service, true); err != nil {
  			log.Error("Failed to tear down component", "err", err)
  			if len(out) > 0 {
  				fmt.Printf("%s\n", out)
  			}
  			return
  		}
  		// Clean up any references to it from out state
  		services := w.services[server]
  		for i, name := range services {
  			if name == service {
  				w.services[server] = append(services[:i], services[i+1:]...)
  				if len(w.services[server]) == 0 {
  					delete(w.services, server)
  				}
  			}
  		}
  		log.Info("Torn down existing component", "server", server, "service", service)
  		return
  	}
  	// If the user requested deploying a new component, do it
  	w.deployComponent()
  }
docs: // manageComponents displays a list of network components the user can tear down
  // and an option