Module: CloudFrontInterativeInvalidator

Defined in:
lib/cloud_front_interative_invalidator.rb,
lib/cloud_front_interative_invalidator/version.rb

Constant Summary collapse

VERSION =
"0.0.2"

Class Method Summary collapse

Class Method Details

.create_invalidation(distribution_id) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/cloud_front_interative_invalidator.rb', line 72

def self.create_invalidation(distribution_id)
  puts "Input the path to be invalidated:"
  paths = []
  paths << gets.chomp
  options = {distribution_id: distribution_id, invalidation_batch: { paths: { quantity: paths.size, items: paths } , caller_reference: rand.to_s }}
  tp AWS::CloudFront::Client.new.create_invalidation(options).data
  show_distribution(distribution_id)
end

.get_invalidation(distribution_id, invalidation_id) ⇒ Object



81
82
83
# File 'lib/cloud_front_interative_invalidator.rb', line 81

def self.get_invalidation(distribution_id, invalidation_id)
  tp AWS::CloudFront::Client.new.get_invalidation(distribution_id: distribution_id, id: invalidation_id).data
end

.list_distributions(options = {}) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cloud_front_interative_invalidator.rb', line 28

def self.list_distributions(options={})
  distributions = []
  AWS::CloudFront::Client.new.list_distributions[:items].each_with_index do |item, index|
    distributions << { number: index + 1, id: item[:id], domain_name: item[:domain_name], origins: item[:origins][:items].map{|i| i[:domain_name]}.join(',') }
  end
  tp distributions

  begin
    puts "Input the number of the distribution (or anything else to quit):"
    distribution_input = gets.chomp
    return unless distribution_input.match(/^[0-9]+$/)
    distribution_index = distribution_input.to_i - 1
  end until distribution_index < distributions.size && distribution_index > 0
  distribution_id = distributions[distribution_index][:id]
  show_distribution(distribution_id) if distribution_id
end

.list_invalidations(distribution_id = nil) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'lib/cloud_front_interative_invalidator.rb', line 61

def self.list_invalidations(distribution_id=nil)
  begin
    invalidations = AWS::CloudFront::Client.new.list_invalidations(distribution_id: distribution_id)
    tp invalidations[:items]
    puts "Refresh? (y/n)"
  end while gets.chomp.downcase == 'y'
  invalidation_id = nil
  #get_invalidation(distribution_id, invalidation_id)
  show_distribution(distribution_id)
end

.show_distribution(distribution_id) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/cloud_front_interative_invalidator.rb', line 45

def self.show_distribution(distribution_id)
  #tp AWS::CloudFront::Client.new.get_distribution(id: distribution_id).data
  puts "Distribution #{distribution_id} selected."
  puts "l/list: list invalidations"
  puts "c/create: create invalidations"
  puts "q/quit: quit current step"
  actions = {
    /^(l|list)$/ => :list_invalidations,
    /^(c|create)$/ => :create_invalidation,
    /^(q|quit)$/ => :list_distributions,
  }
  action = gets.chomp
  method_name = actions.select{|k,v| k.match(action)}.values.first
  send(method_name, distribution_id)
end

.start(params = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/cloud_front_interative_invalidator.rb', line 7

def self.start(params={})
  tp.set :max_width, 100

  if ENV['AWS_ACCESS_KEY_ID'].nil?
    puts "Input AWS access key id:"
    ENV['AWS_ACCESS_KEY_ID'] = gets.chomp
  end

  if ENV['AWS_SECRET_ACCESS_KEY'].nil?
    puts "Input AWS secret access key:"
    ENV['AWS_SECRET_ACCESS_KEY'] = gets.chomp
  end

  AWS.config({
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
  })

  list_distributions
end