[lxc-devel] [lxd/master] #7868: `proxy` device support for VMs (NAT-only)
grant-he on Github
lxc-bot at linuxcontainers.org
Thu Dec 10 22:16:51 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 440 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20201210/66c5e20b/attachment.bin>
-------------- next part --------------
From d1c9b0e1afe1b5b7868b8918cc769c8740eab3c5 Mon Sep 17 00:00:00 2001
From: JLRDRAGON92000 <jlrdragon at gmail.com>
Date: Fri, 4 Dec 2020 22:58:58 -0600
Subject: [PATCH 1/3] lxd/device: allow adding proxy device to VM instances
Signed-off-by: Jared Rankin <jared.rankin at utexas.edu>
---
lxd/device/proxy.go | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lxd/device/proxy.go b/lxd/device/proxy.go
index d169a4671e..c114c0230f 100644
--- a/lxd/device/proxy.go
+++ b/lxd/device/proxy.go
@@ -48,7 +48,7 @@ type proxyProcInfo struct {
// validateConfig checks the supplied config for correctness.
func (d *proxy) validateConfig(instConf instance.ConfigReader) error {
- if !instanceSupported(instConf.Type(), instancetype.Container) {
+ if !instanceSupported(instConf.Type(), instancetype.Container, instancetype.VM) {
return ErrUnsupportedDevType
}
@@ -85,6 +85,10 @@ func (d *proxy) validateConfig(instConf instance.ConfigReader) error {
return err
}
+ if instConf.Type() == instancetype.VM && !shared.IsTrue(d.config["nat"]) {
+ return fmt.Errorf("Only NAT mode is supported for proxies on VM instances")
+ }
+
listenAddr, err := ProxyParseAddr(d.config["listen"])
if err != nil {
return err
From 3d0fad9d218f6a188ef1a7fa25536e4fdfae100e Mon Sep 17 00:00:00 2001
From: JLRDRAGON92000 <jlrdragon at gmail.com>
Date: Fri, 4 Dec 2020 23:00:01 -0600
Subject: [PATCH 2/3] lxd/instance/drivers: run device post-start hooks in QEMU
driver
Signed-off-by: Jared Rankin <jared.rankin at utexas.edu>
---
lxd/instance/drivers/driver_qemu.go | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go
index e243634547..ef1b42f657 100644
--- a/lxd/instance/drivers/driver_qemu.go
+++ b/lxd/instance/drivers/driver_qemu.go
@@ -794,6 +794,7 @@ func (vm *qemu) Start(stateful bool) error {
}
devConfs := make([]*deviceConfig.RunConfig, 0, len(vm.expandedDevices))
+ postStartHooks := []func() error{}
// Setup devices in sorted order, this ensures that device mounts are added in path order.
for _, d := range vm.expandedDevices.Sorted() {
@@ -817,6 +818,11 @@ func (vm *qemu) Start(stateful bool) error {
}
})
+ // Add post-start hooks
+ if len(runConf.PostHooks) > 0 {
+ postStartHooks = append(postStartHooks, runConf.PostHooks...)
+ }
+
devConfs = append(devConfs, runConf)
}
@@ -1071,6 +1077,15 @@ func (vm *qemu) Start(stateful bool) error {
return err
}
+ // Run any post-start hooks.
+ err = vm.runHooks(postStartHooks)
+ if err != nil {
+ op.Done(err)
+ // Shut down the VM if hooks fail.
+ vm.Stop(false)
+ return err
+ }
+
// Database updates
err = vm.state.Cluster.Transaction(func(tx *db.ClusterTx) error {
// Record current state
From 4cf11b2ad0224d859825f858be7e9fb8f3850d5b Mon Sep 17 00:00:00 2001
From: JLRDRAGON92000 <jlrdragon at gmail.com>
Date: Thu, 10 Dec 2020 15:57:44 -0600
Subject: [PATCH 3/3] doc: update `proxy` doc to reflect VM support
Signed-off-by: Jared Rankin <jared.rankin at utexas.edu>
---
doc/instances.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/instances.md b/doc/instances.md
index dece79586a..9ef66151b9 100644
--- a/doc/instances.md
+++ b/doc/instances.md
@@ -766,7 +766,7 @@ mode | int | 0660 | no | Mode of the device in
### Type: proxy
-Supported instance types: container
+Supported instance types: container (`nat` and non-`nat` modes), VM (`nat` mode only)
Proxy devices allow forwarding network connections between host and instance.
This makes it possible to forward traffic hitting one of the host's
More information about the lxc-devel
mailing list