knife-google 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +155 -66
  3. data/knife-google.gemspec +2 -1
  4. data/lib/chef/knife/google_base.rb +1 -1
  5. data/lib/chef/knife/google_disk_create.rb +17 -9
  6. data/lib/chef/knife/google_disk_delete.rb +2 -2
  7. data/lib/chef/knife/google_disk_list.rb +8 -8
  8. data/lib/chef/knife/google_project_list.rb +178 -0
  9. data/lib/chef/knife/google_region_list.rb +125 -0
  10. data/lib/chef/knife/google_server_create.rb +174 -46
  11. data/lib/chef/knife/google_server_delete.rb +9 -13
  12. data/lib/chef/knife/google_server_list.rb +5 -6
  13. data/lib/chef/knife/google_zone_list.rb +22 -28
  14. data/lib/google/compute.rb +2 -1
  15. data/lib/google/compute/client.rb +12 -7
  16. data/lib/google/compute/creatable_resource_collection.rb +12 -1
  17. data/lib/google/compute/disk.rb +0 -2
  18. data/lib/google/compute/image.rb +1 -2
  19. data/lib/google/compute/project.rb +2 -2
  20. data/lib/google/compute/{kernel.rb → region.rb} +12 -1
  21. data/lib/google/compute/region_operation.rb +62 -0
  22. data/lib/google/compute/server.rb +3 -2
  23. data/lib/google/compute/server/attached_disk.rb +3 -3
  24. data/lib/google/compute/zone.rb +6 -4
  25. data/lib/google/compute/zone_operation.rb +11 -9
  26. data/lib/knife-google/version.rb +1 -1
  27. data/spec/chef/knife/google_base_spec.rb +4 -4
  28. data/spec/chef/knife/google_disk_create_spec.rb +8 -7
  29. data/spec/chef/knife/google_disk_delete_spec.rb +15 -16
  30. data/spec/chef/knife/google_disk_list_spec.rb +6 -6
  31. data/spec/chef/knife/google_region_list_spec.rb +32 -0
  32. data/spec/chef/knife/google_server_create_spec.rb +78 -44
  33. data/spec/chef/knife/google_server_delete_spec.rb +37 -37
  34. data/spec/chef/knife/google_server_list_spec.rb +8 -7
  35. data/spec/chef/knife/google_setup_spec.rb +1 -2
  36. data/spec/chef/knife/google_zone_list_spec.rb +4 -4
  37. data/spec/data/{compute-v1beta15.json → compute-v1.json} +700 -246
  38. data/spec/data/disk.json +3 -4
  39. data/spec/data/firewall.json +2 -2
  40. data/spec/data/global_operation.json +3 -3
  41. data/spec/data/image.json +2 -2
  42. data/spec/data/machine_type.json +1 -1
  43. data/spec/data/network.json +1 -1
  44. data/spec/data/project.json +1 -1
  45. data/spec/data/region.json +23 -0
  46. data/spec/data/serial_port_output.json +1 -1
  47. data/spec/data/server.json +7 -7
  48. data/spec/data/snapshot.json +2 -2
  49. data/spec/data/zone.json +7 -15
  50. data/spec/data/zone_operation.json +3 -3
  51. data/spec/google/compute/disk_spec.rb +32 -32
  52. data/spec/google/compute/firewall_spec.rb +37 -37
  53. data/spec/google/compute/global_operation_spec.rb +9 -9
  54. data/spec/google/compute/image_spec.rb +17 -17
  55. data/spec/google/compute/machine_type_spec.rb +7 -7
  56. data/spec/google/compute/network_spec.rb +14 -14
  57. data/spec/google/compute/project_spec.rb +17 -17
  58. data/spec/google/compute/region_spec.rb +51 -0
  59. data/spec/google/compute/server_spec.rb +35 -42
  60. data/spec/google/compute/snapshot_spec.rb +11 -11
  61. data/spec/google/compute/zone_operation_spec.rb +9 -9
  62. data/spec/google/compute/zone_spec.rb +7 -7
  63. data/spec/spec_helper.rb +1 -0
  64. data/spec/support/mocks.rb +10 -10
  65. data/spec/support/resource_examples.rb +7 -7
  66. data/spec/support/spec_google_base.rb +4 -0
  67. metadata +14 -26
  68. data/spec/data/kernel.json +0 -15
  69. data/spec/google/compute/kernel_spec.rb +0 -49
@@ -12,20 +12,22 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ #require 'google/compute/resource'
16
+ #require 'google/compute/region'
17
+
15
18
  module Google
16
19
  module Compute
17
20
  class Zone < Resource
18
21
 
19
- attr_reader :maintenance_windows, :available_machine_type, :status
20
- attr_reader :quotas, :deprecated
22
+ attr_reader :status, :maintenance_windows
23
+ attr_reader :deprecated, :region
21
24
 
22
25
  def from_hash(zone_data)
23
26
  super(zone_data)
24
27
  @status = zone_data["status"]
25
28
  @maintenance_windows = zone_data["maintenanceWindows"]
26
- @available_machine_type = zone_data["availableMachineType"]
27
- @quotas = zone_data["quotas"]
28
29
  @deprecated = zone_data["deprecated"]
30
+ @region = zone_data["region"]
29
31
  end
30
32
  end
31
33
  end
@@ -20,17 +20,20 @@ module Google
20
20
  module Compute
21
21
  class ZoneOperation < Resource
22
22
 
23
- attr_reader :target_link, :target_id, :client_operation_id
24
- attr_reader :status, :status_message, :user, :progress
23
+ attr_reader :zone, :client_operation_id, :operation_type
24
+ attr_reader :target_link, :target_id, :status
25
+ attr_reader :status_message, :user, :progress
25
26
  attr_reader :insert_time, :start_time, :end_time
26
- attr_reader :http_error_status_code, :http_error_message
27
- attr_reader :error, :warnings, :operation_type, :zone
27
+ attr_reader :error, :warnings, :http_error_status_code
28
+ attr_reader :http_error_message, :region
28
29
 
29
30
  def from_hash(data)
30
31
  super(data)
32
+ @zone = data["zone"]
33
+ @client_operation_id = data["clientOperationId"]
34
+ @operation_type = data["operationType"]
31
35
  @target_link= data["targetLink"]
32
36
  @target_id = data["targetId"]
33
- @client_operation_id = data["clientOperationId"]
34
37
  @status = data["status"]
35
38
  @status_message = data["statusMessage"]
36
39
  @user = data["user"]
@@ -38,12 +41,11 @@ module Google
38
41
  @insert_time = Time.parse( data["insertTime"] )
39
42
  @start_time = Time.parse( data["startTime"] )
40
43
  @end_time = Time.parse( data["endTime"] ) if data.key?("endTime")
41
- @http_error_status_code = data["httpErrorMessage"]
42
- @http_error_message = data["httpErrorMessage"]
43
44
  @error = data["error"]
44
45
  @warnings = data["warnings"]
45
- @operation_type = data["operationType"]
46
- @zone = data["zone"]
46
+ @http_error_status_code = data["httpErrorMessage"]
47
+ @http_error_message = data["httpErrorMessage"]
48
+ @region = data["region"]
47
49
  end
48
50
 
49
51
  def wait_for_completion!(options={})
@@ -14,6 +14,6 @@
14
14
  #
15
15
  module Knife
16
16
  module Google
17
- VERSION = "1.1.0"
17
+ VERSION = "1.2.0"
18
18
  end
19
19
  end
@@ -20,20 +20,20 @@ describe Chef::Knife::GoogleBase do
20
20
 
21
21
  it "#client should return a Google::Compute::Client" do
22
22
  Google::Compute::Client.should_receive(:from_json).
23
- and_return(mock(Google::Compute::Client))
23
+ and_return(double(Google::Compute::Client))
24
24
  knife_plugin.client
25
25
  end
26
26
 
27
27
  it "#selflink2name should return name from a seleflink url" do
28
28
  knife_plugin.selflink2name(
29
- 'https://www.googleapis.com/compute/v1beta15/projects/mock-project/category/resource').
29
+ 'https://www.googleapis.com/compute/v1/projects/mock-project/category/resource').
30
30
  should eq('resource')
31
31
  end
32
32
 
33
- it "#msg_pair should invoke ui.info with labe : value string" do
33
+ it "#msg_pair should invoke ui.info with label : value string" do
34
34
  knife_plugin.ui.should_receive(:info).
35
35
  with("#{knife_plugin.ui.color("label", :cyan)}: value")
36
- knife_plugin.msg_pair("label","value")
36
+ knife_plugin.msg_pair("label", "value")
37
37
  end
38
38
 
39
39
  it "#private_ips should extract private ip as an array from a GCE server" do
@@ -12,25 +12,26 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
+
15
16
  require 'spec_helper'
16
17
 
17
18
  describe Chef::Knife::GoogleDiskCreate do
18
-
19
19
  let(:knife_plugin) do
20
20
  Chef::Knife::GoogleDiskCreate.new(
21
- [stored_disk.name, "-Z"+stored_zone.name, "-s14"])
21
+ [stored_disk.name, "-Z"+stored_zone.name])
22
22
  end
23
23
 
24
24
  it "#run should invoke compute api to create a disk" do
25
- zones = mock(Google::Compute::ListableResourceCollection)
25
+ zones = double(Google::Compute::ListableResourceCollection)
26
26
  zones.should_receive(:get).
27
27
  with(stored_zone.name).and_return(stored_zone)
28
- disks = mock(Google::Compute::CreatableResourceCollection)
28
+ disks = double(Google::Compute::CreatableResourceCollection)
29
29
  disks.should_receive(:create).
30
- with(:zone=>stored_zone.name, :name=>stored_disk.name, :sizeGb=>"14").
30
+ with(:name => stored_disk.name, :sizeGb => 10, :zone => stored_zone.name).
31
31
  and_return(stored_zone_operation)
32
- client = mock(Google::Compute::Client, :zones=>zones, :disks=>disks)
33
- Google::Compute::Client.stub!(:from_json).and_return(client)
32
+ client = double(Google::Compute::Client, :zones => zones, :disks => disks)
33
+ Google::Compute::Client.stub(:from_json).and_return(client)
34
+ knife_plugin.config[:disk_size] = 10
34
35
  knife_plugin.run
35
36
  end
36
37
  end
@@ -15,51 +15,50 @@
15
15
  require 'spec_helper'
16
16
 
17
17
  describe Chef::Knife::GoogleDiskDelete do
18
-
19
18
  let(:knife_plugin) do
20
19
  Chef::Knife::GoogleDiskDelete.new([stored_disk.name, "-Z"+stored_zone.name])
21
20
  end
22
21
 
23
22
  it "should print out error message if the disk is not found" do
24
- zones = mock(Google::Compute::ListableResourceCollection)
23
+ zones = double(Google::Compute::ListableResourceCollection)
25
24
  zones.should_receive(:get).with(stored_zone.name).
26
25
  and_return(stored_zone)
27
- disks = mock(Google::Compute::DeletableResourceCollection)
26
+ disks = double(Google::Compute::DeletableResourceCollection)
28
27
  disks.should_receive(:get).
29
- with(:zone=>stored_zone.name, :disk=>stored_disk.name).
28
+ with(:zone => stored_zone.name, :disk => stored_disk.name).
30
29
  and_raise(Google::Compute::ResourceNotFound)
31
30
  disks.should_not_receive(:delete)
32
- client = mock(Google::Compute::Client,
33
- :disks=>disks, :zones=>zones)
34
- Google::Compute::Client.stub!(:from_json).and_return(client)
31
+ client = double(Google::Compute::Client,
32
+ :disks => disks, :zones => zones)
33
+ Google::Compute::Client.stub(:from_json).and_return(client)
35
34
 
36
35
  knife_plugin.config[:yes] = true
37
36
  knife_plugin.ui.should_receive(:error).
38
37
  with("Disk '#{stored_zone.name}:#{stored_disk.name}' not found")
39
- knife_plugin.stub!(:msg_pair)
38
+ knife_plugin.stub(:msg_pair)
40
39
  expect {
41
40
  knife_plugin.run
42
41
  }.to raise_error(SystemExit)
43
42
  end
44
43
 
45
44
  it "should invoke api delete method when run is called" do
46
- zones = mock(Google::Compute::ListableResourceCollection)
45
+ zones = double(Google::Compute::ListableResourceCollection)
47
46
  zones.should_receive(:get).with(stored_zone.name).
48
47
  and_return(stored_zone)
49
- disks = mock(Google::Compute::DeletableResourceCollection)
48
+ disks = double(Google::Compute::DeletableResourceCollection)
50
49
  disks.should_receive(:get).
51
- with(:zone=>stored_zone.name, :disk=>stored_disk.name).
50
+ with(:zone => stored_zone.name, :disk => stored_disk.name).
52
51
  and_return(stored_disk)
53
52
  disks.should_receive(:delete).
54
- with(:zone=>stored_zone.name, :disk=>stored_disk.name)
55
- client = mock(Google::Compute::Client,
56
- :zones=>zones,:disks=>disks)
57
- Google::Compute::Client.stub!(:from_json).
53
+ with(:zone => stored_zone.name, :disk => stored_disk.name)
54
+ client = double(Google::Compute::Client,
55
+ :zones => zones, :disks => disks)
56
+ Google::Compute::Client.stub(:from_json).
58
57
  and_return(client)
59
58
  knife_plugin.config[:yes] = true
60
59
  knife_plugin.ui.should_receive(:warn).
61
60
  with("Disk '#{stored_zone.name}:#{stored_disk.name}' deleted")
62
- knife_plugin.stub!(:msg_pair)
61
+ knife_plugin.stub(:msg_pair)
63
62
  knife_plugin.run
64
63
  end
65
64
  end
@@ -12,24 +12,24 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
+
15
16
  require 'spec_helper'
16
17
 
17
18
  describe Chef::Knife::GoogleDiskList do
18
-
19
19
  let(:knife_plugin) do
20
20
  Chef::Knife::GoogleDiskList.new(["-Z"+stored_zone.name])
21
21
  end
22
22
 
23
23
  it "should enlist all the GCE disks when run invoked" do
24
- zones = mock(Google::Compute::ListableResourceCollection)
24
+ zones = double(Google::Compute::ListableResourceCollection)
25
25
  zones.should_receive(:get).with(stored_zone.name).
26
26
  and_return(stored_zone)
27
- disks = mock(Google::Compute::ListableResourceCollection)
28
- disks.should_receive(:list).with(:zone=>stored_zone.name).
27
+ disks = double(Google::Compute::ListableResourceCollection)
28
+ disks.should_receive(:list).with(:zone => stored_zone.name).
29
29
  and_return([stored_disk])
30
30
 
31
- client = mock(Google::Compute::Client, :disks=>disks, :zones=>zones)
32
- Google::Compute::Client.stub!(:from_json).and_return(client)
31
+ client = double(Google::Compute::Client, :disks => disks, :zones => zones)
32
+ Google::Compute::Client.stub(:from_json).and_return(client)
33
33
  $stdout.should_receive(:write).with(kind_of(String))
34
34
  knife_plugin.run
35
35
  end
@@ -0,0 +1,32 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+
16
+ require 'spec_helper'
17
+
18
+ describe Chef::Knife::GoogleRegionList do
19
+ let(:knife_plugin) do
20
+ Chef::Knife::GoogleRegionList.new([])
21
+ end
22
+
23
+ it "should enlist all the GCE regions when run invoked" do
24
+ client = double(Google::Compute::Client)
25
+ Google::Compute::Client.stub(:from_json).
26
+ and_return(client)
27
+ client.should_receive(:regions).
28
+ and_return(double("region-collection", :list => [stored_region]))
29
+ $stdout.should_receive(:write).with(kind_of(String))
30
+ knife_plugin.run
31
+ end
32
+ end
@@ -12,91 +12,125 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
+
15
16
  require 'spec_helper'
16
17
 
17
18
  describe Chef::Knife::GoogleServerCreate do
18
-
19
19
  before(:each) do
20
- zones = mock(Google::Compute::ListableResourceCollection)
20
+
21
+ zones = double(Google::Compute::ListableResourceCollection)
21
22
  zones.should_receive(:get).with(stored_zone.name).
22
23
  and_return(stored_zone)
23
24
 
24
- machine_types = mock(Google::Compute::ListableResourceCollection)
25
+ machine_types = double(Google::Compute::ListableResourceCollection)
25
26
  machine_types.should_receive(:get).
26
- with({:name=>stored_machine_type.name, :zone=>stored_zone.name}).
27
+ with({:name => stored_machine_type.name, :zone => stored_zone.name}).
27
28
  and_return(stored_machine_type)
28
29
 
29
- images = mock(Google::Compute::ListableResourceCollection)
30
+ images = double(Google::Compute::ListableResourceCollection)
30
31
  images.should_receive(:get).
31
- with({:project=>"debian-cloud", :name=>stored_image.name}).
32
+ with({:project => "mock-project", :name => stored_image.name}).
32
33
  and_return(stored_image)
33
34
 
34
- networks = mock(Google::Compute::ListableResourceCollection)
35
+ sizeGb = 10
36
+ disks = double(Google::Compute::ListableResourceCollection)
37
+ disks.should_receive(:insert).
38
+ with({:sourceImage => stored_image.self_link, :zone => stored_zone.name,
39
+ :name => stored_instance.name, :sizeGb => sizeGb}).
40
+ and_return(stored_disk)
41
+
42
+ networks = double(Google::Compute::ListableResourceCollection)
35
43
  networks.should_receive(:get).with(stored_network.name).
36
44
  and_return(stored_network)
37
45
 
38
- instances = mock(Google::Compute::ListableResourceCollection)
39
- instances.should_receive(:create).with(
40
- {:name=>stored_instance.name, :image=>stored_image.self_link,
41
- :machineType=>stored_machine_type.self_link, :disks=>[],
42
- :metadata=>{"items"=>[]}, :zone=>stored_zone.name,
43
- :networkInterfaces=>[
44
- {"network"=>stored_network.self_link,
45
- "accessConfigs"=>[
46
- {"name"=>"External NAT", "type"=>"ONE_TO_ONE_NAT"}]}],
47
- :tags=>nil}).and_return(stored_zone_operation)
46
+ instances = double(Google::Compute::ListableResourceCollection)
47
+ instances.should_receive(:create).with({
48
+ :name => stored_instance.name,
49
+ :zone => stored_zone.name,
50
+ :machineType => stored_machine_type.self_link,
51
+ #:image => stored_image.self_link,
52
+ :disks => [{
53
+ "boot" => true,
54
+ "type" => "PERSISTENT",
55
+ "mode" => "READ_WRITE",
56
+ "deviceName" => "",
57
+ "source" => nil}],
58
+ :networkInterfaces => [{
59
+ "network" => stored_network.self_link,
60
+ "accessConfigs" => [{
61
+ "name" => "External NAT",
62
+ "type" => "ONE_TO_ONE_NAT"}]}],
63
+ :serviceAccounts => [{
64
+ "kind" => "compute#serviceAccount",
65
+ "email" => "123845678986@project.gserviceaccount.com",
66
+ "scopes" => [
67
+ "https://www.googleapis.com/auth/userinfo.email",
68
+ "https://www.googleapis.com/auth/compute",
69
+ "https://www.googleapis.com/auth/devstorage.full_control"]}],
70
+ :scheduling=>{
71
+ "automaticRestart" => "false",
72
+ "onHostMaintenance" => "TERMINATE"},
73
+ :metadata => {"items" => []},
74
+ :tags => {"items" => []}}).and_return(stored_zone_operation)
48
75
 
49
76
  instances.should_receive(:get).
50
- with(:zone=>stored_zone.name, :name=>stored_instance.name).
77
+ with(:zone => stored_zone.name, :name => stored_instance.name).
51
78
  and_return(stored_instance)
52
79
 
53
- client = mock(Google::Compute::Client, :instances=>instances,
54
- :images=>images, :zones=>zones,:machine_types=>machine_types,
55
- :networks=>networks)
56
- Google::Compute::Client.stub!(:from_json).and_return(client)
80
+ client = double(Google::Compute::Client, :instances => instances,
81
+ :images => images, :zones => zones,:machine_types => machine_types,
82
+ :networks => networks, :disks => disks)
83
+ Google::Compute::Client.stub(:from_json).and_return(client)
57
84
  end
58
85
 
59
- it "#run should invoke compute api to create an server" do
60
- knife_plugin = Chef::Knife::GoogleServerCreate.new(["-m"+stored_machine_type.name,
61
- "-I"+stored_image.name, "-J"+"debian-cloud",
86
+ it "#run should invoke compute api to create an server with a service account" do
87
+ knife_plugin = Chef::Knife::GoogleServerCreate.new([
88
+ "-m"+stored_machine_type.name,
89
+ "-I"+stored_image.name,
62
90
  "-n"+stored_network.name,
63
- "-Z"+stored_zone.name, stored_instance.name])
64
- knife_plugin.config[:disks]=[]
91
+ "-Z"+stored_zone.name,
92
+ stored_instance.name])
93
+ knife_plugin.config[:service_account_scopes]=["https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.full_control"]
94
+ knife_plugin.config[:service_account_name]='123845678986@project.gserviceaccount.com'
95
+ knife_plugin.config[:boot_disk_size]='10'
65
96
  knife_plugin.config[:metadata]=[]
97
+ knife_plugin.config[:tags]=[]
66
98
  knife_plugin.config[:public_ip]='EPHEMERAL'
67
- knife_plugin.ui.stub!(:info)
68
-
69
- knife_plugin.stub!(:wait_for_sshd)
99
+ knife_plugin.ui.stub(:info)
100
+ knife_plugin.stub(:wait_for_disk)
101
+ knife_plugin.stub(:wait_for_sshd)
70
102
  knife_plugin.should_receive(:bootstrap_for_node).
71
103
  with(stored_instance,'10.100.0.10').
72
- and_return(mock("Chef::Knife::Bootstrap",:run=>true))
73
-
104
+ and_return(double("Chef::Knife::Bootstrap",:run => true))
74
105
  knife_plugin.run
75
106
  end
76
107
 
77
108
  it "should read zone value from knife config file." do
78
- Chef::Config[:knife][:google_compute_zone] = stored_zone.name
79
- knife_plugin = Chef::Knife::GoogleServerCreate.new(["-m"+stored_machine_type.name,
80
- "-I"+stored_image.name, "-J"+"debian-cloud",
109
+ Chef::Config[:knife][:gce_zone] = stored_zone.name
110
+ knife_plugin = Chef::Knife::GoogleServerCreate.new([
111
+ "-m"+stored_machine_type.name,
112
+ "-I"+stored_image.name,
81
113
  "-n"+stored_network.name,
82
- stored_instance.name])
83
- knife_plugin.config[:disks]=[]
114
+ stored_instance.name])
115
+ knife_plugin.config[:service_account_scopes]=["https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.full_control"]
116
+ knife_plugin.config[:service_account_name]='123845678986@project.gserviceaccount.com'
117
+ knife_plugin.config[:boot_disk_size]='10'
84
118
  knife_plugin.config[:metadata]=[]
119
+ knife_plugin.config[:tags]=[]
85
120
  knife_plugin.config[:public_ip]='EPHEMERAL'
86
- knife_plugin.ui.stub!(:info)
87
-
88
- knife_plugin.stub!(:wait_for_sshd)
121
+ knife_plugin.ui.stub(:info)
122
+ knife_plugin.stub(:wait_for_disk)
123
+ knife_plugin.stub(:wait_for_sshd)
89
124
  knife_plugin.should_receive(:bootstrap_for_node).
90
- with(stored_instance,'10.100.0.10').
91
- and_return(mock("Chef::Knife::Bootstrap",:run=>true))
125
+ with(stored_instance, '10.100.0.10').
126
+ and_return(double("Chef::Knife::Bootstrap", :run => true))
92
127
  knife_plugin.run
93
128
  end
94
-
95
129
  end
96
130
 
97
131
  describe "without appropriate command line options" do
98
132
  it "should throw exception when required params are not passed" do
99
- $stdout.stub!(:write) # lets not print those error messages
133
+ $stdout.stub(:write) # lets not print those error messages
100
134
  expect {
101
135
  Chef::Knife::GoogleServerCreate.new([ "NAME"])
102
136
  }.to raise_error(SystemExit)
@@ -17,84 +17,84 @@
17
17
  require 'spec_helper'
18
18
 
19
19
  describe Chef::Knife::GoogleServerDelete do
20
-
21
20
  let(:knife_plugin) do
22
21
  Chef::Knife::GoogleServerDelete.new(
23
22
  [stored_instance.name, "-Z"+stored_zone.name])
24
23
  end
25
24
 
26
25
  it "should print out error message if the server is not found" do
27
- zones = mock(Google::Compute::ListableResourceCollection)
26
+ zones = double(Google::Compute::ListableResourceCollection)
28
27
  zones.should_receive(:get).with(stored_zone.name).
29
28
  and_return(stored_zone)
30
29
 
31
- instances = mock(Google::Compute::DeletableResourceCollection)
30
+ instances = double(Google::Compute::DeletableResourceCollection)
32
31
  instances.should_receive(:get).
33
- with(:name=>stored_instance.name, :zone=>stored_zone.name).
32
+ with(:name => stored_instance.name, :zone => stored_zone.name).
34
33
  and_raise(Google::Compute::ResourceNotFound)
35
34
  instances.should_not_receive(:delete)
36
35
 
37
- client = mock(Google::Compute::Client,
38
- :instances=>instances, :zones=>zones)
39
- Google::Compute::Client.stub!(:from_json).and_return(client)
36
+ client = double(Google::Compute::Client,
37
+ :instances => instances, :zones => zones)
38
+ Google::Compute::Client.stub(:from_json).and_return(client)
40
39
 
41
40
  knife_plugin.config[:yes] = true
42
41
  knife_plugin.ui.should_receive(:error).
43
42
  with("Could not locate server '#{stored_zone.name}:#{stored_instance.name}'.")
44
- knife_plugin.stub!(:msg_pair)
43
+ knife_plugin.stub(:msg_pair)
45
44
  knife_plugin.run
46
45
  end
47
46
 
48
47
  describe "without purge" do
49
48
 
50
49
  it "should invoke api delete method when run is called" do
51
- zones = mock(Google::Compute::ListableResourceCollection)
50
+ zones = double(Google::Compute::ListableResourceCollection)
52
51
  zones.should_receive(:get).with(stored_zone.name).
53
52
  and_return(stored_zone)
54
53
 
55
- instances = mock(Google::Compute::DeletableResourceCollection)
54
+ instances = double(Google::Compute::DeletableResourceCollection)
56
55
  instances.should_receive(:get).
57
- with(:name=>stored_instance.name, :zone=>stored_zone.name).
56
+ with(:name => stored_instance.name, :zone => stored_zone.name).
58
57
  and_return(stored_instance)
59
58
  instances.should_receive(:delete).
60
- with(:instance=>stored_instance.name, :zone=>stored_zone.name)
59
+ with(:instance => stored_instance.name, :zone => stored_zone.name)
61
60
 
62
- client = mock(Google::Compute::Client,
63
- :zones=>zones, :instances=>instances)
64
- Google::Compute::Client.stub!(:from_json).and_return(client)
61
+ client = double(Google::Compute::Client,
62
+ :zones => zones, :instances => instances)
63
+ Google::Compute::Client.stub(:from_json).and_return(client)
64
+ knife_plugin.ui.should_receive(:warn)
65
65
  knife_plugin.config[:yes] = true
66
66
  knife_plugin.ui.should_receive(:warn).twice
67
- knife_plugin.stub!(:msg_pair)
67
+ knife_plugin.stub(:msg_pair)
68
68
  knife_plugin.run
69
69
  end
70
70
  end
71
71
 
72
72
  describe "with purge" do
73
73
  it "should invoke api delete method as well as chef objects destroy when run is called" do
74
- chef_client = mock(Chef::ApiClient)
74
+ chef_client = double(Chef::ApiClient)
75
75
  chef_client.should_receive(:destroy)
76
- chef_node = mock(Chef::Node)
76
+ chef_node = double(Chef::Node)
77
77
  chef_node.should_receive(:destroy)
78
78
 
79
- zones = mock(Google::Compute::ListableResourceCollection)
79
+ zones = double(Google::Compute::ListableResourceCollection)
80
80
  zones.should_receive(:get).with(stored_zone.name).
81
81
  and_return(stored_zone)
82
82
 
83
- instances = mock(Google::Compute::DeletableResourceCollection)
83
+ instances = double(Google::Compute::DeletableResourceCollection)
84
84
  instances.should_receive(:get).
85
- with(:name=>stored_instance.name, :zone=>stored_zone.name).
85
+ with(:name => stored_instance.name, :zone => stored_zone.name).
86
86
  and_return(stored_instance)
87
87
  instances.should_receive(:delete).
88
- with(:instance=>stored_instance.name, :zone=>stored_zone.name)
88
+ with(:instance => stored_instance.name, :zone => stored_zone.name)
89
89
 
90
- client = mock(Google::Compute::Client,
91
- :zones=>zones, :instances=>instances)
92
- Google::Compute::Client.stub!(:from_json).and_return(client)
90
+ client = double(Google::Compute::Client,
91
+ :zones => zones, :instances => instances)
92
+ Google::Compute::Client.stub(:from_json).and_return(client)
93
93
 
94
94
  knife_plugin.config[:yes] = true
95
95
  knife_plugin.config[:purge] = true
96
- knife_plugin.ui.stub!(:warn)
97
- knife_plugin.stub!(:msg_pair)
96
+ knife_plugin.ui.stub(:warn)
97
+ knife_plugin.stub(:msg_pair)
98
98
  Chef::Node.should_receive(:load).with(stored_instance.name).
99
99
  and_return(chef_node)
100
100
  Chef::ApiClient.should_receive(:load).with(stored_instance.name).
@@ -106,22 +106,22 @@ end
106
106
 
107
107
  describe Chef::Knife::GoogleServerDelete do
108
108
  it "should read zone value from knife config file." do
109
- Chef::Config[:knife][:google_compute_zone] = stored_zone.name
109
+ Chef::Config[:knife][:gce_zone] = stored_zone.name
110
110
  knife_plugin = Chef::Knife::GoogleServerDelete.new([stored_instance.name])
111
- zones = mock(Google::Compute::ListableResourceCollection)
111
+ zones = double(Google::Compute::ListableResourceCollection)
112
112
  zones.should_receive(:get).with(stored_zone.name).and_return(stored_zone)
113
113
 
114
- instances = mock(Google::Compute::DeletableResourceCollection)
115
- instances.should_receive(:get).with(:name=>stored_instance.name, :zone=>stored_zone.name).
114
+ instances = double(Google::Compute::DeletableResourceCollection)
115
+ instances.should_receive(:get).with(:name => stored_instance.name, :zone => stored_zone.name).
116
116
  and_return(stored_instance)
117
- instances.should_receive(:delete).with(:instance=>stored_instance.name, :zone=>stored_zone.name)
117
+ instances.should_receive(:delete).with(:instance => stored_instance.name, :zone => stored_zone.name)
118
118
 
119
- client = mock(Google::Compute::Client, :zones=>zones, :instances=>instances)
120
- Google::Compute::Client.stub!(:from_json).and_return(client)
119
+ client = double(Google::Compute::Client, :zones => zones, :instances => instances)
120
+ Google::Compute::Client.stub(:from_json).and_return(client)
121
+ knife_plugin.ui.should_receive(:warn)
121
122
  knife_plugin.config[:yes] = true
122
123
  knife_plugin.ui.should_receive(:warn).twice
123
- knife_plugin.stub!(:msg_pair)
124
+ knife_plugin.stub(:msg_pair)
124
125
  knife_plugin.run
125
-
126
126
  end
127
- end
127
+ end