Commit f65b106e authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Merge branch 'feat/te-service' of https://labs.etsi.org/rep/tfs/controller into feat/te-service

parents 57b173ee 6e26b790
Loading
Loading
Loading
Loading

.dockerignore

0 → 100644
+16 −0
Original line number Diff line number Diff line
# Avoid including these folders when building the components
.git/
.gitlab/
.vscode/
coverage/
data/
deploy/
ecoc22/
hackfest/
manifests/
nfvsdn22/
oeccpsc22/
ofc22/
ofc23/
scripts/
tmp/
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ include:
  - local: '/src/dbscanserving/.gitlab-ci.yml'
  - local: '/src/opticalattackmitigator/.gitlab-ci.yml'
  - local: '/src/opticalattackdetector/.gitlab-ci.yml'
  - local: '/src/opticalattackmanager/.gitlab-ci.yml'
  # - local: '/src/opticalattackmanager/.gitlab-ci.yml'
  - local: '/src/automation/.gitlab-ci.yml'
  - local: '/src/policy/.gitlab-ci.yml'
  #- local: '/src/webui/.gitlab-ci.yml'
+80 −13
Original line number Diff line number Diff line
@@ -115,6 +115,9 @@ python3 client_connection.py
cd ~/tfs-ctrl/hackfest/tapi/server
pip install -r requirements.txt

cd ~/tfs-ctrl/hackfest/tapi/tapi_app
./requirements.sh

# (done) Build & Implement methods for the TAPI v2.1.3 server:
cd ~/tfs-ctrl/hackfest/tapi
wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.35/swagger-codegen-cli-3.0.35.jar
@@ -134,7 +137,7 @@ cd ~/tfs-ctrl/hackfest/tapi/server
python3 -m tapi_server 8080 database/mini-ols-context.json

# Run TAPI client using cURL (In a new window):
$ cd ~/tfs-ctrl/hackfest/tapi/client
cd ~/tfs-ctrl/hackfest/tapi/client

# Interrogate Context and SIPs:
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/
@@ -163,6 +166,7 @@ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restcon


## EXERCISE

# Exercise: retrieve and draw the topology
# solution in folder tapi_app

@@ -175,24 +179,32 @@ python3 tapi_app.py
# Deploy TeraFlowSDN
################################################################################

# Check status of Kubernetes
## GUIDED

# Check status of MicroK8s
microk8s.status --wait-ready

# If not running, start MicroK8s
microk8s.start

# Periodically inspect status of MicroK8s until all addons are enabled
watch -n 1 microk8s.status --wait-ready

# Check all resources in Kubernetes
microk8s.kubectl get all --all-namespaces
watch -n 1 kubectl get all --all-namespaces

# Deploy TeraFlowSDN
cd ~/tfs-ctrl
source my_deploy.sh 
./deploy.sh 
./deploy/all.sh 

# Show status of your deployment
(if new terminal) cd ~/tfs-ctrl && source my_deploy.sh
./show_deploy.sh 
./deploy/show.sh

# Show logs of a specific component
(if new terminal) cd ~/tfs-ctrl && source my_deploy.sh
scripts/show_logs_device.sh
./scripts/show_logs_device.sh



@@ -202,6 +214,8 @@ scripts/show_logs_device.sh

# (done) Build a Netconf server supporting basic OpenConfig data model

## GUIDED

# Start the Netconf/OpenConfig server
cd ~/tfs-ctrl/hackfest/netconf-oc
python3 server_openconfig.py 8300
@@ -212,7 +226,8 @@ python3 server_openconfig.py 8300
# Service requests
################################################################################

## L3VPN service from JSON descriptors
## EXERCISE
# Exercise: L3VPN service from JSON descriptors

# (in a new terminal) Start OLS TAPI server:
cd ~/tfs-ctrl/hackfest/tapi/server
@@ -236,9 +251,8 @@ python3 server_openconfig.py 8304



############
# Mock OSM
############
## EXERCISE
# Exercise: L2VPN slice from Mock OSM

$ cd ~/tfs-ctrl/hackfest/
$ python -m mock_osm
@@ -262,16 +276,69 @@ Service b8c99e2c-39d8-424d-9833-554634269555 deleted
(mock-osm) exit
Bye!



############
# gRPC
############

## GUIDED

# Generate connection messages from .proto
cd ~/tfs-ctrl/hackfest/grpc
python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto

# Create a connection message and save to a file
cd ~/tfs-ctrl/hackfest/grpc/connection
python3 create.py connection.txt 

# List a connection from a file
cd ~/tfs-ctrl/hackfest/grpc/connection
python3 list.py connection.txt 

# Build ConnectionService from .proto
cd ~/tfs-ctrl/hackfest/grpc
python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto

# Start ConnectionService server
cd ~/tfs-ctrl/hackfest/grpc/connectionService
python3 connectionService_server.py

# Start ConnectionService client (in another terminal)
cd ~/tfs-ctrl/hackfest/grpc/connectionService
python3 connectionService_client.py


## EXERCISE
# Exercise: add streams

# Build ConnectionServiceWithNotif from .proto
cd ~/tfs-ctrl/hackfest/grpc
python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto

## Solution:
# Run ConnectionServiceWithNotif server
cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
python3 connectionServiceWithNotif_server.py

# Run ConnectionServiceWithNotif client (in another terminal)
$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
$ python3 connectionServiceWithNotif_client.py



############
# gNMI
############

## GUIDED

## Download and install the latest release
$ sudo bash -c "$(curl -sL https://get.containerlab.dev)
$ sudo bash -c "$(curl -sL https://get.containerlab.dev)"

## Deploy proposed two SR node scenario
$ cd tfs-ctrl/hackfest/gnmi
$ sudo containerlab deploy -t srlinux.clab.yml
$ cd ~/tfs-ctrl/hackfest/gnmi
$ sudo containerlab deploy --topo srlinux.clab.yml

## Access SR Bash
$ docker exec -it clab-srlinux-srl1 bash
+2 −0
Original line number Diff line number Diff line
clab-tfs-scenario
.tfs-scenario.clab.yml.bak
+99 −0
Original line number Diff line number Diff line
############
# ContainerLab
############

Refs:
https://documentation.nokia.com/srlinux/22-6/SR_Linux_Book_Files/SysMgmt_Guide/data-models.html#openconfig-ov
https://documentation.nokia.com/srlinux/SR_Linux_HTML_R21-11/SysMgmt_Guide/gnmi-interface.html#ai9ersv4qe
https://github.com/openconfig/kne/blob/v0.1.9/examples/nokia/srlinux-services/srl-openconfig.cfg.json
https://containerlab.dev/manual/kinds/srl/#default-node-configuration
https://learn.srlinux.dev/tutorials/infrastructure/kne/srl-with-oc-services/
https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md
https://gnmic.kmrd.dev/cmd/get/


IMPORTANT: for Nokia SR Linux, use kind "srl" and type "ixr6"

## Download and install the latest release
$ sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.42.0

## Deploy proposed two SR node scenario
$ cd ~/tfs-ctrl/hackfest/containerlab
$ sudo containerlab deploy --topo tfs-scenario.clab.yml

## Access SR Bash
$ docker exec -it clab-tfs-scenario-srl1 bash

## Access SR CLI
$ docker exec -it clab-tfs-scenario-srl1 sr_cli

## Destroy scenario
$ sudo containerlab destroy --topo tfs-scenario.clab.yml


## Enable OpenConfig data models and set as default:
$ docker exec -it clab-tfs-scenario-srl1 sr_cli
# enter candidate
# system management openconfig admin-state enable
# system gnmi-server network-instance mgmt yang-models openconfig
# commit stay
# quit


# Configure containerlab clients
docker exec -it clab-tfs-scenario-client1 bash
    ip address add 172.16.1.10/24 dev eth1
    ip route add 172.16.2.0/24 via 172.16.1.1

    ping 172.16.2.1 or 172.16.2.10

docker exec -it clab-tfs-scenario-client2 bash
    ip address add 172.16.2.10/24 dev eth1
    ip route add 172.16.1.0/24 via 172.16.2.1

    ping 172.16.1.1 or 172.16.1.10




## Install gNMIc
$ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)"

## gNMI Capabilities request
$ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify capabilities

## gNMI Get request
$ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /system/name/host-name
$ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /interface[name=mgmt0]

## gNMI Set request
$ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --update-path /system/name/host-name --update-value slr11

(we check the changed value) 
$ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /system/name/host-name 

## Subscribe request
$ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf subscribe --path /interface[name=mgmt0]/statistics
(In another terminal, you can generate traffic) 
$ssh admin@clab-srlinux-srl1




# Check configurations done:
gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/network-instances' > srl1-nis.json
gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/interfaces' > srl1-ifs.json
gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/network-instances' > srl2-nis.json
gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/interfaces' > srl2-ifs.json


# Delete elements:
gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/network-instances/network-instance[name=b19229e8]'
gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]'
gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]'
gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/network-instances/network-instance[name=b19229e8]'
gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]'
gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]'

# Run gNMI Driver in standalone mode (advanced)
PYTHONPATH=./src python -m src.device.tests.test_gnmi
Loading