class Middleman::Cli::CloudFrontCDN
Constants
- INVALIDATION_LIMIT
Public Class Methods
example_configuration_elements()
click to toggle source
# File lib/middleman-cdn/cdns/cloudfront.rb, line 14 def self.example_configuration_elements { access_key_id: ['"..."', "# default ENV['AWS_ACCESS_KEY_ID']"], secret_access_key: ['"..."', "# default ENV['AWS_SECRET_ACCESS_KEY']"], distribution_id: ['"..."', ""] } end
key()
click to toggle source
# File lib/middleman-cdn/cdns/cloudfront.rb, line 10 def self.key "cloudfront" end
Public Instance Methods
invalidate(options, files, all: false)
click to toggle source
# File lib/middleman-cdn/cdns/cloudfront.rb, line 22 def invalidate(options, files, all: false) options[:access_key_id] ||= ENV['AWS_ACCESS_KEY_ID'] options[:secret_access_key] ||= ENV['AWS_SECRET_ACCESS_KEY'] [:access_key_id, :secret_access_key, :distribution_id].each do |key| if options[key].blank? say_status(ANSI.red{ "Error: Configuration key cloudfront[:#{key}] is missing." }) raise end end cloudfront = ::Fog::CDN.new({ :provider => 'AWS', :aws_access_key_id => options[:access_key_id], :aws_secret_access_key => options[:secret_access_key] }) distribution = cloudfront.distributions.get(options[:distribution_id]) if files.count <= INVALIDATION_LIMIT say_status("Invalidating #{files.count} files... ", newline: false) invalidation = distribution.invalidations.create(:paths => files) if invalidation.status != 'InProgress' say_status(ANSI.red{ ANSI.bold + "Invalidation status is #{invalidation.status}. Expected 'InProgress'." }, header: false) raise end say_status(ANSI.green{ "✔" }, header: false) else slices = files.each_slice(INVALIDATION_LIMIT) say_status("Invalidating #{files.count} files in #{slices.count} batch(es) ") slices.each_with_index do |slice, i| say_status("Invalidating batch #{i + 1}... ", newline: false) invalidation = distribution.invalidations.create(:paths => slice) invalidation.wait_for { ready? } unless i == slices.count - 1 say_status(ANSI.green{ "✔" }, header: false) end end say_status("It might take 10 to 15 minutes until all files are invalidated.") say_status('Please check the AWS Management Console to see the status of the invalidation.') end