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