168 lines
3.9 KiB
Go
168 lines
3.9 KiB
Go
package client
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"text/tabwriter"
|
|
|
|
Cli "github.com/hyperhq/hypercli/cli"
|
|
flag "github.com/hyperhq/hypercli/pkg/mflag"
|
|
"golang.org/x/net/context"
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
// CmdSg is the parent subcommand for all sg commands
|
|
//
|
|
// Usage: hyper sg <COMMAND> [OPTIONS]
|
|
func (cli *DockerCli) CmdSg(args ...string) error {
|
|
cmd := Cli.Subcmd("sg", []string{"COMMAND [OPTIONS]"}, sgUsage(), false)
|
|
cmd.Require(flag.Min, 1)
|
|
err := cmd.ParseFlags(args, true)
|
|
cmd.Usage()
|
|
return err
|
|
}
|
|
|
|
// CmdSgCreate creates a new sg with a given name
|
|
//
|
|
// Usage: hyper sg create [OPTIONS] NAME
|
|
func (cli *DockerCli) CmdSgCreate(args ...string) error {
|
|
cmd := Cli.Subcmd("sg create", []string{"NAME"}, "Create a new security group", false)
|
|
file := cmd.String([]string{"f", "-file"}, "", "Yaml file to create security group")
|
|
|
|
cmd.Require(flag.Exact, 1)
|
|
err := cmd.ParseFlags(args, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
data, err := os.Open(*file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = cli.client.SgCreate(context.Background(), cmd.Arg(0), data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// CmdSgRm removes a sg with a given name
|
|
//
|
|
// Usage: hyper sg rm [OPTIONS] NAME
|
|
func (cli *DockerCli) CmdSgRm(args ...string) error {
|
|
cmd := Cli.Subcmd("sg rm", []string{"NAME"}, "Remove a security group", false)
|
|
|
|
cmd.Require(flag.Exact, 1)
|
|
err := cmd.ParseFlags(args, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = cli.client.SgRm(context.Background(), cmd.Arg(0))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// CmdSgLs list security groups
|
|
//
|
|
// Usage: hyper sg ls [OPTIONS]
|
|
func (cli *DockerCli) CmdSgLs(args ...string) error {
|
|
cmd := Cli.Subcmd("sg ls", []string{}, "List security groups", false)
|
|
|
|
cmd.Require(flag.Exact, 0)
|
|
err := cmd.ParseFlags(args, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sgs, err := cli.client.SgLs(context.Background())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0)
|
|
fmt.Fprintf(w, "Name\tDescription")
|
|
fmt.Fprintf(w, "\n")
|
|
for _, sg := range sgs {
|
|
fmt.Fprintf(w, "%s\t%s\n", sg.GroupName, sg.Description)
|
|
}
|
|
w.Flush()
|
|
return nil
|
|
}
|
|
|
|
// CmdSgInspect Inspect security groups
|
|
//
|
|
// Usage: hyper sg inspect [OPTIONS] NAME
|
|
func (cli *DockerCli) CmdSgInspect(args ...string) error {
|
|
cmd := Cli.Subcmd("sg inspect", []string{"NAME"}, "Inspect the security group", false)
|
|
output := cmd.String([]string{"o", "-output"}, "json", "Output format with inspect operation (e.g. yaml or json)")
|
|
|
|
cmd.Require(flag.Exact, 1)
|
|
err := cmd.ParseFlags(args, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sg, err := cli.client.SgInspect(context.Background(), cmd.Arg(0))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var data []byte
|
|
if *output == "json" {
|
|
data, err = json.MarshalIndent(sg, "", "\t")
|
|
} else {
|
|
data, err = yaml.Marshal(sg)
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("%s\n", string(data))
|
|
return nil
|
|
}
|
|
|
|
// CmdSgUpdate Update the security group
|
|
//
|
|
// Usage: hyper sg update [OPTIONS] NAME
|
|
func (cli *DockerCli) CmdSgUpdate(args ...string) error {
|
|
cmd := Cli.Subcmd("sg update", []string{"NAME"}, "Update the security group", false)
|
|
file := cmd.String([]string{"f", "-file"}, "", "Yaml file to update security group")
|
|
|
|
cmd.Require(flag.Exact, 1)
|
|
err := cmd.ParseFlags(args, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
data, err := os.Open(*file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = cli.client.SgUpdate(context.Background(), cmd.Arg(0), data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func sgUsage() string {
|
|
sgCommands := [][]string{
|
|
{"create", "Create a new security group"},
|
|
{"ls", "List all security groups"},
|
|
{"rm", "Remove a security group"},
|
|
{"inspect", "Inspect the security group"},
|
|
{"update", "Update the security group"},
|
|
}
|
|
|
|
help := "Commands:\n"
|
|
|
|
for _, cmd := range sgCommands {
|
|
help += fmt.Sprintf(" %-25.25s%s\n", cmd[0], cmd[1])
|
|
}
|
|
|
|
help += fmt.Sprintf("\nRun 'hyper sg COMMAND --help' for more information on a command.")
|
|
return help
|
|
}
|