func (r *DiskSubresource) expandDiskSettings(disk *types.VirtualDisk) error {
	// Backing settings
	b := disk.Backing.(*types.VirtualDiskFlatVer2BackingInfo)
	b.DiskMode = r.GetWithRestart("disk_mode").(string)
	b.WriteThrough = structure.BoolPtr(r.GetWithRestart("write_through").(bool))

	// Only use disk_sharing if we are on vSphere 6.0 and higher
	version := viapi.ParseVersionFromClient(r.client)
	if version.Newer(viapi.VSphereVersion{Product: version.Product, Major: 6}) {
		b.Sharing = r.GetWithRestart("disk_sharing").(string)
	}

	// This settings are only set for internal disks
	if !r.Get("attach").(bool) {
		var err error
		var v interface{}
		if v, err = r.GetWithVeto("thin_provisioned"); err != nil {
			return err
		}
		b.ThinProvisioned = structure.BoolPtr(v.(bool))

		if v, err = r.GetWithVeto("eagerly_scrub"); err != nil {
			return err
		}
		b.EagerlyScrub = structure.BoolPtr(v.(bool))

		// Disk settings
		os, ns := r.GetChange("size")
		if os.(int) > ns.(int) {
			return fmt.Errorf("virtual disks cannot be shrunk")
		}
		disk.CapacityInBytes = structure.GiBToByte(ns.(int))
		disk.CapacityInKB = disk.CapacityInBytes / 1024
	}

	alloc := &types.StorageIOAllocationInfo{
		Limit:       structure.Int64Ptr(int64(r.Get("io_limit").(int))),
		Reservation: structure.Int32Ptr(int32(r.Get("io_reservation").(int))),
		Shares: &types.SharesInfo{
			Shares: int32(r.Get("io_share_count").(int)),
			Level:  types.SharesLevel(r.Get("io_share_level").(string)),
		},
	}
	disk.StorageIOAllocation = alloc

	return nil
}
func (r *DiskSubresource) expandDiskSettings(disk *types.VirtualDisk) error {
	
	b := disk.Backing.(*types.VirtualDiskFlatVer2BackingInfo)
	b.DiskMode = r.GetWithRestart("disk_mode").(string)
	b.WriteThrough = structure.BoolPtr(r.GetWithRestart("write_through").(bool))

	
	version := viapi.ParseVersionFromClient(r.client)
	if version.Newer(viapi.VSphereVersion{Product: version.Product, Major: 6}) {
		b.Sharing = r.GetWithRestart("disk_sharing").(string)
	}

	
	if !r.Get("attach").(bool) {
		var err error
		var v interface{}
		if v, err = r.GetWithVeto("thin_provisioned"); err != nil {
			return err
		}
		b.ThinProvisioned = structure.BoolPtr(v.(bool))

		if v, err = r.GetWithVeto("eagerly_scrub"); err != nil {
			return err
		}
		b.EagerlyScrub = structure.BoolPtr(v.(bool))

		
		os, ns := r.GetChange("size")
		if os.(int) > ns.(int) {
			return fmt.Errorf("virtual disks cannot be shrunk")
		}
		disk.CapacityInBytes = structure.GiBToByte(ns.(int))
		disk.CapacityInKB = disk.CapacityInBytes / 1024
	}

	alloc := &types.StorageIOAllocationInfo{
		Limit:       structure.Int64Ptr(int64(r.Get("io_limit").(int))),
		Reservation: structure.Int32Ptr(int32(r.Get("io_reservation").(int))),
		Shares: &types.SharesInfo{
			Shares: int32(r.Get("io_share_count").(int)),
			Level:  types.SharesLevel(r.Get("io_share_level").(string)),
		},
	}
	disk.StorageIOAllocation = alloc

	return nil
}
func ( r * DiskSubresource ) expandDiskSettings ( disk * types . VirtualDisk ) error { // Backing settings b := disk . Backing . ( * types . VirtualDiskFlatVer2BackingInfo ) b . DiskMode = r . GetWithRestart ( " " ) . ( string ) b . WriteThrough = structure . BoolPtr ( r . GetWithRestart ( " " ) . ( bool ) ) // Only use disk_sharing if we are on vSphere 6.0 and higher version := viapi . ParseVersionFromClient ( r . client ) if version . Newer ( viapi . VSphereVersion { Product : version . Product , Major : 6 } ) { b . Sharing = r . GetWithRestart ( " " ) . ( string ) } // This settings are only set for internal disks if ! r . Get ( " " ) . ( bool ) { var err error var v interface { } if v , err = r . GetWithVeto ( " " ) ; err != nil { return err } b . ThinProvisioned = structure . BoolPtr ( v . ( bool ) ) if v , err = r . GetWithVeto ( " " ) ; err != nil { return err } b . EagerlyScrub = structure . BoolPtr ( v . ( bool ) ) // Disk settings os , ns := r . GetChange ( " " ) if os . ( int ) > ns . ( int ) { return fmt . Errorf ( " " ) } disk . CapacityInBytes = structure . GiBToByte ( ns . ( int ) ) disk . CapacityInKB = disk . CapacityInBytes / 1024 } alloc := & types . StorageIOAllocationInfo { Limit : structure . Int64Ptr ( int64 ( r . Get ( " " ) . ( int ) ) ) , Reservation : structure . Int32Ptr ( int32 ( r . Get ( " " ) . ( int ) ) ) , Shares : & types . SharesInfo { Shares : int32 ( r . Get ( " " ) . ( int ) ) , Level : types . SharesLevel ( r . Get ( " " ) . ( string ) ) , } , } disk . StorageIOAllocation = alloc return nil }
// expandDiskSettings sets appropriate fields on an existing disk - this is
// used during Create and Update to set attributes to those found in
// configuration.
expandDiskSettings sets appropriate fields on an existing disk - this is used during Create and Update to set attributes to those found in configuration .