[lxc-devel] [lxd/master] lxc/init: Add parse of options from stdin
geaaru on Github
lxc-bot at linuxcontainers.org
Sat Aug 31 21:11:29 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 626 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190831/72034e69/attachment.bin>
-------------- next part --------------
From a254c122701a7cd8af8c603a037743f8a6a3949e Mon Sep 17 00:00:00 2001
From: Daniele Rondina <geaaru at sabayonlinux.org>
Date: Sat, 31 Aug 2019 23:07:39 +0200
Subject: [PATCH] lxc/init: Add parse of options from stdin
Signed-off-by: Daniele Rondina <geaaru at sabayonlinux.org>
---
lxc/init.go | 39 ++++++++++++++++++++++++++++++++++++---
1 file changed, 36 insertions(+), 3 deletions(-)
diff --git a/lxc/init.go b/lxc/init.go
index 9472e68e95..ad07485d67 100644
--- a/lxc/init.go
+++ b/lxc/init.go
@@ -2,10 +2,12 @@ package main
import (
"fmt"
+ "io/ioutil"
"os"
"strings"
"github.com/spf13/cobra"
+ "gopkg.in/yaml.v2"
"github.com/lxc/lxd/client"
"github.com/lxc/lxd/lxc/config"
@@ -13,6 +15,7 @@ import (
"github.com/lxc/lxd/shared/api"
cli "github.com/lxc/lxd/shared/cmd"
"github.com/lxc/lxd/shared/i18n"
+ "github.com/lxc/lxd/shared/termios"
)
type cmdInit struct {
@@ -68,6 +71,22 @@ func (c *cmdInit) create(conf *config.Config, args []string) (lxd.ContainerServe
var remote string
var iremote string
var err error
+ var stdinData api.ContainerPut
+ var devicesMap map[string]map[string]string
+ var configMap map[string]string
+
+ // If stdin isn't a terminal, read text from it
+ if !termios.IsTerminal(getStdinFd()) {
+ contents, err := ioutil.ReadAll(os.Stdin)
+ if err != nil {
+ return nil, "", err
+ }
+
+ err = yaml.Unmarshal(contents, &stdinData)
+ if err != nil {
+ return nil, "", err
+ }
+ }
if len(args) > 0 {
iremote, image, err = conf.ParseRemote(args[0])
@@ -129,7 +148,12 @@ func (c *cmdInit) create(conf *config.Config, args []string) (lxd.ContainerServe
}
}
- devicesMap := map[string]map[string]string{}
+ if len(stdinData.Devices) > 0 {
+ devicesMap = stdinData.Devices
+ } else {
+ devicesMap = map[string]map[string]string{}
+ }
+
if c.flagNetwork != "" {
network, _, err := d.GetNetwork(c.flagNetwork)
if err != nil {
@@ -143,7 +167,11 @@ func (c *cmdInit) create(conf *config.Config, args []string) (lxd.ContainerServe
}
}
- configMap := map[string]string{}
+ if len(stdinData.Config) > 0 {
+ configMap = stdinData.Config
+ } else {
+ configMap = map[string]string{}
+ }
for _, entry := range c.flagConfig {
if !strings.Contains(entry, "=") {
return nil, "", fmt.Errorf(i18n.G("Bad key=value pair: %s"), entry)
@@ -174,8 +202,13 @@ func (c *cmdInit) create(conf *config.Config, args []string) (lxd.ContainerServe
}
req.Config = configMap
req.Devices = devicesMap
+
if !c.flagNoProfiles && len(profiles) == 0 {
- req.Profiles = nil
+ if len(stdinData.Profiles) > 0 {
+ req.Profiles = stdinData.Profiles
+ } else {
+ req.Profiles = nil
+ }
} else {
req.Profiles = profiles
}
More information about the lxc-devel
mailing list