blob: 4e0c4da3b27698f1d0e1ec1debd4f6b74f3d8c1c [file] [log] [blame]
Author Namea594e632018-08-10 11:33:58 -04001/*
2 Copyright 2017 the original author or authors.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17package physical
18
donNewtonAlpha5234b132018-08-16 14:12:28 -040019import (
20 "fmt"
21 "net"
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040022 "net/http"
23 "strings"
24
25 "gerrit.opencord.org/abstract-olt/models/tosca"
donNewtonAlpha5234b132018-08-16 14:12:28 -040026)
Author Namea594e632018-08-10 11:33:58 -040027
28/*
29Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
30*/
31type Chassis struct {
32 CLLI string
33 VCoreAddress net.TCPAddr
34 Dataswitch DataSwitch
35 Linecards []OLT
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040036 Rack int
37 Shelf int
Author Namea594e632018-08-10 11:33:58 -040038}
donNewtonAlpha8205a4d2018-08-16 18:27:20 -040039type UnprovisionedSlotError struct {
40 CLLI string
41 SlotNumber int
42}
43
44func (e *UnprovisionedSlotError) Error() string {
45 return fmt.Sprintf("SlotNumber %d in Chassis %s is currently unprovsioned", e.SlotNumber, e.CLLI)
46}
donNewtonAlpha5234b132018-08-16 14:12:28 -040047
48/*
49AddOLTChassis - adds a reference to a new olt chassis
50*/
51func (chassis *Chassis) AddOLTChassis(olt OLT) {
52 chassis.Linecards = append(chassis.Linecards, olt)
53 //TODO - api call to add olt i.e. preprovision_olt
54 fmt.Printf("chassis.AddOLTChassis(%s)\n", olt.GetHostname())
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040055 //S>103 func NewOltProvision(name string, deviceType string, host string, port int) OltProvsion {
56 ipString := olt.GetAddress().IP.String()
57 webServerPort := olt.GetAddress().Port
58 oltStruct := tosca.NewOltProvision(chassis.CLLI, olt.GetHostname(), "openolt", ipString, webServerPort)
59 yaml, _ := oltStruct.ToYaml()
60 fmt.Printf("yaml:%s\n", yaml)
61 client := &http.Client{}
62 requestList := fmt.Sprintf("http://%s:%d/run", chassis.VCoreAddress.IP.String(), chassis.VCoreAddress.Port)
63 req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
64 req.Header.Add("xos-username", "admin@opencord.org")
65 req.Header.Add("xos-password", "letmein")
66 resp, err := client.Do(req)
67 if err != nil {
68 fmt.Printf("ERROR :) %v\n", err)
69 // handle error
70 }
71 fmt.Printf("Response is %v\n", resp)
72
donNewtonAlpha5234b132018-08-16 14:12:28 -040073}
74func (chassis *Chassis) provisionONT(ont Ont) {
75 //TODO - api call to provison s/c vlans and ont serial number etc
76 fmt.Printf("chassis.provisionONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040077 ponPort := ont.Parent
78 slot := ponPort.Parent
79
80 //func NewOntProvision(serialNumber string, oltIP net.IP, ponPortNumber int) OntProvision {
81 ontStruct := tosca.NewOntProvision(ont.SerialNumber, slot.Address.IP, ponPort.Number)
82 yaml, _ := ontStruct.ToYaml()
83
84 fmt.Printf("yaml:%s\n", yaml)
85 client := &http.Client{}
86 requestList := fmt.Sprintf("http://%s:%d/run", chassis.VCoreAddress.IP.String(), chassis.VCoreAddress.Port)
87 req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
88 req.Header.Add("xos-username", "admin@opencord.org")
89 req.Header.Add("xos-password", "letmein")
90 resp, err := client.Do(req)
91 if err != nil {
92 fmt.Printf("ERROR :) %v\n", err)
93 // handle error
94 }
95 fmt.Printf("Response is %v\n", resp)
96 rgName := fmt.Sprintf("%s_%d_%d_%d_RG", chassis.CLLI, slot.Number, ponPort.Number, ont.Number)
97 subStruct := tosca.NewSubscriberProvision(rgName, ont.Cvlan, ont.Svlan, ont.SerialNumber, ont.NasPortID, ont.CircuitID, chassis.CLLI)
98 yaml, _ = subStruct.ToYaml()
99 fmt.Printf("yaml:%s\n", yaml)
100 req, err = http.NewRequest("POST", requestList, strings.NewReader(yaml))
101 req.Header.Add("xos-username", "admin@opencord.org")
102 req.Header.Add("xos-password", "letmein")
103 resp, err = client.Do(req)
104 if err != nil {
105 fmt.Printf("ERROR :) %v\n", err)
106 // handle error
107 }
donNewtonAlpha5234b132018-08-16 14:12:28 -0400108}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400109func (chassis *Chassis) deleteONT(ont Ont) {
110 //TODO - api call to provison s/c vlans and ont serial number etc
111 fmt.Printf("chassis.deleteONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
112}
donNewtonAlpha8205a4d2018-08-16 18:27:20 -0400113func (chassis *Chassis) ActivateSlot(slotNumber int) error {
114 // AT&T backend systems start at 1 and not 0 :P
115 if chassis.Linecards[slotNumber-1] == nil {
116 return &UnprovisionedSlotError{CLLI: chassis.CLLI, SlotNumber: slotNumber}
117 }
118 return chassis.Linecards[slotNumber-1].activate()
119}