Skip to content

Commit f6ab86e

Browse files
authored
feat(cli): support extend share dir (#43)
https://oomol.atlassian.net/browse/OOM-1349 Signed-off-by: Kevin Cui <[email protected]>
1 parent 5fccfe2 commit f6ab86e

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

pkg/cli/cli.go

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var (
2525
bindPID int
2626
powerSaveMode bool
2727
kernelDebug bool
28+
extendShareDir string
2829
)
2930

3031
func Parse() {
@@ -44,6 +45,7 @@ func Parse() {
4445
flag.IntVar(&bindPID, "bind-pid", 0, "OVM will exit when the bound pid exited")
4546
flag.BoolVar(&powerSaveMode, "power-save-mode", false, "Enable power save mode")
4647
flag.BoolVar(&kernelDebug, "kernel-debug", false, "Enable kernel debug")
48+
flag.StringVar(&extendShareDir, "extend-share-dir", "", "Extends share directory with the guest. e.g. --extend-share-dir=host-tmp:/tmp,host-var:/var")
4749

4850
flag.Parse()
4951

pkg/cli/setup.go

+19
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type Context struct {
2929
EventSocketPath string
3030
PowerSaveMode bool
3131
KernelDebug bool
32+
ExtendShareDir map[string]string
3233

3334
Endpoint string
3435
SSHPort int
@@ -112,6 +113,24 @@ func (c *Context) basic() error {
112113
c.LockFile = lockPrefixPath + "/" + hash + "-" + name + ".pid"
113114
}
114115

116+
c.ExtendShareDir = make(map[string]string)
117+
if extendShareDir != "" {
118+
for _, item := range strings.Split(extendShareDir, ",") {
119+
parts := strings.Split(item, ":")
120+
if len(parts) != 2 {
121+
return fmt.Errorf("invalid extend share dir: %s", item)
122+
}
123+
124+
if info, err := os.Stat(parts[1]); err != nil {
125+
return fmt.Errorf("extend share dir %s not exists: %w", parts[1], err)
126+
} else if !info.IsDir() {
127+
return fmt.Errorf("extend share dir %s is not a directory", parts[1])
128+
}
129+
130+
c.ExtendShareDir[parts[0]] = parts[1]
131+
}
132+
}
133+
115134
return nil
116135
}
117136

pkg/vfkit/mount.go

+10
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ var mounts = &_mounts{
3535
},
3636
}
3737

38+
func (m *_mounts) extend(tag, shareDir string) {
39+
for _, fs := range mounts.list {
40+
if fs.tag == tag || fs.shareDir == shareDir {
41+
return
42+
}
43+
}
44+
45+
m.list = append(m.list, fs{tag: tag, shareDir: shareDir})
46+
}
47+
3848
func (m *_mounts) toVFKit() (devices []config.VirtioDevice) {
3949
for _, fs := range m.list {
4050
d, _ := config.VirtioFsNew(fs.shareDir, fs.tag)

pkg/vfkit/vfkit.go

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ func Run(ctx context.Context, g *errgroup.Group, opt *cli.Context) error {
2626
runtime.LockOSThread()
2727
defer runtime.UnlockOSThread()
2828

29+
for tag, dir := range opt.ExtendShareDir {
30+
mounts.extend(tag, dir)
31+
}
32+
2933
log, err := logger.New(opt.LogPath, opt.Name+"-vfkit")
3034
if err != nil {
3135
return fmt.Errorf("create vfkit logger error: %v", err)

0 commit comments

Comments
 (0)