func (c *networkCmd) doNetworkSet(client *lxd.Client, name string, args []string) error { // we shifted @args so so it should read "<key> [<value>]" if len(args) < 1 { return errArgs } network, err := client.NetworkGet(name) if err != nil { return err } key := args[0] var value string if len(args) < 2 { value = "" } else { value = args[1] } if !termios.IsTerminal(int(syscall.Stdin)) && value == "-" { buf, err := ioutil.ReadAll(os.Stdin) if err != nil { return fmt.Errorf("Can't read from stdin: %s", err) } value = string(buf[:]) } network.Config[key] = value return client.NetworkPut(name, network) }
func (c *networkCmd) doNetworkAttachProfile(client *lxd.Client, name string, args []string) error { if len(args) < 1 || len(args) > 2 { return errArgs } profile := args[0] devName := name if len(args) > 1 { devName = args[1] } network, err := client.NetworkGet(name) if err != nil { return err } nicType := "macvlan" if network.Type == "bridge" { nicType = "bridged" } props := []string{fmt.Sprintf("nictype=%s", nicType), fmt.Sprintf("parent=%s", name)} _, err = client.ProfileDeviceAdd(profile, devName, "nic", props) return err }
func (c *networkCmd) doNetworkAttach(client *lxd.Client, name string, args []string) error { if len(args) < 1 || len(args) > 2 { return errArgs } container := args[0] devName := name if len(args) > 1 { devName = args[1] } network, err := client.NetworkGet(name) if err != nil { return err } nicType := "macvlan" if network.Type == "bridge" { nicType = "bridged" } props := []string{fmt.Sprintf("nictype=%s", nicType), fmt.Sprintf("parent=%s", name)} resp, err := client.ContainerDeviceAdd(container, devName, "nic", props) if err != nil { return err } return client.WaitForSuccess(resp.Operation) }
func (c *networkCmd) doNetworkShow(client *lxd.Client, name string) error { network, err := client.NetworkGet(name) if err != nil { return err } data, err := yaml.Marshal(&network) fmt.Printf("%s", data) return nil }
func (c *networkCmd) doNetworkGet(client *lxd.Client, name string, args []string) error { // we shifted @args so so it should read "<key>" if len(args) != 1 { return errArgs } resp, err := client.NetworkGet(name) if err != nil { return err } for k, v := range resp.Config { if k == args[0] { fmt.Printf("%s\n", v) } } return nil }
func (c *networkCmd) doNetworkEdit(client *lxd.Client, name string) error { // If stdin isn't a terminal, read text from it if !termios.IsTerminal(int(syscall.Stdin)) { contents, err := ioutil.ReadAll(os.Stdin) if err != nil { return err } newdata := shared.NetworkConfig{} err = yaml.Unmarshal(contents, &newdata) if err != nil { return err } return client.NetworkPut(name, newdata) } // Extract the current value network, err := client.NetworkGet(name) if err != nil { return err } data, err := yaml.Marshal(&network) if err != nil { return err } // Spawn the editor content, err := shared.TextEditor("", []byte(c.networkEditHelp()+"\n\n"+string(data))) if err != nil { return err } for { // Parse the text received from the editor newdata := shared.NetworkConfig{} err = yaml.Unmarshal(content, &newdata) if err == nil { err = client.NetworkPut(name, newdata) } // Respawn the editor if err != nil { fmt.Fprintf(os.Stderr, i18n.G("Config parsing error: %s")+"\n", err) fmt.Println(i18n.G("Press enter to open the editor again")) _, err := os.Stdin.Read(make([]byte, 1)) if err != nil { return err } content, err = shared.TextEditor("", content) if err != nil { return err } continue } break } return nil }