code: function(options, callback) {
          var self = this;
  
          ['name', 'server'].forEach(function(required) {
              if (!options[required]) throw new Error('options.' +
                  required + ' is a required argument.');
          });
  
          var serverId = options.server instanceof rackspace.Server ?
              options.server.id : options.server;
  
          var createImageData = {
              name: options.name
          };
  
          if (options.metadata) {
              createImageData.metadata = options.metadata;
          }
  
          var requestOptions = {
              uri: '/servers/' + serverId + '/action',
              method: 'POST',
              data: {
                  createImage: createImageData
              }
          };
  
          self.authorizedRequest(requestOptions, function(err, res, body) {
              if (err || res.statusCode !== 202) {
                  callback(err);
                  return;
              }
  
              // TODO HACK
              // Rackspace returns a URL to a non-existant End point, so instead
              // we strip the guid off the end of the request and return it as the
              // image Id
              var re = new RegExp("images/([abcdef0-9]{8}-[abcdef0-9]{4}-[abcedf0-9]{4}-[abcdef0-9]{4}-[abcdef0-9]{12})$");
              callback(err, res.headers['location'].match(re)[1]);
          });
      }
docs: @name Client.createServerImage
  
  @description This operation creates a new image for a specified server.
  Once complete, a new image is available that you can use to rebuild or
  create servers.
  
  @param {Object}      options     attributes of the new server to create
  @param {Function}    callback    handles the callback of your api call