2010-03-17 21:02:11 -07:00
require 'fog/aws/ec2.rb'
2010-05-02 15:13:35 +08:00
require 'fog/aws/elb.rb'
2010-03-14 20:11:43 -07:00
require 'fog/aws/s3'
require 'fog/aws/simpledb'
2010-03-13 13:37:24 -08:00
2009-08-10 08:30:28 -07:00
module Fog
module AWS
2010-05-17 20:50:51 -07:00
def self . indexed_param ( key , values , offset = 0 )
2010-01-31 14:07:26 -08:00
params = { }
2010-05-17 20:50:51 -07:00
unless key . include? ( '%d' )
key << '.%d'
end
2010-01-31 14:07:26 -08:00
[ * values ] . each_with_index do | value , index |
2010-05-17 20:50:51 -07:00
params [ format ( key , index + offset ) ] = value
2010-01-31 14:07:26 -08:00
end
params
end
2010-05-02 13:25:39 -07:00
def self . signed_params ( params , options = { } )
params . merge! ( {
'AWSAccessKeyId' = > options [ :aws_access_key_id ] ,
'SignatureMethod' = > 'HmacSHA256' ,
'SignatureVersion' = > '2' ,
'Timestamp' = > Time . now . utc . strftime ( " %Y-%m-%dT%H:%M:%SZ " ) ,
'Version' = > options [ :version ]
} )
body = ''
for key in params . keys . sort
unless ( value = params [ key ] ) . nil?
body << " #{ key } = #{ CGI . escape ( value . to_s ) . gsub ( / \ + / , '%20' ) } & "
end
end
string_to_sign = " POST \n #{ options [ :host ] } \n / \n " << body . chop
hmac = options [ :hmac ] . update ( string_to_sign )
body << " Signature= #{ CGI . escape ( Base64 . encode64 ( hmac . digest ) . chomp! ) . gsub ( / \ + / , '%20' ) } "
body
end
2010-03-17 21:02:11 -07:00
class Mock
2009-08-21 22:04:12 -07:00
2010-03-17 21:02:11 -07:00
def self . availability_zone
" us-east-1 " << random_selection ( 'abcd' , 1 )
end
2009-09-07 21:25:50 -07:00
2010-03-17 21:02:11 -07:00
def self . box_usage
sprintf ( " %0.10f " , rand / 100 ) . to_f
end
2009-09-11 20:47:32 -07:00
2010-05-14 04:59:33 +08:00
def self . dns_name_for ( ip_address )
" ec2- #{ ip_address . gsub ( '.' , '-' ) } .compute-1.amazonaws.com "
end
def self . private_dns_name_for ( ip_address )
" ip- #{ ip_address . gsub ( '.' , '-' ) } .ec2.internal "
end
2010-03-17 21:02:11 -07:00
def self . console_output
'This is my console. There are many like it, but this one is mine. My console is my best friend. It is my life. I must master it as I master my life. My console, without me, is useless. Without my console, I am useless.'
end
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
def self . etag
hex ( 32 )
end
2009-09-12 11:58:05 -07:00
2010-03-17 21:02:11 -07:00
def self . image
path = [ ]
( rand ( 3 ) + 2 ) . times do
path << letters ( rand ( 9 ) + 8 )
end
{
" imageOwnerId " = > letters ( rand ( 5 ) + 4 ) ,
" productCodes " = > [ ] ,
" kernelId " = > kernel_id ,
" ramdiskId " = > ramdisk_id ,
" imageState " = > " available " ,
" imageId " = > image_id ,
" architecture " = > " i386 " ,
" isPublic " = > true ,
" imageLocation " = > path . join ( '/' ) ,
" imageType " = > " machine "
}
end
2009-09-12 11:58:05 -07:00
2010-03-17 21:02:11 -07:00
def self . image_id
" ami- #{ hex ( 8 ) } "
end
2009-08-16 22:19:35 -07:00
2010-03-17 21:02:11 -07:00
def self . key_fingerprint
fingerprint = [ ]
20 . times do
fingerprint << hex ( 2 )
2009-08-21 22:04:12 -07:00
end
2010-03-17 21:02:11 -07:00
fingerprint . join ( ':' )
end
2009-08-21 22:04:12 -07:00
2010-03-17 21:02:11 -07:00
def self . image_id
" ami- #{ hex ( 8 ) } "
end
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
def self . instance_id
" i- #{ hex ( 8 ) } "
end
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
def self . ip_address
ip = [ ]
4 . times do
ip << numbers ( rand ( 3 ) + 1 ) . to_i . to_s # remove leading 0
2009-08-21 22:04:12 -07:00
end
2010-03-17 21:02:11 -07:00
ip . join ( '.' )
end
2009-08-21 22:04:12 -07:00
2010-03-17 21:02:11 -07:00
def self . kernel_id
" aki- #{ hex ( 8 ) } "
end
2009-08-16 22:19:35 -07:00
2010-03-17 21:02:11 -07:00
def self . key_material
key_material = [ '-----BEGIN RSA PRIVATE KEY-----' ]
20 . times do
key_material << base64 ( 76 )
2009-08-17 09:45:00 -07:00
end
2010-03-17 21:02:11 -07:00
key_material << base64 ( 67 ) + '='
key_material << '-----END RSA PRIVATE KEY-----'
key_material . join ( " \n " )
end
2009-08-17 09:45:00 -07:00
2010-03-17 21:02:11 -07:00
def self . owner_id
numbers ( 12 )
end
2009-09-12 11:58:05 -07:00
2010-03-17 21:02:11 -07:00
def self . ramdisk_id
" ari- #{ hex ( 8 ) } "
end
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
def self . request_id
request_id = [ ]
request_id << hex ( 8 )
3 . times do
request_id << hex ( 4 )
2009-08-21 22:04:12 -07:00
end
2010-03-17 21:02:11 -07:00
request_id << hex ( 12 )
request_id . join ( '-' )
end
2009-08-21 22:04:12 -07:00
2010-03-17 21:02:11 -07:00
def self . reservation_id
" r- #{ hex ( 8 ) } "
end
2009-08-15 15:19:07 -07:00
2010-03-17 21:02:11 -07:00
def self . snapshot_id
" snap- #{ hex ( 8 ) } "
end
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
def self . volume_id
" vol- #{ hex ( 8 ) } "
end
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
private
2009-08-14 10:35:16 -07:00
2010-03-17 21:02:11 -07:00
def self . random_selection ( characters , length )
selection = ''
length . times do
position = rand ( characters . length )
selection << characters [ position .. position ]
2009-08-14 09:18:55 -07:00
end
2010-03-17 21:02:11 -07:00
selection
end
2009-08-14 09:18:55 -07:00
2010-03-17 21:02:11 -07:00
def self . letters ( length )
random_selection (
'abcdefghijklmnopqrstuvwxyz' ,
length
)
end
2009-08-14 09:18:55 -07:00
2010-03-17 21:02:11 -07:00
def self . numbers ( length )
2010-05-13 14:30:57 -07:00
max = ( '9' * length ) . to_i
rand ( max ) . to_s
2010-03-17 21:02:11 -07:00
end
2009-08-14 09:18:55 -07:00
2010-03-17 21:02:11 -07:00
def self . hex ( length )
2010-05-13 14:30:57 -07:00
max = ( 'f' * length ) . to_i ( 16 )
rand ( max ) . to_s ( 16 )
2010-03-17 21:02:11 -07:00
end
2009-08-16 22:19:35 -07:00
2010-03-17 21:02:11 -07:00
def self . base64 ( length )
random_selection (
" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ " ,
length
)
2009-08-14 09:18:55 -07:00
end
2010-03-17 21:02:11 -07:00
end
2009-08-10 08:30:28 -07:00
end
end