SEBA-122
bin/client is now cmdline app, tosca is sent to xos

Change-Id: I7bbf59569b5c96062aa1c7681708a4cf39532ae2
diff --git a/models/physical/chassis.go b/models/physical/chassis.go
index 705de80..4e0c4da 100644
--- a/models/physical/chassis.go
+++ b/models/physical/chassis.go
@@ -19,6 +19,10 @@
 import (
 	"fmt"
 	"net"
+	"net/http"
+	"strings"
+
+	"gerrit.opencord.org/abstract-olt/models/tosca"
 )
 
 /*
@@ -29,6 +33,8 @@
 	VCoreAddress net.TCPAddr
 	Dataswitch   DataSwitch
 	Linecards    []OLT
+	Rack         int
+	Shelf        int
 }
 type UnprovisionedSlotError struct {
 	CLLI       string
@@ -46,10 +52,59 @@
 	chassis.Linecards = append(chassis.Linecards, olt)
 	//TODO - api call to add olt i.e. preprovision_olt
 	fmt.Printf("chassis.AddOLTChassis(%s)\n", olt.GetHostname())
+	//S>103 func NewOltProvision(name string, deviceType string, host string, port int) OltProvsion {
+	ipString := olt.GetAddress().IP.String()
+	webServerPort := olt.GetAddress().Port
+	oltStruct := tosca.NewOltProvision(chassis.CLLI, olt.GetHostname(), "openolt", ipString, webServerPort)
+	yaml, _ := oltStruct.ToYaml()
+	fmt.Printf("yaml:%s\n", yaml)
+	client := &http.Client{}
+	requestList := fmt.Sprintf("http://%s:%d/run", chassis.VCoreAddress.IP.String(), chassis.VCoreAddress.Port)
+	req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
+	req.Header.Add("xos-username", "admin@opencord.org")
+	req.Header.Add("xos-password", "letmein")
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Printf("ERROR :) %v\n", err)
+		// handle error
+	}
+	fmt.Printf("Response is %v\n", resp)
+
 }
 func (chassis *Chassis) provisionONT(ont Ont) {
 	//TODO - api call to provison s/c vlans and ont serial number etc
 	fmt.Printf("chassis.provisionONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
+	ponPort := ont.Parent
+	slot := ponPort.Parent
+
+	//func NewOntProvision(serialNumber string, oltIP net.IP, ponPortNumber int) OntProvision {
+	ontStruct := tosca.NewOntProvision(ont.SerialNumber, slot.Address.IP, ponPort.Number)
+	yaml, _ := ontStruct.ToYaml()
+
+	fmt.Printf("yaml:%s\n", yaml)
+	client := &http.Client{}
+	requestList := fmt.Sprintf("http://%s:%d/run", chassis.VCoreAddress.IP.String(), chassis.VCoreAddress.Port)
+	req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
+	req.Header.Add("xos-username", "admin@opencord.org")
+	req.Header.Add("xos-password", "letmein")
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Printf("ERROR :) %v\n", err)
+		// handle error
+	}
+	fmt.Printf("Response is %v\n", resp)
+	rgName := fmt.Sprintf("%s_%d_%d_%d_RG", chassis.CLLI, slot.Number, ponPort.Number, ont.Number)
+	subStruct := tosca.NewSubscriberProvision(rgName, ont.Cvlan, ont.Svlan, ont.SerialNumber, ont.NasPortID, ont.CircuitID, chassis.CLLI)
+	yaml, _ = subStruct.ToYaml()
+	fmt.Printf("yaml:%s\n", yaml)
+	req, err = http.NewRequest("POST", requestList, strings.NewReader(yaml))
+	req.Header.Add("xos-username", "admin@opencord.org")
+	req.Header.Add("xos-password", "letmein")
+	resp, err = client.Do(req)
+	if err != nil {
+		fmt.Printf("ERROR :) %v\n", err)
+		// handle error
+	}
 }
 func (chassis *Chassis) deleteONT(ont Ont) {
 	//TODO - api call to provison s/c vlans and ont serial number etc
diff --git a/models/physical/ont.go b/models/physical/ont.go
index 3e5e659..79c21ee 100644
--- a/models/physical/ont.go
+++ b/models/physical/ont.go
@@ -26,4 +26,6 @@
 	SerialNumber string
 	Parent       *PONPort `json:"-"`
 	Active       bool
+	NasPortID    string
+	CircuitID    string
 }
diff --git a/models/physical/ponport.go b/models/physical/ponport.go
index 15b7328..ca321fd 100644
--- a/models/physical/ponport.go
+++ b/models/physical/ponport.go
@@ -16,7 +16,9 @@
 
 package physical
 
-import "fmt"
+import (
+	"fmt"
+)
 
 /*
 PONPort represents a single PON port on the OLT chassis
@@ -65,7 +67,7 @@
 /*
 ActivateOnt - passes ont information to chassis to make call to NEM to activate (whitelist) ont
 */
-func (port *PONPort) ActivateOnt(number int, sVlan int, cVlan int, serialNumber string) error {
+func (port *PONPort) ActivateOnt(number int, sVlan int, cVlan int, serialNumber string, nasPortID string, circuitID string) error {
 	slot := port.Parent
 	chassis := slot.Parent
 	fmt.Printf("Calling ActivateOnt and port state is %t\n", port.Onts[number-1].Active)
@@ -74,7 +76,7 @@
 		e := AllReadyActiveError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
 		return &e
 	}
-	ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port}
+	ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port, NasPortID: nasPortID, CircuitID: circuitID}
 	port.Onts[number-1] = ont
 	port.Parent.Parent.provisionONT(ont)
 	port.Onts[number-1].Active = true