podman
1package lock
2
3import (
4"fmt"
5"path/filepath"
6
7"github.com/containers/podman/v5/pkg/machine/env"
8"github.com/containers/storage/pkg/lockfile"
9)
10
11func GetMachineLock(name string, machineConfigDir string) (*lockfile.LockFile, error) {
12lockPath := filepath.Join(machineConfigDir, name+".lock")
13lock, err := lockfile.GetLockFile(lockPath)
14if err != nil {
15return nil, fmt.Errorf("creating lockfile for VM: %w", err)
16}
17return lock, nil
18}
19
20const machineStartLockName = "machine-start.lock"
21
22// GetMachineStartLock is a lock only used to prevent starting different machines at the same time,
23// This is required as most provides support at max 1 running VM and to check this race free we
24// cannot allows starting two machine.
25func GetMachineStartLock() (*lockfile.LockFile, error) {
26lockDir, err := env.GetGlobalDataDir()
27if err != nil {
28return nil, err
29}
30
31lock, err := lockfile.GetLockFile(filepath.Join(lockDir, machineStartLockName))
32if err != nil {
33return nil, err
34}
35return lock, nil
36}
37