diff --git a/src/tests/ecoc22/descriptors_emulated.json b/src/tests/ecoc22/descriptors_emulated.json new file mode 100644 index 0000000000000000000000000000000000000000..46e518b246f76472e978bbe5841b9ca53c7aaa46 --- /dev/null +++ b/src/tests/ecoc22/descriptors_emulated.json @@ -0,0 +1,122 @@ +{ + "contexts": [ + { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "topology_ids": [], "service_ids": [] + } + ], + "topologies": [ + { + "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}, + "device_ids": [], "link_ids": [] + } + ], + "devices": [ + { + "device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "device_type": "emu-datacenter", "device_drivers": [0], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"eth1\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"eth2\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"int\"}]}"}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "device_type": "emu-datacenter", "device_drivers": [0], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"eth1\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"eth2\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"int\"}]}"}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "CS1-GW1"}}, "device_type": "packet-router", "device_drivers": [1], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"10/1\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"1/1\"}]}"}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "CS1-GW2"}}, "device_type": "packet-router", "device_drivers": [1], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"10/1\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"1/1\"}]}"}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "CS2-GW1"}}, "device_type": "packet-router", "device_drivers": [1], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"10/1\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"1/1\"}]}"}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "device_type": "packet-router", "device_drivers": [1], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"10/1\"}, {\"sample_types\": [], \"type\": \"copper\", \"uuid\": \"1/1\"}]}"}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "OLS"}}, "device_type": "emu-open-line-system", "device_drivers": [0], + "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"aade6001-f00b-5e2f-a357-6a0a9d3de870\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"eb287d83-f05e-53ec-ab5a-adf6bd2b5418\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"0ef74f99-1acc-57bd-ab9d-4b958b06c513\"}, {\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"50296d99-58cc-5ce7-82f5-fc8ee4eec2ec\"}]}"}} + ]} + } + ], + "links": [ + { + "link_id": {"link_uuid": {"uuid": "DC1-GW/eth1==CS1-GW1/10/1"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "CS1-GW1"}}, "endpoint_uuid": {"uuid": "10/1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "DC1-GW/eth2==CS1-GW2/10/1"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "eth2"}}, + {"device_id": {"device_uuid": {"uuid": "CS1-GW2"}}, "endpoint_uuid": {"uuid": "10/1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "DC2-GW/eth1==CS2-GW1/10/1"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "CS2-GW1"}}, "endpoint_uuid": {"uuid": "10/1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "DC2-GW/eth2==CS2-GW2/10/1"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "eth2"}}, + {"device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "endpoint_uuid": {"uuid": "10/1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "CS1-GW1/1/1==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "CS1-GW1"}}, "endpoint_uuid": {"uuid": "1/1"}}, + {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "CS1-GW2/1/1==OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "CS1-GW2"}}, "endpoint_uuid": {"uuid": "1/1"}}, + {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "CS2-GW1/1/1==OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "CS2-GW1"}}, "endpoint_uuid": {"uuid": "1/1"}}, + {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "CS2-GW2/1/1==OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "endpoint_uuid": {"uuid": "1/1"}}, + {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}} + ] + } + ] +} diff --git a/src/tests/ecoc22/descriptors_emulated-BigNet.json b/src/tests/ecoc22/other_scenarios/descriptors_emulated-BigNet.json similarity index 100% rename from src/tests/ecoc22/descriptors_emulated-BigNet.json rename to src/tests/ecoc22/other_scenarios/descriptors_emulated-BigNet.json diff --git a/src/tests/ecoc22/descriptors_emulated-DC_CSGW_TN.json b/src/tests/ecoc22/other_scenarios/descriptors_emulated-DC_CSGW_TN.json similarity index 100% rename from src/tests/ecoc22/descriptors_emulated-DC_CSGW_TN.json rename to src/tests/ecoc22/other_scenarios/descriptors_emulated-DC_CSGW_TN.json diff --git a/src/tests/ecoc22/descriptors_emulated-DC_CSGW_TN_OLS.json b/src/tests/ecoc22/other_scenarios/descriptors_emulated-DC_CSGW_TN_OLS.json similarity index 100% rename from src/tests/ecoc22/descriptors_emulated-DC_CSGW_TN_OLS.json rename to src/tests/ecoc22/other_scenarios/descriptors_emulated-DC_CSGW_TN_OLS.json diff --git a/tutorial/2-0-run-experiments.md b/tutorial/2-0-run-experiments.md index ab3c390e11e8a9a7a4b1aab1396fc5d03a5e9b2a..8b5c8f6b88bd9d55b810464ad1cf2ba22ff8b19b 100644 --- a/tutorial/2-0-run-experiments.md +++ b/tutorial/2-0-run-experiments.md @@ -1,4 +1,4 @@ -# 2. Run Experiments Guide (WORK IN PROGRESS) +# 2. Run Experiments Guide This section walks you through the process of running experiments in TeraFlowSDN on top of a Oracle VirtualBox-based VM running MicroK8s Kubernetes platform. @@ -8,9 +8,12 @@ commands you might need, configuring the network topology, and executing differe Note that the steps followed here are likely to work regardless of the platform (VM) where TeraFlowSDN is deployed over. +Note also that this guide will keep growing with the new experiments and demonstrations +that are being carried out involving the ETSI TeraFlowSDN controller. + ## Table of Content: - [2.1. Configure the Python environment](./2-1-python-environment.md) - [2.2. OFC'22 Demo - Bootstrap devices, Monitor device Endpoints, Manage L3VPN Services](./2-2-ofc22.md) -- [2.3. OECC/PSC'22 Demo (WORK IN PROGRESS)](./2-3-oeccpsc22.md) -- [2.4. ECOC'22 Demo - Disjoint DC-2-DC L3VPN Service (WORK IN PROGRESS)](./2-4-ecoc22.md) +- [2.3. OECC/PSC'22 Demo (PENDING)](./2-3-oeccpsc22.md) +- [2.4. ECOC'22 Demo - Disjoint DC-2-DC L2VPN Service](./2-4-ecoc22.md) - [2.5. NFV-SDN'22 Demo (PENDING)](./2-5-nfvsdn22.md) diff --git a/tutorial/2-4-ecoc22.md b/tutorial/2-4-ecoc22.md index 2b0292a08e25ab4d57e3980e291e539f907cadc4..87bc12be7b1dbee09d11b3a589235441d3b35876 100644 --- a/tutorial/2-4-ecoc22.md +++ b/tutorial/2-4-ecoc22.md @@ -1,4 +1,4 @@ -# 2.4. ECOC'22 Demo - Disjoint DC-2-DC L3VPN Service (WORK IN PROGRESS) +# 2.4. ECOC'22 Demo - Disjoint DC-2-DC L2VPN Service This functional test reproduces the experimental assessment of *Experimental Demonstration of Transport Network Slicing with SLA Using the TeraFlowSDN Controller* @@ -31,29 +31,31 @@ environment and a TeraFlowSDN controller instance as described in the [Tutorial: Deployment Guide](./1-0-deployment.md), and you configured the Python environment as described in [Tutorial: Run Experiments Guide > 2.1. Configure Python Environment](./2-1-python-environment.md). -Remember to source the scenario settings, e.g., `cd ~/tfs-ctrl && source ecoc22/deploy_specs.sh` in each terminal you open. +Remember to source the scenario settings, e.g., `cd ~/tfs-ctrl && source ecoc22/deploy_specs.sh` +in each terminal you open. Then, re-build the protocol buffers code from the proto files: `./proto/generate_code_python.sh` -## 2.4.4. Access to the WebUI and Dashboard +## 2.4.4. Access to the WebUI -When the deployment completes, you can connect to the TeraFlowSDN WebUI and Dashboards -as described in +When the deployment completes, you can connect to the TeraFlowSDN WebUI as described in [Tutorial: Deployment Guide > 1.4. Access TeraFlowSDN WebUI and Grafana Dashboards](./1-4-access-webui.md) Notes: -- the default credentials for the Grafana Dashboiard is user/pass: `admin`/`admin123+`. -- this functional test does not involve the Monitoring component, so no monitoring data is plotted in Grafana. +- this experiment does not make use of Monitoring, so Grafana is not used. +- the default credentials for the Grafana Dashboard is user/pass: `admin`/`admin123+`. +- this functional test does not involve the Monitoring component, so no monitoring + data is plotted in Grafana. ## 2.4.5. Test execution To execute this functional test, four main steps needs to be carried out: 1. Device bootstrapping -2. L3VPN Service creation -3. L3VPN Service removal +2. L2VPN Slice and Services creation +3. L2VPN Slice and Services removal 4. Cleanup Upon the execution of each test progresses, a report will be generated indicating @@ -62,8 +64,8 @@ If there is some error during the execution, you should see a detailed report on error. See the troubleshooting section if needed. -You can check the logs of the different components using the appropriate `scripts/show_logs_[component].sh` scripts -after you execute each step. +You can check the logs of the different components using the appropriate +`scripts/show_logs_[component].sh` scripts after you execute each step. ### 2.4.5.1. Device bootstrapping @@ -73,57 +75,48 @@ links in the topology. The expected results are: - The devices to be added into the Topology. - The devices to be pre-configured and initialized as *ENABLED* by the Automation component. -- The monitoring for the device ports (named as endpoints in TeraFlowSDN) to be activated - and data collection to automatically start. - The links to be added to the topology. -To run this step, you can do it from the WebUI by uploading the file `./ecoc22/tests/descriptors_emulated.json` that -contains the descriptors of the contexts, topologies, devices, and links, or by executing the -`./ecoc22/run_test_01_bootstrap.sh` script. - -When the bootstrapping finishes, check in the Grafana L3-Monitoring Dashboard and you -should see the monitoring data being plotted and updated every 5 seconds (by default). -Given that there is no service configured, you should see a 0-valued flat plot. +To run this step, you can do it from the WebUI by uploading the file +`./ecoc22/tests/descriptors_emulated.json` that contains the descriptors of the contexts, +topologies, devices, and links, or by executing the `./ecoc22/run_test_01_bootstrap.sh` script. In the WebUI, select the *admin* Context. Then, in the *Devices* tab you should see that 5 different emulated devices have been -created and activated: 4 packet routers, and 1 optical line system controller. +created and activated: 4 packet routers, and 1 optical Open Line System (OLS) controller. Besides, in the *Services* tab you should see that there is no service created. -Note here that the emulated devices produce synthetic randomly-generated data and do not -care about the services configured. -### 2.4.5.2. L3VPN Service creation +### 2.4.5.2. L2VPN Slice and Services creation This step configures a new service emulating the request an OSM WIM would make by means of a Mock OSM instance. To run this step, execute the `./ecoc22/run_test_02_create_service.sh` script. -When the script finishes, check the WebUI *Services* tab. -You should see that two services have been created, one for the optical layer and -another for the packet layer. +When the script finishes, check the WebUI *Slices* and *Services* tab. +You should see that, for the connectivity service requested by MockOSM, one slice has +been created, three services have been created (two for the optical layer and another +for the packet layer). +Note that the two services for the optical layer correspond to the primary (service_uuid +ending with ":0") and the backup (service_uuid ending with ":1") services. +Each of the services indicates the connections and sub-services that are supporting them. Besides, you can check the *Devices* tab to see the configuration rules that have been configured in each device. -In the Grafana Dashboard, given that there is now a service configured, you should see -the plots with the monitored data for the device. -By default, device R1-EMU is selected. -### 2.4.5.3. L3VPN Service removal +### 2.4.5.3. L2VPN Slice and Services removal -This step deconfigures the previously created services emulating the request an OSM WIM -would make by means of a Mock OSM instance. +This step deconfigures the previously created slices and services emulating the request +an OSM WIM would make by means of a Mock OSM instance. To run this step, execute the `./ecoc22/run_test_03_delete_service.sh` script, or delete -the L3NM service from the WebUI. +the slice from the WebUI. -When the script finishes, check the WebUI "Services" tab. You should see that the two -services have been removed. +When the script finishes, check the WebUI *Slices* and *Services* tab. You should see +that the slice and the services have been removed. Besides, in the *Devices* tab you can see that the appropriate configuration rules have been deconfigured. -In the Grafana Dashboard, given that there is no service configured, you should see a -0-valued flat plot again. ### 2.4.5.4. Cleanup @@ -133,7 +126,7 @@ for completeness. To run this step, execute the `./ecoc22/run_test_04_cleanup.sh` script. -When the script finishes, check the WebUI "Devices" tab, you should see that the devices +When the script finishes, check the WebUI *Devices* tab, you should see that the devices have been removed. -Besides, in the *Services* tab you can see that the *admin* Context has no services +Besides, in the *Slices* and *Services* tab you can see that the *admin* Context has no services given that that context has been removed. diff --git a/tutorial/3-0-development.md b/tutorial/3-0-development.md index c8e7d0d9eb30c4e56a76268ab9868226f3433c11..05e03ef8fa5064363821a27c56dda78d02bfac15 100644 --- a/tutorial/3-0-development.md +++ b/tutorial/3-0-development.md @@ -1,12 +1,18 @@ # 3. Development Guide (WORK IN PROGRESS) -This section walks you through the process of developing new components for the TeraFlowSDN controller. For convenience, -this guide assumes you are using the Oracle VirtualBox-based VM running MicroK8s Kubernetes platform as described in the -[Deployment Guide](./1-0-deployment.md). The guide includes the details on +This section walks you through the process of developing new components for +the TeraFlowSDN controller. +In particular, the guide includes the details on how to configure VSCode IDE, +develop a new component, and debug individual components. + +For convenience, this guide assumes you are using the Oracle VirtualBox-based +VM running MicroK8s Kubernetes platform as described in the +[Deployment Guide](./1-0-deployment.md). +BEsides, it assumes you installed the appropriate Python and PyEnv as +described in [2.1. Configure Python Environment](./2-1-python-environment.md). ## Table of Content: - [3.1. Configure VSCode and Connect to the VM](./3-1-configure-vscode.md) -- [3.2. Development Commands, Tricks, and Hints (WORK IN PROGRESS)](./3-2-develop-cth.md) +- [3.2. Developing a new component: Forecaster (WORK IN PROGRESS)](./3-2-develop-new-component.md) - [3.3. Debugging individual components in VSCode](./3-3-debug-comp.md) - -- [3.X. Developing a new component: Forecaster (WORK IN PROGRESS)](./3-X-develop-new-component.md) +- [3.4. Development Commands, Tricks, and Hints (WORK IN PROGRESS)](./3-4-develop-cth.md) diff --git a/tutorial/3-X-develop-new-component.md b/tutorial/3-2-develop-new-component.md similarity index 91% rename from tutorial/3-X-develop-new-component.md rename to tutorial/3-2-develop-new-component.md index 403527335af2e66af497ee6aa4e3077e27ca5a0c..8d39b56a85e9eae871c49149fea9d85691083126 100644 --- a/tutorial/3-X-develop-new-component.md +++ b/tutorial/3-2-develop-new-component.md @@ -1,7 +1,7 @@ -# 3.X. Developing a new component: Forecaster (WORK IN PROGRESS) +# 3.2. Developing a new component: Forecaster (WORK IN PROGRESS) -## 3.X.1. Preliminary requisites +## 3.2.1. Preliminary requisites As any microservice-based architecture, the components of TeraFlowSDN can be implemented using different programming languages. For the sake of simplicity, and given it is the most widely used programming language in TeraFlow, this tutorial page assumes the reader will use Python. @@ -10,15 +10,15 @@ This tutorial assumes you hace successfully completed the steps in [3.1. Configure VSCode and Connect to the VM](./3-1-configure-vscode.md) to prepare your environment. -## 3.X.2. Create the component folder structure +## 3.2.2. Create the component folder structure The source code of each component of TeraFlowSDN is hosted in a particular folder within the `src` folder. Within that folder, typically, 3 subfolders are created: - Folder `client`: contains a client implementation that the rest of components can use to interact with the component. - See details in [3.X.4. Create the component client](./3-X-develop-new-component.md#3x4-create-the-component-client). + See details in [3.2.4. Create the component client](./3-X-develop-new-component.md#3x4-create-the-component-client). - Folder `service`: contains the implementation of the service logic. - See details in [3.X.5. Create the component service](./3-X-develop-new-component.md#3x5-create-the-component-service). + See details in [3.2.5. Create the component service](./3-X-develop-new-component.md#3x5-create-the-component-service). - Folder `tests`: contains the set of unitary tests to be executed over the component to ensure it is properly implemented. - See details in [3.X.6. Create the component tests](./3-X-develop-new-component.md#3x6-create-the-component-tests). + See details in [3.2.6. Create the component tests](./3-X-develop-new-component.md#3x6-create-the-component-tests). - File `__init__.py`: defines the component as a sub-package of TeraFlowSDN to facilitate imports. - File `.gitlab-ci.yml`: defines the GitLab CI/CD settings to build, test, and deploy the component in an automated manner. - File `Config.py`: contains particular configuration settings and constants for the component. @@ -33,7 +33,7 @@ scripts/create_component.sh forecaster ``` -## 3.X.3. gRPC Proto messages and services +## 3.2.3. gRPC Proto messages and services The components, e.g., microservices, of the TeraFlowSDN controller, in general, use a gRPC-based open API to interoperate. All the protocol definitions can be found in sub-folder `proto` within the root project folder. For additional details on gRPC, visit the official web-page [gRPC](https://grpc.io/). @@ -48,7 +48,7 @@ For instance, the _proto_ file for the `forecaster` component being developed in Takes a service identifier as parameter, computes the forecast for the connections of that service, and retrieves a value indicating if the resources can support the demand. -## 3.X.4. Create the component client +## 3.2.4. Create the component client Each component has, by default, a pre-defined client that other components can import to inter-communicate. The client module, by default, is named as the component's name concatenated with `client`, and written in CamelCase. For instance, the client for the `forecaster` component would be `ForecasterClient.py`. @@ -64,7 +64,7 @@ Create file `` -## 3.X.3. Connect VSCode to the VM through "Remote SSH" extension +## 3.2.3. Connect VSCode to the VM through "Remote SSH" extension - Right-click on "TFS-VM" - Select "Connect to Host in Current Window" - Reply to the questions asked @@ -79,7 +79,7 @@ __Note__: if you get a connection error message, the reason might be due to wron and retry connection. -## 3.X.4. Add SSH key to prevent typing the password every time +## 3.2.4. Add SSH key to prevent typing the password every time This step creates an SSH key in the VM and installs it on the VSCode to prevent having to type the password every time. - In VSCode (connected to the VM), click menu "Terminal > New Terminal" @@ -117,7 +117,7 @@ Host TFS-VM - From now, VSCode will use the identity file to connect to the TFS-VM instead of the user's password. -## 3.X.5. Install VSCode Python Extension (in VSCode server) +## 3.2.5. Install VSCode Python Extension (in VSCode server) This step installs Python extensions in VSCode server running in the VM. - In VSCode (connected to the VM), click left button "Extensions" diff --git a/tutorial/3-2-develop-cth.md b/tutorial/3-4-develop-cth.md similarity index 88% rename from tutorial/3-2-develop-cth.md rename to tutorial/3-4-develop-cth.md index 1b2a4690a3177628e18a4ca6f77365f515d6dcc5..e4525b9361bf2aa3976b5a29d83ed4897cded6ab 100644 --- a/tutorial/3-2-develop-cth.md +++ b/tutorial/3-4-develop-cth.md @@ -1,4 +1,4 @@ -# 3.2. Development Commands, Tricks, and Hints (WORK IN PROGRESS) +# 3.4. Development Commands, Tricks, and Hints (WORK IN PROGRESS) ## Building, running, testing and reporting code coverage locally @@ -37,9 +37,9 @@ run script `./expose_ingress_grpc.sh` to test: sudo apt-get install nmap -nmap -p 1010 127.0.0.1 # test if context is reachable +nmap -p 1010 147.0.0.1 # test if context is reachable should retrieve something like: -$ nmap -p 1010 127.0.0.1 +$ nmap -p 1010 147.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2022-07-29 15:06 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00035s latency). diff --git a/tutorial/README.md b/tutorial/README.md index 2d3b1050fc09b2b3e7a26ce20360c67a7c3256dc..69a3344393398e8141a6657546c24f375c0c3b7c 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -32,12 +32,14 @@ OSG team through - [1.3. Deploy TeraFlowSDN over MicroK8s](./1-3-deploy-tfs.md) - [1.4. Access TeraFlowSDN WebUI and Grafana Dashboards](./1-4-access-webui.md) - [1.5. Show Deployment and Log per Component](./1-5-deploy-logs-troubleshooting.md) -- [2. Run Experiments Guide (WORK IN PROGRESS)](./2-0-run-experiments.md) +- [2. Run Experiments Guide](./2-0-run-experiments.md) - [2.1. Configure the Python environment](./2-1-python-environment.md) - [2.2. OFC'22 Demo - Bootstrap devices, Monitor device Endpoints, Manage L3VPN Services](./2-2-ofc22.md) - [2.3. OECC/PSC'22 Demo (WORK IN PROGRESS)](./2-3-oeccpsc22.md) - - [2.4. ECOC'22 Demo (PENDING)](./2-4-ecoc22.md) + - [2.4. ECOC'22 Demo - Disjoint DC-2-DC L2VPN Service](./2-4-ecoc22.md) - [2.5. NFV-SDN'22 Demo (PENDING)](./2-5-nfvsdn22.md) - [3. Development Guide (WORK IN PROGRESS)](./3-0-development.md) - [3.1. Configure VSCode and Connect to the VM](./3-1-configure-vscode.md) - - [3.2. Development Commands, Tricks, and Hints (WORK IN PROGRESS)](./3-2-develop-cth.md) + - [3.2. Developing a new component: Forecaster (WORK IN PROGRESS)](./3-4-develop-new-component.md) + - [3.3. Debugging individual components in VSCode](./3-3-debug-comp.md) + - [3.4. Development Commands, Tricks, and Hints (WORK IN PROGRESS)](./3-2-develop-cth.md)