class Terraspace::Terraform::Tfc::Runs::Pruner
Public Class Methods
new(mod, options={})
click to toggle source
@mod required for Api::Client
Calls superclass method
Terraspace::Terraform::Tfc::Runs::Base::new
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 6 def initialize(mod, options={}) super @queue, @kept, @needs_pruning = [], nil, false end
Public Instance Methods
run()
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 11 def run build_project build_queue are_you_sure? process_queue end
Private Instance Methods
actionable?(item)
click to toggle source
Docs seem to be off: www.terraform.io/docs/cloud/api/run.html#apply-a-run
This includes runs in the "pending," "needs confirmation," "policy checked," and "policy override" states.
Cant really discard a “pending” status, but can discard a “planned” status.
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 93 def actionable?(item) discardable?(item) || cancelable?(item) end
are_you_sure?()
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 31 def are_you_sure? unless @needs_pruning logger.info "Nothing to prune" return end keeping = item_message(@kept) items = @queue.map { |i| item_message(i) }.join("\n") message =<<~EOL Will keep: #{keeping} Will prune: #{items} Are you sure? EOL sure?(message.chop) end
build_queue()
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 19 def build_queue runs.each do |item| next unless actionable?(item) unless @kept @kept = item next end queue(item) @needs_pruning = true end end
cancelable?(item)
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 101 def cancelable?(item) %w[pending].include?(status(item)) end
discardable?(item)
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 97 def discardable?(item) %w[planned].include?(status(item)) end
item_message(item)
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 53 def item_message(item) p = ItemPresenter.new(item) " #{p.id} #{p.status} #{p.message} #{p.created_at}" end
process(item)
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 64 def process(item) id = item['id'] action = discardable?(item) ? "Discarded" : "Cancelled" p = ItemPresenter.new(item) msg = "#{action} #{p.id} #{p.message}" # note id is named run-xxx logger.info("NOOP: #{msg}") && return if @options[:noop] if discardable?(item) api.runs.discard(id) elsif cancelable?(item) api.runs.cancel(id) end logger.info msg end
process_queue()
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 58 def process_queue @queue.each do |item| process(item) end end
queue(item)
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 79 def queue(item) if discardable?(item) @queue << item elsif cancelable?(item) @queue << item end end
status(item)
click to toggle source
# File lib/terraspace/terraform/tfc/runs/pruner.rb, line 105 def status(item) item['attributes']['status'] end