(node, vmType string, params map[string]interface{}, isRestore bool)
| 678 | } |
| 679 | |
| 680 | func (s *MockState) QueueCreateGuest(node, vmType string, params map[string]interface{}, isRestore bool) (string, error) { |
| 681 | s.mu.RLock() |
| 682 | hasNode := false |
| 683 | for _, n := range s.Nodes { |
| 684 | if n.Name == node { |
| 685 | hasNode = true |
| 686 | break |
| 687 | } |
| 688 | } |
| 689 | s.mu.RUnlock() |
| 690 | if !hasNode { |
| 691 | return "", fmt.Errorf("node not found") |
| 692 | } |
| 693 | |
| 694 | requestedVMID := getIntParam(params, "vmid", 0) |
| 695 | forceRestore := isRestore && getBoolParam(params, "force", false) |
| 696 | |
| 697 | vmid := requestedVMID |
| 698 | var err error |
| 699 | if forceRestore && requestedVMID > 0 { |
| 700 | s.mu.RLock() |
| 701 | _, exists := s.VMs[strconv.Itoa(requestedVMID)] |
| 702 | s.mu.RUnlock() |
| 703 | if !exists { |
| 704 | vmid, err = s.GetNextID(requestedVMID) |
| 705 | } |
| 706 | } else { |
| 707 | vmid, err = s.GetNextID(requestedVMID) |
| 708 | } |
| 709 | if err != nil { |
| 710 | return "", err |
| 711 | } |
| 712 | |
| 713 | vm, volumes, err := buildGuest(s, node, vmType, vmid, params) |
| 714 | if err != nil { |
| 715 | return "", err |
| 716 | } |
| 717 | |
| 718 | taskType := map[string]string{ |
| 719 | guestTypeQEMU: "qmcreate", |
| 720 | guestTypeLXC: "vzcreate", |
| 721 | }[vmType] |
| 722 | if isRestore { |
| 723 | taskType = map[string]string{ |
| 724 | guestTypeQEMU: "qmrestore", |
| 725 | guestTypeLXC: "vzrestore", |
| 726 | }[vmType] |
| 727 | } |
| 728 | |
| 729 | upid := s.createTaskWithCompletion(node, taskType, strconv.Itoa(vmid), "root@pam", func() { |
| 730 | s.mu.Lock() |
| 731 | defer s.mu.Unlock() |
| 732 | |
| 733 | if forceRestore { |
| 734 | s.deleteGuestVolumesLocked(vmid) |
| 735 | } |
| 736 | s.VMs[strconv.Itoa(vmid)] = vm |
| 737 | for _, volume := range volumes { |
no test coverage detected