anchor.diff:          "apiVersion": "0.32",
           "bootTime": "2015-12-18T19:44:23.000Z",
           "commonVersion": "0.12",
  -        "kbVersion": "0.15.11-SNAPSHOT",
  +        "kbVersion": "0.15.11",
           "lastUpdatedDate": "2015-12-18T19:44:23.000Z",
  -        "nodeName": "GM17573-8080",
  +        "nodeName": "127.0.0.1-8080",
           "platformVersion": "0.19",
           "pluginApiVersion": "0.18",
           "pluginsInfo": [
  
positive.code: [[overview]]
  == Overview
  
  Started with Kill Bill 0.16.0, it is now possible to go through all the lifecycle (`install`, `start`, `stop`, `uninstall` and `list status`) of a plugin using apis.
  The apis have been designed to work on a killbill deployment that consists of several instances.
  
  The feature relies on the following pieces:
  
  * A running version of a (or several) killbill server(s)
  * A running https://github.com/killbill/killbill-kpm-plugin[KPM plugin] on each killbill instance.
  
  Installing the KPM plugin will first need to happen using https://github.com/killbill/killbill-cloud/tree/master/kpm[KPM] itself.
  
  
negative.code: 
  === Multi-node Implementation
  
  Each Kill Bill node writes to the database the details about its versions and plugins right after it has started. When there is any change in the system, each node is notified through a broadcast mechanism: each node then updates its entry guaranting that at any time the info matches the current state.
  
  The broadcast mechanism is based on a simple mechanism where each node polls periodically a database table shwoing the command to execute. When the system (each node) picks up a new entry, it then sends a special bus event, so that different Kill Bill components and plugins can react to the event and carry out the action.
  
  === Installation/Uninstallation 
  
  Installing/uninstalling a plugin using the API is slightly different than installing/uninstalling the plugin using KPM directly. The main reason has to do with the `pluginKey`:
  
  * When installing/uninstalling a plugin using the API, one must provide a `pluginKey`. KPM will update a configuration file under `ROOT/plugins/plugin_identifiers.json` to keep the mapping between that `pluginKey` and the `pluginName` which is the location on the filesystem where this plugin is being deployed (`ROOT/plugins/{java|ruby}/pluginName/pluginVersion`)
  * When installing/uninstalling a plugin directly through KPM, one does not need to provide a `pluginKey` and the mapping is not created.
  
  === KPM Plugin
  
  Plugin installation and uninstallation is handled by the KPM plugin, whose role is to simply listen for bus events to then delegate the installation/uninstallation the the KPM gem and then notify Kill Bill about the result.
  
  For all other operations (start/stop/restart), the KPM plugin is not involved.
  