• (In progress) Close issue #22, allow detach_volume to take a boolean as a string or TrueClass FalseClass

0.9.17 2010-11-21

* Converted from Jeweler to Bundler, 'bundle install' to install dependencies
* Adding ability to launch t1.micro instances for ec2 regular and spot price instances
* Adding support for describe/modify/reset instance attributes with tests.
* Updated to API version : 2010-08-31
* Added experimental support for EC2 create_tags, describe_tags, delete_tags
* Added experimental Eucalyptus support, provide by Sang-Min Park from Eucalyptus.
* Instead of having hard coded "/" as URL path, the path can be given to as an option. Setup.rb is changed such that server, port, path, and use_ssl can be correctly set up.
* RDS :db_security_groups should be an Array, not a String.
* Use HmacSHA256 signatures instead of SHA1 (preferred by AWS and improves support for Eucalyptus)
* added AWS::EC2::Base#get_password_data for GetPasswordData API (Windows instances)
* Fix #26.  Raise an exception immediately if the response is a 5xx Server Error.
* Applied experimental CloudWatch Monitoring Patch by fred-secludit, removes limitations on which server to connect to, and better handles statistics and dimensions.
* Changed AWS::EC2::Instance from a module to a class to help along an experiment by bdigital
* Zarro open boogs.  Zarro Open pull requests. W00t

0.9.16 2010-07-07

* Less strict checking on which server endpoints you can pass in as an environment var.
* Moved ec2sh script to awshell to better reflect the more comprehensive nature of the gem.
* Better instructions on using awshell upon running
* awshell now sets up handles for all of the various services we use, not just @ec2 (+ @as, @rds, @elb, @cw)
* awshell prints out the various server endpoints that it will actually use in the shell (you can override with env vars).

0.9.11 2010-04-23

* RDS#create_db_instance : renamed misspelled :backend_retention_period option to :backup_retention_period.
* Better handling of FixNum options in a few methods.
* A few bug fixes.

0.9.10 2010-03-26

* Enhancements to EC2 register_image to handle registration based on EBS snapshots (jamespharaoh)

0.9.9 2010-03-19

* Bugfix in signing algorithm (wlach)

0.9.7 2010-03-14

* Added EC2 describe_subnets support (petitbon)

0.9.0 2010-01-19

* Added EC2 Spot Instance Request Support (nirvdrum)
* Added EC2 describe_spot_price_history (tlossen)
* Added ELB describe_instance_health method (rubysolo)

0.7.4 2009-12-05

* Initial support for new EBS AMI's
* Updated EC2 API version
* Added US West 1 Data Center to list of valid endpoints. (us-west-1.ec2.amazonaws.com)
* Updated exceptions.rb to be in sync with latest documented exceptions.
* Updated #run_instances to support EBS AMI's and sync with latest options.
* Added new #stop_instances and #start_instances methods.
* Added new #create_image to allow bundling of a running instance to an EBS backed AMI.
* Added stub methods for all known missing EC2 methods. (Please help with patches + tests!)
* Added and updated tests for new/modified methods.

0.6.1 2009-10-13

* Additional commits for AutoScaling.  Thanks to Ari (auser)!
* Updated README.rdoc installation instructions.  Reflects removal of deprecated GitHub gem building.

0.6.0 2009-09-30

* Added support for AWS AutoScaling for EC2.  Thanks to Ari Lerner (auser)!

0.5.2 2009-08-20

* Converted to YardDoc documentation format. See : http://yard.soen.ca/getting_started

0.5.0 2009-08-11

* Major re-factor by Kris Rasmussen (krisr) to add support for the AWS Elastic Load Balancer API. Kudos Kris!

0.4.0 2009-06-06

* Using technicalpickles/jeweler to manage gem now.  See : http://github.com/technicalpickles/jeweler/tree/master

0.3.8 2009-04-16

* Applied patch, with updated tests to fix issue with base64 encoded user data (rsanheim).
* Applied patch, fixing an issue with EU Signature version 2 creation (delano).

0.3.6 2009-03-02

* You can now specify any arbitrary SSL tcp port to connect to (kerryb)
* Added rake target to quickly install the gem without docs

0.3.5 2009-02-26

* Honor the EC2_URL env var if provided in the main lib
* Some minor modifications to the exceptions raised when unknown

0.3.4 2009-01-31

* Added support in the helper binaries for EC2_URL server url for Euro servers
* AWS Signature v2 support

0.3.3 2009-01-24

* Removed docs related to the ability to get Response#xml which is deprecated
* Fixed conflict when aws/s3 gem was included in user code

0.3.2 2008-12-11

* Updated API version to 2008-12-01
* Note : The new European EC2 zone should just work if you specify ':server => "eu-west-1.ec2.amazonaws.com"' when initializing AWS::EC2::Base.new().  Please report any issues you have with using this new service.

0.3.1 2008-09-18

* Added basic custom kernel id support to run_instances.  Thanks to Keith Hudgins for the patch.

0.3.0 2008-08-24

* Changed response object from AmazonAWS::Response to Hash (patch from Yan Pritzker 'skwp') Thanks!
* Added support for Elastic Block Storage (patch from Yann Klis 'yannski') Thanks!
* Bumped AWS EC2 API version to 2008-05-05
* Bumped gem version number
* Whitespace cleanup

0.2.15 2008-08-20

* Updated gem install instructions, and dependency specifications in the gemspec.

0.2.14 2008-06-30

* Merged patch from 'orionz' which adds support for EC2 Availability Zones.  Thanks!

0.2.12 2008-04-25

* A few adjustments to work with GitHub.

0.2.11 2008-04-25

* Moved gem completely to GitHub.
* Removed a LOT of RubyForge related cruft that's no longer needed.

0.2.10 2008-04-13

* Fix bug where ec2#disassociate_address would return 'undefined method 'reject!' for "xxx.xxx.xxx.xxx":String'.
  Thanks to Brian Thomas for reporting.

0.2.9 2008-03-31

* Added initial support for API version 2008-02-01.  Support for new 'Elastic IP' functionality added.

0.2.8 2008-02-25

* Change HTTP API requests to use POST instead of GET.  Based on patch #18380 from 'anonymous'.

0.2.7 2008-02-17

* Add support for HTTP Proxy when :proxy_server argument is passed.  Based on patch from Mathias Dalheimer.

0.2.6 2007-10-16

* Updated to support EC2 API version 2007-08-29 released on 2007-10-16
* Supports new instances type feature.  Specify an instance type to launch
  (m1.small, m1.large, m1.xlarge) when you call the 'run_instances' method.

  e.g. add to the params hash ':instance_type => "m1.small"'
 * RunInstances and DescribeInstances now return the time when the Amazon EC2 instance was launched.
 * Code Tidyup : Removed trailing spaces in code docs.

0.2.5 2007-09-26

* Updated using Dr. Nic's newgem v. 0.13.5
* Updated email address.
* No functional changes in the gem.

0.2.4 2007-07-09

* Changed how require statement for xmlsimple is called so we don't get warnings when running in rails.
Now it looks like: require 'xmlsimple' unless defined? XmlSimple

0.2.3 2007-07-06

* Updated gem to work with new official release of AWS API version 2007-03-01 which occurred
on July 6, 2007.
 * Added support for primary new feature which supports Paid AMI's and the product codes
 associated with them.  Modified several methods to support this change, updated the test
 cases, and added a new method EC2#confirm_product_instance.

0.2.2 2007-07-03

* Minor change to test case.

0.2.1 2007-07-03

* Some minor changes to the RDocs and README.txt

0.2.0 2007-07-03

* MAJOR library changes : THESE CHANGES ARE NOT BACKWARD COMPATIBLE!!  You will need to update
the way in which you make calls, handle responses, and rescue exceptions from this library.
If you prefer not to make these changes you can feel free to continue to use the older version
of the gem.  These older versions however will no longer be maintained.

* MAJOR refactoring of how methods calls are made.  Now all methods are called with a simple hash
of arguments and none of them are positional.  This feels much more "Ruby'ish".

* MAJOR refactoring of how responses are returned to users.  No longer do you have to call the
.parse method, and no longer are you getting back simple arrays of information.  Responses
now come in the form of OpenStruct objects that contain all of the data for an object in
Enumerable form so you can use iterators (.each, .each_pair, etc).  All methods return an AWS::Response object
which inherits from OpenStruct.  The return data from EC2, which is in XML form, is parsed
with XmlSimple and is used to directly construct the return data structure.  This allows us
to know with some confidence that the data structure returned from AWS will always be consistent
with this library's responses.  There is also an .xml attribute for each response object that lets you
see the full and complete XML response from AWS if that is useful to you.

* Added an exception framework which will now throw appropriate Ruby exceptions
that match those handed to us by Amazon EC2.  ArgumentError exceptions will also
be thrown if you are making calls we know to be illegal or malformed.  You should rescue
these exceptions in your application instead of parsing text responses.  All exceptions
descend from AWS::Error.  You can see them all in exceptions.rb in the gem install.

* Added a full suite of test/spec unit tests which currently cover 100% of the public methods
in this library.  We have abot 92% code coverage according to rcov.  This has greatly enhanced
the reliability of the library as well as our confidence in the code.
We used to have 0% test coverage. :-/

* Added an EC2 command shell : 'ec2sh' which can be called from anywhere and gives you
an interactive irb session with an EC2 connection pre-made for you as @ec2.  You can use this
to interactively execute any command on EC2 that this library supports.  Try @ec2.methods.sort
or @ec2.describe_images to test it out.  You must first setup two shell environment variables
which contain your ACCESS_KEY_ID and SECRET_ACCESS_KEY for this to work.  Otherwise an error
will be thrown when you try to start it.  This is way cool and shamelessly borrowed from
Marcel Molina's fine AWS::S3 library.

* Updated API version in the query API request to 2007-01-19, and added all known method calls
in this version of the API to the gem (including reboot, viewing console output, NAT addressing
and more!)

* Removed .parse method as it is no longer needed or wanted.

* Removed 'verbose' attribute writer and a couple of related debug 'puts' calls in EC2.rb.

* Removed deprecated alias's used in the library that were added in v0.0.3

* Gem now requires XmlSimple gem to be installed.

0.1.0 2007-05-30

* Repackaged with updated newgem generator v. 0.10.3 from http://newgem.rubyforge.org/ to take advantage of new deployment goodness.

0.0.7 2007-03-15

* Applied patch from Kevin Clark which does the following:
  * New method to the instances.rb to allow for issuing a reboot command to an EC2 instance.
  * New Mocha based tests (Mocha test suite must be installed to run tests.  'sudo gem install mocha')
  * Cleanup of the test directory.
* Applied patch from Randy Bias related to CGI escaping error.  From his notes:

I finally figured out what was going on.  It was a compound problem.  The first being that you can't
CGI::encode the UserData early.    You have to just Base64 encode it.  Unfortunately, when you Base64
encode it, it means that some encodings will be padded with extra chars, specifically the '=', but &, ?
and = get stripped by EC2.canonial_string.  So if a Base64 encoding has trailing ='s for padding,
these get stripped and then you sign the UserData Base64 payload sans the padding.  But it looks
like Amazon's side is doing the right thing and is signing the padding.  So, the signatures mis-match.

I've got the complete patch here and it's about as elegant/clean as I could make it in a short
period of time.  It's a little tough to strip those equal signs when there are so many in the URI.
I think this works pretty well, though.  I'm splitting the URI on '&', then for each field ripping
out all '&' and '?' and only the first '='.  Then stitching it back together.

0.0.6 2007-03-02

* Patched instances.rb with a bugfix and patch provided by Randy Bias (Thanks Randy!).
Only minimally tested so please let me know if this causes any problems for anyone.

From his notes:
I wanted to let you know that there appears to be a bug in how user data is passed.  In
instances.rb the line that creates the base64 encoded package of user data is as follows:

userData = CGI::escape(Base64.encode64(in_params[:userData]).strip())

This may have worked prior, but at least right now the CGI::escape appears to cause a
breakage.  More specifically it turns something like this (the actual base64 encoded string):

YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh
eHh4eHh4eHh4eHh4eHh4eHh4eHgg

Into this:

YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh%
0AeHh4eHh4eHh4eHh4eHh4eHh4eHgg

And it looks like EC2 chokes on the %0, which is CGI::escape's way for handling an EOL.
Unfortunately, the Base64.encode64 (at least in my 1.8.5 version of Ruby) inserts a
EOL at every 47 chars, no matter what:

---
[randyb@master randyb] cat /tmp/foo.rb
#!/usr/bin/env ruby
#
require 'rubygems'
require_gem 'amazon-ec2'
require 'getoptlong'
puts Base64.encode64
("012345678901234567890123456789012345678901234567890123456789")

[randyb@master randyb] /tmp/foo.rb
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5
---

The best way to handle this is to strip the CRLFs/EOLs before passing to CGI.escape.

0.0.5 2006-12-21

* Changes to home page documentation and example files to indicate that you
  should use 'require_gem' instead of a simple require.  Not sure if this
  is a result of something I am doing in the packaging of the gem that is
  incorrect or if this is right and proper.  I will investigate further.
* Patched instances.rb run_instances method to allow for submission of
  user data with the command to start an instance.  Patch submitted
  anonymously on RubyForge.  This had not been functionally implemented
  in the Amazon Web Services sample library prior to this patch.
* Added simple framework for adding unit tests for the library under test dir.
  No functional unit tests exist yet.

0.0.4 2006-12-21

* Applied patch from Kevin Clark to svn version 7.  Thanks for the
  patch and the description Kevin!  Please report if you
  encounter any issues with this patched version.  Here is Kevin's
  description which I requested :  "It helps me to think of modules as boxes full of classes and
  methods.  REXML is a module which holds various classes related to parsing XML
  including REXML::Node, REXML::Document and REXML::XPath. When you
  include a module it takes everything out of the box and places it in
  the local context.  So, when you include REXML in the global namespace
  on line 27 of EC2.rb, it includes classes called Node, Document and XPath in the
  global object space. This means that I can't have a class called Node
  in my own project (which I do). The library would be a much better
  neighbor if it instead accessed the REXML::Document and REXML::XPath
  classes explicitly through the module."

0.0.3 2006-12-16

* API CHANGE : Changed method name 'authorize' to 'authorize_security_group_ingress' to ensure consistent
  naming of Ruby library methods to match AWS EC2 API actions. Alias to 'authorize' for backwards compatibility.
* API CHANGE : Changed method name 'revoke' to 'revoke_security_group_ingress' to ensure consistent
 naming of Ruby library methods to match AWS EC2 API actions. Alias to 'revoke' for backwards compatibility.
* API CHANGE : Changed method name 'delete_securitygroup' to 'delete_security_group' to ensure consistent
 naming of Ruby library methods to match AWS EC2 API actions. Alias to 'delete_securitygroup' for backwards compatibility.
* API CHANGE : Changed method name 'describe_securitygroups' to 'describe_security_group' to ensure consistent
 naming of Ruby library methods to match AWS EC2 API actions. Alias to 'describe_securitygroups' for backwards compatibility.
* API CHANGE : Changed method name 'create_securitygroup' to 'create_security_group' to ensure consistent
 naming of Ruby library methods to match AWS EC2 API actions. Alias to 'create_securitygroup' for backwards compatibility.
* Added many API rdoc's, some method descriptions copied from Amazon Query API Developer Guide.
* Extracted some parts of the formerly monolithic EC2 library out into separate files for manageability.
* Changed the HTTP 'User-Agent' string used for each request so that we have our own user agent
  to identify this library's calls.  Now set the version # in the user agent string based on the
  master version number for this library which is stored in lib/EC2/version.rb and should only
  be defined in one place.
* Set @http.verify_mode = OpenSSL::SSL::VERIFY_NONE to avoid seeing SSL Cert warning
  "warning: peer certificate won't be verified in this SSL session". File EC2.rb:96
* Make 'pathlist' utility method a private method (EC2.rb:111).  No reason I can see for this to be exposed.

0.0.2 2006-12-14

* Bugfix in run_instances method.  Method works now.  Patch submitted by Stephen Caudill on AWS forums.  Thanks!

0.0.1 2006-12-13

* Initial release of the Ruby Gem.  This includes the version of the library exactly as provided by
  Amazon Web Services as example code.  No changes or enhancements to that code were made other than
  packaging it as a Ruby Gem.
* RubyForge project created.  http://github.com/grempe/amazon-ec2/tree/master