[lxc-devel] [lxd/master] lxd/vm: Implement Exec for VMs

stgraber on Github lxc-bot at linuxcontainers.org
Sat Nov 9 16:59:39 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 355 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20191109/bfb9fcaa/attachment.bin>
-------------- next part --------------
From e50caecd0d2a48a351446778ea68020789f18ff7 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Mon, 28 Oct 2019 12:29:49 +0100
Subject: [PATCH] lxd/vm: Implement Exec for VMs

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 lxd/vm_qemu.go | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/lxd/vm_qemu.go b/lxd/vm_qemu.go
index eca1bbe0e8..53cabf528f 100644
--- a/lxd/vm_qemu.go
+++ b/lxd/vm_qemu.go
@@ -1969,8 +1969,42 @@ func (vm *vmQemu) Console() (*os.File, error) {
 }
 
 func (vm *vmQemu) Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool, cwd string, uid uint32, gid uint32) (*exec.Cmd, int, int, error) {
-	return nil, 0, 0, fmt.Errorf("Exec Not implemented")
+	agent, err := lxdClient.ConnectLXDHTTP(nil, vm.agentClient)
+	if err != nil {
+		return nil, 0, 0, err
+	}
+
+	post := api.InstanceExecPost{
+		Command:     command,
+		WaitForWS:   wait,
+		Interactive: stdin == stdout,
+		Environment: env,
+		User:        uid,
+		Group:       gid,
+		Cwd:         cwd,
+	}
+
+	args := lxdClient.InstanceExecArgs{
+		Stdin:    stdin,
+		Stdout:   stdout,
+		Stderr:   stderr,
+		DataDone: make(chan bool),
+	}
+
+	op, err := agent.ExecInstance("", post, &args)
+	if err != nil {
+		return nil, -1, -1, err
+	}
+
+	err = op.Wait()
+	if err != nil {
+		return nil, -1, -1, err
+	}
+	opAPI := op.Get()
+
+	<-args.DataDone
 
+	return nil, int(opAPI.Metadata["return"].(float64)), -1, nil
 }
 
 func (vm *vmQemu) Render() (interface{}, interface{}, error) {


More information about the lxc-devel mailing list