class TerraspaceBundler::Mod::Fetcher::S3

Public Instance Methods

download(region, bucket, key, path) click to toggle source
# File lib/terraspace_bundler/mod/fetcher/s3.rb, line 13
def download(region, bucket, key, path)
  # Download to cache area
  response_target = cache_path(path) # temporary path

  unless File.exist?(response_target)
    logger.debug "S3 save archive to #{response_target}".color(:yellow)
    FileUtils.mkdir_p(File.dirname(response_target))
    s3_get(region, response_target, bucket, key)
  end

  # Save to stage
  dest = stage_path(rel_dest_dir)
  extract(response_target, dest)
end
run() click to toggle source
# File lib/terraspace_bundler/mod/fetcher/s3.rb, line 8
def run
  region, bucket, key, path = s3_info
  download(region, bucket, key, path)
end

Private Instance Methods

s3(region) click to toggle source
# File lib/terraspace_bundler/mod/fetcher/s3.rb, line 61
def s3(region)
  Aws::S3::Client.new(region: region)
end
s3_get(region, response_target, bucket, key) click to toggle source
# File lib/terraspace_bundler/mod/fetcher/s3.rb, line 29
    def s3_get(region, response_target, bucket, key)
      s3(region).get_object(
        response_target: response_target,
        bucket: bucket,
        key: key,
      )
    rescue Aws::S3::Errors::NoSuchBucket, Aws::S3::Errors::NoSuchKey => e
      logger.error(<<~EOL.color(:red))
        ERROR: #{e.class} #{e.message}

            bucket: #{bucket}
            key: #{key}

      EOL
      exit 1
    end
s3_info() click to toggle source
# File lib/terraspace_bundler/mod/fetcher/s3.rb, line 46
def s3_info
  path = type_path
  bucket, key = get_bucket_key(path)

  url = @mod.source.sub('s3::','')
  uri = URI(url)
  region = if uri.host == 'https://s3.amazonaws.com'
             'us-east-1'
           else
             uri.host.match(/s3-(.*)\.amazonaws/)[1]
           end

  [region, bucket, key, path]
end