28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/middleman-cloudfront/commands.rb', line 28
def invalidate(options = nil, files = nil)
if options.nil?
app_instance = ::Middleman::Application.server.inst
unless app_instance.respond_to?(:cloudfront_options)
raise Error, <<-TEXT
ERROR: You need to activate the cloudfront extension in config.rb.
The example configuration is:
activate :cloudfront do |cf|
cf.access_key_id = 'I'
cf.secret_access_key = 'love'
cf.distribution_id = 'cats'
cf.filter = /\.html/i # default /.*/
cf.after_build = true # default is false
end
TEXT
end
options = app_instance.cloudfront_options
end
options.filter ||= /.*/
[:access_key_id, :secret_access_key, :distribution_id, :filter].each do |key|
raise StandardError, "Configuration key #{key} is missing." if options.public_send(key).nil?
end
puts "## Invalidating files on CloudFront"
fog_options = {
:provider => 'AWS'
}
if options.access_key_id && options.secret_access_key
fog_options.merge!({
:aws_access_key_id => options.access_key_id,
:aws_secret_access_key => options.secret_access_key
})
else
fog_options.merge!({:use_iam_profile => true})
end
cdn = Fog::CDN.new(fog_options)
distribution = cdn.distributions.get(options.distribution_id)
files = normalize_files(files || list_files(options.filter))
return if files.empty?
if files.count <= INVALIDATION_LIMIT
puts "Invalidating #{files.count} files. It might take 10 to 15 minutes until all files are invalidated."
puts 'Please check the AWS Management Console to see the status of the invalidation.'
invalidation = distribution.invalidations.create(:paths => files)
raise StandardError, %(Invalidation status is #{invalidation.status}. Expected "InProgress") unless invalidation.status == 'InProgress'
else
slices = files.each_slice(INVALIDATION_LIMIT)
puts "Invalidating #{files.count} files in #{slices.count} batch(es). It might take 10 to 15 minutes per batch until all files are invalidated."
slices.each_with_index do |slice, i|
puts "Invalidating batch #{i + 1}..."
invalidation = distribution.invalidations.create(:paths => slice)
invalidation.wait_for { ready? } unless i == slices.count - 1
end
end
end
|