blob: 4392a10d562d45df51b88c17117d12f62dba4991 [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"
donNewtonAlphaaf229742018-09-19 13:22:00 -040021 "log"
donNewtonAlpha5234b132018-08-16 14:12:28 -040022 "net"
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040023 "net/http"
24 "strings"
25
donNewtonAlphaaf229742018-09-19 13:22:00 -040026 "gerrit.opencord.org/abstract-olt/internal/pkg/settings"
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040027 "gerrit.opencord.org/abstract-olt/models/tosca"
donNewtonAlpha5234b132018-08-16 14:12:28 -040028)
Author Namea594e632018-08-10 11:33:58 -040029
30/*
31Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
32*/
33type Chassis struct {
34 CLLI string
35 VCoreAddress net.TCPAddr
donNewtonAlphae7ab5b92018-09-27 15:09:14 -040036 // Dataswitch DataSwitch
37 Linecards []SimpleOLT
38 Rack int
39 Shelf int
Author Namea594e632018-08-10 11:33:58 -040040}
donNewtonAlpha8205a4d2018-08-16 18:27:20 -040041type UnprovisionedSlotError struct {
42 CLLI string
43 SlotNumber int
44}
45
donNewtonAlphae7ab5b92018-09-27 15:09:14 -040046func (c *Chassis) Output() {
47 for _, olt := range c.Linecards {
48 olt.Output()
49 }
50}
51
donNewtonAlpha8205a4d2018-08-16 18:27:20 -040052func (e *UnprovisionedSlotError) Error() string {
53 return fmt.Sprintf("SlotNumber %d in Chassis %s is currently unprovsioned", e.SlotNumber, e.CLLI)
54}
donNewtonAlpha5234b132018-08-16 14:12:28 -040055
56/*
57AddOLTChassis - adds a reference to a new olt chassis
58*/
donNewtonAlphae7ab5b92018-09-27 15:09:14 -040059func (chassis *Chassis) AddOLTChassis(olt SimpleOLT) {
60 olt.SetNumber((len(chassis.Linecards) + 1))
donNewtonAlpha5234b132018-08-16 14:12:28 -040061 chassis.Linecards = append(chassis.Linecards, olt)
62 //TODO - api call to add olt i.e. preprovision_olt
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040063 //S>103 func NewOltProvision(name string, deviceType string, host string, port int) OltProvsion {
64 ipString := olt.GetAddress().IP.String()
65 webServerPort := olt.GetAddress().Port
66 oltStruct := tosca.NewOltProvision(chassis.CLLI, olt.GetHostname(), "openolt", ipString, webServerPort)
67 yaml, _ := oltStruct.ToYaml()
donNewtonAlphaaf229742018-09-19 13:22:00 -040068 if settings.GetDummy() {
69 log.Printf("yaml:%s\n", yaml)
70 log.Println("YAML IS NOT BEING SET TO XOS")
71 return
72 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040073 client := &http.Client{}
74 requestList := fmt.Sprintf("http://%s:%d/run", chassis.VCoreAddress.IP.String(), chassis.VCoreAddress.Port)
75 req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
76 req.Header.Add("xos-username", "admin@opencord.org")
77 req.Header.Add("xos-password", "letmein")
78 resp, err := client.Do(req)
79 if err != nil {
donNewtonAlphae7ab5b92018-09-27 15:09:14 -040080 //TODO
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040081 // handle error
82 }
donNewtonAlphae7ab5b92018-09-27 15:09:14 -040083 log.Printf("Server response was %v\n", resp)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040084
donNewtonAlpha5234b132018-08-16 14:12:28 -040085}
86func (chassis *Chassis) provisionONT(ont Ont) {
87 //TODO - api call to provison s/c vlans and ont serial number etc
donNewtonAlphae7ab5b92018-09-27 15:09:14 -040088 log.Printf("chassis.provisionONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040089 ponPort := ont.Parent
90 slot := ponPort.Parent
91
92 //func NewOntProvision(serialNumber string, oltIP net.IP, ponPortNumber int) OntProvision {
93 ontStruct := tosca.NewOntProvision(ont.SerialNumber, slot.Address.IP, ponPort.Number)
94 yaml, _ := ontStruct.ToYaml()
95
donNewtonAlphaaf229742018-09-19 13:22:00 -040096 if settings.GetDummy() {
97 log.Printf("yaml:%s\n", yaml)
98 log.Println("YAML IS NOT BEING SET TO XOS")
99 return
100 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400101 client := &http.Client{}
102 requestList := fmt.Sprintf("http://%s:%d/run", chassis.VCoreAddress.IP.String(), chassis.VCoreAddress.Port)
103 req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
104 req.Header.Add("xos-username", "admin@opencord.org")
105 req.Header.Add("xos-password", "letmein")
106 resp, err := client.Do(req)
107 if err != nil {
donNewtonAlphae7ab5b92018-09-27 15:09:14 -0400108 log.Printf("ERROR :) %v\n", err)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400109 // handle error
110 }
donNewtonAlphae7ab5b92018-09-27 15:09:14 -0400111 log.Printf("Response is %v\n", resp)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400112 rgName := fmt.Sprintf("%s_%d_%d_%d_RG", chassis.CLLI, slot.Number, ponPort.Number, ont.Number)
113 subStruct := tosca.NewSubscriberProvision(rgName, ont.Cvlan, ont.Svlan, ont.SerialNumber, ont.NasPortID, ont.CircuitID, chassis.CLLI)
114 yaml, _ = subStruct.ToYaml()
donNewtonAlphae7ab5b92018-09-27 15:09:14 -0400115 log.Printf("yaml:%s\n", yaml)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400116 req, err = http.NewRequest("POST", requestList, strings.NewReader(yaml))
117 req.Header.Add("xos-username", "admin@opencord.org")
118 req.Header.Add("xos-password", "letmein")
119 resp, err = client.Do(req)
120 if err != nil {
donNewtonAlphae7ab5b92018-09-27 15:09:14 -0400121 log.Printf("ERROR :) %v\n", err)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400122 // handle error
123 }
donNewtonAlpha5234b132018-08-16 14:12:28 -0400124}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400125func (chassis *Chassis) deleteONT(ont Ont) {
126 //TODO - api call to provison s/c vlans and ont serial number etc
donNewtonAlphae7ab5b92018-09-27 15:09:14 -0400127 log.Printf("chassis.deleteONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
donNewtonAlpha8205a4d2018-08-16 18:27:20 -0400128}