Add virtualization framework virtiofs command line option

Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com>
This commit is contained in:
Frédéric Dalleau 2023-01-12 17:06:15 +01:00
parent 13426fe805
commit e4b1a5b192
2 changed files with 49 additions and 21 deletions

View File

@ -22,6 +22,7 @@ type virtualizationFramwworkConfig struct {
state string state string
networking string networking string
kernelBoot bool kernelBoot bool
virtiofsShares []string
} }
func runVirtualizationFrameworkCmd() *cobra.Command { func runVirtualizationFrameworkCmd() *cobra.Command {
@ -31,6 +32,7 @@ func runVirtualizationFrameworkCmd() *cobra.Command {
state string state string
networking string networking string
kernelBoot bool kernelBoot bool
virtiofsShares []string
) )
cmd := &cobra.Command{ cmd := &cobra.Command{
@ -51,6 +53,7 @@ func runVirtualizationFrameworkCmd() *cobra.Command {
state: state, state: state,
networking: networking, networking: networking,
kernelBoot: kernelBoot, kernelBoot: kernelBoot,
virtiofsShares: virtiofsShares,
} }
return runVirtualizationFramework(cfg, args[0]) return runVirtualizationFramework(cfg, args[0])
}, },
@ -63,6 +66,7 @@ func runVirtualizationFrameworkCmd() *cobra.Command {
cmd.Flags().StringVar(&networking, "networking", virtualizationNetworkingDefault, "Networking mode. Valid options are 'default', 'vmnet' and 'none'. 'vmnet' uses the Apple vmnet framework. 'none' disables networking.`") cmd.Flags().StringVar(&networking, "networking", virtualizationNetworkingDefault, "Networking mode. Valid options are 'default', 'vmnet' and 'none'. 'vmnet' uses the Apple vmnet framework. 'none' disables networking.`")
cmd.Flags().BoolVar(&kernelBoot, "kernel", false, "Boot image is kernel+initrd+cmdline 'path'-kernel/-initrd/-cmdline") cmd.Flags().BoolVar(&kernelBoot, "kernel", false, "Boot image is kernel+initrd+cmdline 'path'-kernel/-initrd/-cmdline")
cmd.Flags().StringArrayVar(&virtiofsShares, "virtiofs", []string{}, "Directory shared on virtiofs")
return cmd return cmd
} }

View File

@ -239,6 +239,30 @@ func runVirtualizationFramework(cfg virtualizationFramwworkConfig, path string)
config.SetSocketDevicesVirtualMachineConfiguration([]vz.SocketDeviceConfiguration{ config.SetSocketDevicesVirtualMachineConfiguration([]vz.SocketDeviceConfiguration{
socketDeviceConfiguration, socketDeviceConfiguration,
}) })
if len(cfg.virtiofsShares) > 0 {
var cs []vz.DirectorySharingDeviceConfiguration
for idx, share := range cfg.virtiofsShares {
tag := fmt.Sprintf("virtiofs%d", idx)
device, err := vz.NewVirtioFileSystemDeviceConfiguration(tag)
if err != nil {
log.Fatal("virtiofs device configuration failed", err)
}
dir, err := vz.NewSharedDirectory(share, false)
if err != nil {
log.Fatal("virtiofs shared directory failed", err)
}
single, err := vz.NewSingleDirectoryShare(dir)
if err != nil {
log.Fatal("virtiofs single directory share failed", err)
}
device.SetDirectoryShare(single)
cs = append(cs, device)
}
config.SetDirectorySharingDevicesVirtualMachineConfiguration(cs)
}
validated, err := config.Validate() validated, err := config.Validate()
if !validated || err != nil { if !validated || err != nil {
log.Fatal("validation failed", err) log.Fatal("validation failed", err)