SEBA-122
bin/client is now cmdline app, tosca is sent to xos
Change-Id: I7bbf59569b5c96062aa1c7681708a4cf39532ae2
diff --git a/client/main.go b/client/main.go
index 94cd1e5..884274b 100644
--- a/client/main.go
+++ b/client/main.go
@@ -17,16 +17,77 @@
package main
import (
+ "context"
+ "flag"
+ "fmt"
"log"
-
"runtime/debug"
"gerrit.opencord.org/abstract-olt/api"
- "golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
+func main() {
+ create := flag.Bool("c", false, "create?")
+ addOlt := flag.Bool("s", false, "addOlt?")
+ provOnt := flag.Bool("o", false, "provisionOnt?")
+ clli := flag.String("clli", "", "clli of abstract chassis")
+ xosAddress := flag.String("xos_address", "", "xos address")
+ xosPort := flag.Uint("xos_port", 0, "xos port")
+ rack := flag.Uint("rack", 1, "rack number for chassis")
+ shelf := flag.Uint("shelf", 1, "shelf number for chassis")
+ oltAddress := flag.String("olt_address", "", "ip address for olt chassis")
+ oltPort := flag.Uint("olt_port", 0, "listen port for olt chassis")
+ name := flag.String("name", "", "friendly name for olt chassis")
+ driver := flag.String("driver", "", "driver to use with olt chassis")
+ oltType := flag.String("type", "", "olt chassis type")
+ slot := flag.Uint("slot", 1, "slot number 1-16 to provision ont to")
+ port := flag.Uint("port", 1, "port number 1-16 to provision ont to")
+ ont := flag.Uint("ont", 1, "ont number 1-64")
+ serial := flag.String("serial", "", "serial number of ont")
+
+ flag.Parse()
+
+ if (*create && *addOlt) || (*create && *provOnt) || (*addOlt && *provOnt) {
+ fmt.Println("You can only call one method at a time")
+ usage()
+ return
+ }
+ if !(*create || *provOnt || *addOlt) {
+ fmt.Println("You didn't specify an operation to perform")
+ usage()
+ return
+ }
+ var conn *grpc.ClientConn
+ creds, err := credentials.NewClientTLSFromFile("cert/server.crt", "AbstractOLT.dev.atl.foundry.att.com")
+ if err != nil {
+ log.Fatalf("could not load tls cert: %s", err)
+ }
+ // Setup the login/pass
+ auth := Authentication{
+ Login: "john",
+ Password: "doe",
+ }
+ conn, err = grpc.Dial(":7777", grpc.WithTransportCredentials(creds), grpc.WithPerRPCCredentials(&auth))
+ if err != nil {
+ log.Fatalf("did not connect: %s", err)
+ }
+ defer conn.Close()
+
+ c := api.NewAbstractOLTClient(conn)
+ if *create {
+ createChassis(c, clli, xosAddress, xosPort, rack, shelf)
+ } else if *addOlt {
+ addOltChassis(c, clli, oltAddress, oltPort, name, driver, oltType)
+ } else if *provOnt {
+ provisionONT(c, clli, slot, port, ont, serial)
+ } else {
+ }
+
+ fmt.Println("TODO - Do something")
+}
+
// Authentication holds the login/password
type Authentication struct {
Login string
@@ -46,34 +107,95 @@
return true
}
-func main() {
- var conn *grpc.ClientConn
- creds, err := credentials.NewClientTLSFromFile("cert/server.crt", "AbstractOLT.dev.atl.foundry.att.com")
+func createChassis(c api.AbstractOLTClient, clli *string, xosAddress *string, xosPort *uint, rack *uint, shelf *uint) error {
+ fmt.Println("Calling Create Chassis")
+ fmt.Println("clli", *clli)
+ fmt.Println("xos_address", *xosAddress)
+ fmt.Println("xos_port", *xosPort)
+ fmt.Println("rack", *rack)
+ fmt.Println("shelf", *shelf)
+ response, err := c.CreateChassis(context.Background(), &api.AddChassisMessage{CLLI: *clli, VCoreIP: *xosAddress, VCorePort: int32(*xosPort), Rack: int32(*rack), Shelf: int32(*shelf)})
if err != nil {
- log.Fatalf("could not load tls cert: %s", err)
- }
- // Setup the login/pass
- auth := Authentication{
- Login: "john",
- Password: "doe",
- }
- conn, err = grpc.Dial(":7777", grpc.WithTransportCredentials(creds), grpc.WithPerRPCCredentials(&auth))
- if err != nil {
- log.Fatalf("did not connect: %s", err)
- }
- defer conn.Close()
-
- c := api.NewAbstractOLTClient(conn)
-
- response, err := c.CreateChassis(context.Background(), &api.AddChassisMessage{CLLI: "my cilli", VCoreIP: "192.168.0.1", VCorePort: 9191})
- if err != nil {
- log.Fatalf("Error when calling SayHello: %s", err)
+ fmt.Printf("Error when calling CreateChassis: %s", err)
+ return err
}
log.Printf("Response from server: %s", response.GetDeviceID())
- newResponse, err := c.CreateOLTChassis(context.Background(), &api.AddOLTChassisMessage{CLLI: "my cilli", SlotIP: "12.2.2.0", SlotPort: 9191, Hostname: "SlotOne", Type: api.AddOLTChassisMessage_edgecore})
+ return nil
+}
+func addOltChassis(c api.AbstractOLTClient, clli *string, oltAddress *string, oltPort *uint, name *string, driver *string, oltType *string) error {
+ fmt.Println("clli", *clli)
+ fmt.Println("olt_address", *oltAddress)
+ fmt.Println("olt_port", *oltPort)
+ fmt.Println("name", *name)
+ fmt.Println("driver", *driver)
+ fmt.Println("type", *oltType)
+ var driverType api.AddOLTChassisMessage_OltDriver
+ var chassisType api.AddOLTChassisMessage_OltType
+ switch *oltType {
+ case "edgecore":
+ chassisType = api.AddOLTChassisMessage_edgecore
+ }
+ switch *driver {
+ case "openolt":
+ driverType = api.AddOLTChassisMessage_openoltDriver
+
+ }
+
+ res, err := c.CreateOLTChassis(context.Background(), &api.AddOLTChassisMessage{CLLI: *clli, SlotIP: *oltAddress, SlotPort: uint32(*oltPort), Hostname: *name, Type: chassisType, Driver: driverType})
if err != nil {
debug.PrintStack()
- log.Fatalf("Error when calling SayHello: %s", err)
+ fmt.Printf("Error when calling CreateOLTChassis: %s", err)
+ return err
}
- log.Printf("Response from server: %s", newResponse.GetDeviceID())
+ log.Printf("Response from server: %s", res.GetDeviceID())
+ return nil
+}
+func provisionONT(c api.AbstractOLTClient, clli *string, slot *uint, port *uint, ont *uint, serial *string) error {
+ fmt.Println("clli", *clli)
+ fmt.Println("slot", *slot)
+ fmt.Println("port", *port)
+ fmt.Println("ont", *ont)
+ fmt.Println("serial", *serial)
+ res, err := c.ProvisionOnt(context.Background(), &api.AddOntMessage{CLLI: *clli, SlotNumber: int32(*slot), PortNumber: int32(*port), OntNumber: int32(*ont), SerialNumber: *serial})
+ if err != nil {
+ debug.PrintStack()
+ fmt.Printf("Error when calling ProvsionOnt %s", err)
+ return err
+ }
+ log.Printf("Response from server: %t", res.GetSuccess())
+ return nil
+
+ return nil
+}
+func usage() {
+ var output = `
+ Usage ./client -[methodFlag] params
+ methFlags:
+ -c create chassis
+ params:
+ -clli CLLI_NAME
+ -xos_address XOS_TOSCA_IP
+ -xos_port XOS_TOSCA_LISTEN_PORT
+ -rack [optional default 1]
+ -shelf [optional default 1]
+ e.g. ./client -c -clli MY_CLLI -xos_address 192.168.0.1 -xos_port 30007 -rack 1 -shelf 1
+ -s add physical olt chassis to chassis
+ params:
+ -clli CLLI_NAME - identifies abstract chassis to assign olt chassis to
+ -olt_address - OLT_CHASSIS_IP_ADDRESS
+ -olt_port - OLT_CHASSIS_LISTEN_PORT
+ -name - OLT_NAME internal human readable name to identify OLT_CHASSIS
+ -driver [openolt,asfvolt16,adtran,tibits] - used to tell XOS which driver should be used to manange chassis
+ -type [edgecore,adtran,tibit] - used to tell AbstractOLT how many ports are available on olt chassis
+ e.g. ./client -s -clli MY_CLLI -olt_address 192.168.1.100 -olt_port=9191 -name=slot1 -driver=openolt -type=adtran
+ -o provision ont - adds ont to whitelist in XOS on a specific port on a specific olt chassis based on abstract -> phyisical mapping
+ params:
+ -clli CLLI_NAME
+ -slot SLOT_NUMBER [1-16]
+ -port OLT_PORT_NUMBER [1-16]
+ -ont ONT_NUMBER [1-64]
+ -serial ONT_SERIAL_NUM
+ e.g. ./client -o -clli=MY_CLLI -slot=1 -port=1 -ont=22 -serial=aer900jasdf `
+
+ fmt.Println(output)
}