fission 0.4.0.beta.2 → 0.4.0.beta.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 0.4.0
6
6
  * major internal refactoring for usage as a lib
7
- * add fix for loading a custom vmrun_bin in ~/.fissionrc
7
+ * add fix for loading a custom vmrun_bin in ~/.fissionrc (issue #8 )
8
8
 
9
9
  ## 0.3.0 (09/16/2011)
10
10
  * add ability to suspend all running VMs ('--all')
@@ -3,34 +3,16 @@ module Fission
3
3
  class Status < Command
4
4
 
5
5
  def execute
6
- response = VM.all
7
- if response.successful?
8
- all_vms = response.data
6
+ response = VM.all_with_status
7
+ unless response.successful?
8
+ output_and_exit "There was an error getting the status of the VMs. The error was:\n#{response.message}", response.code
9
9
  end
10
10
 
11
- response = VM.all_running
12
- if response.successful?
13
- all_running_vm_names = response.data.collect { |v| v.name }
14
- else
15
- output_and_exit "There was an error getting the list of running VMs. The error was:\n#{response.message}", response.code
16
- end
17
-
18
- vm_names = all_vms.collect { |v| v.name }
19
-
20
- longest_vm_name = vm_names.max { |a,b| a.length <=> b.length }
21
-
22
- all_vms.each do |vm|
23
- if all_running_vm_names.include? vm.name
24
- status = '[running]'
25
- else
26
- if vm.suspend_file_exists?
27
- status = '[suspended]'
28
- else
29
- status = '[not running]'
30
- end
31
- end
11
+ vms_status = response.data
12
+ longest_vm_name = vms_status.keys.max { |a,b| a.length <=> b.length }
32
13
 
33
- output_printf "%-#{longest_vm_name.length}s %s\n", vm.name, status
14
+ vms_status.each_pair do |vm_name, status|
15
+ output_printf "%-#{longest_vm_name.length}s [%s]\n", vm_name, status
34
16
  end
35
17
  end
36
18
 
@@ -1,3 +1,3 @@
1
1
  module Fission
2
- VERSION = "0.4.0.beta.2"
2
+ VERSION = "0.4.0.beta.3"
3
3
  end
@@ -564,6 +564,48 @@ module Fission
564
564
  response
565
565
  end
566
566
 
567
+ # Public: Provides a list of all of the VMs and their associated status
568
+ #
569
+ # Examples
570
+ #
571
+ # Fission::VM.all_with_status.data
572
+ # # => { 'vm1' => 'running', 'vm2' => 'suspended', 'vm3' => 'not running'}
573
+ #
574
+ # Returns a Response with the result.
575
+ # If successful, the Response's data attribute will be a Hash of with the VM
576
+ # names as keys and their status as the values.
577
+ # If there is an error, an unsuccessful Repsonse will be returned.
578
+ def self.all_with_status
579
+ all_response = all
580
+ return all_response unless all_response.successful?
581
+
582
+ all_vms = all_response.data
583
+
584
+ running_response = all_running
585
+ return running_response unless running_response.successful?
586
+
587
+ response = Response.new :code => 0
588
+
589
+ all_running_vm_names = running_response.data.collect { |v| v.name }
590
+
591
+ response.data = all_vms.inject({}) do |result, vm|
592
+ if all_running_vm_names.include? vm.name
593
+ status = 'running'
594
+ else
595
+ if vm.suspend_file_exists?
596
+ status = 'suspended'
597
+ else
598
+ status = 'not running'
599
+ end
600
+ end
601
+
602
+ result[vm.name] = status
603
+ result
604
+ end
605
+
606
+ response
607
+ end
608
+
567
609
  # Public: Creates a new VM which is a clone of an existing VM. As Fusion
568
610
  # doesn't provide a native cloning mechanism, this is a best effort. This
569
611
  # essentially is a directory copy with updates to relevant files. It's
@@ -4,61 +4,43 @@ describe Fission::Command::Status do
4
4
  include_context 'command_setup'
5
5
 
6
6
  before do
7
- @all_response_mock = mock('response')
8
- @vm_1 = Fission::VM.new 'foo'
9
- @vm_2 = Fission::VM.new 'bar'
10
- @vm_3 = Fission::VM.new 'baz'
11
- @vm_4 = Fission::VM.new 'blah'
7
+ @vms_status = { 'foo' => 'running',
8
+ 'bar' => 'suspended',
9
+ 'baz' => 'not running' }
10
+ @all_status_response_mock = mock('response')
12
11
  end
13
12
 
14
13
  describe 'execute' do
15
14
  before do
16
- @all_response_mock.stub_as_successful [@vm_1, @vm_2, @vm_3, @vm_4]
17
-
18
- Fission::VM.should_receive(:all).and_return(@all_response_mock)
19
- Fission::VM.stub(:all_running).and_return(@all_running_response_mock)
15
+ Fission::VM.should_receive(:all_with_status).
16
+ and_return(@all_status_response_mock)
20
17
  end
21
18
 
22
19
  describe 'when successful' do
23
20
  before do
24
- @all_running_response_mock.stub_as_successful [@vm_1, @vm_3]
21
+ @all_status_response_mock.stub_as_successful @vms_status
25
22
  end
26
23
 
27
- it 'should output the VMs which are running' do
24
+ it 'should output the VMs and their status' do
28
25
  command = Fission::Command::Status.new
29
26
  command.execute
30
27
 
31
28
  @string_io.string.should match /foo.+\[running\]/
32
- @string_io.string.should match /baz.+\[running\]/
33
- end
34
-
35
- it 'should output the VMs which are not running' do
36
- command = Fission::Command::Status.new
37
- command.execute
38
-
39
- @string_io.string.should match /bar.+\[not running\]/
29
+ @string_io.string.should match /bar.+\[suspended\]/
30
+ @string_io.string.should match /baz.+\[not running\]/
40
31
  end
41
-
42
- it 'should output the VMs which are suspended' do
43
- @vm_4.stub(:suspend_file_exists?).and_return(true)
44
- command = Fission::Command::Status.new
45
- command.execute
46
-
47
- @string_io.string.should match /blah.+\[suspended\]/
48
- end
49
-
50
32
  end
51
33
 
52
34
  describe 'when unsuccessful' do
53
35
  before do
54
- @all_running_response_mock.stub_as_unsuccessful
36
+ @all_status_response_mock.stub_as_unsuccessful
55
37
  end
56
38
 
57
39
  it 'should output an error and exit if there was an error getting the list of running VMs' do
58
40
  command = Fission::Command::Status.new
59
41
  lambda { command.execute }.should raise_error SystemExit
60
42
 
61
- @string_io.string.should match /There was an error getting the list of running VMs.+it blew up/m
43
+ @string_io.string.should match /There was an error getting the status of the VMs.+it blew up/m
62
44
  end
63
45
  end
64
46
  end
@@ -1078,6 +1078,44 @@ ethernet1.generatedAddressenable = "TRUE"'
1078
1078
 
1079
1079
  end
1080
1080
 
1081
+ describe 'self.all_with_status' do
1082
+ before do
1083
+ @vm_1 = Fission::VM.new 'foo'
1084
+ @vm_2 = Fission::VM.new 'bar'
1085
+ @vm_2.stub(:suspend_file_exists?).and_return('true')
1086
+ @vm_3 = Fission::VM.new 'baz'
1087
+
1088
+ @all_vms_response_mock = mock('all_vms_mock')
1089
+ @all_vms_response_mock.stub_as_successful [@vm_1, @vm_2, @vm_3]
1090
+
1091
+ @all_running_response_mock = mock('all_running_mock')
1092
+ @all_running_response_mock.stub_as_successful [@vm_1]
1093
+
1094
+ Fission::VM.stub(:all).and_return(@all_vms_response_mock)
1095
+ Fission::VM.stub(:all_running).and_return(@all_running_response_mock)
1096
+ end
1097
+
1098
+ it 'should return a sucessful response with the VMs and their status' do
1099
+ response = Fission::VM.all_with_status
1100
+ response.should be_a_successful_response
1101
+ response.data.should == { 'foo' => 'running',
1102
+ 'bar' => 'suspended',
1103
+ 'baz' => 'not running' }
1104
+
1105
+ end
1106
+
1107
+ it 'should return an unsuccessful response if unable to get all of the VMs' do
1108
+ @all_vms_response_mock.stub_as_unsuccessful
1109
+ Fission::VM.all_with_status.should be_an_unsuccessful_response
1110
+ end
1111
+
1112
+ it 'should return an unsuccessful repsonse if unable to get the running VMs' do
1113
+ @all_running_response_mock.stub_as_unsuccessful
1114
+ Fission::VM.all_with_status.should be_an_unsuccessful_response
1115
+ end
1116
+
1117
+ end
1118
+
1081
1119
  describe 'delete' do
1082
1120
  before do
1083
1121
  @running_response_mock = mock('running?')
metadata CHANGED
@@ -1,60 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fission
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0.beta.3
4
5
  prerelease: 6
5
- version: 0.4.0.beta.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Tommy Bishop
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-11-03 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-30 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: CFPropertyList
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70357096609200 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 2.0.17
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: rspec
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70357096609200
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70357096608700 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
29
+ requirements:
32
30
  - - ~>
33
- - !ruby/object:Gem::Version
31
+ - !ruby/object:Gem::Version
34
32
  version: 2.6.0
35
33
  type: :development
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: fakefs
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70357096608700
36
+ - !ruby/object:Gem::Dependency
37
+ name: fakefs
38
+ requirement: &70357096608240 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
40
+ requirements:
43
41
  - - ~>
44
- - !ruby/object:Gem::Version
42
+ - !ruby/object:Gem::Version
45
43
  version: 0.3.2
46
44
  type: :development
47
- version_requirements: *id003
45
+ prerelease: false
46
+ version_requirements: *70357096608240
48
47
  description: A simple utility to manage VMware Fusion VMs from the command line
49
- email:
48
+ email:
50
49
  - bishop.thomas@gmail.com
51
- executables:
50
+ executables:
52
51
  - fission
53
52
  extensions: []
54
-
55
53
  extra_rdoc_files: []
56
-
57
- files:
54
+ files:
58
55
  - .gitignore
59
56
  - .rspec
60
57
  - .rvmrc
@@ -117,32 +114,29 @@ files:
117
114
  - spec/spec_helper.rb
118
115
  homepage: https://github.com/thbishop/fission
119
116
  licenses: []
120
-
121
117
  post_install_message:
122
118
  rdoc_options: []
123
-
124
- require_paths:
119
+ require_paths:
125
120
  - lib
126
- required_ruby_version: !ruby/object:Gem::Requirement
121
+ required_ruby_version: !ruby/object:Gem::Requirement
127
122
  none: false
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: "0"
132
- required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
128
  none: false
134
- requirements:
135
- - - ">"
136
- - !ruby/object:Gem::Version
129
+ requirements:
130
+ - - ! '>'
131
+ - !ruby/object:Gem::Version
137
132
  version: 1.3.1
138
133
  requirements: []
139
-
140
134
  rubyforge_project: fission
141
- rubygems_version: 1.8.5
135
+ rubygems_version: 1.8.10
142
136
  signing_key:
143
137
  specification_version: 3
144
138
  summary: Command line tool to manage VMware Fusion VMs
145
- test_files:
139
+ test_files:
146
140
  - spec/contexts/command.rb
147
141
  - spec/fission/cli_spec.rb
148
142
  - spec/fission/command/clone_spec.rb