code: function(options, callback) {
          var self = this, flavorId, imageId;
  
          ['flavor', 'image', 'name'].forEach(function(required) {
              if (!options[required]) throw new Error('options.' +
                  required + ' is a required argument.');
          });
  
          flavorId = options['flavor'] instanceof rackspace.Flavor ?
              options['flavor'].id : parseInt(options['flavor'], 10);
  
          imageId = options['image'] instanceof rackspace.Image ?
              options['image'].id : options['image'];
  
          var requestOptions = {
              uri: '/servers',
              method: 'POST',
              data: {
                  server: {
                      name: options['name'],
                      imageRef: imageId,
                      flavorRef: flavorId,
                      metadata: options['metadata'],
                      personality: options['personality'] || []
                  }
              }
          };
  
          // Don't set the adminPass on the request unless we've got one
          if (options.adminPass) {
              requestOptions.data.server.adminPass = options.adminPass;
          }
  
          self.authorizedRequest(requestOptions, function(err, res, body) {
              if (err || !body.server) {
                  callback(err ? err : body);
                  return;
              }
  
              callback(err, new rackspace.Server(self, _.extend({}, body.server, options)));
          });
      }
docs: @name Client.createServer
  
  @description Creates a server with the specified options. The flavor / image
  properties of the options can be instances of rackspace-openstack's objects
  (Flavor, Image) OR ids to those entities in Rackspace.
  
  @param {Object}      options     the server options to use in building your server
  @param {Function}    callback    handles the callback of your api call