vgrnt 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03a6d4695c381a141cfe79bc0e9e1f59a935b86f
4
- data.tar.gz: 715132621d0eca3a4e2d56b9193fcabbd14c9c13
3
+ metadata.gz: 9ec9d0aba10f8e4965ff0be10e8734933faa88c0
4
+ data.tar.gz: a3434a03c3abe317c00a78cda479be664aa9e3cd
5
5
  SHA512:
6
- metadata.gz: ff27c6d4a016745f9b270a37c3b4ead82389e309384065ed121b98bcf3b3c96251e2a2c300b7fc80f1cf746a4599b29387288eb4bac5d78b6661a0d62c6e725f
7
- data.tar.gz: 1fbb99c60ba3c748d8921c8349e2a93cda9396b49f8fe1f1582a199acb1a8b2ba24bbf213694b50dfca267eb0faa25101090c918aebcdc6d74739f0647072f9e
6
+ metadata.gz: 1e73e399f049fbf2c68312e1b7ea5c55e9d22ae6dd21cc7f5cea59aba198d943493019014fe642ff4bfce9e9e6d14bff30d81bc9d6d8c70d90a24ee367ba88db
7
+ data.tar.gz: 6527718cba50263df9bafcf60aa40fed17f74eae4ea2c6d428b7383b2ceb4906503cb2f3e4eb045439de3623c03281676da206ed8a039ad3868a9d759044eaaf
@@ -1,3 +1,18 @@
1
+ ## [0.0.4](https://github.com/dergachev/vagrant/compare/v0.0.3...v0.0.4) (Dec 3, 2013)
2
+
3
+ BUGFIX:
4
+
5
+ - Fix `vgrnt ssh` hanging due to improper shellout technique.
6
+
7
+ FEATURES:
8
+
9
+ - Added support for `vgrnt status`
10
+
11
+ IMPROVEMENTS:
12
+
13
+ - Refactored codebase a bit
14
+ - Implemented acceptance tests (unit tests still non-existant)
15
+
1
16
  ## [0.0.3](https://github.com/dergachev/vagrant/compare/v0.0.2...v0.0.3) (Nov 12, 2013)
2
17
 
3
18
  FEATURES:
@@ -24,7 +24,7 @@ module Vgrnt
24
24
  end
25
25
  end
26
26
 
27
- # Undoes the automatic removal of -- in Thor::Options.peek. Otherwise "vgrnt ssh precise -- ls /"
27
+ # Undoes the automatic removal of -- in Thor::Options.peek. Otherwise "vgrnt ssh precise -- ls /"
28
28
  # is parsed as "precise ls /". TODO: is there a less hacky way to handle this?
29
29
  class ::Thor::Options
30
30
  def peek
@@ -60,10 +60,10 @@ module Vgrnt
60
60
  if machine && machine[:state] == 'running'
61
61
  # found by running "VAGRANT_LOG=debug vagrant ssh"
62
62
  default_ssh_args = [
63
- "vagrant@#{ssh_info[:ssh_ip]}",
64
- "-p", ssh_info[:ssh_port],
65
- "-o", "DSAAuthentication=yes", "-o", "LogLevel=FATAL", "-o", "StrictHostKeyChecking=no",
66
- "-o", "UserKnownHostsFile=/dev/null", "-o", "IdentitiesOnly=yes",
63
+ "vagrant@#{ssh_info[:ssh_ip]}",
64
+ "-p", ssh_info[:ssh_port],
65
+ "-o", "DSAAuthentication=yes", "-o", "LogLevel=FATAL", "-o", "StrictHostKeyChecking=no",
66
+ "-o", "UserKnownHostsFile=/dev/null", "-o", "IdentitiesOnly=yes",
67
67
  "-i", "~/.vagrant.d/insecure_private_key"
68
68
  ]
69
69
 
@@ -74,7 +74,14 @@ module Vgrnt
74
74
  end
75
75
  end
76
76
 
77
- puts `#{ssh_command}`
77
+ # Using IO.popen is important:
78
+ # - POpen3 ignores STDIN. Backticks buffer stdout. Kernel::exec breaks rspec.
79
+ # - getc instead of gets fixes the 1 line lag.
80
+ IO.popen(ssh_command) do |io|
81
+ while c = io.getc do
82
+ putc c
83
+ end
84
+ end
78
85
  end
79
86
 
80
87
  desc "ssh-config [vm-name]", "Store output of 'vagrant ssh-config' to .vgrnt-sshconfig"
@@ -151,7 +158,7 @@ module Vgrnt
151
158
  # TODO: handle substitution for commands like `usbfilter add 0 --target <uuid|name>`
152
159
 
153
160
  @logger.debug "Non-standard vboxmanage command detected (#{vboxmanage_subcommand}). Substituting 'VM_ID' for VM id."
154
-
161
+
155
162
  # [VM_ID] is an optional literal token which will be replaced by the UUID of the VM referenced by Vagrant
156
163
  args.map! { |a| a == 'VM_UUID' ? machine[:id] : a }
157
164
  command = (["VBoxManage", vboxmanage_subcommand] + args).join(" ")
@@ -1,37 +1,44 @@
1
- # TODO: test me
2
-
3
- $vagrant_config_vms = []
4
-
5
- module Vagrant
6
- def self.configure(*args, &block)
7
- yield Vgrnt::Util::Vagrantfile::Proxy.new
8
- end
9
- end
10
-
11
1
  module Vgrnt
12
2
  module Util
13
3
  module Vagrantfile
14
- class Proxy
15
- def define(*args)
16
- # $stderr.puts "Called define with args (#{args.join(", ")})"
17
- $vagrant_config_vms << args.first
4
+
5
+ def self.defined_vms(path = nil)
6
+ Vagrant._eval_vagrantfile(path)
7
+ end
8
+
9
+ module Vagrant
10
+ def self._remove_named_arguments(source)
11
+ source = source.gsub(/([\s\(,])[a-zA-Z0-9_]+: ?/, '\1')
12
+ return source
18
13
  end
19
14
 
20
- def method_missing(name, *args, &block)
21
- return self
15
+ # eval Vagrantfile inside of Vgrnt::Util::Vagrantfile namespace
16
+ def self._eval_vagrantfile(path = nil)
17
+ # NOT THREAD SAFE (not sure how to do this given static methods)
18
+ @@vagrant_config_vms = []
19
+
20
+ vgrntfile_source = File.read(path || './Vagrantfile')
21
+ if RUBY_VERSION.to_f <= 1.8
22
+ vgrntfile_source = Vagrant::_remove_named_arguments(vgrntfile_source)
23
+ end
24
+ module_eval(vgrntfile_source)
25
+
26
+ @@vagrant_config_vms << :default if @@vagrant_config_vms.empty?
27
+ return @@vagrant_config_vms
28
+ end
29
+
30
+ def self.configure(*args, &block)
31
+ yield self
32
+ end
33
+
34
+ def self.define(*args)
35
+ @@vagrant_config_vms << args.first
22
36
  end
23
- end
24
37
 
25
- def self.defined_vms
26
- # clear any previous value (else tests fail depending on exec order)
27
- # NOT PARALLEL SAFE (not sure how to do this given static methods)
28
- $vagrant_config_vms = []
29
- load('./Vagrantfile')
30
- # puts $vagrant_config_vms.inspect
31
- if $vagrant_config_vms.empty?
32
- $vagrant_config_vms << :default
38
+ # stub out anything else
39
+ def self.method_missing(*args)
40
+ return self
33
41
  end
34
- return $vagrant_config_vms
35
42
  end
36
43
  end
37
44
  end
@@ -1,3 +1,3 @@
1
1
  module Vgrnt
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -34,7 +34,7 @@ describe Vgrnt::Util::VirtualBox do
34
34
  expect(Vgrnt::Util::VirtualBox::showvminfo('vgrnt-test')).to include 'UUID'
35
35
  end
36
36
  end
37
-
37
+
38
38
  describe "::runningMachines" do
39
39
  it 'ensure .vgrnt directory exists' do
40
40
  expect(in_vagrant_env { File.exists? '.vagrant' }).to be_true
@@ -0,0 +1,45 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ # from https://github.com/tknerr/vagrant-managed-servers/blob/fa60145d9fca221092e81346e95624d49080e304/Vagrantfile
5
+
6
+ # require plugin for testing via bundler
7
+ Vagrant.require_plugin "vagrant-managed-servers"
8
+ Vagrant.require_plugin "vagrant-omnibus"
9
+
10
+ Vagrant.configure("2") do |config|
11
+
12
+ config.omnibus.chef_version = "11.4.4"
13
+
14
+ #
15
+ # fake a managed server by bringing up a virtualbox vm
16
+ #
17
+ config.vm.define :fake_managed_server do |fms_config|
18
+ fms_config.vm.box = "opscode_ubuntu-13.04_provisionerless"
19
+ fms_config.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-13.04_provisionerless.box"
20
+
21
+ fms_config.vm.network :private_network, ip: "33.33.77.35"
22
+ end
23
+
24
+ #
25
+ # configure managed provider to connect to `fake_managed_server`
26
+ #
27
+ config.vm.define :my_server do |ms_config|
28
+
29
+ ms_config.vm.box = "dummy"
30
+ ms_config.vm.box_url = "https://github.com/tknerr/vagrant-managed-servers/raw/master/dummy.box"
31
+
32
+ ms_config.vm.provider :managed do |managed_config, override|
33
+ managed_config.server = "33.33.77.35"
34
+ override.ssh.username = "vagrant"
35
+ override.ssh.private_key_path = "#{ENV['HOME']}/.vagrant.d/insecure_private_key"
36
+ end
37
+
38
+ ms_config.vm.provision :chef_solo do |chef|
39
+ chef.cookbooks_path = [ './cookbooks' ]
40
+ chef.add_recipe "apt"
41
+ chef.add_recipe "apache2"
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,13 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure('2') do |config|
5
+ config.vm.box = "precise64"
6
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
7
+
8
+ config.vm.define :vm1 do |config|
9
+ end
10
+
11
+ config.vm.define :vm2 do |config|
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.require_plugin "vagrant-berkshelf"
5
+
6
+ Vagrant.configure('2') do |config|
7
+ config.vm.box = "precise64"
8
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
9
+ end
@@ -0,0 +1,7 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure('2') do |config|
5
+ config.vm.box = "precise64"
6
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
7
+ end
@@ -1,13 +1,54 @@
1
- require 'spec_helper'
2
-
3
- # RSpec.configure do |c|
4
- # c.include Helpers
5
- # end
1
+ require "spec_helper"
6
2
 
7
3
  describe Vgrnt::Util::VirtualBox do
8
4
  describe "::showvminfo_command" do
9
- it 'should generate VBoxManage command' do
10
- expect(Vgrnt::Util::VirtualBox::showvminfo_command('test')).to eq 'VBoxManage showvminfo test --machinereadable'
5
+ it "should generate VBoxManage command" do
6
+ expect(Vgrnt::Util::VirtualBox::showvminfo_command("test")).to eq "VBoxManage showvminfo test --machinereadable"
7
+ end
8
+ end
9
+ end
10
+
11
+ describe Vgrnt::Util::Vagrantfile do
12
+
13
+ subject { described_class.defined_vms("spec/unit/fixtures/util_vagrantfile/" + vagrantfile) }
14
+
15
+ describe "::defined_vms" do
16
+ context "parsing Vagrantfile-simple" do
17
+ let(:vagrantfile) { "Vagrantfile-simple" }
18
+ it { should eq [:default] }
19
+ end
20
+
21
+ context "parsing Vagrantfile-multi" do
22
+ let(:vagrantfile) { "Vagrantfile-multi" }
23
+ it { should eq [:vm1, :vm2] }
24
+ end
25
+
26
+ context "parsing Vagrantfile-plugins" do
27
+ let(:vagrantfile) { "Vagrantfile-plugins" }
28
+ it { should eq [:default] }
29
+ end
30
+
31
+ context "parsing Vagrantfile-misc1" do
32
+ let(:vagrantfile) { "Vagrantfile-misc1" }
33
+ it { should eq [:fake_managed_server, :my_server] }
34
+ end
35
+ end
36
+
37
+ describe "Vagrant::_remove_named_arguments" do
38
+ def process(input)
39
+ Vgrnt::Util::Vagrantfile::Vagrant._remove_named_arguments(input)
40
+ end
41
+ it "works with simple named arguments" do
42
+ expect(process 'meth 1, scope: "meh", arg2: "meh"').to eq 'meth 1, "meh", "meh"'
43
+ end
44
+ it "works with space-free named arguments" do
45
+ expect(process 'meth 1, scope:"meh", arg2:"meh"').to eq 'meth 1, "meh", "meh"'
46
+ end
47
+ it "leaves symbols alone" do
48
+ expect(process 'meth :bob, 1, sum(:three)').to eq 'meth :bob, 1, sum(:three)'
11
49
  end
12
50
  end
13
51
  end
52
+
53
+ # describe Vgrnt::Util::Vagrantfile do
54
+ # end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vgrnt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dergachev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-14 00:00:00.000000000 Z
11
+ date: 2013-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -95,6 +95,10 @@ files:
95
95
  - spec/acceptance/support/acceptance_helper.rb
96
96
  - spec/acceptance/util_spec.rb
97
97
  - spec/spec_helper.rb
98
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-misc1
99
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-multi
100
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-plugins
101
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-simple
98
102
  - spec/unit/util_spec.rb
99
103
  - vgrnt.gemspec
100
104
  homepage: https://github.com/dergachev/vgrnt
@@ -129,4 +133,8 @@ test_files:
129
133
  - spec/acceptance/support/acceptance_helper.rb
130
134
  - spec/acceptance/util_spec.rb
131
135
  - spec/spec_helper.rb
136
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-misc1
137
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-multi
138
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-plugins
139
+ - spec/unit/fixtures/util_vagrantfile/Vagrantfile-simple
132
140
  - spec/unit/util_spec.rb