docs: function listAllVms(cb) {
          var limit = undefined;
          var offset = params.offset;
          var vms = [];
          var stop = false;
  
          async.whilst(
              function testAllVmsFetched() {
                  return !stop;
              },
              listVms,
              function doneFetching(fetchErr) {
                  return cb(fetchErr, vms);
              });
  
          function listVms(whilstNext) {
              // These options are passed once they are set for the first time
              // or they are passed by the client calling listImages()
              if (offset) {
                  params.offset += offset;
              } else {
                  params.offset = 0;
              }
  
              if (limit) {
                  params.limit = limit;
              }
  
              self.get(reqOpts, function (listErr, someVms) {
                  if (listErr) {
                      stop = true;
                      return whilstNext(listErr);
                  }
  
                  if (!limit) {
                      limit = someVms.length;
                  }
                  if (!offset) {
                      offset = someVms.length;
                  }
                  if (someVms.length < limit) {
                      stop = true;
                  }
  
                  // We hit this when we either reached an empty page of
                  // results or an empty first result
                  if (!someVms.length) {
                      stop = true;
                      return whilstNext();
                  }
  
                  vms = vms.concat(someVms);
                  return whilstNext();
              });
          }
      }