knife-google 3.3.7 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc99e522c4ed14a46ab334613046353d05a276e5e0e3feffd3fb5c00ce4f95d6
4
- data.tar.gz: 60c8eab68161e8a46f82f3430884d8914311f6a2c454a73bc99b88ff0c3d3be9
3
+ metadata.gz: b39bef9d566a21cb4bcf0a0decb202b5b8905ad548335fd4f8eceea6408208a0
4
+ data.tar.gz: 4f75ba0bb858215fa19aa8566a18e93fbb6b3a01dfc89b774d1e0d9b03d20ab6
5
5
  SHA512:
6
- metadata.gz: eb29fc10a5ea59789616c660aff9ed43ba1b564b424d5b055b76f3d2fe7b32234cc270cf95b59d9f0e038c93016abd151d94b8095d3e53695f4d20c0dbca2663
7
- data.tar.gz: 75ee1b1d32d682194a93dd01c21cfb8fcff7fefcca2ebe2433e09844c9e9bd326462165bb7dd413165537f75cd6258614d4e9724e367cee1b17ccfdf1e97a175
6
+ metadata.gz: 5454224647a87ffda86710c3fa6c494b8e8ff1bb05c773aa888190293ff84c08cf5f2c2ec746763efc9f3853d1e0f691e748d46d23e8cad6154d5ef960858d34
7
+ data.tar.gz: dedb9b64dde86e7678bd87ece3852a40c6832a83833e779a39339ac89efc51e568d3316264cbdc964679813744f11ebbef1b96b1969910accb378f73c003f862
@@ -32,50 +32,64 @@ class Chef::Knife::Cloud
32
32
  attr_reader :project, :zone, :wait_time, :refresh_rate, :max_pages, :max_page_size
33
33
 
34
34
  SCOPE_ALIAS_MAP = {
35
- "bigquery" => "bigquery",
36
- "cloud-platform" => "cloud-platform",
37
- "compute-ro" => "compute.readonly",
38
- "compute-rw" => "compute",
39
- "datastore" => "datastore",
40
- "logging-write" => "logging.write",
41
- "monitoring" => "monitoring",
42
- "monitoring-write" => "monitoring.write",
43
- "service-control" => "servicecontrol",
35
+ "bigquery" => "bigquery",
36
+ "cloud-platform" => "cloud-platform",
37
+ "compute-ro" => "compute.readonly",
38
+ "compute-rw" => "compute",
39
+ "datastore" => "datastore",
40
+ "logging-write" => "logging.write",
41
+ "monitoring" => "monitoring",
42
+ "monitoring-write" => "monitoring.write",
43
+ "service-control" => "servicecontrol",
44
44
  "service-management" => "service.management",
45
- "sql" => "sqlservice",
46
- "sql-admin" => "sqlservice.admin",
47
- "storage-full" => "devstorage.full_control",
48
- "storage-ro" => "devstorage.read_only",
49
- "storage-rw" => "devstorage.read_write",
50
- "taskqueue" => "taskqueue",
51
- "useraccounts-ro" => "cloud.useraccounts.readonly",
52
- "useraccounts-rw" => "cloud.useraccounts",
53
- "userinfo-email" => "userinfo.email",
45
+ "sql" => "sqlservice",
46
+ "sql-admin" => "sqlservice.admin",
47
+ "storage-full" => "devstorage.full_control",
48
+ "storage-ro" => "devstorage.read_only",
49
+ "storage-rw" => "devstorage.read_write",
50
+ "taskqueue" => "taskqueue",
51
+ "useraccounts-ro" => "cloud.useraccounts.readonly",
52
+ "useraccounts-rw" => "cloud.useraccounts",
53
+ "userinfo-email" => "userinfo.email",
54
54
  }.freeze
55
55
 
56
56
  IMAGE_ALIAS_MAP = {
57
- "centos-6" => { project: "centos-cloud", prefix: "centos-6" },
58
- "centos-7" => { project: "centos-cloud", prefix: "centos-7" },
59
- "container-vm" => { project: "google-containers", prefix: "container-vm" },
60
- "coreos" => { project: "coreos-cloud", prefix: "coreos-stable" },
61
- "debian-7" => { project: "debian-cloud", prefix: "debian-7-wheezy" },
62
- "debian-7-backports" => { project: "debian-cloud", prefix: "backports-debian-7-wheezy" },
63
- "debian-8" => { project: "debian-cloud", prefix: "debian-8-jessie" },
64
- "opensuse-13" => { project: "opensuse-cloud", prefix: "opensuse-13" },
65
- "rhel-6" => { project: "rhel-cloud", prefix: "rhel-6" },
66
- "rhel-7" => { project: "rhel-cloud", prefix: "rhel-7" },
67
- "sles-11" => { project: "suse-cloud", prefix: "sles-11" },
68
- "sles-12" => { project: "suse-cloud", prefix: "sles-12" },
69
- "ubuntu-12-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1204-precise" },
70
- "ubuntu-1204-lts" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1204-precise" },
71
- "ubuntu-14-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1404-trusty" },
72
- "ubuntu-1404-lts" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1404-trusty" },
73
- "ubuntu-15-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1504-vivid" },
74
- "ubuntu-15-10" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1510-wily" },
75
- "ubuntu-16-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1604-xenial" },
76
- "ubuntu-1604-lts" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1604-xenial" },
77
- "windows-2008-r2" => { project: "windows-cloud", prefix: "windows-server-2008-r2" },
78
- "windows-2012-r2" => { project: "windows-cloud", prefix: "windows-server-2012-r2" },
57
+ "centos-6" => { project: "centos-cloud", prefix: "centos-6" },
58
+ "centos-7" => { project: "centos-cloud", prefix: "centos-7" },
59
+ "container-vm" => { project: "google-containers", prefix: "container-vm" },
60
+ "coreos" => { project: "coreos-cloud", prefix: "coreos-stable" },
61
+ "debian-7" => { project: "debian-cloud", prefix: "debian-7-wheezy" },
62
+ "debian-7-backports" => { project: "debian-cloud", prefix: "backports-debian-7-wheezy" },
63
+ "debian-8" => { project: "debian-cloud", prefix: "debian-8-jessie" },
64
+ "opensuse-13" => { project: "opensuse-cloud", prefix: "opensuse-13" },
65
+ "rhel-6" => { project: "rhel-cloud", prefix: "rhel-6" },
66
+ "rhel-7" => { project: "rhel-cloud", prefix: "rhel-7" },
67
+ "sles-11" => { project: "suse-cloud", prefix: "sles-11" },
68
+ "sles-12" => { project: "suse-cloud", prefix: "sles-12" },
69
+ "ubuntu-12-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1204-precise" },
70
+ "ubuntu-1204-lts" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1204-precise" },
71
+ "ubuntu-14-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1404-trusty" },
72
+ "ubuntu-1404-lts" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1404-trusty" },
73
+ "ubuntu-15-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1504-vivid" },
74
+ "ubuntu-15-10" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1510-wily" },
75
+ "ubuntu-16-04" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1604-xenial" },
76
+ "ubuntu-1604-lts" => { project: "ubuntu-os-cloud", prefix: "ubuntu-1604-xenial" },
77
+ "windows-2008-r2" => { project: "windows-cloud", prefix: "windows-server-2008-r2" },
78
+ "windows-2012-r2" => { project: "windows-cloud", prefix: "windows-server-2012-r2" },
79
+ }.freeze
80
+
81
+ PUBLIC_PROJECTS = %w{
82
+ centos-cloud
83
+ coreos-cloud
84
+ debian-cloud
85
+ cos-cloud
86
+ rhel-cloud
87
+ rhel-sap-cloud
88
+ suse-cloud
89
+ suse-sap-cloud
90
+ ubuntu-os-cloud
91
+ windows-cloud
92
+ windows-sql-cloud
79
93
  }.freeze
80
94
 
81
95
  def initialize(options = {})
@@ -197,6 +211,12 @@ class Chef::Knife::Cloud
197
211
  paginated_results(:list_zones, :items, project) || []
198
212
  end
199
213
 
214
+ # Retrieves the list of custom images and public images.
215
+ # Custom images are images you create that belong to your project.
216
+ def list_images
217
+ available_projects.map { |project| paginated_results(:list_images, :items, project) || [] }.flatten
218
+ end
219
+
200
220
  def list_disks
201
221
  paginated_results(:list_disks, :items, project, zone) || []
202
222
  end
@@ -227,16 +247,19 @@ class Chef::Knife::Cloud
227
247
 
228
248
  def valid_machine_type?(machine_type)
229
249
  return false if machine_type.nil?
250
+
230
251
  check_api_call { connection.get_machine_type(project, zone, machine_type) }
231
252
  end
232
253
 
233
254
  def valid_network?(network)
234
255
  return false if network.nil?
256
+
235
257
  check_api_call { connection.get_network(project, network) }
236
258
  end
237
259
 
238
260
  def valid_subnet?(subnet)
239
261
  return false if subnet.nil?
262
+
240
263
  check_api_call { connection.get_subnetwork(project, region, subnet) }
241
264
  end
242
265
 
@@ -451,6 +474,7 @@ class Chef::Knife::Cloud
451
474
 
452
475
  def service_account_scope_url(scope)
453
476
  return scope if scope.start_with?("https://www.googleapis.com/auth/")
477
+
454
478
  "https://www.googleapis.com/auth/#{translate_scope_alias(scope)}"
455
479
  end
456
480
 
@@ -599,5 +623,9 @@ class Chef::Knife::Cloud
599
623
 
600
624
  operation.error.errors
601
625
  end
626
+
627
+ def available_projects
628
+ [project] | PUBLIC_PROJECTS
629
+ end
602
630
  end
603
631
  end
@@ -27,8 +27,8 @@ class Chef::Knife::Cloud
27
27
  zone: locate_config_value(:gce_zone),
28
28
  wait_time: locate_config_value(:request_timeout),
29
29
  refresh_rate: locate_config_value(:request_refresh_rate),
30
- max_pages: locate_config_value(:max_pages),
31
- max_page_size: locate_config_value(:max_page_size)
30
+ max_pages: locate_config_value(:gce_max_pages),
31
+ max_page_size: locate_config_value(:gce_max_page_size)
32
32
  )
33
33
  end
34
34
 
@@ -38,7 +38,7 @@ class Chef::Knife::Cloud
38
38
  missing = keys_to_check.select { |x| locate_config_value(x).nil? }
39
39
 
40
40
  unless missing.empty?
41
- message = "The following required parameters are missing: #{missing.join(', ')}"
41
+ message = "The following required parameters are missing: #{missing.join(", ")}"
42
42
  ui.error(message)
43
43
  raise message
44
44
  end
@@ -50,6 +50,7 @@ class Chef::Knife::Cloud
50
50
  check_for_missing_config_values!(:gce_zone, :disk_size, :disk_type)
51
51
  raise "Please specify a disk name." unless @name_args.first
52
52
  raise "Disk size must be between 10 and 10,000" unless valid_disk_size?(locate_config_value(:disk_size))
53
+
53
54
  super
54
55
  end
55
56
 
@@ -33,6 +33,7 @@ class Chef::Knife::Cloud
33
33
  def validate_params!
34
34
  check_for_missing_config_values!(:gce_zone)
35
35
  raise "You must specify at least one disk to delete." if @name_args.empty?
36
+
36
37
  super
37
38
  end
38
39
 
@@ -0,0 +1,59 @@
1
+ #
2
+ # Author:: Kapil Chouhan (<kapil.chouhan@msystechnologies.com>)
3
+ # Copyright:: Copyright (c) 2018-2019 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "chef/knife"
20
+ require "chef/knife/cloud/list_resource_command"
21
+ require "chef/knife/cloud/google_service"
22
+ require "chef/knife/cloud/google_service_helpers"
23
+ require "chef/knife/cloud/google_service_options"
24
+
25
+ class Chef::Knife::Cloud
26
+ class GoogleImageList < ResourceListCommand
27
+ include GoogleServiceHelpers
28
+ include GoogleServiceOptions
29
+
30
+ banner "knife google image list"
31
+
32
+ def validate_params!
33
+ check_for_missing_config_values!
34
+ super
35
+ end
36
+
37
+ def before_exec_command
38
+ @columns_with_info = [
39
+ { label: "NAME", key: "name" },
40
+ { label: "PROJECT", key: "self_link", value_callback: method(:find_project_name) },
41
+ { label: "FAMILY", key: "family" },
42
+ { label: "DISK SIZE", key: "disk_size_gb", value_callback: method(:format_disk_size_value) },
43
+ { label: "STATUS", key: "status" },
44
+ ]
45
+ end
46
+
47
+ def find_project_name(self_link)
48
+ self_link[%r{projects\/(.*?)\/}m, 1]
49
+ end
50
+
51
+ def format_disk_size_value(disk_size)
52
+ "#{disk_size} GB"
53
+ end
54
+
55
+ def query_resource
56
+ service.list_images
57
+ end
58
+ end
59
+ end
@@ -50,7 +50,7 @@ class Chef::Knife::Cloud
50
50
  end
51
51
 
52
52
  def format_name(name)
53
- name.split("_").map { |x| x.capitalize }.join(" ")
53
+ name.split("_").map(&:capitalize).join(" ")
54
54
  end
55
55
 
56
56
  def format_number(number)
@@ -68,7 +68,7 @@ class Chef::Knife::Cloud
68
68
  end
69
69
 
70
70
  def format_name(name)
71
- name.split("_").map { |x| x.capitalize }.join(" ")
71
+ name.split("_").map(&:capitalize).join(" ")
72
72
  end
73
73
 
74
74
  def format_number(number)
@@ -154,46 +154,51 @@ class Chef::Knife::Cloud
154
154
  super
155
155
 
156
156
  @create_options = {
157
- name: instance_name,
158
- image: locate_config_value(:image),
159
- image_project: locate_config_value(:image_project),
160
- network: locate_config_value(:network),
161
- subnet: locate_config_value(:subnet),
162
- public_ip: locate_config_value(:public_ip),
163
- auto_migrate: auto_migrate?,
164
- auto_restart: auto_restart?,
165
- preemptible: preemptible?,
166
- boot_disk_autodelete: locate_config_value(:boot_disk_autodelete),
167
- boot_disk_name: locate_config_value(:boot_disk_name),
168
- boot_disk_size: boot_disk_size,
169
- boot_disk_ssd: locate_config_value(:boot_disk_ssd),
170
- additional_disks: locate_config_value(:additional_disks),
171
- can_ip_forward: locate_config_value(:can_ip_forward),
172
- machine_type: locate_config_value(:machine_type),
157
+ name: instance_name,
158
+ image: locate_config_value(:image),
159
+ image_project: locate_config_value(:image_project),
160
+ network: locate_config_value(:network),
161
+ subnet: locate_config_value(:subnet),
162
+ public_ip: locate_config_value(:public_ip),
163
+ auto_migrate: auto_migrate?,
164
+ auto_restart: auto_restart?,
165
+ preemptible: preemptible?,
166
+ boot_disk_autodelete: locate_config_value(:boot_disk_autodelete),
167
+ boot_disk_name: locate_config_value(:boot_disk_name),
168
+ boot_disk_size: boot_disk_size,
169
+ boot_disk_ssd: locate_config_value(:boot_disk_ssd),
170
+ additional_disks: locate_config_value(:additional_disks),
171
+ can_ip_forward: locate_config_value(:can_ip_forward),
172
+ machine_type: locate_config_value(:machine_type),
173
173
  service_account_scopes: locate_config_value(:service_account_scopes),
174
- service_account_name: locate_config_value(:service_account_name),
175
- metadata: metadata,
176
- tags: locate_config_value(:tags),
174
+ service_account_name: locate_config_value(:service_account_name),
175
+ metadata: metadata,
176
+ tags: locate_config_value(:tags),
177
177
  }
178
178
  end
179
179
 
180
180
  def set_default_config
181
181
  # dumb hack for knife-cloud, which expects the user to pass in the WinRM password to use when bootstrapping.
182
182
  # We won't know the password until the instance is created and we forceably reset it.
183
- config[:winrm_password] = "will_change_this_later"
183
+ config[:connection_password] = "will_change_this_later"
184
184
  end
185
185
 
186
186
  def validate_params!
187
187
  check_for_missing_config_values!(:gce_zone, :machine_type, :image, :boot_disk_size, :network)
188
188
  raise "You must supply an instance name." if @name_args.first.nil?
189
189
  raise "Boot disk size must be between 10 and 10,000" unless valid_disk_size?(boot_disk_size)
190
- if locate_config_value(:bootstrap_protocol) == "winrm" && locate_config_value(:gce_email).nil?
190
+
191
+ if locate_config_value(:connection_protocol) == "winrm" && locate_config_value(:gce_email).nil?
191
192
  raise "Please provide your Google Cloud console email address via --gce-email. " \
192
193
  "It is required when resetting passwords on Windows hosts."
193
194
  end
194
195
 
196
+ raise "Please provide connection port via --connection-port." unless locate_config_value(:connection_port)
197
+ raise "Please provide image os type via --image-os-type." unless locate_config_value(:image_os_type)
198
+
195
199
  ui.warn("Auto-migrate disabled for preemptible instance") if preemptible? && locate_config_value(:auto_migrate)
196
200
  ui.warn("Auto-restart disabled for preemptible instance") if preemptible? && locate_config_value(:auto_restart)
201
+
197
202
  super
198
203
  end
199
204
 
@@ -203,9 +208,9 @@ class Chef::Knife::Cloud
203
208
  config[:chef_node_name] = locate_config_value(:chef_node_name) ? locate_config_value(:chef_node_name) : instance_name
204
209
  config[:bootstrap_ip_address] = ip_address_for_bootstrap
205
210
 
206
- if locate_config_value(:bootstrap_protocol) == "winrm"
211
+ if locate_config_value(:image_os_type) == "windows"
207
212
  ui.msg("Resetting the Windows login password so the bootstrap can continue...")
208
- config[:winrm_password] = reset_windows_password
213
+ config[:connection_password] = reset_windows_password
209
214
  end
210
215
  end
211
216
 
@@ -247,6 +252,7 @@ class Chef::Knife::Cloud
247
252
  ip = locate_config_value(:use_private_ip) ? private_ip_for(server) : public_ip_for(server)
248
253
 
249
254
  raise "Unable to determine instance IP address for bootstrapping" if ip == "unknown"
255
+
250
256
  ip
251
257
  end
252
258
 
@@ -271,7 +277,7 @@ class Chef::Knife::Cloud
271
277
  zone: zone,
272
278
  instance_name: instance_name,
273
279
  email: email,
274
- username: locate_config_value(:winrm_user),
280
+ username: locate_config_value(:connection_user),
275
281
  debug: gcewinpass_debug_mode
276
282
  ).new_password
277
283
  end
@@ -37,6 +37,7 @@ class Chef
37
37
  check_for_missing_config_values!(:gce_zone)
38
38
  raise "You must supply an instance name to display" if @name_args.empty?
39
39
  raise "You may only supply one instance name" if @name_args.size > 1
40
+
40
41
  super
41
42
  end
42
43
  end
@@ -15,7 +15,7 @@
15
15
  #
16
16
  module Knife
17
17
  module Google
18
- VERSION = "3.3.7"
18
+ VERSION = "4.1.0"
19
19
  MAJOR, MINOR, TINY = VERSION.split(".")
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-google
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.7
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chiraq Jog
@@ -13,22 +13,22 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2018-11-20 00:00:00.000000000 Z
16
+ date: 2019-09-25 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: knife-cloud
20
20
  requirement: !ruby/object:Gem::Requirement
21
21
  requirements:
22
- - - "~>"
22
+ - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: 1.2.0
24
+ version: 2.0.0
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
- - - "~>"
29
+ - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: 1.2.0
31
+ version: 2.0.0
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: google-api-client
34
34
  requirement: !ruby/object:Gem::Requirement
@@ -78,6 +78,7 @@ files:
78
78
  - lib/chef/knife/google_disk_create.rb
79
79
  - lib/chef/knife/google_disk_delete.rb
80
80
  - lib/chef/knife/google_disk_list.rb
81
+ - lib/chef/knife/google_image_list.rb
81
82
  - lib/chef/knife/google_project_quotas.rb
82
83
  - lib/chef/knife/google_region_list.rb
83
84
  - lib/chef/knife/google_region_quotas.rb
@@ -106,8 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  - !ruby/object:Gem::Version
107
108
  version: '0'
108
109
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.7.6
110
+ rubygems_version: 3.0.3
111
111
  signing_key:
112
112
  specification_version: 4
113
113
  summary: Google Compute Engine Support for Chef's Knife Command