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

Hackfest:

- integrated command files
- moved unused command listings to separate folders
- polished data files
- cleaned up TAPI show topology script and context database
- added TFS descriptor files
parent 76b8d341
Loading
Loading
Loading
Loading
+203 −234
Original line number Diff line number Diff line
This is a quick guide for having fast access to the commands


This is a quick guide for having fast access to the commands.

################################################################################
# Preparation (already done):
# Prepare environment
################################################################################
$ cd ~/tfs-ctrl/hackfest
$ pip install pyang
$ pip install git+https://github.com/robshakir/pyangbind.git
$ pip install netconf
$ sudo apt-get install -y graphviz openjdk-11-jre

# Download plantuml.7997.jar from http://sourceforge.net/projects/plantuml/files/plantuml.7997.jar/download
# (done) Create PyEnv virtual environment
cd ~/tfs-ctrl
pyenv virtualenv 3.9.13 tfs
pyenv local 3.9.13/envs/tfs
./install_requirements.sh

# (done) Install Python dependencies
pip install pyang
pip install git+https://github.com/robshakir/pyangbind.git
pip install netconf

# (done) Install PlantUML
# (done) Install dependencies to run PlantUML
sudo apt-get install -y graphviz openjdk-11-jre

# (done) Download plantuml.7997.jar from http://sourceforge.net/projects/plantuml/files/plantuml.7997.jar/download
cp ~/Downloads/plantuml.7997.jar ~/tfs-ctrl/hackfest/yang/plantuml.jar

sudo apt-get install -y wireshark
# (done) Install WireShark
#   When asked "allow non-root users to capture?" answer "yes"
sudo apt-get install -y wireshark
# Add current user to wireshark group to allow capturing as non-root (requires log-out & log-in, or reboot)
sudo usermod -a -G wireshark $USER


@@ -24,34 +34,48 @@ sudo usermod -a -G wireshark $USER
# YANG
################################################################################

$ cd ~/tfs-ctrl/hackfest/yang
$ cat topology.yang
$ pyang -f tree topology.yang
$ pyang -f tree topology.yang -o topology.tree
$ pyang -f sample-xml-skeleton --sample-xml-skeleton-annotations topology.yang
$ pyang -f sample-xml-skeleton --sample-xml-skeleton-annotations topology.yang -o topology-sample.xml
$ pyang -f uml topology.yang -o topology.uml
$ java -jar plantuml.jar topology.uml
## GUIDED

# Convert Topology YANG to Text-based tree
pyang -f tree topology.yang
pyang -f tree topology.yang -o topology.tree

# Report a sample message following Topology YANG data model
pyang -f sample-xml-skeleton --sample-xml-skeleton-annotations topology.yang
pyang -f sample-xml-skeleton --sample-xml-skeleton-annotations topology.yang -o topology-sample.xml

# Convert Topology YANG to UML
pyang -f uml topology.yang -o topology.uml
java -jar plantuml.jar topology.uml

PYANGBIND
---------
$ export PYBINDPLUGIN=`/usr/bin/env python3 -c \
# Convert Topology YANG to Python bindings
export PYBINDPLUGIN=`/usr/bin/env python -c \
'import pyangbind; import os; print ("{}/plugin".format(os.path.dirname(pyangbind.__file__)))'`
$ echo $PYBINDPLUGIN
$ pyang -f pybind topology.yang --plugindir $PYBINDPLUGIN -o binding_topology.py
$ python3 topology.py
echo $PYBINDPLUGIN
pyang -f pybind topology.yang --plugindir $PYBINDPLUGIN -o binding_topology.py

# Test creation of JSON-/XML-encoded Topology messages
python topology.py

## EXERCISE

# Convert Connection YANG to Text-based tree
pyang -f tree connection.yang

# Report a sample message following Connection YANG data model
pyang -f sample-xml-skeleton --sample-xml-skeleton-annotations connection.yang

# Convert Connection YANG to UML
pyang -f uml connection.yang -o connection.uml
java -jar plantuml.jar connection.uml

EXERCISE: CONNECTION
--------------------
$ cd ~/tfs-ctrl/hackfest/yang/connection
$ export PYBINDPLUGIN=`/usr/bin/env python3 -c \
# Convert Connection YANG to Python bindings
export PYBINDPLUGIN=`/usr/bin/env python -c \
    'import pyangbind; import os; print ("{}/plugin".format(os.path.dirname(pyangbind.__file__)))'`
$ pyang -f pybind connection.yang --plugindir $PYBINDPLUGIN -o binding_connection.py
$ python3 connection.py
pyang -f pybind connection.yang --plugindir $PYBINDPLUGIN -o binding_connection.py

# Test creation of JSON-/XML-encoded Connection messages
python connection.py



@@ -59,25 +83,25 @@ $ python3 connection.py
# NETCONF
################################################################################

## GUIDED

Run server:
$ cd ~/tfs-ctrl/hackfest/netconf
$ python3 server_topology.py
cd ~/tfs-ctrl/hackfest/netconf
python3 server_topology.py

In another window, run client:
$ cd ~/tfs-ctrl/hackfest/netconf
$ python3 client_topology.py

cd ~/tfs-ctrl/hackfest/netconf
python3 client_topology.py

## EXERCISE

EXERCISE: NETCONF EDIT-CONFIG
-----------------------------
Run server:
$ cd ~/tfs-ctrl/hackfest/netconf/connection
$ python3 server_topology_connection.py
cd ~/tfs-ctrl/hackfest/netconf/connection
python3 server_topology_connection.py

In another window, run client:
$ cd ~/tfs-ctrl/hackfest/netconf/connection
$ python3 client_connection.py
cd ~/tfs-ctrl/hackfest/netconf/connection
python3 client_connection.py



@@ -85,213 +109,158 @@ $ python3 client_connection.py
# TAPI
################################################################################

RUN TAPI SERVER:
(if needed)
$ pip install -r ~/tfs-ctrl/hackfest/tapi/server/requirements.txt
$ cd ~/tfs-ctrl/hackfest/tapi/server
$ python3 tapi_server.py

RUN TAPI CLIENT (In a new window):
## GUIDED

# (done) Install dependencies
cd ~/tfs-ctrl/hackfest/tapi/server
pip install -r requirements.txt

# (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
wget -O tapi-connectivity.yaml https://github.com/OpenNetworkingFoundation/TAPI/raw/v2.1.3/OAS/tapi-connectivity%402020-06-16.yaml
java -jar swagger-codegen-cli-3.0.35.jar generate --input-spec tapi-connectivity.yaml \
    --lang python-flask --output server --disable-examples --config codegen-config.json
pip install connexion==2.14.1
cd ~/tfs-ctrl/hackfest/tapi/server
# Rename methods in "tapi_server/controllers/tapi_path_computation_controller.py" as follows:
#   operations_tapi_path_computationcompute_p2_p_path_post => operations_tapi_path_computationcompute_p_2_p_path_post
#   operations_tapi_path_computationdelete_p2_p_path_post => operations_tapi_path_computationdelete_p_2_p_path_post
#   operations_tapi_path_computationoptimize_p2_ppath_post => operations_tapi_path_computationoptimize_p_2_ppath_post
# Implement database based on Reference Implementation [Ref-3] in tapi/server/Acknowledgements.txt

# Run the TAPI server:
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
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/service-interface-point/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/service-interface-point/sip-pe1-uni1/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/topo-nwk/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/topo-nwk/node/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/topo-nwk/node/node-pe-1/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/topo-nwk/node/node-pe-1/owned-node-edge-point/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/topo-nwk/node/node-pe-1/owned-node-edge-point/NEP_PE_01_UNI1/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/topology/topo-nwk/link/PE1_NNI3_PI3_NNI1/

CONNECTIONS:

$ curl -X POST -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/connectivity-service/cs1/ -d @cs1.json
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/connectivity-service/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/connectivity-service/cs1/
$ curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/connection/cs1/
$ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/context/connectivity-service/cs1/


EXERCISE: TAPI_APP
$ cd ~/tfs-ctrl/hackfest/tapi/tapi_app
$ python3 tapi_app.py


== GRPC
$ cd ~/tfs-ctrl/hackfest/grpc

COMPILE connection.proto:
$ python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto

RUN CREATE AND LIST CONNECTION
$ cd ~/tfs-ctrl/hackfest/grpc/connection
$ python3 create.py connection.txt 
$ python3 list.py connection.txt

COMPILE connectionService.proto
$ python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto

RUN SERVER
$ cd ~/tfs-ctrl/hackfest/grpc/connectionService
$ python3 connectionService_server.py

RUN CLIENT (in another window)
$ cd ~/tfs-ctrl/hackfest/grpc/connectionService
$ python3 connectionService_client.py

### EXERCISE
COMPILE connectionServiceWithNotif.proto
$ cd ~/tfs-ctrl/hackfest/grpc/
$ python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto

RUN SERVER
$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
$ python3 connectionServiceWithNotif_server.py

RUN CLIENT (in another window)
$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
$ python3 connectionServiceWithNotif_client.py


== GNMI
$ cd /usr/share/gocode/src/ 
$ export GOPATH=/usr/share/gocode/
$ go run github.com/openconfig/ygot/generator/generator.go -generate_fakeroot -output_file github.com/google/gnxi/gnmi/modeldata/gostruct/generated.go -package_name gostruct github.com/rvilalta/OFC_SC472/yang/topology.yang 
$ cd /usr/share/gocode/src/github.com/google/gnxi/gnmi_target
$ go run gnmi_target.go -bind_address :10161 -config ~/tfs-ctrl/hackfest/gnmi/topology.json --notls -alsologtostderr

RUN CLIENT (in another window)
$ export GOPATH=/usr/share/gocode/
$ cd /usr/share/gocode/src/github.com/google/gnxi/gnmi_get
$ go run gnmi_get.go -notls -xpath "/topology/" -target_addr localhost:10161 -alsologtostderr 
$ go run gnmi_get.go -notls -xpath "/topology/node[node-id=A]" -target_addr localhost:10161 -alsologtostderr

USE PYTHON CLIENT
$ cd /usr/share/gocode/src/github.com/google/gnxi/gnmi_cli_py
$ python py_gnmicli.py -n -m get -t localhost -p 10161 -x /topology -u foo -pass bar

== KAFKA
$ cd ~/tfs-ctrl/hackfest/kafka

(INSTALL)
$ pip3 install kafka-python
$ wget https://ftp.cixug.es/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz
$ tar -xzf kafka_2.13-2.8.0.tgz
(RUN)
$ cd kafka_2.13-2.8.0
$ bin/zookeeper-server-start.sh config/zookeeper.properties
(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka/kafka_2.13-2.8.0
$ bin/kafka-server-start.sh config/server.properties

CREATE TOPIC
(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka/kafka_2.13-2.8.0
$ bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092

(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka
$ python3 sub.py
 
(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka
$ python3 pub.py

== APPENDIX: CONFD
$ cd ~/tfs-ctrl/hackfest/netconf
$ unzip confd-basic-6.4.linux.x86_64.zip  
$ cd confd-basic-6.4.linux.x86_64/
$ ./confd-basic-6.4.linux.x86_64.installer.bin /root/confd/

Data model compilation
$ cd /root/confd/bin/
$ ./confdc -c ~/tfs-ctrl/hackfest/yang/topology.yang

Start ConfD
$ ./confd --foreground -v --addloadpath .

In another terminal, use ConfD-client to populate model
$ cd /root/confd/bin/
$ ./confd_cli
> conf
> topology node node1
> exit
> commit
> exit
> exit

Use ConfD-client to show db
$ ./confd_cli
> conf
> show full-configuration
> exit
> exit

== RUN ONOS
$ cd /root/onos-2.1.0/apache-karaf-4.2.3/bin/
$ ./karaf clean
> app activate org.onosproject.openflow
> app activate org.onosproject.gui

In another terminal, run mininet:
$ mn --topo linear,3 --mac --controller=remote,ip=127.0.0.1,port=6653 --switch ovs,protocols=OpenFlow13

In another terminal, we use ONOS REST API:
$ curl -X GET -u onos:rocks --header 'Accept: application/json' http://localhost:8181/onos/v1/links | python -m json.tool
$ cd ~/tfs-ctrl/hackfest/onos_api/
$ python3 onos_topology.py 

# Interrogate Context and SIPs:
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/service-interface-point=node-4-port-16-output/

# Interrogate Topology, Nodes and Links:
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-topology:topology-context/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-topology:topology-context/topology=ols-topo/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-topology:topology-context/topology=ols-topo/node=node-4/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-topology:topology-context/topology=ols-topo/node=node-4/owned-node-edge-point=node-4-port-13/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-topology:topology-context/topology=ols-topo/node=node-4/owned-node-edge-point=node-4-port-13/tapi-connectivity:cep-list/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-topology:topology-context/topology=ols-topo/link=link-4:2-2:4/

# Create ConnectivityServices and Connections:
curl -X POST -H "Content-Type: application/json" \
    http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service/ \
    -d @/home/tfs/tfs-ctrl/hackfest/tapi/client/cs1.json

# Interrogate ConnectivityServices and Connections:
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service=cs1/
curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connection=cs1/

# Delete ConnectivityServices and Connections:
curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service=cs1/


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

cd ~/tfs-ctrl/hackfest/tapi/tapi_app
python3 tapi_app.py



################################################################################
# Deploy TeraFlowSDN
################################################################################

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

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

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

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

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



################################################################################
# OTHER MATERIAL
# Programmable L3 routers
################################################################################

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

# Start the Netconf/OpenConfig server
cd ~/tfs-ctrl/hackfest/netconf-oc
python3 server_openconfig.py 8300



################################################################################
# Service requests
################################################################################

## L3VPN service from JSON descriptors

# (in a new terminal) Start OLS TAPI server:
cd ~/tfs-ctrl/hackfest/tapi/server
python3 -m tapi_server 8080 database/mini-ols-context.json

# (in a new terminal) Start the Netconf/OpenConfig server for R1
cd ~/tfs-ctrl/hackfest/netconf-oc
python3 server_openconfig.py 8301

# (in a new terminal) Start the Netconf/OpenConfig server for R2
cd ~/tfs-ctrl/hackfest/netconf-oc
python3 server_openconfig.py 8302

=== YANG2SWAGGER
# (in a new terminal) Start the Netconf/OpenConfig server for R3
cd ~/tfs-ctrl/hackfest/netconf-oc
python3 server_openconfig.py 8303

$ cd ~/tfs-ctrl/hackfest/restconf
(if needed)
$ wget https://github.com/bartoszm/yang2swagger/releases/download/1.1.11/swagger-generator-cli-1.1.11-executable.jar
# (in a new terminal) Start the Netconf/OpenConfig server for R4
cd ~/tfs-ctrl/hackfest/netconf-oc
python3 server_openconfig.py 8304

Generate swagger files:
$ java -jar swagger-generator-cli-1.1.11-executable.jar -yang-dir ../yang/ -output topology.yaml topology
$ java -jar swagger-generator-cli-1.1.11-executable.jar -yang-dir ../yang/ -output connection.yaml connection


############
# Mock OSM
############

=== SERVER
$ cd ~/tfs-ctrl/hackfest/restconf
(if needed)
$ wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.11/swagger-codegen-cli-3.0.11.jar -O swagger-codegen-cli.jar
$ cd ~/tfs-ctrl/hackfest/
$ python -m mock_osm
Welcome to the MockOSM shell.
Type help or ? to list commands.

Create the server:
$ mkdir ~/tfs-ctrl/hackfest/restconf/server
$ java -jar swagger-codegen-cli.jar generate -i connection.yaml -l python-flask -o server
(mock-osm) create
Service b8c99e2c-39d8-424d-9833-554634269555 created
# Service should be created in TFS. Check "Slice" and "Service" pages on WebUI.
# Check configuration rules in "Devices"

Run the server:
$ cd ~/tfs-ctrl/hackfest/restconf/server
$ pip3 install -r requirements.txt
(Open ~/tfs-ctrl/hackfest/restconf/server/swagger_server/swagger/swagger.yaml and modify all: "name: connection_id" for "name: connection-id")
RUN AUTOGENERATED SERVER
$ python3 -m swagger_server
(mock-osm) status
response.status_code=200
Status of Service b8c99e2c-39d8-424d-9833-554634269555 is {'sdn_status': 'ACTIVE'}

(you have the solution in ~/tfs-ctrl/hackfest/restconf/connectionserver )
(mock-osm) delete
Service b8c99e2c-39d8-424d-9833-554634269555 deleted
# Service should be removed from TFS. Check "Slice" and "Service" pages on WebUI.
# Check configuration rules in "Devices"

RUN CURL AS CLIENT (In another window)
$ cd ~/tfs-ctrl/hackfest/restconf/
$ curl -X POST -H "Content-Type: application/yang-data+json" http://127.0.0.1:8080/data/connection/ -d@conn1.json
$ curl -X GET -H "Content-Type: application/yang-data+json" http://127.0.0.1:8080/data/connection=0/
$ curl -X DELETE -H "Content-Type: application/yang-data+json" http://127.0.0.1:8080/data/connection=0/
(mock-osm) exit
Bye!


=== Exercise: RESTCONF TOPOLOGY ===
$ mkdir ~/tfs-ctrl/hackfest/restconf/topologyserver
$ java -jar swagger-codegen-cli.jar generate -i topology.yaml -l python-flask -o topologyserver
$ cd ~/tfs-ctrl/hackfest/restconf/topologyserver
(Open ~/tfs-ctrl/hackfest/restconf/topologyserver/swagger_server/swagger/swagger.yaml and modify all: "name: link_id" for "name: link-id", same for node and port)
$ python3 -m swagger_server
RUN CURL AS CLIENT (In another window)
$curl -X GET -H "Content-Type: application/yang-data+json" http://127.0.0.1:8080/data/topology/
+17 −0
Original line number Diff line number Diff line
== GNMI
$ cd /usr/share/gocode/src/ 
$ export GOPATH=/usr/share/gocode/
$ go run github.com/openconfig/ygot/generator/generator.go -generate_fakeroot -output_file github.com/google/gnxi/gnmi/modeldata/gostruct/generated.go -package_name gostruct github.com/rvilalta/OFC_SC472/yang/topology.yang 
$ cd /usr/share/gocode/src/github.com/google/gnxi/gnmi_target
$ go run gnmi_target.go -bind_address :10161 -config ~/tfs-ctrl/hackfest/gnmi/topology.json --notls -alsologtostderr

RUN CLIENT (in another window)
$ export GOPATH=/usr/share/gocode/
$ cd /usr/share/gocode/src/github.com/google/gnxi/gnmi_get
$ go run gnmi_get.go -notls -xpath "/topology/" -target_addr localhost:10161 -alsologtostderr 
$ go run gnmi_get.go -notls -xpath "/topology/node[node-id=A]" -target_addr localhost:10161 -alsologtostderr

USE PYTHON CLIENT
$ cd /usr/share/gocode/src/github.com/google/gnxi/gnmi_cli_py
$ python py_gnmicli.py -n -m get -t localhost -p 10161 -x /topology -u foo -pass bar
+36 −0
Original line number Diff line number Diff line
== GRPC
$ cd ~/tfs-ctrl/hackfest/grpc

COMPILE connection.proto:
$ python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto

RUN CREATE AND LIST CONNECTION
$ cd ~/tfs-ctrl/hackfest/grpc/connection
$ python3 create.py connection.txt 
$ python3 list.py connection.txt

COMPILE connectionService.proto
$ python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto

RUN SERVER
$ cd ~/tfs-ctrl/hackfest/grpc/connectionService
$ python3 connectionService_server.py

RUN CLIENT (in another window)
$ cd ~/tfs-ctrl/hackfest/grpc/connectionService
$ python3 connectionService_client.py

### EXERCISE
COMPILE connectionServiceWithNotif.proto
$ cd ~/tfs-ctrl/hackfest/grpc/
$ python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto

RUN SERVER
$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
$ python3 connectionServiceWithNotif_server.py

RUN CLIENT (in another window)
$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
$ python3 connectionServiceWithNotif_client.py

+27 −0
Original line number Diff line number Diff line
== KAFKA
$ cd ~/tfs-ctrl/hackfest/kafka

(INSTALL)
$ pip3 install kafka-python
$ wget https://ftp.cixug.es/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz
$ tar -xzf kafka_2.13-2.8.0.tgz
(RUN)
$ cd kafka_2.13-2.8.0
$ bin/zookeeper-server-start.sh config/zookeeper.properties
(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka/kafka_2.13-2.8.0
$ bin/kafka-server-start.sh config/server.properties

CREATE TOPIC
(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka/kafka_2.13-2.8.0
$ bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092

(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka
$ python3 sub.py
 
(In new window)
$ cd ~/tfs-ctrl/hackfest/kafka
$ python3 pub.py

hackfest/netconf-oc/_commands.md

deleted100644 → 0
+0 −82

File deleted.

Preview size limit exceeded, changes collapsed.

Loading