func expandAzureRmVirtualMachineOsDisk(d *schema.ResourceData) (*compute.OSDisk, error) { disks := d.Get("storage_os_disk").(*schema.Set).List() if len(disks) != 1 { return nil, fmt.Errorf("[ERROR] Only 1 OS Disk Can be specified for an Azure RM Virtual Machine") } disk := disks[0].(map[string]interface{}) name := disk["name"].(string) vhdURI := disk["vhd_uri"].(string) createOption := disk["create_option"].(string) osDisk := &compute.OSDisk{ Name: &name, Vhd: &compute.VirtualHardDisk{ URI: &vhdURI, }, CreateOption: compute.DiskCreateOptionTypes(createOption), } if v := disk["caching"].(string); v != "" { osDisk.Caching = compute.CachingTypes(v) } return osDisk, nil }
func expandAzureRMVirtualMachineScaleSetsStorageProfileOsDisk(d *schema.ResourceData) (*compute.VirtualMachineScaleSetOSDisk, error) { osDiskConfigs := d.Get("storage_profile_os_disk").(*schema.Set).List() osDiskConfig := osDiskConfigs[0].(map[string]interface{}) name := osDiskConfig["name"].(string) image := osDiskConfig["image"].(string) caching := osDiskConfig["caching"].(string) osType := osDiskConfig["os_type"].(string) createOption := osDiskConfig["create_option"].(string) var vhdContainers []string containers := osDiskConfig["vhd_containers"].(*schema.Set).List() for _, v := range containers { str := v.(string) vhdContainers = append(vhdContainers, str) } osDisk := &compute.VirtualMachineScaleSetOSDisk{ Name: &name, Caching: compute.CachingTypes(caching), OsType: compute.OperatingSystemTypes(osType), CreateOption: compute.DiskCreateOptionTypes(createOption), VhdContainers: &vhdContainers, } if image != "" { osDisk.Image = &compute.VirtualHardDisk{ URI: &image, } } return osDisk, nil }
func expandAzureRmVirtualMachineDataDisk(d *schema.ResourceData) ([]compute.DataDisk, error) { disks := d.Get("storage_data_disk").([]interface{}) data_disks := make([]compute.DataDisk, 0, len(disks)) for _, disk_config := range disks { config := disk_config.(map[string]interface{}) name := config["name"].(string) vhd := config["vhd_uri"].(string) createOption := config["create_option"].(string) lun := int32(config["lun"].(int)) data_disk := compute.DataDisk{ Name: &name, Vhd: &compute.VirtualHardDisk{ URI: &vhd, }, Lun: &lun, CreateOption: compute.DiskCreateOptionTypes(createOption), } if v := config["caching"].(string); v != "" { data_disk.Caching = compute.CachingTypes(v) } if v := config["disk_size_gb"]; v != nil { diskSize := int32(config["disk_size_gb"].(int)) data_disk.DiskSizeGB = &diskSize } data_disks = append(data_disks, data_disk) } return data_disks, nil }
func expandAzureRmVirtualMachineOsDisk(d *schema.ResourceData) (*compute.OSDisk, error) { disks := d.Get("storage_os_disk").(*schema.Set).List() disk := disks[0].(map[string]interface{}) name := disk["name"].(string) vhdURI := disk["vhd_uri"].(string) imageURI := disk["image_uri"].(string) createOption := disk["create_option"].(string) osDisk := &compute.OSDisk{ Name: &name, Vhd: &compute.VirtualHardDisk{ URI: &vhdURI, }, CreateOption: compute.DiskCreateOptionTypes(createOption), } if v := disk["image_uri"].(string); v != "" { osDisk.Image = &compute.VirtualHardDisk{ URI: &imageURI, } } if v := disk["os_type"].(string); v != "" { if v == "linux" { osDisk.OsType = compute.Linux } else if v == "windows" { osDisk.OsType = compute.Windows } else { return nil, fmt.Errorf("[ERROR] os_type must be 'linux' or 'windows'") } } if v := disk["caching"].(string); v != "" { osDisk.Caching = compute.CachingTypes(v) } if v := disk["disk_size_gb"].(int); v != 0 { diskSize := int32(v) osDisk.DiskSizeGB = &diskSize } return osDisk, nil }
// Attach attaches a volume.Spec to a Azure VM referenced by NodeName, returning the disk's LUN func (attacher *azureDiskAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string, error) { volumeSource, err := getVolumeSource(spec) if err != nil { glog.Warningf("failed to get azure disk spec") return "", err } instanceid, err := attacher.azureProvider.InstanceID(nodeName) if err != nil { glog.Warningf("failed to get azure instance id") return "", fmt.Errorf("failed to get azure instance id for node %q", nodeName) } if ind := strings.LastIndex(instanceid, "/"); ind >= 0 { instanceid = instanceid[(ind + 1):] } lun, err := attacher.azureProvider.GetDiskLun(volumeSource.DiskName, volumeSource.DataDiskURI, nodeName) if err == cloudprovider.InstanceNotFound { // Log error and continue with attach glog.Warningf( "Error checking if volume is already attached to current node (%q). Will continue and try attach anyway. err=%v", instanceid, err) } if err == nil { // Volume is already attached to node. glog.V(4).Infof("Attach operation is successful. volume %q is already attached to node %q at lun %d.", volumeSource.DiskName, instanceid, lun) } else { getLunMutex.LockKey(instanceid) defer getLunMutex.UnlockKey(instanceid) lun, err = attacher.azureProvider.GetNextDiskLun(nodeName) if err != nil { glog.Warningf("no LUN available for instance %q", nodeName) return "", fmt.Errorf("all LUNs are used, cannot attach volume %q to instance %q", volumeSource.DiskName, instanceid) } err = attacher.azureProvider.AttachDisk(volumeSource.DiskName, volumeSource.DataDiskURI, nodeName, lun, compute.CachingTypes(*volumeSource.CachingMode)) if err == nil { glog.V(4).Infof("Attach operation successful: volume %q attached to node %q.", volumeSource.DataDiskURI, nodeName) } else { glog.V(2).Infof("Attach volume %q to instance %q failed with %v", volumeSource.DataDiskURI, instanceid, err) return "", fmt.Errorf("Attach volume %q to instance %q failed with %v", volumeSource.DiskName, instanceid, err) } } return strconv.Itoa(int(lun)), err }