knife-google 1.3.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +1 -0
  3. data/.travis.yml +15 -3
  4. data/CHANGELOG.md +4 -6
  5. data/Gemfile +3 -9
  6. data/README.md +208 -355
  7. data/RELEASE_NOTES.md +8 -17
  8. data/Rakefile +8 -49
  9. data/knife-google.gemspec +20 -17
  10. data/lib/chef/knife/cloud/google_service.rb +491 -0
  11. data/lib/chef/knife/cloud/google_service_helpers.rb +62 -0
  12. data/lib/chef/knife/cloud/google_service_options.rb +58 -0
  13. data/lib/chef/knife/google_disk_create.rb +40 -44
  14. data/lib/chef/knife/google_disk_delete.rb +22 -40
  15. data/lib/chef/knife/google_disk_list.rb +57 -51
  16. data/lib/chef/knife/google_project_quotas.rb +59 -0
  17. data/lib/chef/knife/google_region_list.rb +43 -102
  18. data/lib/chef/knife/google_region_quotas.rb +77 -0
  19. data/lib/chef/knife/google_server_create.rb +224 -505
  20. data/lib/chef/knife/google_server_delete.rb +20 -78
  21. data/lib/chef/knife/google_server_list.rb +42 -53
  22. data/lib/chef/knife/google_server_show.rb +44 -0
  23. data/lib/chef/knife/google_zone_list.rb +39 -50
  24. data/lib/knife-google/version.rb +3 -2
  25. data/spec/cloud/google_service_helpers_spec.rb +120 -0
  26. data/spec/cloud/google_service_spec.rb +832 -0
  27. data/spec/google_disk_create_spec.rb +72 -0
  28. data/spec/google_disk_delete_spec.rb +64 -0
  29. data/spec/google_disk_list_spec.rb +93 -0
  30. data/spec/google_project_quotas_spec.rb +63 -0
  31. data/spec/google_region_list_spec.rb +65 -0
  32. data/spec/google_region_quotas_spec.rb +108 -0
  33. data/spec/google_server_create_spec.rb +177 -0
  34. data/spec/google_server_delete_spec.rb +39 -0
  35. data/spec/google_server_list_spec.rb +77 -0
  36. data/spec/google_server_show_spec.rb +60 -0
  37. data/spec/google_zone_list_spec.rb +59 -0
  38. metadata +91 -114
  39. data/CONTRIB.md +0 -64
  40. data/lib/chef/knife/google_base.rb +0 -76
  41. data/lib/chef/knife/google_project_list.rb +0 -178
  42. data/lib/chef/knife/google_setup.rb +0 -31
  43. data/lib/google/compute.rb +0 -47
  44. data/lib/google/compute/client.rb +0 -216
  45. data/lib/google/compute/config.rb +0 -23
  46. data/lib/google/compute/creatable_resource_collection.rb +0 -55
  47. data/lib/google/compute/deletable_resource_collection.rb +0 -51
  48. data/lib/google/compute/disk.rb +0 -38
  49. data/lib/google/compute/exception.rb +0 -30
  50. data/lib/google/compute/firewall.rb +0 -65
  51. data/lib/google/compute/global_operation.rb +0 -60
  52. data/lib/google/compute/image.rb +0 -29
  53. data/lib/google/compute/listable_resource_collection.rb +0 -33
  54. data/lib/google/compute/machine_type.rb +0 -36
  55. data/lib/google/compute/mixins/utils.rb +0 -58
  56. data/lib/google/compute/network.rb +0 -29
  57. data/lib/google/compute/project.rb +0 -76
  58. data/lib/google/compute/region.rb +0 -31
  59. data/lib/google/compute/region_operation.rb +0 -62
  60. data/lib/google/compute/resource.rb +0 -81
  61. data/lib/google/compute/resource_collection.rb +0 -78
  62. data/lib/google/compute/server.rb +0 -88
  63. data/lib/google/compute/server/attached_disk.rb +0 -39
  64. data/lib/google/compute/server/network_interface.rb +0 -38
  65. data/lib/google/compute/server/network_interface/access_config.rb +0 -35
  66. data/lib/google/compute/server/serial_port_output.rb +0 -31
  67. data/lib/google/compute/snapshot.rb +0 -30
  68. data/lib/google/compute/version.rb +0 -19
  69. data/lib/google/compute/zone.rb +0 -34
  70. data/lib/google/compute/zone_operation.rb +0 -62
  71. data/spec/chef/knife/google_base_spec.rb +0 -46
  72. data/spec/chef/knife/google_disk_create_spec.rb +0 -37
  73. data/spec/chef/knife/google_disk_delete_spec.rb +0 -64
  74. data/spec/chef/knife/google_disk_list_spec.rb +0 -36
  75. data/spec/chef/knife/google_region_list_spec.rb +0 -32
  76. data/spec/chef/knife/google_server_create_spec.rb +0 -138
  77. data/spec/chef/knife/google_server_delete_spec.rb +0 -127
  78. data/spec/chef/knife/google_server_list_spec.rb +0 -39
  79. data/spec/chef/knife/google_setup_spec.rb +0 -24
  80. data/spec/chef/knife/google_zone_list_spec.rb +0 -32
  81. data/spec/data/client.json +0 -14
  82. data/spec/data/compute-v1.json +0 -6734
  83. data/spec/data/disk.json +0 -14
  84. data/spec/data/firewall.json +0 -13
  85. data/spec/data/global_operation.json +0 -36
  86. data/spec/data/image.json +0 -12
  87. data/spec/data/machine_type.json +0 -24
  88. data/spec/data/network.json +0 -10
  89. data/spec/data/project.json +0 -21
  90. data/spec/data/region.json +0 -23
  91. data/spec/data/serial_port_output.json +0 -5
  92. data/spec/data/server.json +0 -46
  93. data/spec/data/snapshot.json +0 -12
  94. data/spec/data/zone.json +0 -22
  95. data/spec/data/zone_operation.json +0 -36
  96. data/spec/google/compute/disk_spec.rb +0 -115
  97. data/spec/google/compute/firewall_spec.rb +0 -129
  98. data/spec/google/compute/global_operation_spec.rb +0 -62
  99. data/spec/google/compute/image_spec.rb +0 -75
  100. data/spec/google/compute/machine_type_spec.rb +0 -53
  101. data/spec/google/compute/network_spec.rb +0 -68
  102. data/spec/google/compute/project_spec.rb +0 -71
  103. data/spec/google/compute/region_spec.rb +0 -51
  104. data/spec/google/compute/server_spec.rb +0 -118
  105. data/spec/google/compute/snapshot_spec.rb +0 -57
  106. data/spec/google/compute/zone_operation_spec.rb +0 -62
  107. data/spec/google/compute/zone_spec.rb +0 -51
  108. data/spec/spec_helper.rb +0 -45
  109. data/spec/support/mocks.rb +0 -62
  110. data/spec/support/resource_examples.rb +0 -70
  111. data/spec/support/spec_google_base.rb +0 -60
@@ -1,57 +0,0 @@
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
- require 'spec_helper'
15
-
16
- describe Google::Compute::Snapshot do
17
-
18
- before(:each) do
19
- @mock_api_client=double(Google::APIClient, :authorization= => {}, :auto_refresh_token= => {})
20
- @mock_api_client.stub(:discovered_api).and_return(mock_compute)
21
- Google::APIClient.stub(:new).and_return(@mock_api_client)
22
- end
23
-
24
- let(:client) do
25
- Google::Compute::Client.from_json(mock_data_file(Google::Compute::Client))
26
- end
27
-
28
- it_should_behave_like Google::Compute::Resource
29
-
30
- it '#get should return an individual snapshot' do
31
- @mock_api_client.should_receive(:execute).
32
- with(:api_method => mock_compute.snapshots.get,
33
- :parameters => {'snapshot' => 'mock-snapshot', :project => 'mock-project'}, :body_object => nil).
34
- and_return(mock_response(Google::Compute::Snapshot))
35
- snapshot = client.snapshots.get('mock-snapshot')
36
- snapshot.should be_a_kind_of Google::Compute::Snapshot
37
- snapshot.name.should eq('mock-snapshot')
38
- end
39
-
40
- it '#list should return an array of snapshots' do
41
- @mock_api_client.should_receive(:execute).
42
- with(:api_method => mock_compute.snapshots.list,
43
- :parameters => {:project => 'mock-project'}, :body_object => nil).
44
- and_return(mock_response(Google::Compute::Snapshot, true))
45
- snapshots = client.snapshots.list
46
- snapshots.should_not be_empty
47
- snapshots.all?{|s| s.is_a?(Google::Compute::Snapshot)}.should be_true
48
- end
49
-
50
- it '#delete should delete an existing snapshot' do
51
- @mock_api_client.should_receive(:execute).
52
- with(:api_method => mock_compute.snapshots.delete,
53
- :parameters => {:project => 'mock-project', 'snapshot' => 'mock-snapshot'}, :body_object => nil).
54
- and_return(mock_response(Google::Compute::GlobalOperation))
55
- o = client.snapshots.delete('mock-snapshot')
56
- end
57
- end
@@ -1,62 +0,0 @@
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
- require 'spec_helper'
15
-
16
- describe Google::Compute::ZoneOperation do
17
-
18
- before(:each) do
19
- @mock_api_client=double(Google::APIClient, :authorization= => {}, :auto_refresh_token= => {})
20
- @mock_api_client.stub(:discovered_api).and_return(mock_compute)
21
- Google::APIClient.stub(:new).and_return(@mock_api_client)
22
- end
23
-
24
- let(:client) do
25
- Google::Compute::Client.from_json(mock_data_file(Google::Compute::Client))
26
- end
27
-
28
- it_should_behave_like Google::Compute::Resource
29
-
30
- it '#list should return an array of zone operations' do
31
- @mock_api_client.should_receive(:execute).
32
- with(:api_method => mock_compute.zone_operations.list,
33
- :parameters => { :project => 'mock-project'}, :body_object => nil).
34
- and_return(mock_response(Google::Compute::ZoneOperation, true))
35
-
36
- operations = client.zoneOperations.list
37
- operations.should_not be_empty
38
- operations.all?{|o| o.is_a?(Google::Compute::ZoneOperation)}.should be_true
39
- end
40
-
41
- it '#get should return an individual zone operation' do
42
- @mock_api_client.should_receive(:execute).
43
- with(:api_method => mock_compute.zone_operations.get,
44
- :parameters => {'zoneOperation' => 'mock-zone-operation', :project => 'mock-project'}, :body_object => nil).
45
- and_return(mock_response(Google::Compute::ZoneOperation))
46
-
47
- operation = client.zoneOperations.get('mock-zone-operation')
48
- operation.should be_a_kind_of Google::Compute::ZoneOperation
49
- operation.name.should eq('mock-zone-operation')
50
- operation.should respond_to(:progress)
51
- operation.start_time.should be_a_kind_of(Time)
52
- end
53
-
54
- it '#delete should delete an existing zone operation' do
55
- @mock_api_client.should_receive(:execute).
56
- with(:api_method => mock_compute.zone_operations.delete,
57
- :parameters => {'zoneOperation' => 'mock-zone-operation', :project => 'mock-project'}, :body_object => nil).
58
- and_return(mock_response)
59
-
60
- client.zoneOperations.delete('mock-zone-operation')
61
- end
62
- end
@@ -1,51 +0,0 @@
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
- require 'spec_helper'
16
-
17
- describe Google::Compute::Zone do
18
-
19
- before(:each) do
20
- @mock_api_client=double(Google::APIClient, :authorization= => {}, :auto_refresh_token= => {})
21
- @mock_api_client.stub(:discovered_api).and_return(mock_compute)
22
- Google::APIClient.stub(:new).and_return(@mock_api_client)
23
- end
24
-
25
- let(:client) do
26
- Google::Compute::Client.from_json(mock_data_file(Google::Compute::Client))
27
- end
28
-
29
- it_should_behave_like Google::Compute::Resource
30
-
31
- it '#get should return an individual zone' do
32
- @mock_api_client.should_receive(:execute).
33
- with(:api_method => mock_compute.zones.get,
34
- :parameters => {'zone' => 'mock-zone', :project => 'mock-project'}, :body_object => nil).
35
- and_return(mock_response(Google::Compute::Zone))
36
- zone = client.zones.get('mock-zone')
37
- zone.should be_a_kind_of Google::Compute::Zone
38
- zone.name.should eq('mock-zone')
39
- end
40
-
41
- it '#list should return an array of zones' do
42
- @mock_api_client.should_receive(:execute).
43
- with(:api_method => mock_compute.zones.list,
44
- :parameters => { :project => 'mock-project'}, :body_object => nil).
45
- and_return(mock_response(Google::Compute::Zone, true))
46
- zones = client.zones.list
47
- zones.should_not be_empty
48
- zones.all?{|zone| zone.is_a?(Google::Compute::Zone)}.should be_true
49
- end
50
-
51
- end
data/spec/spec_helper.rb DELETED
@@ -1,45 +0,0 @@
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 'simplecov'
17
- SimpleCov.start do
18
- add_filter "/spec/"
19
- add_filter "/.bundle/"
20
- add_filter "/pkg/"
21
- add_filter "/pkg/"
22
- end
23
-
24
- require 'google/compute'
25
-
26
- require 'support/resource_examples'
27
- require 'support/mocks'
28
-
29
- require 'chef'
30
- require 'chef/knife/google_server_create'
31
- require 'chef/knife/google_server_delete'
32
- require 'chef/knife/google_server_list'
33
- require 'chef/knife/google_disk_list'
34
- require 'chef/knife/google_disk_create'
35
- require 'chef/knife/google_disk_delete'
36
- require 'chef/knife/google_region_list'
37
- require 'chef/knife/google_zone_list'
38
- require 'chef/knife/google_setup'
39
-
40
- require 'support/spec_google_base'
41
-
42
- RSpec.configure do |config|
43
- config.include SpecData
44
- config.include Mocks
45
- end
@@ -1,62 +0,0 @@
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
- module Mocks
16
- SPEC_DATA_FOLDER = File.expand_path('../../data', __FILE__)
17
-
18
- def mock_data(klass)
19
- return File.read(mock_data_file(klass))
20
- end
21
-
22
- def mock_list_data(klass)
23
- return '{"items":[' + File.read(mock_data_file(klass)) + ']}'
24
- end
25
-
26
- def mock_data_file(klass)
27
- class_name = klass.name.split('::').last.snake_case
28
- if class_name == "instance"
29
- json_file = File.expand_path(File.join(SPEC_DATA_FOLDER, 'server.json'))
30
- else
31
- json_file = File.expand_path(File.join(SPEC_DATA_FOLDER, class_name + '.json'))
32
- end
33
- end
34
-
35
- def instance_from_mock_data(klass)
36
- klass.new(mock_hash(klass))
37
- end
38
-
39
- def mock_hash(klass)
40
- MultiJson.load(mock_data(klass))
41
- end
42
-
43
- def mock_compute
44
- @compute ||=
45
- begin
46
- data_file = File.join(SPEC_DATA_FOLDER, 'compute-v1.json')
47
- u = Addressable::URI.parse('URI:https://www.googleapis.com/discovery/v1/apis/compute/v1/rest')
48
- compute = Google::APIClient::API.new(u, MultiJson.load(File.read(data_file)))
49
- end
50
- end
51
-
52
- def mock_response(klass=nil, list = false)
53
- body = if klass.nil?
54
- nil
55
- elsif list
56
- mock_list_data(klass)
57
- else
58
- mock_data(klass)
59
- end
60
- double(klass, :success? => true, :response => double('some', :body => body))
61
- end
62
- end
@@ -1,70 +0,0 @@
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
- shared_examples Google::Compute::Resource do
16
-
17
- let (:resource) do
18
- instance_from_mock_data(described_class)
19
- end
20
-
21
- it "should be of compute# kind" do
22
- resource.kind.should match('compute#')
23
- end
24
-
25
- it "should be a subclass of Google::Compute::Resource" do
26
- resource.should be_a_kind_of(Google::Compute::Resource)
27
- end
28
-
29
- it "#id should have a valid id" do
30
- resource.id.should be_a_kind_of(Integer)
31
- end
32
-
33
- it "#creation_timestamp should have a valid creation timestamp" do
34
- unless resource.creation_timestamp.nil?
35
- resource.creation_timestamp.should be_a_kind_of(Time)
36
- end
37
- end
38
-
39
- it "#type should have same type is class" do
40
- # TODO(erjohnso): {global, zone}operations are not resources
41
- # and instances are servers
42
- if ["globaloperation", "zoneoperation"].include? resource.class.class_name
43
- resource.type.downcase.should eq("operation")
44
- elsif resource.class.class_name == "server"
45
- resource.type.downcase.should eq("instance")
46
- else
47
- resource.type.downcase.should eq(resource.class.class_name)
48
- end
49
- end
50
-
51
- it "should have a valid description" do
52
- # TODO(erjohnso): {global, zone}operations are not resources
53
- # mock-{zone, global}-operation
54
- unless resource.name.split('-').last == "operation"
55
- resource.description.should_not be_nil
56
- end
57
- end
58
-
59
- it "#project should have a valid project name" do
60
- resource.project.should_not be_nil
61
- end
62
-
63
- it "#self_link should have a valid https self link" do
64
- URI.parse(resource.self_link).should be_a_kind_of(URI::HTTPS)
65
- end
66
-
67
- it "#to_s should return its name when converted to string" do
68
- resource.to_s.should eq(resource.name)
69
- end
70
- end
@@ -1,60 +0,0 @@
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
- require 'spec_helper'
16
- require 'google/compute'
17
-
18
- module SpecData
19
- SPEC_DATA_DIR = File.expand_path('../../data', __FILE__)
20
-
21
- def stored_instance
22
- @instance ||= Google::Compute::Server.new(load_json("server.json"))
23
- end
24
-
25
- def stored_global_operation
26
- @global_operation ||= Google::Compute::GlobalOperation.new(load_json("global_operation.json"))
27
- end
28
-
29
- def stored_zone_operation
30
- @zone_operation ||= Google::Compute::ZoneOperation.new(load_json("zone_operation.json"))
31
- end
32
-
33
- def stored_disk
34
- @disk ||= Google::Compute::Disk.new(load_json("disk.json"))
35
- end
36
-
37
- def stored_region
38
- @region ||= Google::Compute::Region.new(load_json("region.json"))
39
- end
40
-
41
- def stored_zone
42
- @zone ||= Google::Compute::Zone.new(load_json("zone.json"))
43
- end
44
-
45
- def stored_image
46
- @image ||= Google::Compute::Image.new(load_json("image.json"))
47
- end
48
-
49
- def stored_machine_type
50
- @machine_type ||= Google::Compute::MachineType.new(load_json("machine_type.json"))
51
- end
52
-
53
- def stored_network
54
- @network ||= Google::Compute::Network.new(load_json 'network.json')
55
- end
56
-
57
- def load_json file
58
- MultiJson.load(File.read("#{SPEC_DATA_DIR}/#{file}"))
59
- end
60
- end