knife-google 1.3.1 → 2.0.0

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.
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,39 +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
- # Google compute engine, attached disk of an instance
16
-
17
- require 'google/compute/mixins/utils'
18
-
19
- module Google
20
- module Compute
21
-
22
- class AttachedDisk
23
- include Utils
24
-
25
- attr_reader :kind, :index, :type, :mode
26
- attr_reader :source, :device_name, :boot
27
-
28
- def initialize(data)
29
- @kind = data["kind"]
30
- @index = data["index"]
31
- @type = data["type"]
32
- @mode= data["mode"]
33
- @source = data["source"]
34
- @device_name = data["deviceName"]
35
- @boot = data["boot"]
36
- end
37
- end
38
- end
39
- end
@@ -1,38 +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 'google/compute/server/network_interface/access_config'
16
- require 'google/compute/mixins/utils'
17
-
18
- module Google
19
- module Compute
20
- class NetworkInterface
21
- include Utils
22
-
23
- attr_reader :name, :network, :network_ip, :access_configs
24
-
25
- def initialize(data)
26
- @name = data["name"]
27
- @network = data["network"]
28
- @network_ip = data["networkIP"]
29
- @access_configs=[]
30
- if data["accessConfigs"] && data["accessConfigs"].is_a?(Array)
31
- data["accessConfigs"].each do |config|
32
- @access_configs << AccessConfig.new(config)
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,35 +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 'google/compute/mixins/utils'
16
-
17
- module Google
18
- module Compute
19
- class NetworkInterface
20
- class AccessConfig
21
-
22
- include Utils
23
-
24
- attr_reader :kind, :name, :type, :nat_ip
25
-
26
- def initialize(data)
27
- @kind = data["kind"]
28
- @name = data["name"]
29
- @type = data["type"]
30
- @nat_ip = data["natIP"]
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,31 +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 'google/compute/mixins/utils'
16
-
17
- module Google
18
- module Compute
19
- class SerialPortOutput
20
- include Utils
21
-
22
- attr_reader :kind, :self_link, :contents
23
-
24
- def initialize(data)
25
- @kind = data["kind"]
26
- @contents = data["contents"]
27
- @self_link = data["selfLink"]
28
- end
29
- end
30
- end
31
- end
@@ -1,30 +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 Google
16
- module Compute
17
- class Snapshot < Resource
18
-
19
- attr_reader :disk_size_gb, :status, :source_disk, :source_disk_id
20
-
21
- def from_hash(data)
22
- super(data)
23
- @disk_size_gb = data["diskSizeGb"]
24
- @status = data["status"]
25
- @source_disk = data["sourceDisk"]
26
- @source_disk_id = data["sourceDiskId"]
27
- end
28
- end
29
- end
30
- end
@@ -1,19 +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 Google
16
- module Compute
17
- VERSION = '1.0.0'
18
- end
19
- end
@@ -1,34 +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 'google/compute/resource'
16
- #require 'google/compute/region'
17
-
18
- module Google
19
- module Compute
20
- class Zone < Resource
21
-
22
- attr_reader :status, :maintenance_windows
23
- attr_reader :deprecated, :region
24
-
25
- def from_hash(zone_data)
26
- super(zone_data)
27
- @status = zone_data["status"]
28
- @maintenance_windows = zone_data["maintenanceWindows"]
29
- @deprecated = zone_data["deprecated"]
30
- @region = zone_data["region"]
31
- end
32
- end
33
- end
34
- 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
- # Google compute engine, operation resource reference
16
-
17
- require 'timeout'
18
-
19
- module Google
20
- module Compute
21
- class ZoneOperation < Resource
22
-
23
- attr_reader :zone, :client_operation_id, :operation_type
24
- attr_reader :target_link, :target_id, :status
25
- attr_reader :status_message, :user, :progress
26
- attr_reader :insert_time, :start_time, :end_time
27
- attr_reader :error, :warnings, :http_error_status_code
28
- attr_reader :http_error_message, :region
29
-
30
- def from_hash(data)
31
- super(data)
32
- @zone = data["zone"]
33
- @client_operation_id = data["clientOperationId"]
34
- @operation_type = data["operationType"]
35
- @target_link= data["targetLink"]
36
- @target_id = data["targetId"]
37
- @status = data["status"]
38
- @status_message = data["statusMessage"]
39
- @user = data["user"]
40
- @progress = data["progress"]
41
- @insert_time = Time.parse( data["insertTime"] )
42
- @start_time = Time.parse( data["startTime"] )
43
- @end_time = Time.parse( data["endTime"] ) if data.key?("endTime")
44
- @error = data["error"]
45
- @warnings = data["warnings"]
46
- @http_error_status_code = data["httpErrorMessage"]
47
- @http_error_message = data["httpErrorMessage"]
48
- @region = data["region"]
49
- end
50
-
51
- def wait_for_completion!(options={})
52
- timeout = options[:timeout] || 60
53
- status = Timeout::timeout(timeout, OperationTimeout) do
54
- until progress==100
55
- sleep 2
56
- progress= get_self.progress
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,46 +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 'spec_helper'
17
-
18
- describe Chef::Knife::GoogleBase do
19
- let(:knife_plugin) { Chef::Knife::GoogleServerList.new(["-Z"+stored_zone.name]) }
20
-
21
- it "#client should return a Google::Compute::Client" do
22
- Google::Compute::Client.should_receive(:from_json).
23
- and_return(double(Google::Compute::Client))
24
- knife_plugin.client
25
- end
26
-
27
- it "#selflink2name should return name from a seleflink url" do
28
- knife_plugin.selflink2name(
29
- 'https://www.googleapis.com/compute/v1/projects/mock-project/category/resource').
30
- should eq('resource')
31
- end
32
-
33
- it "#msg_pair should invoke ui.info with label : value string" do
34
- knife_plugin.ui.should_receive(:info).
35
- with("#{knife_plugin.ui.color("label", :cyan)}: value")
36
- knife_plugin.msg_pair("label", "value")
37
- end
38
-
39
- it "#private_ips should extract private ip as an array from a GCE server" do
40
- knife_plugin.private_ips(stored_instance).should eq(['10.100.0.10'])
41
- end
42
-
43
- it "#public_ips should extract private ip as an array from a GCE server" do
44
- knife_plugin.public_ips(stored_instance).should eq(['11.1.1.11'])
45
- end
46
- end
@@ -1,37 +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 'spec_helper'
17
-
18
- describe Chef::Knife::GoogleDiskCreate do
19
- let(:knife_plugin) do
20
- Chef::Knife::GoogleDiskCreate.new(
21
- [stored_disk.name, "-Z"+stored_zone.name])
22
- end
23
-
24
- it "#run should invoke compute api to create a disk" do
25
- zones = double(Google::Compute::ListableResourceCollection)
26
- zones.should_receive(:get).
27
- with(stored_zone.name).and_return(stored_zone)
28
- disks = double(Google::Compute::CreatableResourceCollection)
29
- disks.should_receive(:create).
30
- with(:name => stored_disk.name, :sizeGb => 10, :zone => stored_zone.name).
31
- and_return(stored_zone_operation)
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
35
- knife_plugin.run
36
- end
37
- end
@@ -1,64 +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 Chef::Knife::GoogleDiskDelete do
18
- let(:knife_plugin) do
19
- Chef::Knife::GoogleDiskDelete.new([stored_disk.name, "-Z"+stored_zone.name])
20
- end
21
-
22
- it "should print out error message if the disk is not found" do
23
- zones = double(Google::Compute::ListableResourceCollection)
24
- zones.should_receive(:get).with(stored_zone.name).
25
- and_return(stored_zone)
26
- disks = double(Google::Compute::DeletableResourceCollection)
27
- disks.should_receive(:get).
28
- with(:zone => stored_zone.name, :disk => stored_disk.name).
29
- and_raise(Google::Compute::ResourceNotFound)
30
- disks.should_not_receive(:delete)
31
- client = double(Google::Compute::Client,
32
- :disks => disks, :zones => zones)
33
- Google::Compute::Client.stub(:from_json).and_return(client)
34
-
35
- knife_plugin.config[:yes] = true
36
- knife_plugin.ui.should_receive(:error).
37
- with("Disk '#{stored_zone.name}:#{stored_disk.name}' not found")
38
- knife_plugin.stub(:msg_pair)
39
- expect {
40
- knife_plugin.run
41
- }.to raise_error(SystemExit)
42
- end
43
-
44
- it "should invoke api delete method when run is called" do
45
- zones = double(Google::Compute::ListableResourceCollection)
46
- zones.should_receive(:get).with(stored_zone.name).
47
- and_return(stored_zone)
48
- disks = double(Google::Compute::DeletableResourceCollection)
49
- disks.should_receive(:get).
50
- with(:zone => stored_zone.name, :disk => stored_disk.name).
51
- and_return(stored_disk)
52
- disks.should_receive(:delete).
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).
57
- and_return(client)
58
- knife_plugin.config[:yes] = true
59
- knife_plugin.ui.should_receive(:warn).
60
- with("Disk '#{stored_zone.name}:#{stored_disk.name}' deleted")
61
- knife_plugin.stub(:msg_pair)
62
- knife_plugin.run
63
- end
64
- end