Skip to content

Commit

Permalink
cli: add guest hook path option
Browse files Browse the repository at this point in the history
Fixes: kata-containers#720

Co-authored-by: Edward Guzman <eguzman@nvidia.com>
Co-authored-by: Felix Abecassis <fabecassis@nvidia.com>
Signed-off-by: Felix Abecassis <fabecassis@nvidia.com>
  • Loading branch information
eguzman3 and flx42 committed Oct 17, 2018
1 parent ddfb49a commit 5653143
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 4 deletions.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ DEFENABLEDEBUG := false
DEFDISABLENESTINGCHECKS := false
DEFMSIZE9P := 8192
DEFHOTPLUGVFIOONROOTBUS := false
DEFGUESTHOOKPATH :=

SED = sed

Expand Down Expand Up @@ -225,6 +226,7 @@ USER_VARS += DEFDISABLENESTINGCHECKS
USER_VARS += DEFMSIZE9P
USER_VARS += DEFHOTPLUGVFIOONROOTBUS
USER_VARS += DEFENTROPYSOURCE
USER_VARS += DEFGUESTHOOKPATH


V = @
Expand Down Expand Up @@ -328,6 +330,7 @@ const defaultDisableNestingChecks bool = $(DEFDISABLENESTINGCHECKS)
const defaultMsize9p uint32 = $(DEFMSIZE9P)
const defaultHotplugVFIOOnRootBus bool = $(DEFHOTPLUGVFIOONROOTBUS)
const defaultEntropySource = "$(DEFENTROPYSOURCE)"
const defaultGuestHookPath string = "$(DEFGUESTHOOKPATH)"

// Default config file used by stateless systems.
var defaultRuntimeConfiguration = "$(CONFIG_PATH)"
Expand Down Expand Up @@ -419,6 +422,7 @@ $(GENERATED_FILES): %: %.in Makefile VERSION
-e "s|@DEFMSIZE9P@|$(DEFMSIZE9P)|g" \
-e "s|@DEFHOTPLUGONROOTBUS@|$(DEFHOTPLUGVFIOONROOTBUS)|g" \
-e "s|@DEFENTROPYSOURCE@|$(DEFENTROPYSOURCE)|g" \
-e "s|@DEFGUESTHOOKPATH@|$(DEFGUESTHOOKPATH)|g" \
$< > $@

generate-config: $(CONFIG)
Expand Down
10 changes: 10 additions & 0 deletions cli/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ type hypervisor struct {
UseVSock bool `toml:"use_vsock"`
HotplugVFIOOnRootBus bool `toml:"hotplug_vfio_on_root_bus"`
DisableVhostNet bool `toml:"disable_vhost_net"`
GuestHookPath string `toml:"guest_hook_path"`
}

type proxy struct {
Expand Down Expand Up @@ -302,6 +303,13 @@ func (h hypervisor) useVSock() bool {
return h.UseVSock
}

func (h hypervisor) guestHookPath() string {
if h.GuestHookPath == "" {
return defaultGuestHookPath
}
return h.GuestHookPath
}

func (p proxy) path() string {
if p.Path == "" {
return defaultProxyPath
Expand Down Expand Up @@ -426,6 +434,7 @@ func newQemuHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
UseVSock: useVSock,
HotplugVFIOOnRootBus: h.HotplugVFIOOnRootBus,
DisableVhostNet: h.DisableVhostNet,
GuestHookPath: h.guestHookPath(),
}, nil
}

Expand Down Expand Up @@ -547,6 +556,7 @@ func loadConfiguration(configPath string, ignoreLogging bool) (resolvedConfigPat
EnableIOThreads: defaultEnableIOThreads,
Msize9p: defaultMsize9p,
HotplugVFIOOnRootBus: defaultHotplugVFIOOnRootBus,
GuestHookPath: defaultGuestHookPath,
}

err = config.InterNetworkModel.SetModel(defaultInterNetworkingModel)
Expand Down
7 changes: 7 additions & 0 deletions cli/config/configuration.toml.in
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,13 @@ enable_iothreads = @DEFENABLEIOTHREADS@
# all practical purposes.
#entropy_source= "@DEFENTROPYSOURCE@"

# If set to an absolute path within the guest rootfs, the agent will search
# this directory for OCI hooks and add them to the guest container's lifecycle.
# https://github.com/opencontainers/runtime-spec/blob/v1.0.1/config.md#posix-platform-hooks
# Hooks must be stored in a subdirectory of guest_hook_path named after the
# hook type, e.g. prestart hooks must be in "guest_hook_path/prestart/"
#guest_hook_path = "@DEFGUESTHOOKPATH@"

[factory]
# VM templating support. Once enabled, new VMs are created from template
# using vm cloning. They will share the same initial kernel, initramfs and
Expand Down
18 changes: 18 additions & 0 deletions cli/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func makeRuntimeConfigFileData(hypervisor, hypervisorPath, kernelPath, imagePath
hotplug_vfio_on_root_bus = ` + strconv.FormatBool(hotplugVFIOOnRootBus) + `
msize_9p = ` + strconv.FormatUint(uint64(defaultMsize9p), 10) + `
enable_debug = ` + strconv.FormatBool(hypervisorDebug) + `
guest_hook_path = "` + defaultGuestHookPath + `"
[proxy.kata]
enable_debug = ` + strconv.FormatBool(proxyDebug) + `
Expand Down Expand Up @@ -161,6 +162,7 @@ func createAllRuntimeConfigFiles(dir, hypervisor string) (config testRuntimeConf
Msize9p: defaultMsize9p,
MemSlots: defaultMemSlots,
EntropySource: defaultEntropySource,
GuestHookPath: defaultGuestHookPath,
}

agentConfig := vc.KataAgentConfig{}
Expand Down Expand Up @@ -596,6 +598,7 @@ func TestMinimalRuntimeConfig(t *testing.T) {
Mlock: !defaultEnableSwap,
BlockDeviceDriver: defaultBlockDeviceDriver,
Msize9p: defaultMsize9p,
GuestHookPath: defaultGuestHookPath,
}

expectedAgentConfig := vc.KataAgentConfig{}
Expand Down Expand Up @@ -1078,6 +1081,21 @@ func TestHypervisorDefaultsImage(t *testing.T) {
assert.Equal(p, "")
}

func TestHypervisorDefaultsGuestHookPath(t *testing.T) {
assert := assert.New(t)

h := hypervisor{}
guestHookPath := h.guestHookPath()
assert.Equal(guestHookPath, defaultGuestHookPath, "default guest hook path wrong")

testGuestHookPath := "/test/guest/hook/path"
h = hypervisor{
GuestHookPath: testGuestHookPath,
}
guestHookPath = h.guestHookPath()
assert.Equal(guestHookPath, testGuestHookPath, "custom guest hook path wrong")
}

func TestProxyDefaults(t *testing.T) {
p := proxy{}

Expand Down
3 changes: 3 additions & 0 deletions virtcontainers/hypervisor.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,9 @@ type HypervisorConfig struct {

// DisableVhostNet is used to indicate if host supports vhost_net
DisableVhostNet bool

// GuestHookPath is the path within the VM that will be used for 'drop-in' hooks
GuestHookPath string
}

func (conf *HypervisorConfig) checkTemplateConfig() error {
Expand Down
9 changes: 5 additions & 4 deletions virtcontainers/kata_agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -631,10 +631,11 @@ func (k *kataAgent) startSandbox(sandbox *Sandbox) error {
}

req := &grpc.CreateSandboxRequest{
Hostname: hostname,
Storages: storages,
SandboxPidns: sandbox.sharePidNs,
SandboxId: sandbox.id,
Hostname: hostname,
Storages: storages,
SandboxPidns: sandbox.sharePidNs,
SandboxId: sandbox.id,
GuestHookPath: sandbox.config.HypervisorConfig.GuestHookPath,
}

_, err = k.sendReq(req)
Expand Down

0 comments on commit 5653143

Please sign in to comment.