lib/chef/knife/cloud/google_service.rb in knife-google-4.1.0 vs lib/chef/knife/cloud/google_service.rb in knife-google-4.2.0
- old
+ new
@@ -233,10 +233,11 @@
raise "Invalid machine type: #{options[:machine_type]}" unless valid_machine_type?(options[:machine_type])
raise "Invalid network: #{options[:network]}" unless valid_network?(options[:network])
raise "Invalid subnet: #{options[:subnet]}" if options[:subnet] && !valid_subnet?(options[:subnet])
raise "Invalid Public IP setting: #{options[:public_ip]}" unless valid_public_ip_setting?(options[:public_ip])
raise "Invalid image: #{options[:image]} - check your image name, or set an image project if needed" if boot_disk_source_image(options[:image], options[:image_project]).nil?
+ raise "Maximum number of local SSDs for an instance should be 8, while #{options[:number_of_local_ssd]} is requested." if options[:number_of_local_ssd].to_i > 8
end
def check_api_call
yield
rescue Google::Apis::ClientError
@@ -306,10 +307,11 @@
end
def instance_disks_for(options)
disks = []
disks << instance_boot_disk_for(options)
+ options[:number_of_local_ssd].to_i.times { disks << adding_local_ssd(options) } if options[:local_ssd]
options[:additional_disks].each do |disk_name|
begin
disk = connection.get_disk(project, zone, disk_name)
rescue Google::Apis::ClientError => e
ui.error("Unable to attach disk #{disk_name} to the instance: #{e.message}")
@@ -321,21 +323,35 @@
disks
end
def instance_boot_disk_for(options)
- disk = Google::Apis::ComputeV1::AttachedDisk.new
- params = Google::Apis::ComputeV1::AttachedDiskInitializeParams.new
-
+ disk, params = common_operation(options, boot_disk_type_for(options))
disk.boot = true
- disk.auto_delete = options[:boot_disk_autodelete]
params.disk_name = boot_disk_name_for(options)
params.disk_size_gb = options[:boot_disk_size]
- params.disk_type = disk_type_url_for(boot_disk_type_for(options))
params.source_image = boot_disk_source_image(options[:image], options[:image_project])
disk.initialize_params = params
disk
+ end
+
+ # To create a instance with an attached local SSD
+ def adding_local_ssd(options)
+ disk, params = common_operation(options, "local-ssd")
+ disk.type = "SCRATCH"
+ disk.interface = options[:interface]
+
+ disk.initialize_params = params
+ disk
+ end
+
+ def common_operation(options, disk_type)
+ disk = Google::Apis::ComputeV1::AttachedDisk.new
+ params = Google::Apis::ComputeV1::AttachedDiskInitializeParams.new
+ disk.auto_delete = options[:boot_disk_autodelete]
+ params.disk_type = disk_type_url_for(disk_type)
+ [disk, params]
end
def boot_disk_type_for(options)
options[:boot_disk_ssd] ? "pd-ssd" : "pd-standard"
end