Skip to content

Commit

Permalink
Support for inotify in mounted directories
Browse files Browse the repository at this point in the history
Signed-off-by: Balaji Vijayakumar <kuttibalaji.v6@gmail.com>
  • Loading branch information
balajiv113 committed Mar 12, 2024
1 parent c5fb05d commit 38c62c5
Show file tree
Hide file tree
Showing 25 changed files with 457 additions and 33 deletions.
2 changes: 2 additions & 0 deletions cmd/limactl/editflags/editflags.go
Expand Up @@ -49,6 +49,7 @@ func registerEdit(cmd *cobra.Command, commentPrefix string) {
})

flags.Bool("mount-writable", false, commentPrefix+"make all mounts writable")
flags.Bool("mount-inotify", false, commentPrefix+"enable inotify for mounts")

flags.StringSlice("network", nil, commentPrefix+"additional networks, e.g., \"vzNAT\" or \"lima:shared\" to assign vmnet IP")
_ = cmd.RegisterFlagCompletionFunc("network", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
Expand Down Expand Up @@ -154,6 +155,7 @@ func YQExpressions(flags *flag.FlagSet, newInstance bool) ([]string, error) {
false,
},
{"mount-type", d(".mountType = %q"), false, false},
{"mount-inotify", d(".mountInotify = %s"), false, true},
{"mount-writable", d(".mounts[].writable = %s"), false, false},
{
"network",
Expand Down
4 changes: 4 additions & 0 deletions examples/default.yaml
Expand Up @@ -103,6 +103,10 @@ mounts:
# 🟢 Builtin default: "reverse-sshfs" (for QEMU), "virtiofs" (for vz)
mountType: null

# Enable inotify support for mounted directories (EXPERIMENTAL)
# 🟢 Builtin default: Disabled by default
mountInotify: null

# Lima disks to attach to the instance. The disks will be accessible from inside the
# instance, labeled by name. (e.g. if the disk is named "data", it will be labeled
# "lima-data" inside the instance). The disk will be mounted inside the instance at
Expand Down
1 change: 1 addition & 0 deletions go.mod
Expand Up @@ -35,6 +35,7 @@ require (
github.com/nxadm/tail v1.4.11
github.com/opencontainers/go-digest v1.0.0
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58
github.com/rjeczalik/notify v0.9.3
github.com/sethvargo/go-password v0.2.0
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.8.0
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Expand Up @@ -236,6 +236,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rjeczalik/notify v0.9.3 h1:6rJAzHTGKXGj76sbRgDiDcYj/HniypXmSJo1SWakZeY=
github.com/rjeczalik/notify v0.9.3/go.mod h1:gF3zSOrafR9DQEWSE8TjfI9NkooDxbyT4UgRGKZA0lc=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
Expand Down Expand Up @@ -335,6 +337,7 @@ golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down
8 changes: 8 additions & 0 deletions pkg/guestagent/api/client/client.go
Expand Up @@ -49,3 +49,11 @@ func (c *GuestAgentClient) Events(ctx context.Context, eventCb func(response *ap
eventCb(recv)
}
}

func (c *GuestAgentClient) Inotify(ctx context.Context) (api.GuestService_PostInotifyClient, error) {
inotify, err := c.cli.PostInotify(ctx)
if err != nil {
return nil, err
}
return inotify, nil
}
11 changes: 8 additions & 3 deletions pkg/guestagent/api/guestservice.pb.desc
@@ -1,5 +1,5 @@



guestservice.protogoogle/protobuf/empty.protogoogle/protobuf/timestamp.proto"0
Info(
local_ports ( 2.IPPortR
Expand All @@ -11,7 +11,12 @@ localPorts"
errors ( Rerrors",
IPPort
ip ( Rip
port (Rport2g
port (Rport"X
Inotify

mount_path ( R mountPath.
time ( 2.google.protobuf.TimestampRtime2�
GuestService(
GetInfo.google.protobuf.Empty.Info-
GetEvents.google.protobuf.Empty.Event0B!Zgithub.com/lima-vm/lima/pkg/apibproto3
GetEvents.google.protobuf.Empty.Event01
PostInotify.Inotify.google.protobuf.Empty(B!Zgithub.com/lima-vm/lima/pkg/apibproto3
130 changes: 105 additions & 25 deletions pkg/guestagent/api/guestservice.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions pkg/guestagent/api/guestservice.proto
Expand Up @@ -7,6 +7,7 @@ import "google/protobuf/timestamp.proto";
service GuestService {
rpc GetInfo(google.protobuf.Empty) returns (Info);
rpc GetEvents(google.protobuf.Empty) returns (stream Event);
rpc PostInotify(stream Inotify) returns (google.protobuf.Empty);
}

message Info {
Expand All @@ -24,3 +25,8 @@ message IPPort {
string ip = 1;
int32 port = 2;
}

message Inotify {
string mount_path = 1;
google.protobuf.Timestamp time = 2;
}

0 comments on commit 38c62c5

Please sign in to comment.