def bundle_instance(instance_id, s3_bucket, s3_prefix,
s3_owner_aws_access_key_id=nil, s3_owner_aws_secret_access_key=nil,
s3_expires = S3Interface::DEFAULT_EXPIRES_AFTER,
s3_upload_policy='ec2-bundle-read')
s3_owner_aws_access_key_id ||= @aws_access_key_id
s3_owner_aws_secret_access_key ||= @aws_secret_access_key
s3_expires = Time.now.utc + s3_expires if s3_expires.is_a?(Fixnum) && (s3_expires < S3Interface::ONE_YEAR_IN_SECONDS)
policy = { 'expiration' => AwsUtils::utc_iso8601(s3_expires),
'conditions' => [ { 'bucket' => s3_bucket },
{ 'acl' => s3_upload_policy },
[ 'starts-with', '$key', s3_prefix ] ] }.to_json
policy64 = Base64.encode64(policy).gsub("\n","")
signed_policy64 = AwsUtils.sign(s3_owner_aws_secret_access_key, policy64)
params = { 'InstanceId' => instance_id,
'Storage.S3.AWSAccessKeyId' => s3_owner_aws_access_key_id,
'Storage.S3.UploadPolicy' => policy64,
'Storage.S3.UploadPolicySignature' => signed_policy64,
'Storage.S3.Bucket' => s3_bucket,
'Storage.S3.Prefix' => s3_prefix,
}
link = generate_request("BundleInstance", params)
request_info(link, QEc2BundleInstanceParser.new)
rescue Exception
on_exception
end