aboutsummaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/vagrant.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/leap_cli/commands/vagrant.rb')
-rw-r--r--lib/leap_cli/commands/vagrant.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/leap_cli/commands/vagrant.rb b/lib/leap_cli/commands/vagrant.rb
new file mode 100644
index 0000000..587e5e1
--- /dev/null
+++ b/lib/leap_cli/commands/vagrant.rb
@@ -0,0 +1,72 @@
+require 'ipaddr'
+
+module LeapCli; module Commands
+
+ desc 'Bring up one or more local virtual machines'
+ arg_name '[node-filter]', :optional => true, :multiple => false
+ command :'local-up' do |c|
+ c.action do |global_options,options,args|
+ vagrant_command("up", args)
+ end
+ end
+
+ desc 'Halt one or more local virtual machines'
+ arg_name '[node-filter]', :optional => true, :multiple => false
+ command :'local-down' do |c|
+ c.action do |global_options,options,args|
+ vagrant_command("halt", args)
+ end
+ end
+
+ desc 'Destroy one or more local virtual machines'
+ arg_name '[node-filter]', :optional => true, :multiple => false
+ command :'local-reset' do |c|
+ c.action do |global_options,options,args|
+ vagrant_command("destroy", args)
+ end
+ end
+
+ public
+
+ def vagrant_ssh_key_file
+ file = File.expand_path('../../../vendor/vagrant_ssh_keys/vagrant.key', File.dirname(__FILE__))
+ Util.assert_files_exist! file
+ return file
+ end
+
+ private
+
+ def vagrant_command(cmd, args)
+ create_vagrant_file
+ nodes = manager.filter(args)[:local => true].field(:name)
+ if nodes.any?
+ execute "cd #{File.dirname(Path.named_path(:vagrantfile))}; vagrant #{cmd} #{nodes.join(' ')}"
+ else
+ bail! "No nodes found"
+ end
+ end
+
+ def execute(cmd)
+ progress2 "Running: #{cmd}"
+ exec cmd
+ end
+
+ def create_vagrant_file
+ lines = []
+ netmask = IPAddr.new('255.255.255.255').mask(manager.provider.vagrant.network.split('/').last).to_s
+ lines << %[Vagrant::Config.run do |config|]
+ manager.each_node do |node|
+ if node.vagrant?
+ lines << %[ config.vm.define :#{node.name} do |config|]
+ lines << %[ config.vm.box = "minimal-wheezy"]
+ lines << %[ config.vm.box_url = "http://cloud.github.com/downloads/leapcode/minimal-debian-vagrant/minimal-wheezy.box"]
+ lines << %[ config.vm.network :hostonly, "#{node.ip_address}", :netmask => "#{netmask}"]
+ lines << %[ end]
+ end
+ end
+ lines << %[end]
+ lines << ""
+ write_file! :vagrantfile, lines.join("\n")
+ end
+
+end; end \ No newline at end of file