Skip to content

Instantly share code, notes, and snippets.

@dayne
Last active April 21, 2017 16:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dayne/780cfa69b3132a757497e76a3d0fbc01 to your computer and use it in GitHub Desktop.
Save dayne/780cfa69b3132a757497e76a3d0fbc01 to your computer and use it in GitHub Desktop.
bleach - a silly tool to improve the view & clean vagrant global-status
#!/usr/bin/env ruby
# A silly tool to help manage and clean up vagrant vms' from the insanity
# caused by rapid fire test kitchens from across your box
# use only if you like to destroy your running test kitchen instances
require 'colored'
require 'commander/import'
require 'fileutils'
program :name, 'vag'
program :version, '3.1.4'
program :description, 'vagrant helper'
$VERBOSE = false
class Vagrant
def initialize
@machines = []
out = `vagrant global-status`.split("\n")
# puts out.pop.red
out.each do |l|
#id name provider state directory
a = l.split
next unless a.size == 5
machine = { :id => a[0], :name => a[1],
:provider => a[2],:state => a[3],:directory => a[4] }
next if machine[:id] == 'id'
@machines.push machine
end
end
def puts_machine_array(machines)
machines.each do |m|
puts m.inspect if $VERBOSE
puts "# " + m[:directory].split('/').last.sub('kitchen-','').green
puts sprintf("%10s\t%s",m[:id],m[:directory].split('.kitchen')[0])
end
end
def status(verbose = false)
puts "# #{@machines.size} VMs running according to " + 'vagrant global-status'.yellow
puts_machine_array(@machines)
end
def clean(all=false,force=false)
puts "starting cleaning"
kdirs = {}
@machines.each do |m|
dir = m[:directory]
kd = dir.split('.kitchen')[0]
next if not File.directory?(kd)
kdirs[kd] = [] unless kdirs[kd]
kdirs[kd].push m
end
kdirs.each do |kd,ms|
FileUtils.cd(kd)
#puts "# " + m[:directory].split('/').last.sub('kitchen-','').green
puts "# #{ms.size.to_s.green} VMs running in : #{kd.yellow}"
puts_machine_array(ms)
system("bash -l -c 'kitchen status'")
if agree("run a kitchen destroy here?")
puts "beginning the bleaching".red
`kitchen destroy`
else
puts "no bleaching done".green
end
end
end
end
vag = Vagrant.new
command :clean do |c|
c.syntax = 'vag clean'
c.description = 'helper tool to clean out your test kitchen'
c.option "--all", TrueClass, 'scrubs all the things'
c.option "--force", TrueClass, 'force cleans'
c.option "--verbose", TrueClass, 'verbose mode'
c.action do |args, options|
options.default :all => false, :force => false
$VERBOSE = options.verbose
vag.clean(options.all,options.force)
end
end
command :status do |c|
c.syntax = 'vag status'
c.option "--verbose", TrueClass, 'verbose mode'
c.description = 'vagrant global-status'
c.action do |args, options|
options.default :verbose => false
$VERBOSE = options.verbose
vag.status(options.verbose)
end
end
default_command :status

bleach command helps me clean up my left over vagrant stuff.

Yes, vagrant global-status is not hard. I just dont' like the output. I like the output of bleach

LICENSE: MIT AUTHOR: Dayne Broderson broderson@gmail.com

source 'https://rubygems.org' do
gem 'commander'
gem 'colored'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment