vsphere/internal/vmworkflow/virtual_machine_clone_subresource.go
func validateCloneSnapshots(props *mo.VirtualMachine) error {
	if props.Snapshot == nil {
		return fmt.Errorf("virtual machine or template %s must have a snapshot to be used as a linked clone", props.Config.Uuid)
	}
	// Root snapshot list can only have a singular element
	if len(props.Snapshot.RootSnapshotList) != 1 {
		return fmt.Errorf("virtual machine or template %s must have exactly one root snapshot (has: %d)", props.Config.Uuid, len(props.Snapshot.RootSnapshotList))
	}
	// Check to make sure the root snapshot has no children
	if len(props.Snapshot.RootSnapshotList[0].ChildSnapshotList) > 0 {
		return fmt.Errorf("virtual machine or template %s's root snapshot must not have children", props.Config.Uuid)
	}
	// Current snapshot must match root snapshot (this should be the case anyway)
	if props.Snapshot.CurrentSnapshot.Value != props.Snapshot.RootSnapshotList[0].Snapshot.Value {
		return fmt.Errorf("virtual machine or template %s's current snapshot must match root snapshot", props.Config.Uuid)
	}
	return nil
}
func validateCloneSnapshots(props *mo.VirtualMachine) error {
	if props.Snapshot == nil {
		return fmt.Errorf("virtual machine or template %s must have a snapshot to be used as a linked clone", props.Config.Uuid)
	}
	// Root snapshot list can only have a singular element
	if len(props.Snapshot.RootSnapshotList) != 1 {
		return fmt.Errorf("virtual machine or template %s must have exactly one root snapshot (has: %d)", props.Config.Uuid, len(props.Snapshot.RootSnapshotList))
	}
	// Check to make sure the root snapshot has no children
	if len(props.Snapshot.RootSnapshotList[0].ChildSnapshotList) > 0 {
		return fmt.Errorf("virtual machine or template %s's root snapshot must not have children", props.Config.Uuid)
	}
	// Current snapshot must match root snapshot (this should be the case anyway)
	if props.Snapshot.CurrentSnapshot.Value != props.Snapshot.RootSnapshotList[0].Snapshot.Value {
		return fmt.Errorf("virtual machine or template %s's current snapshot must match root snapshot", props.Config.Uuid)
	}
	return nil
}
func validateCloneSnapshots ( props * mo . VirtualMachine ) error { if props . Snapshot == nil { return fmt . Errorf ( " " , props . Config . Uuid ) } // Root snapshot list can only have a singular element if len ( props . Snapshot . RootSnapshotList ) != 1 { return fmt . Errorf ( " " , props . Config . Uuid , len ( props . Snapshot . RootSnapshotList ) ) } // Check to make sure the root snapshot has no children if len ( props . Snapshot . RootSnapshotList [ 0 ] . ChildSnapshotList ) > 0 { return fmt . Errorf ( " " , props . Config . Uuid ) } // Current snapshot must match root snapshot (this should be the case anyway) if props . Snapshot . CurrentSnapshot . Value != props . Snapshot . RootSnapshotList [ 0 ] . Snapshot . Value { return fmt . Errorf ( " " , props . Config . Uuid ) } return nil }
// validateCloneSnapshots checks a VM to make sure it has a single snapshot
// with no children, to make sure there is no ambiguity when selecting a
// snapshot for linked clones.
validateCloneSnapshots checks a VM to make sure it has a single snapshot with no children to make sure there is no ambiguity when selecting a snapshot for linked clones .