From 5f50337cd526670166dc23205fc387e2e45fc885 Mon Sep 17 00:00:00 2001 From: Amitoj Setia Date: Wed, 7 Sep 2016 01:01:40 -0700 Subject: [PATCH 1/4] Sorted CLI functions for display --- cli/main.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cli/main.go b/cli/main.go index a3c26e4..462721b 100644 --- a/cli/main.go +++ b/cli/main.go @@ -9,6 +9,7 @@ import ( "flag" "fmt" "os" + "sort" ) type ExecFunc func(client *contrail.Client, flagSet *flag.FlagSet) @@ -95,8 +96,15 @@ func setupAuthKeystone(client *contrail.Client) { func usage() { flag.PrintDefaults() fmt.Fprintf(os.Stderr, " Commands:\n") - for name, _ := range commandMap { - fmt.Fprintf(os.Stderr, " %s\n", name) + commandMapArray := make([]string, len(commandMap)) + i := 0 + for j, _ := range commandMap { + commandMapArray[i] = j + i++ + } + sort.Strings(commandMapArray) + for s, _ := range commandMapArray { + fmt.Fprintf(os.Stderr, " %s\n", commandMapArray[s]) } } From d25a7d37938e31e72be0633908b3afde3cfa45fe Mon Sep 17 00:00:00 2001 From: Amitoj Setia Date: Wed, 7 Sep 2016 01:12:24 -0700 Subject: [PATCH 2/4] Added CLI support for VM info. --- cli/virtual_machine.go | 108 ++++++++++++++++++++++++++++++++++++++++ config/machine.go | 109 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 cli/virtual_machine.go create mode 100644 config/machine.go diff --git a/cli/virtual_machine.go b/cli/virtual_machine.go new file mode 100644 index 0000000..faa98ed --- /dev/null +++ b/cli/virtual_machine.go @@ -0,0 +1,108 @@ +package main + +import ( + "flag" + "fmt" + "os" + "text/tabwriter" + "text/template" + + "github.com/Juniper/contrail-go-api" + "github.com/Juniper/contrail-go-api/config" + //"github.com/Juniper/contrail-go-api/types" +) + +type machineCommonOptions struct { + project string + project_id string +} + +type machineListOptions struct { + detail bool +} + +type machineShowOptions struct { + detail bool +} + +var ( + machineCommonOpts machineCommonOptions + machineListOpts machineListOptions + machineShowOpts machineShowOptions +) + +const machineShowFormat = ` Machine: {{.DisplayName}} + Uuid: {{.Uuid}} + Instance Ip: {{.InstanceIp}} + Floating Ip: {{.FloatingIp}} +` + +func machineList(client *contrail.Client, flagSet *flag.FlagSet) { + var parent_id string + var writer *tabwriter.Writer + var err error + + parent_id, err = config.GetProjectId(client, machineCommonOpts.project, machineCommonOpts.project_id) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + machineList, err := config.MachineList(client, parent_id, machineListOpts.detail) + if err != nil { + fmt.Fprint(os.Stderr, err) + os.Exit(1) + } + + writer = new(tabwriter.Writer) + writer.Init(os.Stdout, 0, 0, 1, ' ', 0) + fmt.Fprintf(writer, "Uuid\tInstance Ip\tFloating Ip\n") + for _, n := range machineList { + fmt.Fprintf(writer, "%s\t%s\t%s\n", n.Uuid, n.InstanceIp, n.FloatingIp) + } + writer.Flush() +} + +func machineShow(client *contrail.Client, flagSet *flag.FlagSet) { + //TODO + var tmpl string + var uuid string + + nameOrId := flagSet.Args()[0] + if config.IsUuid(nameOrId) { + uuid = nameOrId + } + + info, err := config.MachineShow(client, uuid, machineShowOpts.detail) + if err != nil { + fmt.Fprint(os.Stderr, err) + os.Exit(1) + } + + tmpl = machineShowFormat + t := template.Must(template.New("machine-show").Parse(tmpl)) + t.Execute(os.Stdout, info) +} + +func machineInitCommonFlags(flagSet *flag.FlagSet) { + defaultProject := os.Getenv("OS_TENANT_NAME") + if len(defaultProject) == 0 { + defaultProject = "admin" + } + + flagSet.StringVar(&machineCommonOpts.project, "project", defaultProject, + "Project name (Env: OS_TENANT_NAME)") + flagSet.StringVar(&machineCommonOpts.project_id, "project-id", + os.Getenv("OS_TENANT_ID"), "Project id (Env: OS_TENANT_ID)") +} + +func init() { + listFlags := flag.NewFlagSet("virtual-machine-list", flag.ExitOnError) + machineInitCommonFlags(listFlags) + RegisterCliCommand("virtual-machine-list", listFlags, machineList) + + showFlags := flag.NewFlagSet("virtual-machine-show", flag.ExitOnError) + machineInitCommonFlags(showFlags) + RegisterCliCommand("virtual-machine-show", showFlags, machineShow) +} + diff --git a/config/machine.go b/config/machine.go new file mode 100644 index 0000000..6256629 --- /dev/null +++ b/config/machine.go @@ -0,0 +1,109 @@ +package config + +import ( + //"fmt" + "github.com/Juniper/contrail-go-api" + "github.com/Juniper/contrail-go-api/types" +) + +type MachineInfo struct { + DisplayName string + Uuid string + InstanceIp string + FloatingIp string +} + +func buildMachineInfo(client contrail.ApiClient, machine *types.VirtualMachineInterface, detail bool) (*MachineInfo, error) { + var machineDisplayName string + var machineUuid string + var machineInstanceIp string + var machineFloatingIp string + + virtualMachineRefs, err := machine.GetVirtualMachineRefs() + if err != nil { + return nil, err + } + + virtualMachine, err := client.FindByUuid("virtual-machine", virtualMachineRefs[0].Uuid) + if err != nil { + return nil, err + } + + machineDisplayName = virtualMachine.(*types.VirtualMachine).GetDisplayName() + machineUuid = virtualMachine.(*types.VirtualMachine).GetUuid() + + //get instance ip + instanceIpBackRefs, err := machine.GetInstanceIpBackRefs() + if err != nil { + return nil, err + } + instanceIp, err := client.FindByUuid("instance-ip", instanceIpBackRefs[0].Uuid) + if err != nil { + return nil, err + } + machineInstanceIp = instanceIp.(*types.InstanceIp).GetInstanceIpAddress() + + //get floating ip + floatingIpBackRefs, err := machine.GetFloatingIpBackRefs() + if err != nil { + return nil, err + } + if len(floatingIpBackRefs) == 1 { + floatingIp, err := client.FindByUuid("floating-ip", floatingIpBackRefs[0].Uuid) + if err != nil { + return nil, err + } + machineFloatingIp = floatingIp.(*types.FloatingIp).GetFloatingIpAddress() + } + + info := &MachineInfo{ + machineDisplayName, + machineUuid, + machineInstanceIp, + machineFloatingIp, + } + + return info, nil +} + +func MachineShow(client contrail.ApiClient, uuid string, detail bool) (*MachineInfo, error) { + machine, err := client.FindByUuid("virtual-machine", uuid) + if err != nil { + return nil, err + } + + virtualMachineInterfaceRefs, err := machine.(*types.VirtualMachine).GetVirtualMachineInterfaceBackRefs() + if err != nil { + return nil, err + } + + virtualMachineInterface, err := client.FindByUuid("virtual-machine-interface", virtualMachineInterfaceRefs[0].Uuid) + if err != nil { + return nil, err + } + + return buildMachineInfo(client, virtualMachineInterface.(*types.VirtualMachineInterface), detail) + + +} + +func MachineList(client contrail.ApiClient, project_id string, detail bool) ([]*MachineInfo, error) { + var machineList []*MachineInfo + var fields []string + + machineInterfaces, err := client.ListDetailByParent("virtual-machine-interface", project_id, fields) + if err != nil { + return nil, err + } + + for _, reference := range machineInterfaces { + info, err := buildMachineInfo(client, reference.(*types.VirtualMachineInterface), detail) + if err != nil { + return nil, err + } + machineList = append(machineList, info) + } + return machineList, nil +} + + From 8d55c25427b02c62e30c6e4da189d97b63db2569 Mon Sep 17 00:00:00 2001 From: Amitoj Setia Date: Wed, 7 Sep 2016 06:56:54 -0700 Subject: [PATCH 3/4] Fixed some virtual-machine-show bugs --- cli/virtual_machine.go | 11 ++++++++--- config/machine.go | 6 ++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/cli/virtual_machine.go b/cli/virtual_machine.go index faa98ed..741eb78 100644 --- a/cli/virtual_machine.go +++ b/cli/virtual_machine.go @@ -9,7 +9,6 @@ import ( "github.com/Juniper/contrail-go-api" "github.com/Juniper/contrail-go-api/config" - //"github.com/Juniper/contrail-go-api/types" ) type machineCommonOptions struct { @@ -64,13 +63,19 @@ func machineList(client *contrail.Client, flagSet *flag.FlagSet) { } func machineShow(client *contrail.Client, flagSet *flag.FlagSet) { - //TODO var tmpl string var uuid string - + + if flagSet.NArg() < 1 { + fmt.Println("Usage: virtual-machine-show ") + os.Exit(1) + } + nameOrId := flagSet.Args()[0] if config.IsUuid(nameOrId) { uuid = nameOrId + } else { + fmt.Println("Valid instance Uuid not provided") } info, err := config.MachineShow(client, uuid, machineShowOpts.detail) diff --git a/config/machine.go b/config/machine.go index 6256629..07366e8 100644 --- a/config/machine.go +++ b/config/machine.go @@ -1,7 +1,6 @@ package config import ( - //"fmt" "github.com/Juniper/contrail-go-api" "github.com/Juniper/contrail-go-api/types" ) @@ -82,9 +81,7 @@ func MachineShow(client contrail.ApiClient, uuid string, detail bool) (*MachineI return nil, err } - return buildMachineInfo(client, virtualMachineInterface.(*types.VirtualMachineInterface), detail) - - + return buildMachineInfo(client, virtualMachineInterface.(*types.VirtualMachineInterface), detail) } func MachineList(client contrail.ApiClient, project_id string, detail bool) ([]*MachineInfo, error) { @@ -103,6 +100,7 @@ func MachineList(client contrail.ApiClient, project_id string, detail bool) ([]* } machineList = append(machineList, info) } + return machineList, nil } From e4ff72b9f968f5a8ad340b87b315db12cb7a0f53 Mon Sep 17 00:00:00 2001 From: Amitoj Setia Date: Wed, 7 Sep 2016 08:04:01 -0700 Subject: [PATCH 4/4] Fixed spacing --- cli/virtual_machine.go | 56 +++++++++++++++++++++--------------------- config/machine.go | 16 ++++++------ 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/cli/virtual_machine.go b/cli/virtual_machine.go index 741eb78..1902f70 100644 --- a/cli/virtual_machine.go +++ b/cli/virtual_machine.go @@ -1,14 +1,14 @@ package main import ( - "flag" - "fmt" - "os" - "text/tabwriter" + "flag" + "fmt" + "os" + "text/tabwriter" "text/template" - "github.com/Juniper/contrail-go-api" - "github.com/Juniper/contrail-go-api/config" + "github.com/Juniper/contrail-go-api" + "github.com/Juniper/contrail-go-api/config" ) type machineCommonOptions struct { @@ -17,11 +17,11 @@ type machineCommonOptions struct { } type machineListOptions struct { - detail bool + detail bool } type machineShowOptions struct { - detail bool + detail bool } var ( @@ -38,7 +38,7 @@ const machineShowFormat = ` Machine: {{.DisplayName}} func machineList(client *contrail.Client, flagSet *flag.FlagSet) { var parent_id string - var writer *tabwriter.Writer + var writer *tabwriter.Writer var err error parent_id, err = config.GetProjectId(client, machineCommonOpts.project, machineCommonOpts.project_id) @@ -47,19 +47,19 @@ func machineList(client *contrail.Client, flagSet *flag.FlagSet) { os.Exit(1) } - machineList, err := config.MachineList(client, parent_id, machineListOpts.detail) - if err != nil { - fmt.Fprint(os.Stderr, err) - os.Exit(1) - } - - writer = new(tabwriter.Writer) - writer.Init(os.Stdout, 0, 0, 1, ' ', 0) - fmt.Fprintf(writer, "Uuid\tInstance Ip\tFloating Ip\n") - for _, n := range machineList { - fmt.Fprintf(writer, "%s\t%s\t%s\n", n.Uuid, n.InstanceIp, n.FloatingIp) - } - writer.Flush() + machineList, err := config.MachineList(client, parent_id, machineListOpts.detail) + if err != nil { + fmt.Fprint(os.Stderr, err) + os.Exit(1) + } + + writer = new(tabwriter.Writer) + writer.Init(os.Stdout, 0, 0, 1, ' ', 0) + fmt.Fprintf(writer, "Uuid\tInstance Ip\tFloating Ip\n") + for _, n := range machineList { + fmt.Fprintf(writer, "%s\t%s\t%s\n", n.Uuid, n.InstanceIp, n.FloatingIp) + } + writer.Flush() } func machineShow(client *contrail.Client, flagSet *flag.FlagSet) { @@ -102,12 +102,12 @@ func machineInitCommonFlags(flagSet *flag.FlagSet) { } func init() { - listFlags := flag.NewFlagSet("virtual-machine-list", flag.ExitOnError) - machineInitCommonFlags(listFlags) - RegisterCliCommand("virtual-machine-list", listFlags, machineList) + listFlags := flag.NewFlagSet("virtual-machine-list", flag.ExitOnError) + machineInitCommonFlags(listFlags) + RegisterCliCommand("virtual-machine-list", listFlags, machineList) - showFlags := flag.NewFlagSet("virtual-machine-show", flag.ExitOnError) - machineInitCommonFlags(showFlags) - RegisterCliCommand("virtual-machine-show", showFlags, machineShow) + showFlags := flag.NewFlagSet("virtual-machine-show", flag.ExitOnError) + machineInitCommonFlags(showFlags) + RegisterCliCommand("virtual-machine-show", showFlags, machineShow) } diff --git a/config/machine.go b/config/machine.go index 07366e8..747a297 100644 --- a/config/machine.go +++ b/config/machine.go @@ -1,12 +1,12 @@ package config import ( - "github.com/Juniper/contrail-go-api" + "github.com/Juniper/contrail-go-api" "github.com/Juniper/contrail-go-api/types" ) type MachineInfo struct { - DisplayName string + DisplayName string Uuid string InstanceIp string FloatingIp string @@ -62,14 +62,14 @@ func buildMachineInfo(client contrail.ApiClient, machine *types.VirtualMachineIn machineFloatingIp, } - return info, nil + return info, nil } func MachineShow(client contrail.ApiClient, uuid string, detail bool) (*MachineInfo, error) { - machine, err := client.FindByUuid("virtual-machine", uuid) - if err != nil { - return nil, err - } + machine, err := client.FindByUuid("virtual-machine", uuid) + if err != nil { + return nil, err + } virtualMachineInterfaceRefs, err := machine.(*types.VirtualMachine).GetVirtualMachineInterfaceBackRefs() if err != nil { @@ -81,7 +81,7 @@ func MachineShow(client contrail.ApiClient, uuid string, detail bool) (*MachineI return nil, err } - return buildMachineInfo(client, virtualMachineInterface.(*types.VirtualMachineInterface), detail) + return buildMachineInfo(client, virtualMachineInterface.(*types.VirtualMachineInterface), detail) } func MachineList(client contrail.ApiClient, project_id string, detail bool) ([]*MachineInfo, error) {