mirror of
https://github.com/containers/podman.git
synced 2025-11-03 07:47:19 +08:00
The following PR is the very first step in what will a series of steps to apply a "common" machine configuration file to all providers. Function names, method names, struct names, and field names are all up for debate. The purpose of this PR is to offer a glimpse at the direction we intend to take. This PR also contains temporary structs (i.e. aThing) that are not exported. These are merely placeholders. The configuration work in this PR is also unused of yet. But the code is compiled. Once merged, we can begin the next step of development. [NO NEW TESTS NEEDED] Signed-off-by: Brent Baude <bbaude@redhat.com>
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package machine
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/containers/podman/v4/pkg/machine/vmconfigs"
|
|
)
|
|
|
|
type Volume interface {
|
|
Kind() VolumeKind
|
|
}
|
|
|
|
type VolumeKind string
|
|
|
|
var (
|
|
VirtIOFsVk VolumeKind = "virtiofs"
|
|
NinePVk VolumeKind = "9p"
|
|
)
|
|
|
|
type VirtIoFs struct {
|
|
VolumeKind
|
|
ReadOnly bool
|
|
Source string
|
|
Tag string
|
|
Target string
|
|
}
|
|
|
|
func (v VirtIoFs) Kind() string {
|
|
return string(VirtIOFsVk)
|
|
}
|
|
|
|
// unitName is the fq path where /'s are replaced with -'s
|
|
func (v VirtIoFs) unitName() string {
|
|
// delete the leading -
|
|
unit := strings.ReplaceAll(v.Target, "/", "-")
|
|
if strings.HasPrefix(unit, "-") {
|
|
return unit[1:]
|
|
}
|
|
return unit
|
|
}
|
|
|
|
func (v VirtIoFs) ToMount() vmconfigs.Mount {
|
|
return vmconfigs.Mount{
|
|
ReadOnly: v.ReadOnly,
|
|
Source: v.Source,
|
|
Tag: v.Tag,
|
|
Target: v.Target,
|
|
Type: v.Kind(),
|
|
}
|
|
}
|
|
|
|
// NewVirtIoFsMount describes a machine volume mount for virtio-fs. With virtio-fs
|
|
// the source/target are described as a "shared dir". With this style of volume mount
|
|
// the Tag is used as the descriptor value for the mount (in Linux).
|
|
func NewVirtIoFsMount(src, target string, readOnly bool) VirtIoFs {
|
|
vfs := VirtIoFs{
|
|
ReadOnly: readOnly,
|
|
Source: src,
|
|
Target: target,
|
|
}
|
|
vfs.Tag = vfs.unitName()
|
|
return vfs
|
|
}
|