code: func (cfgs *Configs) Validate(c *validation.Context) {
  	prefixes := make([]string, 0, len(cfgs.GetVms()))
  	for i, cfg := range cfgs.GetVms() {
  		c.Enter("vms config %d", i)
  		if cfg.Prefix == "" {
  			c.Errorf("prefix is required")
  		}
  		// Ensure no prefix is a prefix of any other prefix. Building a prefix tree
  		// and waiting until the end to check this is faster, but config validation
  		// isn't particularly time sensitive since configs are processed asynchronously.
  		for _, p := range prefixes {
  			switch {
  			case strings.HasPrefix(p, cfg.Prefix):
  				c.Errorf("prefix %q is a prefix of %q", cfg.Prefix, p)
  			case strings.HasPrefix(cfg.Prefix, p):
  				c.Errorf("prefix %q is a prefix of %q", p, cfg.Prefix)
  			}
  		}
  		prefixes = append(prefixes, cfg.Prefix)
  		cfg.Validate(c)
  		c.Exit()
  	}
  }
docs: // Validate validates these configs. Kinds must already be applied.