code: func (n *Node) KiteFromKey() (*protocol.Kite, error) {
  	// TODO replace "kites" with KitesPrefix constant
  	fields := strings.Split(strings.TrimPrefix(n.Node.Key, "/"), "/")
  	if len(fields) != 8 || (len(fields) > 0 && fields[0] != "kites") {
  		return nil, fmt.Errorf("kontrol: invalid kite %s", n.Node.Key)
  	}
  
  	return &protocol.Kite{
  		Username:    fields[1],
  		Environment: fields[2],
  		Name:        fields[3],
  		Version:     fields[4],
  		Region:      fields[5],
  		Hostname:    fields[6],
  		ID:          fields[7],
  	}, nil
  }
docs: // KiteFromKey returns a *protocol.Kite from an etcd key. etcd key is like:
  // "/kites/devrim/env/mathworker/1/localhost/tardis.local/id"