Class: Ipecache::Plugins::CloudFront

Inherits:
Plugin
  • Object
show all
Defined in:
lib/ipecache/plugins/cloudfront.rb

Instance Method Summary collapse

Methods inherited from Plugin

#continue_on_error, #enabled?, hook, hooks, #initialize, #log_file, name, #name, #plugin_puts, #plugin_puts_error, #quiet_mode, #urls

Constructor Details

This class inherits a constructor from Ipecache::Plugins::Plugin

Instance Method Details

#performObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
# File 'lib/ipecache/plugins/cloudfront.rb', line 9

def perform
  safe_require 'aws-sdk-v1'
  safe_require 'uri'

  access_key_id = config.access_key_id
  secret_access_key = config.secret_access_key
  region = config.region
  distributions = config.distributions
  batch_size = config.batch_size || 3000

  if access_key_id.nil?
    plugin_puts "Cloudfront access id not specified, Exiting..."
    exit 1
  end

  if secret_access_key.nil?
    plugin_puts "Cloudfront access key not specified, Exiting..."
    exit 1
  end

  if distributions.nil?
    plugin_puts "Cloudfront distributions not specified, Exiting..."
    exit 1
  end

  if region.nil?
    plugin_puts "Cloudfront region not specified, Exiting..."
    exit 1
  end

  plugin_puts "Beginning URL Purge from CloudFront..."

  AWS.config(
  :access_key_id => access_key_id,
  :secret_access_key => secret_access_key,
  :region => region
  )
  cf = AWS::CloudFront.new()

  urls.each_slice(batch_size) do |u|
    paths = []
    u.each { |x| paths << URI.parse(x).path}
    distributions.each do |distri|
      plugin_puts "Purging #{u.length} items from #{distri}"
      result = cf.client.create_invalidation(
        :distribution_id => distri,
        :invalidation_batch => {
          :paths => {
            :quantity => paths.length,
            :items => paths
          },
          :caller_reference => "Ipecache_#{Time.now}"
        }
      )
      plugin_puts "#{result[:id]}: #{result[:status]}, #{result[:invalidation_batch][:paths][:items].length} item(s)"
    end
    plugin_puts "This invalidation costs #{paths.length*0.005} Euro"
  end
end