There is a popular Ruby cloud library called Fog. I’ve seen a number of applications that use this for connecting to AWS EC2. I’ve done some testing and it is pretty simple to get Fog talking to Eucalyptus. The first thing you need are your access id and secret key, much like you’d get from EC2. These are available on the credentials tab in Eucalyptus. The other thing you need to specify is the endpoint. In the case of Eucalyptus, that will point to the cloud endpoint for your private cloud (or in this example, the Eucalyptus Community Cloud).
This is an example credentials file, stored in ~/.fog
####################################################### # Fog Credentials File # :default: :aws_access_key_id: IyJWpgObMl2Yp70BlWEP4aNGMfXdhL0FtAx4cQ :aws_secret_access_key: 7DeDGG2YMOnOqmWxwnHD5x9Y0PKbwE3xttsew :endpoint: http://ecc.eucalyptus.com:8773/services/Eucalyptus
Notice that the eucalyptus endpoint requires port 8773 and the “/services/Eucalyptus” path.
You can use the Fog interactive tool to test this out. Notice we’re using the AWS compute provider because the Eucalyptus cloud is API compatible with EC2.
# fog Welcome to fog interactive! :default provides AWS and AWS >> servers = Compute[:aws].servers <Fog::Compute::AWS::Servers filters={} [] > >>
As you can see, there are no servers running. By replacing “servers” with “images”, you can show a list of images available on the ECC.
To start an instance, you can run a command like this;
>> servers = Compute[:aws].servers.create(:image_id => 'emi-9ACB1363', :flavor_id => 'm1.small') <Fog::Compute::AWS::Server id="i-3D7A079C", ami_launch_index=0, availability_zone="open", block_device_mapping=[], client_token=nil, dns_name="euca-0-0-0-0.eucalyptus.eucasys.com", groups=["default"], flavor_id="m1.small", image_id="emi-9ACB1363", kernel_id="eki-6CBD12F2", key_name=nil, created_at=Wed Oct 19 15:19:16 UTC 2011, monitoring=false, placement_group=nil, platform=nil, product_codes=[], private_dns_name="euca-0-0-0-0.eucalyptus.internal", private_ip_address=nil, public_ip_address=nil, ramdisk_id="eri-A97113E4", reason="NORMAL: -- []", root_device_name=nil, root_device_type=nil, state="pending", state_reason=nil, subnet_id=nil, tenancy=nil, tags=nil, user_data=nil > >> servers = Compute[:aws].servers <Fog::Compute::AWS::Servers filters={} [ <Fog::Compute::AWS::Server id="i-3D7A079C", ami_launch_index=0, availability_zone="open", block_device_mapping=[], client_token=nil, dns_name="euca-0-0-0-0.eucalyptus.eucasys.com", groups=["default"], flavor_id="m1.small", image_id="emi-9ACB1363", kernel_id="eki-6CBD12F2", key_name=nil, created_at=Wed Oct 19 15:19:16 UTC 2011, monitoring=false, placement_group=nil, platform=nil, product_codes=[], private_dns_name="euca-0-0-0-0.eucalyptus.internal", private_ip_address=nil, public_ip_address=nil, ramdisk_id="eri-A97113E4", reason="NORMAL: -- []", root_device_name=nil, root_device_type=nil, state="pending", state_reason={}, subnet_id=nil, tenancy=nil, tags={}, user_data=nil > ] >
You’ll notice that now the instance (which is in “pending” state) appears in the list of servers.
I won’t show more here, but we’ve established basic connectivity to a Eucalyptus cloud. I hope this helps enable many existing and new applications to work with Eucalyptus!
Are there any actual workloads running on the ECC? I presume that Euca reserves the right to reset everything at a moment’s notice… or is that true?
Right, the ECC is for kicking the tires, and not much more. There’s an SLA posted here: http://open.eucalyptus.com/try/community-cloud#SLA