Skip to content

Commit

Permalink
Merge pull request #31 from evertrue/evertrue/eherot/custom_s3_url
Browse files Browse the repository at this point in the history
Permit customization of S3 API URL
  • Loading branch information
joekiller committed Oct 1, 2014
2 parents b7043e0 + c7aa314 commit fa6b213
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 8 deletions.
2 changes: 2 additions & 0 deletions README.rdoc
Expand Up @@ -23,6 +23,7 @@ Attribute Parameters:
* `aws_secret_access_key` - your AWS secret access key. (optional)
* `token` - token used for temporary IAM credentials. (optional)
* `bucket` - the bucket to pull from.
* `s3_url` - Custom S3 URL. (optional)
* `remote_path` - the S3 key to pull.
* `owner` - the owner of the file. (optional)
* `group` - the group owner of the file. (optional)
Expand All @@ -36,6 +37,7 @@ Example:
bucket "my-s3-bucket"
aws_access_key_id "mykeyid"
aws_secret_access_key "mykey"
s3_url "https://s3.amazonaws.com/bucket"
owner "me"
group "mygroup"
mode "0644"
Expand Down
17 changes: 11 additions & 6 deletions libraries/s3_file.rb
Expand Up @@ -19,15 +19,18 @@ def self.build_headers(date, authorization, token)
return headers
end

def self.get_md5_from_s3(bucket,path,aws_access_key_id,aws_secret_access_key,token)
return get_digests_from_s3(bucket,path,aws_access_key_id,aws_secret_access_key,token)["md5"]
def self.get_md5_from_s3(bucket,url,path,aws_access_key_id,aws_secret_access_key,token)
return get_digests_from_s3(bucket,url,path,aws_access_key_id,aws_secret_access_key,token)["md5"]
end

def self.get_digests_from_s3(bucket,path,aws_access_key_id,aws_secret_access_key,token)
def self.get_digests_from_s3(bucket,url,path,aws_access_key_id,aws_secret_access_key,token)
now, auth_string = get_s3_auth("HEAD", bucket,path,aws_access_key_id,aws_secret_access_key, token)

headers = build_headers(now, auth_string, token)
response = RestClient.head('https://%s.s3.amazonaws.com%s' % [bucket,path], headers)

url = "https://#{bucket}.s3.amazonaws.com" if url.nil?

response = RestClient.head("#{url}#{path}", headers)

etag = response.headers[:etag].gsub('"','')
digest = response.headers[:x_amz_meta_digest]
Expand All @@ -36,12 +39,14 @@ def self.get_digests_from_s3(bucket,path,aws_access_key_id,aws_secret_access_key
return {"md5" => etag}.merge(digests)
end

def self.get_from_s3(bucket,path,aws_access_key_id,aws_secret_access_key,token)
def self.get_from_s3(bucket,url,path,aws_access_key_id,aws_secret_access_key,token)
now, auth_string = get_s3_auth("GET", bucket,path,aws_access_key_id,aws_secret_access_key, token)

url = "https://#{bucket}.s3.amazonaws.com" if url.nil?

headers = build_headers(now, auth_string, token)
# response = RestClient.get('https://%s.s3.amazonaws.com%s' % [bucket,path], headers)
response = RestClient::Request.execute(:method => :get, :url => 'https://%s.s3.amazonaws.com%s' % [bucket,path], :raw_response => true, :headers => headers)
response = RestClient::Request.execute(:method => :get, :url => "#{url}#{path}", :raw_response => true, :headers => headers)

return response
end
Expand Down
4 changes: 2 additions & 2 deletions providers/default.rb
Expand Up @@ -35,7 +35,7 @@
if ::File.exists?(new_resource.path)
if decryption_key.nil?
if new_resource.decrypted_file_checksum.nil?
s3_md5 = S3FileLib::get_md5_from_s3(new_resource.bucket, remote_path, aws_access_key_id, aws_secret_access_key, token)
s3_md5 = S3FileLib::get_md5_from_s3(new_resource.bucket, new_resource.s3_url, remote_path, aws_access_key_id, aws_secret_access_key, token)

if S3FileLib::verify_md5_checksum(s3_md5, new_resource.path)
Chef::Log.debug 'Skipping download, md5sum of local file matches file in S3.'
Expand All @@ -61,7 +61,7 @@
end

if download
response = S3FileLib::get_from_s3(new_resource.bucket, remote_path, aws_access_key_id, aws_secret_access_key, token)
response = S3FileLib::get_from_s3(new_resource.bucket, new_resource.s3_url, remote_path, aws_access_key_id, aws_secret_access_key, token)

# not simply using the file resource here because we would have to buffer
# whole file into memory in order to set content this solves
Expand Down
1 change: 1 addition & 0 deletions resources/default.rb
Expand Up @@ -4,6 +4,7 @@
attribute :bucket, :kind_of => String
attribute :aws_access_key_id, :kind_of => String, :default => nil
attribute :aws_secret_access_key, :kind_of => String, :default => nil
attribute :s3_url, :kind_of => String, :default => nil
attribute :token, :kind_of => String, :default => nil
attribute :owner, :kind_of => [String, NilClass], :default => nil
attribute :group, :kind_of => [String, NilClass], :default => nil
Expand Down

0 comments on commit fa6b213

Please sign in to comment.