code: func Reference(ctx context.Context, client apiclient.APIClient, ref string) (string, error) {
  	if ref == "self" {
  		info, err := client.Info(ctx)
  		if err != nil {
  			return "", err
  		}
  		if info.Swarm.NodeID == "" {
  			// If there's no node ID in /info, the node probably
  			// isn't a manager. Call a swarm-specific endpoint to
  			// get a more specific error message.
  			_, err = client.NodeList(ctx, types.NodeListOptions{})
  			if err != nil {
  				return "", err
  			}
  			return "", errors.New("node ID not found in /info")
  		}
  		return info.Swarm.NodeID, nil
  	}
  	return ref, nil
  }
docs: // Reference returns the reference of a node. The special value "self" for a node
  // reference is mapped to the current node, hence the node ID is retrieved using
  // the `/info` endpoint.