[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