function ensureService()

in lib/services.js [76:112]


function ensureService(target, role, callback) {
  var serviceRegion = (target.region && (target.region.length > 0)) ? target.region : currentRegion;
  var serviceKey    = serviceRegion + '|' + target.type;
  if(target.endpoint) {
    serviceKey = serviceKey + '|' + target.endpoint;
  }

  var service = null;
  var definition = null;

  // We have a valid role, reuse or create the service
  if(! role.services.hasOwnProperty(serviceKey)) {
    role.services[serviceKey] = [];
  }

  if(role.services[serviceKey].length == 0) {
    var options = { region: serviceRegion };
    if(role.credentials) {
      options.credentials = role.credentials;
    }
    if(serviceDefinitions.hasOwnProperty(target.type)) {
      definition = serviceDefinitions[target.type];
      service = definition.create(target, options);
    } else {
      console.error("Error creating service reference '" + target.id + "', type '" + target.type + "' is invalid", JSON.stringify(target));
      callback(new Error("Unknown service type '" + target.type + "'"), null);
      return;
    }
  } else {
    if(config.debug) {
      console.log("Reusing existing service of type '", target.type, "'");
    }
    definition = serviceDefinitions[target.type];
    service = role.services[serviceKey].shift();
  }
  callback(null, { definition: definition, service: service, dispose: function() { role.services[serviceKey].push(service) } });
};