def SetDiskProperties(context, disks, add_blank_src_img=False): """Set properties on each disk to required format. Sets default values, and moves properties passed directly into initializeParams where required. Args: context: Template context dictionary. disks: List of disks to set properties on. add_blank_src_img: When true, link to blank source image is added for new disks where a source image is not specified. """ project = context.env[default.PROJECT] zone = context.properties.setdefault(ZONE, DEFAULT_ZONE) for disk in disks: disk.setdefault(default.AUTO_DELETE, True) disk.setdefault('boot', False) disk.setdefault(default.TYPE, DEFAULT_PERSISTENT) # If disk already exists, no properties to change. if default.DISK_SOURCE in disk: continue else: disk_init = disk.setdefault(default.INITIALIZEP, dict()) if disk[default.TYPE] == SCRATCH: disk_init.setdefault(DISKTYPE, 'local-ssd') else: # In the Instance API reference, size and type are within this property if disk_init: disk_init.setdefault(default.DISK_SIZE, DEFAULT_DATADISKSIZE) disk_init.setdefault(default.DISKTYPE, DEFAULT_DISKTYPE) # You can also simply pass the size and type properties directly else: disk_init[default.DISK_SIZE] = disk.pop( default.DISK_SIZE, DEFAULT_DATADISKSIZE) disk_init[default.DISKTYPE] = disk.pop( default.DISKTYPE, DEFAULT_DISKTYPE) # If disk name was given as a direct property, move to initializeParams if default.DISK_NAME in disk: disk_init[default.DISK_NAME] = disk.pop(default.DISK_NAME) # Add link to a blank source image where non-specified if add_blank_src_img and default.SRCIMAGE not in disk_init: disk_init[default.SRCIMAGE] = common.MakeC2DImageLink( BLANK_IMAGE) # Change disk type names into URLs disk_init[default.DISKTYPE] = common.LocalComputeLink( project, zone, 'diskTypes', disk_init[default.DISKTYPE])
def AppendLocalSSDDisks(context, disk_list, num_of_local_ssd): """Apends local ssds.""" project = context.env[default.PROJECT] prop = context.properties zone = prop.setdefault(ZONE, DEFAULT_ZONE) local_ssd_disks = [] for i in range(0, num_of_local_ssd): local_ssd_disks.append({ 'deviceName': 'local-ssd-%s' % i, 'type': SCRATCH, 'interface': 'SCSI', 'mode': 'READ_WRITE', 'autoDelete': True, 'initializeParams': {'diskType': common.LocalComputeLink( project, zone, 'diskTypes', 'local-ssd')} }) return disk_list + local_ssd_disks
def GenerateDisks(context, disk_list, new_disks): """Generates as many disks as passed in the disk_list.""" project = context.env[default.PROJECT] prop = context.properties zone = prop.setdefault(ZONE, DEFAULT_ZONE) sourced_disks = [] disk_names = [] for disk in disk_list: d_name = (disk[default.DEVICE_NAME] if default.DISK_NAME not in disk else disk[default.DISK_NAME]) if default.DISK_SOURCE in disk: # Existing disk, expect disk api link source = disk[default.DISK_SOURCE] else: # The disks should be create separately if default.DEVICE_NAME not in disk and default.DISK_NAME not in disk: raise common.Error( 'deviceName or diskName is needed for each disk in ' 'this module implemention of multiple disks per vm.') disk_init = disk.setdefault(default.INITIALIZEP, dict()) disk_size = disk_init.setdefault(default.DISK_SIZE, DEFAULT_DATADISKSIZE) passed_disk_type = disk_init.setdefault(default.TYPE, DEFAULT_DISKTYPE) disk_type = common.LocalComputeLink(project, zone, 'diskTypes', passed_disk_type) new_disks.append({ 'name': d_name, 'type': default.DISK, 'properties': { 'type': disk_type, 'sizeGb': disk_size, 'zone': zone } }) # pyformat: disable disk_names.append(d_name) source = common.Ref(d_name) sourced_disks.append({ 'deviceName': d_name, 'autoDelete': True, 'boot': False, 'source': source, 'type': DEFAULT_PERSISTENT, }) items = prop[METADATA].setdefault('items', list()) items.append({'key': ATTACHED_DISKS, 'value': ','.join(disk_names)}) return sourced_disks, new_disks
def AppendLocalSSDDisks(context, disk_list, num_of_local_ssd): """Apends local ssds.""" project = context.env[default.PROJECT] prop = context.properties zone = prop.setdefault(ZONE, DEFAULT_ZONE) local_ssd_disks = [] for i in range(0, num_of_local_ssd): local_ssd_disks.append({ "deviceName": "local-ssd-%s" % i, "type": SCRATCH, "interface": "SCSI", "mode": "READ_WRITE", "autoDelete": True, "initializeParams": { "diskType": common.LocalComputeLink(project, zone, "diskTypes", "local-ssd") }, }) return disk_list + local_ssd_disks
def GenerateDisks(context, disk_list, new_disks): """Generates as many disks as passed in the disk_list.""" project = context.env[default.PROJECT] prop = context.properties zone = prop.setdefault(ZONE, DEFAULT_ZONE) sourced_disks = [] disk_names = [] for disk in disk_list: d_name = (disk[default.DEVICE_NAME] if default.DISK_NAME not in disk else disk[default.DISK_NAME]) d_autodelete = (True if default.AUTO_DELETE not in disk else disk[default.AUTO_DELETE]) d_type = (DEFAULT_PERSISTENT if default.TYPE not in disk else disk[default.TYPE]) if default.DISK_SOURCE in disk: # Existing disk, expect disk api link source = disk[default.DISK_SOURCE] elif d_type == SCRATCH: # No special treatment needed for SSD disk if default.INITIALIZEP in disk: disk_type = disk[default.INITIALIZEP][DISKTYPE] else: disk_type = 'local-ssd' disk[default.INITIALIZEP] = { DISKTYPE: common.LocalComputeLink(project, zone, 'diskTypes', disk_type) } sourced_disks.append(disk) continue else: if default.DEVICE_NAME not in disk and default.DISK_NAME not in disk: raise common.Error( 'deviceName or diskName is needed for each disk in ' 'this module implemention of multiple disks per vm.') # In the Instance API reference, size and type are within this property if default.INITIALIZEP in disk: disk_init = disk[default.INITIALIZEP] disk_size = disk_init.setdefault(default.DISK_SIZE, DEFAULT_DATADISKSIZE) passed_disk_type = disk_init.setdefault( DISKTYPE, DEFAULT_DISKTYPE) # You can also simply pass the size and type properties directly else: disk_size = disk.setdefault(default.DISK_SIZE, DEFAULT_DATADISKSIZE) passed_disk_type = disk.setdefault(DISKTYPE, DEFAULT_DISKTYPE) disk_type = common.LocalComputeLink(project, zone, 'diskTypes', passed_disk_type) new_disks.append({ 'name': d_name, 'type': default.DISK, 'properties': { 'type': disk_type, 'sizeGb': disk_size, 'zone': zone } }) # pyformat: disable disk_names.append(d_name) source = common.Ref(d_name) sourced_disks.append({ 'deviceName': d_name, 'autoDelete': d_autodelete, 'boot': False, 'source': source, 'type': d_type, }) items = prop[METADATA].setdefault('items', list()) items.append({'key': ATTACHED_DISKS, 'value': ','.join(disk_names)}) return sourced_disks, new_disks