From 679c8929ba3e5524a72ae6cdf7d12db2856bdf9d Mon Sep 17 00:00:00 2001
From: Hans Thienpondt
Date: Mon, 8 Sep 2025 21:24:39 +0000
Subject: [PATCH 1/2] fix peering1 -> pe1 hostname
---
.../srlinux/beginner/nos-srl-activity-04.md | 32 +++++++++----------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/docs/nos/srlinux/beginner/nos-srl-activity-04.md b/docs/nos/srlinux/beginner/nos-srl-activity-04.md
index fdc6a0b..b1aef24 100644
--- a/docs/nos/srlinux/beginner/nos-srl-activity-04.md
+++ b/docs/nos/srlinux/beginner/nos-srl-activity-04.md
@@ -15,27 +15,27 @@ tags:
| **Short Description** | Re-direct traffic to another temporary destination like firewall or packet inspector
Example usecases include: a temporary firewall and SDN controlled path injection |
| **Difficulty** | Beginner |
| **Tools used** | [gRIBIc](https://gribic.kmrd.dev/) |
-| **Topology Nodes** | :material-router: peering1, :material-router: peering2 |
+| **Topology Nodes** | :material-router: pe1, :material-router: peering2 |
| **References** | [gRPC website](https://grpc.io/) [Openconfig gRIBI Specification](https://github.com/openconfig/gribi) [SR Linux documentation](https://documentation.nokia.com/srlinux/) [gNxI protobuf reference](https://gnxi.srlinux.dev/) [gRIBIc client](https://gribic.kmrd.dev/) |
-A temporary firewall application is installed behind `peering1` and traffic for a specific prefix on `peering2` should be temporarily re-routed to this application. After some time, the re-routing should be removed. Your task is to program a route dynamically using APIs on `peering2` for a prefix and later remove it.
+A temporary firewall application is installed behind `pe1` and traffic for a specific prefix on `peering2` should be temporarily re-routed to this application. After some time, the re-routing should be removed. Your task is to program a route dynamically using APIs on `peering2` for a prefix and later remove it.
## Objective
-We will create a loopback on `peering1` and assume the loopback IP as the IP of the firewall. Our task is to route traffic from `peering2` to the loopback IP on `peering1` using an on-demand injected route with a specific next hop.
+We will create a loopback on `pe1` and assume the loopback IP as the IP of the firewall. Our task is to route traffic from `peering2` to the loopback IP on `pe1` using an on-demand injected route with a specific next hop.
```
- peering2----------------------------------peering1
+ peering2----------------------------------pe1
(LB: 22.10.22.10/32) (LB: 31.10.31.11/32)
(NH: 10.64.51.1) (NH: 10.64.51.2)
```
In this activity, we will:
-1. Create loopback interfaces on both `peering1` and `peering2` nodes.
-2. On `peering1` node, we will create a static route to reach the `peering2` loopback.
-3. Dynamically inject a route using API on `peering2` to reach `peering1` loopback.
+1. Create loopback interfaces on both `pe1` and `peering2` nodes.
+2. On `pe1` node, we will create a static route to reach the `peering2` loopback.
+3. Dynamically inject a route using API on `peering2` to reach `pe1` loopback.
4. Ping between the 2 loopbacks.
5. Dynamically remove the injected route
@@ -117,9 +117,9 @@ This gRIBI payload includes the following parameters:
**You should read these tasks from top-to-bottom before beginning the activity**.
-We will create loopbacks on `peering1` and `peering2`. On `peering1`, we will create a static route to reach `peering2` loopback.
+We will create loopbacks on `pe1` and `peering2`. On `pe1`, we will create a static route to reach `peering2` loopback.
-### Configure loopback on `peering1` (an SR OS router)
+### Configure loopback on `pe1` (an SR OS router)
Run `edit-config private` to enter the candidate mode and then `commit` after changes are completed.
@@ -176,8 +176,8 @@ set / interface lo1 subinterface 0 ipv4 address 22.10.22.10/32
```
///
-### Configure static route on `peering1`
-Create a static route on `peering1` to reach the loopback on `peering2`.
+### Configure static route on `pe1`
+Create a static route on `pe1` to reach the loopback on `peering2`.
/// tab | cmd
@@ -196,7 +196,7 @@ admin show configuration full-context | match static
/// tab | expected output
``` bash
-A:admin@g15-peering1# admin show configuration full-context | match static
+A:admin@g15-pe1# admin show configuration full-context | match static
/configure router "Base" static-routes route 22.10.22.10/32 route-type unicast next-hop "10.64.51.2" admin-state enable
```
///
@@ -315,13 +315,13 @@ As expected, there are no gRIBI routes that are currently installed.
### Inject route on `peering2`
-To reach `peering1` loopback IP, there should be a route on `peering2` with a next hop. This is typically advertised in a routing protocol like OSPF, ISIS, BGP or manually created as a static route.
+To reach `pe1` loopback IP, there should be a route on `peering2` with a next hop. This is typically advertised in a routing protocol like OSPF, ISIS, BGP or manually created as a static route.
Your task is to inject this route using an API call using gRPC gRIBI service.
After a successful ping is verified, remove the injected route using API call.
-Prepare the gRIBI payload to inject the route for the loopback IP on `peering1`.
+Prepare the gRIBI payload to inject the route for the loopback IP on `pe1`.
Before injecting the route, check if there are any existing routes to this destination.
@@ -339,7 +339,7 @@ show network-instance default route-table ipv4-unicast prefix 31.10.31.11/32
```
///
-Using gRIBIc, inject a route into `peering2` RIB to reach `peering1` loopback 31.10.31.11/32
+Using gRIBIc, inject a route into `peering2` RIB to reach `pe1` loopback 31.10.31.11/32
Use `gRIBI Modify` RPC to inject this route to `peering2`. Replace `file.yml` with your payload file.
@@ -405,7 +405,7 @@ A:g15-peering2# show network-instance default route-table ipv4-unicast prefix 31
### Test connectivity between the loopback addresses
Now that we created a route to reach the loopbacks on either nodes, we should be able to ping between the loopbacks.
-Try ping on `peering2` towards `peering1` loopback 31.10.31.11/32
+Try ping on `peering2` towards `pe1` loopback 31.10.31.11/32
/// tab | cmd
From 13d1210a47ae5d7764130bf42f13ed0b23c71f71 Mon Sep 17 00:00:00 2001
From: James Cumming
Date: Wed, 15 Oct 2025 21:28:02 -0400
Subject: [PATCH 2/2] Updated for SRX APAC 2025
---
README.md | 2 +-
clab/srx.clab.yml | 20 +++---
docs/eda/advanced/service-automation.md | 34 ++++++----
docs/eda/index.md | 6 +-
docs/index.md | 34 +++++-----
docs/nos/index.md | 16 ++---
.../nos/sros/beginner/9-custom-generic-log.md | 5 ++
...nos-sros-show-latest-commit-activity-14.md | 10 +--
docs/nsp/beginner/60-nsp-alarm-ack.md | 63 ++++++++++++-------
docs/nsp/index.md | 20 +++---
.../71-nsp-ne-config-snapshot-rollback.md | 12 ++--
docs/overrides/main.html | 6 ++
docs/overrides/partials/copyright.html | 2 +-
docs/stylesheets/feedback.css | 12 ++++
mkdocs.yml | 6 +-
15 files changed, 148 insertions(+), 100 deletions(-)
diff --git a/README.md b/README.md
index 5144bd8..d583e5a 100644
--- a/README.md
+++ b/README.md
@@ -4,4 +4,4 @@ This repository contains example code used at the SReXperts conferences.
Please read the license file [here](./LICENSE)
-Looking for the Hackathon? find it [here](https://hackathon.srexperts.net)
+Looking for the SReXplore event? find it [here](https://srexplore.srexperts.net)
diff --git a/clab/srx.clab.yml b/clab/srx.clab.yml
index d6d574e..b024f12 100644
--- a/clab/srx.clab.yml
+++ b/clab/srx.clab.yml
@@ -70,7 +70,7 @@ topology:
vRR:
kind: nokia_srlinux
license: /opt/srexperts/license-srlinux24.txt
- type: ixrx1b
+ type: ixr-x1b
mgmt-ipv4: 10.128.${INSTANCE_ID}.13
startup-config: configs/srl/vRR.cfg
ports:
@@ -336,7 +336,7 @@ topology:
# DC1
spine11:
kind: nokia_srlinux
- type: ixrh2
+ type: ixr-h2
group: spine
mgmt-ipv4: 10.128.${INSTANCE_ID}.31
startup-config: configs/srl/__clabNodeName__.cfg
@@ -351,7 +351,7 @@ topology:
graph-level: "1"
spine12:
kind: nokia_srlinux
- type: ixrh2
+ type: ixr-h2
group: spine
mgmt-ipv4: 10.128.${INSTANCE_ID}.32
startup-config: configs/srl/__clabNodeName__.cfg
@@ -366,7 +366,7 @@ topology:
graph-level: "1"
leaf11:
kind: nokia_srlinux
- type: ixrd2l
+ type: ixr-d2l
group: leaf
mgmt-ipv4: 10.128.${INSTANCE_ID}.33
binds:
@@ -384,7 +384,7 @@ topology:
graph-level: "1"
leaf12:
kind: nokia_srlinux
- type: ixrd2l
+ type: ixr-d2l
group: leaf
mgmt-ipv4: 10.128.${INSTANCE_ID}.34
startup-config: configs/srl/__clabNodeName__.cfg
@@ -399,7 +399,7 @@ topology:
graph-level: "1"
leaf13:
kind: nokia_srlinux
- type: ixrd2l
+ type: ixr-d2l
group: leaf
mgmt-ipv4: 10.128.${INSTANCE_ID}.35
binds:
@@ -494,7 +494,7 @@ topology:
# DC2
leaf21:
kind: nokia_srlinux
- type: ixrd2l
+ type: ixr-d2l
group: leaf
mgmt-ipv4: 10.128.${INSTANCE_ID}.41
startup-config: configs/srl/leaf21.cfg
@@ -533,7 +533,7 @@ topology:
# MISC
ixp1:
kind: nokia_srlinux
- type: ixrd2l
+ type: ixr-d2l
group: leaf
mgmt-ipv4: 10.128.${INSTANCE_ID}.51
startup-config: configs/srl/ixp1.cfg
@@ -548,7 +548,7 @@ topology:
graph-level: "1"
agg1:
kind: nokia_srlinux
- type: ixrd2l
+ type: ixr-d2l
group: leaf
mgmt-ipv4: 10.128.${INSTANCE_ID}.52
startup-config: configs/srl/agg1.cfg
@@ -562,7 +562,7 @@ topology:
peering2:
kind: nokia_srlinux
license: /opt/srexperts/license-srlinux24.txt
- type: ixrx3b
+ type: ixr-x3b
mgmt-ipv4: 10.128.${INSTANCE_ID}.53
startup-config: configs/srl/peering2.cfg
ports:
diff --git a/docs/eda/advanced/service-automation.md b/docs/eda/advanced/service-automation.md
index 89186a4..65f3b41 100644
--- a/docs/eda/advanced/service-automation.md
+++ b/docs/eda/advanced/service-automation.md
@@ -35,7 +35,7 @@ This exercise shares the same goal as [Part 3](../beginner/virtual-networks.md):
--8<-- "docs/eda/intermediate/api.md:api-intro"
-EDA users can use any REST API client to interact with the EDA API, and in the [EDA REST API](../intermediate/api.md) exercise you got a chance to use the **Postman** client to interact with the EDA API. In this advanced exercise you will adopt a more sophisticated and powerful approach, you will use Python and its httpx client library as a REST API client, and for extra kinks you will consume the EDA API via [Pydantic][pydantic] models generated for the EDA OpenAPI specification.
+EDA users can use any REST API client to interact with the EDA API, and in the [EDA REST API](../intermediate/api.md) exercise you had a chance to use the **Postman** client to interact with the EDA API. In this advanced exercise you will adopt a more sophisticated and powerful approach, you will use Python and its `httpx` client library as a REST API client, and for extra fun you will consume the EDA API via [Pydantic][pydantic] models generated for the EDA OpenAPI specification.
/// admonition | Pydantic and OpenAPI
type: subtle-note
@@ -68,7 +68,12 @@ Before diving into the task of creating a **Virtual Network** with Python, let's
### Interface Pydantic Model
-If you navigate in the EDA Ui to the -{{icons.topology()}}- → -{{icons.circle(letter="I", text="Interfaces")}}- and click for example on `leaf11-ethernet-1-49`, or visit the **EDA API documentation** (:octicons-question-24: icon in the top right), you'll notice that the resource definitions appear the same, only the format differs (YAML vs. JSON):
+In EDA, all resources are schema driven, this means, that the representation of a resource may look different, but the structure is exactly the same, no matter what automation interface you use. For example, let's consider the Interface resource as it appears in the UI and in the API documentation.
+
+In the EDA UI go to the -{{icons.topology()}}- → -{{icons.circle(letter="I", text="Interfaces")}}- and click on `leaf11-ethernet-1-49` to open the schema form.
+In the other tab visit the **EDA API documentation** (:octicons-question-24: icon in the top right of the page) and open the **Interface Application API** tab.
+
+You'll notice that the resource definition appears the same, only the format differs (YAML vs. JSON); see the screenshots below:
/// tab | EDA UI Interface yaml definition
@@ -81,12 +86,13 @@ If you navigate in the EDA Ui to the -{{icons.topology()}}- → -{{icons.circle(
///
-Since EDA models its resources as Kubernetes Custom Resources (CRs), each object follows a familiar structure with four key elements:
+Since EDA models its resources after the Kubernetes Custom Resources (CRs), each object follows a structure familiar to Kubernetes users:
- `apiVersion`: The API group and API version the object belongs to
-- `kind`: What kind of object you want to create
+- `kind`: What kind of object it is
- `metadata`: Identification fields like a `name` string and a `namespace`, plus auxiliary metadata like `labels` and `annotations`.
- `spec`: provides the specification for the resource - its configuration.
+- `status`: (not shown here) provides state/status information about the resource, such as its current state, the nodes it is deployed on or health.
With Pydantic classes you can define EDA resources using native Python code, providing type validation, structure enforcement, and a more native development experience.
@@ -114,22 +120,22 @@ spec:
/// tab | Interface Pydantic definition
```python
-import pydantic_eda.com.nokia.eda.interfaces.v1alpha1 as iface # (1)!
+import pydantic_eda.apps.interfaces.v1alpha1.models as iface # (1)!
-def interface(ns: str, name: str) -> iface.Interface: # (2)!
+def interface(ns: str, name: str) -> iface.Interface: #(2)!
iface_ = iface.Interface(
apiVersion="interfaces.eda.nokia.com/v1",
kind="Interface",
- metadata=iface.InterfaceMetadata( # (3)!
+ metadata=iface.InterfaceMetadata( #(3)!
name=name,
namespace=ns,
),
- spec=iface.SpecModel( # (4)!
+ spec=iface.InterfaceSpec(
description="inter-switch link to spine11",
mtu=9198,
members=[
- iface.Member(
+ iface.InterfaceSpecMember(
interface="ethernet-1-49",
node="g15-leaf11",
),
@@ -140,10 +146,10 @@ def interface(ns: str, name: str) -> iface.Interface: # (2)!
return iface_
```
-1. The first thing we do is to import the Pydantic classes already generated.
+1. The first thing we do is importing the Pydantic classes that have been already generated by the EDA community.
2. Our function takes as arguments the `namespace` and the `name` of the CR, and returns the **Interface** object.
3. **Metadata** is modeled as a class and takes the `namespace` and `name` as input.
-4. The `spec` is also modeled as the **SpecModel** class.
+4. The `spec` is also modeled as the **InterfaceSpec** class.
///
Click at each annotation :material-plus-circle: to see a explanation of that relevant section.
@@ -243,8 +249,10 @@ def virtualnetwork(ns: str, name: str) -> service.VirtualNetwork:
vnet = service.VirtualNetwork(
apiVersion="services.eda.nokia.com/v1",
kind="VirtualNetwork",
- metadata=service.VirtualNetworkMetadata(name=name, namespace=ns, labels={"role": "exercise"}),
- spec=service.SpecModel17(
+ metadata=service.VirtualNetworkMetadata(
+ name=name, namespace=ns, labels={"role": "exercise"}
+ ),
+ spec=service.VirtualNetworkSpec(
routers=[
router,
],
diff --git a/docs/eda/index.md b/docs/eda/index.md
index 2140fe3..08bb59b 100644
--- a/docs/eda/index.md
+++ b/docs/eda/index.md
@@ -18,7 +18,7 @@ While the concept of declarative intents or blueprints is not new, in EDA made s
And it would be a miss to keep EDA anchored to Nokia-only devices, that is why we ensured that EDA core is **multivendor** and users can leverage EDA superpowers with other vendors and their devices and APIs[^1].
-At SReXperts Hackathon, you get a unique chance to spend a day with EDA by venturing into the exercises meticulously crafted by the EDA team and be the judge of its capabilities.
+At this SReXplore event, you get a unique chance to spend a day with EDA by venturing into the exercises meticulously crafted by the EDA team and be the judge of its capabilities.
## How to get through the exercises?
@@ -172,7 +172,7 @@ The workflow below demonstrates how a VLAN resource gets added to the transactio
## Namespace selector
-When you first login to EDA as administrator, you have access to all available EDA namespaces. Since in this hackathon you will only work in the default `eda` namespace, you can select it using the namespace selector as shown below:
+When you first login to EDA as administrator, you have access to all available EDA namespaces. Since in this event you will only work in the default `eda` namespace, you can select it using the namespace selector as shown below:

@@ -182,7 +182,7 @@ By switching from All Namespaces to the `eda` namespace the UI will fill in the
As you go through the exercises, you will create and modify quite a few resources in EDA. It might happen that the resources from one unfinished challenge will interfere with the tasks you attempt next.
-In such cases you can manually delete conflicting resources, but if you want to reset EDA to a state as it was at the beginning of the hackathon, you can easily do this by running the following command from the lab server:
+In such cases you can manually delete conflicting resources, but if you want to reset EDA to a state as it was at the beginning of the event, you can easily do this by running the following command from the lab server:
```bash
bash /opt/srexperts/restore-eda.sh
diff --git a/docs/index.md b/docs/index.md
index 7736be9..c0d5e15 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -3,24 +3,24 @@ hide:
- navigation
---
-# Welcome to the Hackathon at SReXperts 2025
+# Welcome to the SReXplore event at SReXperts 2025
-Welcome to the 2025 SReXperts hackathon.
+Welcome to the 2025 SReXplore event at SReXperts.
-We are very glad to welcome you to this special event, the 20th anniversary for SReXperts (and the 5th for the hackathon).
+We are very glad to welcome you to this special event, the 20th anniversary for SReXperts (and the 5th for the event).
-Nokia prides itself on the excellent technical products, solutions that we deliver to the market, and this hackathon is no exception. A large team of engineers,
+Nokia prides itself on the excellent technical products, solutions that we deliver to the market, and this event is no exception. A large team of engineers,
developers and product managers have been working hard to deliver what, we'll hope you agree, is a challenging and informative set of activities to challenge
you, no matter what you experience level.
## Open to all and something for everyone
-Whether you're a relative novice to Nokia's products, or a seasoned expert, there is something in this hackathon for you! All you will need is your trusty laptop,
+Whether you're a relative novice to Nokia's products, or a seasoned expert, there is something in this event for you! All you will need is your trusty laptop,
an afternoon of focus and possibly some coffee (supplied!) and you should find something to benefit both you and your organizations.
## Getting started
-This page is your starting point into the hackathon, it should get you familiar with the lab environment provided by Nokia, and provide an overview of the suggested sample activities.
+This page is your starting point into the event, it should get you familiar with the lab environment provided by Nokia, and provide an overview of the suggested sample activities.
**Please read this page all the way through before attempting any of the activities.**
@@ -32,8 +32,8 @@ Need help, not a problem, pop your hand in the air and an eager expert will be t
## Lab Environment
-For this hackathon each (group of) participant(s) will receive their own dedicated cloud instance (VM) running a copy of the generic lab topology. You will see this called "your VM",
-"your group's hackathon VM", "your instance", "your server" and other similar phrases in the activities. They all mean the same thing, your own dedicated could instance.
+For this event each (group of) participant(s) will receive their own dedicated cloud instance (VM) running a copy of the generic lab topology. You will see this called "your VM",
+"your group's hackathon VM", "your group's event VM", "your instance", "your server" and other similar phrases in the activities. They all mean the same thing, your own dedicated cloud instance.
If everything went according to plan, you should have received a physical piece of paper which contains:
@@ -42,13 +42,13 @@ If everything went according to plan, you should have received a physical piece
- HTTPS URL's for this repository and access to a web based IDE in case you don't have one installed on your operating system.
/// warning
-The public cloud compute instances will be destroyed once the hackathon is concluded.
+The public cloud compute instances will be destroyed once the event is concluded.
Please make sure to backup any code, config, etc. offline (e.g. onto your laptop) if you'd like to keep it after the hacakthon.
///
### Group ID
-Please refer to the paper provided by the hackathon session leader. If nothing has been provided, not a problem, pop your hand in the air and someone will allocate you one before you can say "Aequeosalinocalcalinoceraceoaluminosocupreovitriolic".
+Please refer to the paper provided by the event session leader. If nothing has been provided, not a problem, pop your hand in the air and someone will allocate you one before you can say "Aequeosalinocalcalinoceraceoaluminosocupreovitriolic".
| Group ID | hostname instance |
| --- | --- |
@@ -59,7 +59,7 @@ Please refer to the paper provided by the hackathon session leader. If nothing h
### SSH
-The simplest way to get going is to use your SSH client to connect to your group's hackathon VM instance and work from there. All tools and applications are pre-installed and you will have direct access to your entire network.
+The simplest way to get going is to use your SSH client to connect to your group's event VM instance and work from there. All tools and applications are pre-installed and you will have direct access to your entire network.
SSH is also important if you want to driectly access your network from your laptop but more on that later.
@@ -70,18 +70,18 @@ SSH is also important if you want to driectly access your network from your lapt
| password | `refer to the paper provided or the slide presented` |
/// tip
-If you're familiar with SSH and wish to setup passwordless access, you can use `ssh-keygen -h` to generate a public/private key pair and then `ssh-copy-id` to copy it towards your group's hackathon instance.
+If you're familiar with SSH and wish to setup passwordless access, you can use `ssh-keygen -h` to generate a public/private key pair and then `ssh-copy-id` to copy it towards your group's event instance.
///
### WiFi
-WiFi is important here. Without it your hackathon experience is going to be rather dull. To connect to the hackthon event's WiFi, refer to the paper provided or the slide presented.
+WiFi is important here. Without it your event experience is going to be rather dull. To connect to the hackthon event's WiFi, refer to the paper provided or the slide presented.
### Topology
-When accessing your hackathon VM instance you'll find that the [SReXperts GitHub repository](https://github.com/nokia/srexperts) contains all of the documentation, examples, solutions and loads of other great stuff, has already been cloned for you.
+When accessing your event VM instance you'll find that the [SReXperts GitHub repository](https://github.com/nokia/srexperts) contains all of the documentation, examples, solutions and loads of other great stuff, has already been cloned for you.
-In this hackathon, every group has their own complete service-provider network at their disposal. Your network comprises an IP backbone with Provider (P) and Provider Edge (PE) routers, a broadband dial-in network, a peering edge network, an internet exchange point, multiple data-centers and a number of client and subscriber devices. This network is already deployed and provisioned and is ready to go!
+In this event, every group has their own complete service-provider network at their disposal. Your network comprises an IP backbone with Provider (P) and Provider Edge (PE) routers, a broadband dial-in network, a peering edge network, an internet exchange point, multiple data-centers and a number of client and subscriber devices. This network is already deployed and provisioned and is ready to go!
*Don't worry: This is your personal group network, you cannot impact any other groups.*
@@ -112,7 +112,7 @@ The above topology contains a number of functional blocks to help you in areas y
### Accessing Topology nodes
-#### From your group's hackathon instance VM
+#### From your group's event instance VM
To access the lab nodes from within the VM, users should identify the names of the deployed nodes using the `sudo containerlab inspect -a` command. You will notice they all start with `clab-srexperts-`. Your entire network is [powered by ContainerLab](https://containerlab.dev).
@@ -1212,4 +1212,4 @@ gh repo clone nokia/SReXperts
## Thanks and contributions
-As you can imagine, creating the activities that make up this hackathon is a lot of work. The hackathon team would like to thank the following team members (in alphabetical order) for their contributions: Asad Arafat, Bhavish Khatri, Diogo Pinheiro, Guilherme Cale, Hans Thienpondt, James Cumming, Joao Machado, Kaelem Chandra, Laleh Kiani, Louis Van Eeckhoudt, Maged Makramalla, Miguel Redondo Ferrero, Roman Dodin, Saju Salahudeen, Samier Barguil, Shafkat Waheed, Shashi Sharma, Simon Tibbitts, Siva Sivakumar, Subba Konda, Sven Wisotzky, Thomas Hendriks, Tiago Amado. Zeno Dhaene, Tim Raphael and Vasileios Tekidis
+As you can imagine, creating the activities that make up this event is a lot of work. The event team would like to thank the following team members (in alphabetical order) for their contributions: Asad Arafat, Bhavish Khatri, Diogo Pinheiro, Guilherme Cale, Hans Thienpondt, James Cumming, Joao Machado, Kaelem Chandra, Laleh Kiani, Louis Van Eeckhoudt, Maged Makramalla, Miguel Redondo Ferrero, Roman Dodin, Saju Salahudeen, Samier Barguil, Shafkat Waheed, Shashi Sharma, Simon Tibbitts, Siva Sivakumar, Subba Konda, Sven Wisotzky, Thomas Hendriks, Tiago Amado. Zeno Dhaene, Tim Raphael and Vasileios Tekidis
diff --git a/docs/nos/index.md b/docs/nos/index.md
index c8389c0..a762789 100644
--- a/docs/nos/index.md
+++ b/docs/nos/index.md
@@ -1,6 +1,6 @@
# Network Operating Systems (NOS)
-This section contains the activities for the NOS stream of the 2025 SReXperts hackathon.
+This section contains the activities for the NOS stream of the SReXplore event at SReXperts 2025.
Network Operating Systems (NOS) sit right at the heart of the Internet and operate the critical infrastructure of both countries and organizations. They provide a very specialized software system capable of making split second decisions to ensure network traffic is directed to the right location, at the right time, with the right priority and without compromise.
@@ -14,7 +14,7 @@ Of course, progress doesn't stop, and Network Operating Systems need to evolve f
Nokia has two modern, model-driven, programmable Network Operating Systems in the IP portfolio: [SR OS](https://www.nokia.com/ip-networks/service-router-operating-system-nos/) focused on the core infrastructure of network operators, and [SR Linux](https://www.nokia.com/ip-networks/service-router-linux-NOS/) focused on the data-center.
-In this hackathon you have the opportunity to undertake challenges on both Network Operating Systems with a focus on model-driven automation and programmability.
+In this event you have the opportunity to undertake challenges on both Network Operating Systems with a focus on model-driven automation and programmability.
## Tackling the activities
@@ -22,7 +22,7 @@ A number of activities have been created for you to follow, separated by our rou
### Split by Network Operating System (NOS): SR OS and SR Linux
-For organizational purposes, we have separated those activities focusing on SR OS from those focusing on SR Linux. That doesn't mean that you need to pick one NOS and stick with it. The hackathon is a great opportunity to both expand your knowledge on familiar NOS' and to get exposure on unfamiliar ones.
+For organizational purposes, we have separated those activities focusing on SR OS from those focusing on SR Linux. That doesn't mean that you need to pick one NOS and stick with it. The event is a great opportunity to both expand your knowledge on familiar NOS' and to get exposure on unfamiliar ones.
### Standalone activities and not in order
@@ -34,9 +34,9 @@ Each activity is a stand alone use-case. Each has a scenario, a set of objectiv
OK, famous last words we know but, each group's network is totally self-contained. No changes you make will effect any other group's activities and no-one will get upset if you break everything, so dive right in and don't be afraid to try it and see.
-### Help us make the hackathon the best it can be
+### Help us make the event the best it can be
-Each year we review the feedback and lessons learned from the previous years hackathon as we want to continually deliver the best, and most useful, experience we can. To help us do this we have two asks:
+Each year we review the feedback and lessons learned from the previous years event as we want to continually deliver the best, and most useful, experience we can. To help us do this we have two asks:
- You will notice, next to each task there is a blue `Start` button. When you start to attempt each task, would you please click the button.
- When you complete an activity (or even if you don't manage to complete it), you will find a very short questionairre at the end. Would you please fill it out as honestly as you feel able to, we won't be offended if you think something was awful, and equally we like praise as much as the next person!
@@ -49,7 +49,7 @@ Each group has their own complete network, including an IP core running segment
The NOS stream activities focus on the SR OS and SR Linux devices in the network, but many of them also use the Linux client and subscriber devices as well.
-To gain access to any of the devices you can either connect using SSH to your groups hackathon server (also references as hackathon VM in a number of the activities) or use the ports mapped directly to the node and service you want to connect to from your own laptop. More details are available on the [main page of this hackathon site](../index.md).
+To gain access to any of the devices you can either connect using SSH to your groups event server (also referenced as hackathon VM in a number of the activities) or use the ports mapped directly to the node and service you want to connect to from your own laptop. More details are available on the [main page of this site](../index.md).
**Refer to your handout for the username and passwords of any of the equipment in your network.**
@@ -59,11 +59,11 @@ If you need help at anytime you have a few options:
- Take a look at the reference material and hints provided in the activities.
-- Ask other members of your group, or other groups for help. Collaboration is one of the best elements of the hackathon.
+- Ask other members of your group, or other groups for help. Collaboration is one of the best elements of the event.
- Put your hand up or otherwise grab the attention of one of the team to assist you (that is what they are there for so please use them!)
## Ask us (almost) anything
-Not only are the team here to help you with anything in the hackathon, but they also have a wide range of knowledge about Nokia, our products, our services and our technologies. Please ask anything that's on your mind.
+Not only are the team here to help you with anything in the event, but they also have a wide range of knowledge about Nokia, our products, our services and our technologies. Please ask anything that's on your mind.
We'd also love to hear from you about what you're doing with automation and programmability in your network and any of the amazing or more challenging things you are working on.
diff --git a/docs/nos/sros/beginner/9-custom-generic-log.md b/docs/nos/sros/beginner/9-custom-generic-log.md
index 3f27b78..78fe538 100644
--- a/docs/nos/sros/beginner/9-custom-generic-log.md
+++ b/docs/nos/sros/beginner/9-custom-generic-log.md
@@ -130,6 +130,7 @@ In the box below you see that the full configuration for setting up the EHS on t
version python3
}
}
+ }
```
2-make-directory for ehs execution results
```
@@ -149,6 +150,7 @@ In the box below you see that the full configuration for setting up the EHS on t
}
}
}
+ }
```
4-filter logs intended to trigger the event handler
```hl_lines="9"
@@ -166,6 +168,7 @@ In the box below you see that the full configuration for setting up the EHS on t
}
}
}
+ }
```
5-event-handler links the script-policy to the ehs that can be triggered by logs
@@ -183,6 +186,7 @@ In the box below you see that the full configuration for setting up the EHS on t
}
}
}
+ }
```
6-event-trigger links the filtered logs to the event-handler
@@ -200,6 +204,7 @@ In the box below you see that the full configuration for setting up the EHS on t
}
}
}
+ }
```
Before proceeding, execute the command to create a results directory on :material-router: PE2:
diff --git a/docs/nos/sros/beginner/nos-sros-show-latest-commit-activity-14.md b/docs/nos/sros/beginner/nos-sros-show-latest-commit-activity-14.md
index 07fae8f..b893084 100644
--- a/docs/nos/sros/beginner/nos-sros-show-latest-commit-activity-14.md
+++ b/docs/nos/sros/beginner/nos-sros-show-latest-commit-activity-14.md
@@ -827,7 +827,7 @@ To do this, you can use Python's [`datetime` module](https://docs.python.org/3.4
!!! warning
- While SROS supports the `datetime` module, it doesn't implement the [`srtptime` function](https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior),
+ While SROS supports the `datetime` module, it doesn't implement the [`strptime` function](https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior),
which would be used in most Python environments to parse the timestamp string into a `datetime` object.
An alternative approach compatible with SROS is to use regular expressions with the [`re` module](https://docs.python.org/3.4/library/re.html#module-re).
Note that the implementation of `re` is also limited on SROS. More details on differences in the implementation are available [here](https://docs.micropython.org/en/latest/library/re.html).
@@ -849,7 +849,7 @@ highest_commit_id = max(connection.running.get_list_keys(path))
path = "/nokia-state:state/system/management-interface/configuration-region[region-name=\"configure\"]/commit-history/commit-id[id=%s]" % highest_commit_id
commit = connection.running.get(path)
-match = re.match("^(\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)\.\\dZ$", str(commit['timestamp']))
+match = re.match(r"^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.\dZ$", str(commit['timestamp']))
commit_year = int(match.group(1))
commit_month = int(match.group(2))
commit_day = int(match.group(3))
@@ -879,7 +879,7 @@ print("{}d {}h {}m {}s ago".format(commit_time_delta_days, commit_time_delta_hou
>>> path = "/nokia-state:state/system/management-interface/configuration-region[region-name=\"configure\"]/commit-history/commit-id[id=%s]" % highest_commit_id
>>> commit = connection.running.get(path)
>>>
->>> match = re.match("^(\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)\.\\dZ$", str(commit['timestamp']))
+>>> match = re.match(r"^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.\dZ$", str(commit['timestamp']))
>>> commit_year = int(match.group(1))
>>> commit_month = int(match.group(2))
>>> commit_day = int(match.group(3))
@@ -922,7 +922,7 @@ for id in sorted(data.keys()):
commit = data[id]
row = []
row.append(id)
- match = re.match("^(\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)\.\\dZ$", str(commit['timestamp']))
+ match = re.match(r"^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.\dZ$", str(commit['timestamp']))
commit_year = int(match.group(1))
commit_month = int(match.group(2))
commit_day = int(match.group(3))
@@ -968,7 +968,7 @@ table.print(rows)
... commit = data[id]
... row = []
... row.append(id)
-... match = re.match("^(\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)\.\\dZ$", str(commit['timestamp']))
+... match = re.match(r"^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.\dZ$", str(commit['timestamp']))
... commit_year = int(match.group(1))
... commit_month = int(match.group(2))
... commit_day = int(match.group(3))
diff --git a/docs/nsp/beginner/60-nsp-alarm-ack.md b/docs/nsp/beginner/60-nsp-alarm-ack.md
index 611d1f7..b55a518 100644
--- a/docs/nsp/beginner/60-nsp-alarm-ack.md
+++ b/docs/nsp/beginner/60-nsp-alarm-ack.md
@@ -92,23 +92,26 @@ It is tempting to skip ahead but tasks may require you to have completed previou
### Get Alarms
-Open NSP WebUI and open `Workflows` found under the `PROGRAMMING` category.
-
-Select `Actions` view.
-
-On the left side, we have two types of actions: `Ad-hoc Actions` and `System Actions`.
-
-Let’s start by getting a list of all major alarms on the network:
+* Open NSP WebUI.
+* Click on `☰` icon on the top left corner to open the so-called hamburger menu and select `Workflows` found under the `PROGRAMMING` category.
+* Click on `Main` → `Dashboard` to open the dropdown menu and select the `Actions` view.
+* On the left, you will see two types of actions: `Ad-hoc Actions` and `System Actions`.
+* Navigate to `System Actions` and search for the `nsp.https` action.
+* Open the `nsp.https` context-menu (three dots on the right) and select `Run`.
+* Provide the `Input` in YAML format as shown below to execute a [RESTCONF](https://www.rfc-editor.org/rfc/rfc8040.html)-compliant `GET` query and click on the `RUN` button to execute the request.
+
+/// note | `nsp.https` input to list **all** alarms
+```yaml
+url: https://restconf-gateway/restconf/data/nsp-fault:alarms/alarm-list/alarm
+method: GET
+```
-* Navigate to the `Systems Actions` and search for the `nsp.https` action.
-* Click on the 3 dots on the right side and choose `Run`.
-* Explore the RESTCONF Alarms API in [Developer Portal](https://network.developer.nokia.com/api-documentation) including the corresponding [Postman collection](https://documenter.getpostman.com/view/26248101/2sAY4uCNvf#de0ea146-e51a-455a-84c5-19f438712103) to find API endpoints to query and acknowledge alarms.
-* Retrieve a list of all major alarms in NSP using RESTCONF by running the `nsp.https` action from WFM WebUI.
+To explore the NSP APIs more deeply, the [Developer Portal](https://network.developer.nokia.com/api-documentation) and the corresponding [Postman collection](https://documenter.getpostman.com/view/26248101/2sAY4uCNvf#de0ea146-e51a-455a-84c5-19f438712103) are good starting points. You will find the API endpoints required to query and acknowledge alarms.
+///
-If you got stuck, find the `nsp.https` action input below to retrieve the list of all major alarms.
+* Now, lets retrieve a list of all major alarms in NSP, by adjusting the `nsp.https` input like this:
-/// details | Possible Solution
- type: success
+/// note | `nsp.https` input to list **major** alarms
```yaml
url: https://restconf-gateway/restconf/operations/nsp-inventory:find
method: POST
@@ -117,36 +120,44 @@ body:
xpath-filter: /nsp-fault:alarms/alarm-list/alarm[perceived-severity = 'major']
include-meta: false
```
+
+While the filtering options available through a standard RESTCONF GET request are quite limited, the NSP-specific operation `nsp-inventory:find` provides support for XPATH filters. By adjusting the path expression, it becomes straightforward to filter for specific attribute values.
///
-Adjust the filter, for example by picking different severity levels like `critical`, `minor`, or `warning`.
-Review the JSON response returned. Try to filter by other alarm attributes, such as alarm-type.
+* Adjust the filter, for example by picking different severity levels like `critical`, `minor`, or `warning` by updating the `xpath-filter` value.
+* Review the JSON response and identify additional attributes to filter on, such as alarm-type. Update the xpath-filter accordingly, and when filtering by alarm-type-id or alarm-type-qualifier, use the values from the initial query to ensure they match existing entries.
-/// details | Possible Solution
- type: success
-Update the `xpath-filter` to match your selection criteria. If you are filtering by `alarm-type-id` or `alarm-type-qualifier`, use the output from your initial query to ensure that the values correspond to existing entries.
+/// note | `nsp.https` input to list alarms of specific `alarm-type` value
```yaml
url: https://restconf-gateway/restconf/operations/nsp-inventory:find
method: POST
body:
input:
- xpath-filter: >-
- /nsp-fault:alarms/alarm-list/alarm[alarm-type-qualifier = 'PeerConnectionDown']
+ xpath-filter: /nsp-fault:alarms/alarm-list/alarm[alarm-type-qualifier = 'PeerConnectionDown']
include-meta: false
```
+
+Make sure your query response includes alarms, since the next step will use YAQL to transform the YAML output.
+
///
### Process Alarm API Response
-Copy the received response and navigate to the `Yaqluator` in the upper right corner of the Actions page. The Yaqluator functionality allows you to quickly prototype YAQL expressions based on the received response. Paste the response on the bottom left side YAML/JSON Context section.
+Copy the response into your clipboard.
+
+/// Warning
+The `COPY` button in the action run dialogue copies the request, not the response! To copy the response use your operating system’s standard shortcuts (on macOS: `CMD-A`, `CMD-C`; on Windows: `CTRL-A`, `CTRL-C`).
+///
-In the upper YAQL Expression section use the following filter expression to get the list of alarm-names:
+Open Yaqluator using the **`.*`** button. Yaqluator lets you quickly prototype YAQL expressions against the received response. Paste the YAML response from your clipboard into the `Context` field (replacing the default `{}`), then enter the following string in the `Expression` field to list the alarm types:
```yaml
$.result.content.get('nsp-inventory:output').data.select($.get('alarm-type-qualifier'))
```
+Click the `EVALUATE` button. The alarm type value for each alarm in the response is shown the `Result` section.
+
Try to filter for other attributes like `alarm-fdn`, `alarm-type-id`, and `ne-id`.
### Create the Workflow
@@ -199,6 +210,10 @@ workflowname:
Adjust workflow name, description, inputs and tasks as needed. You may start by just providing a single `alarmFdn` as input. The workflow itself, could be a single task that is running action `nsp.https` with the corresponding inputs, e.g. `method`, `url`, and `body`.
+/// tip | Pro Tip
+Earlier we warned that the `COPY` button in the action execution dialog does not copy the response. However, it is very useful: Pressing this button copies an instrumentalized task definition into your clipboard, which you can directly paste into your workflow definition.
+///
+
As a next step check the Mistral documentation for the [`with-items`](https://docs.openstack.org/mistral/ocata/dsl/dsl_v2.html#processing-collections) attribute, to process collections. While the update is rather small, your workflow is now able to acknowledge a list of alarms.
If you got stuck, the workflow below provides one way of solving this.
@@ -236,6 +251,8 @@ version: '2.0'
This workflow can be difficult to run as it requires a list of objects as input, and each object must include an attribute called `fdn`. To make execution easier, we will create a user-friendly input form that allows selecting from currently active alarms.
+From the WebUI, a workflow must first be `Validated` and `Created`. At this point it is in `DRAFT` mode. To run it, you need to publish it to `RELEASED`. If you want to make further edits, switch it back to `DRAFT`. When working in Visual Studio Code, you can save time: the workflow extension automatically handles these steps for you.
+
### Add a Workflow Input Form
To provide a user-friendly input form with alarm pickers, you first need to create an ad-hoc action. This action enables the picker component to query the backend for live alarm data.
diff --git a/docs/nsp/index.md b/docs/nsp/index.md
index 58aec7f..ef573b3 100644
--- a/docs/nsp/index.md
+++ b/docs/nsp/index.md
@@ -10,12 +10,12 @@ tags:
# Network Services Platform (NSP)
-This section contains the activities for the NSP stream of the 2025 SReXperts hackathon.
+This section contains the activities for the NSP stream of the SReXplore event at SReXperts 2025.
At Nokia, we’re committed to deliver the best experience — whether you're working with our industry-leading routing hardware, our model-driven
network operating systems (SR OS and SR Linux), or our advanced network management solutions, NSP (Network Services Platform) and EDA.
-During the 2025 Hackathon, you’ll get the chance to explore and experiment with our network technologies - whether it’s through on-box automation
+During the 2025 event, you’ll get the chance to explore and experiment with our network technologies - whether it’s through on-box automation
or integrating open-source tools. But we take it one step further. With Nokia’s Network Services Platform (NSP), you gain a powerful automation
framework that provides end-to-end network visibility and enables you to provision, monitor, and assure your services and infrastructure with confidence.
@@ -35,11 +35,11 @@ Development Environment by choice. If you have the ability to install VS Code on
And it's fun! If you are into programming, you may already have it.
/// note
-If you cannot install VS Code for administrative reasons, don’t worry! You can use `code-server`, a server-hosted version of VS Code that runs in your web browser while offering the same familiar experience. Even better: code-server is already deployed in the hackathon labs with all required extensions pre-installed, ready for you to connect. This means you can run Visual Studio Code during this hackathon directly from your browser without any setup.
+If you cannot install VS Code for administrative reasons, don’t worry! You can use `code-server`, a server-hosted version of VS Code that runs in your web browser while offering the same familiar experience. Even better: code-server is already deployed in the event labs with all required extensions pre-installed, ready for you to connect. This means you can run Visual Studio Code during this event directly from your browser without any setup.
///
NOKIA is actively contributing VS Code extensions to improve Developer eXperience around our networking products and technologies being used.
-In this hackathon, you have the opportunity to use the following extensions contributed by Nokia in action:
+In this event, you have the opportunity to use the following extensions contributed by Nokia in action:
* [NSP Intent Manager extension](https://github.com/nokia/vscode-intent-manager)
* [NSP Workflow Manager extension](https://github.com/nokia/vscode-workflow-manager)
@@ -62,8 +62,8 @@ code changes back to the project. By this you become part of our community helpi
A number of activities have been created for you to follow, separated by our rough estimation of difficulty level (opinions may vary :smile:).
Feel free to attempt any of them.
-Remind, activities are to provide you with ideas and guidance. If you want to go freestyle, just do it! We will help you at our best ability.
-However, it's your opportunity to practice and learn! Don't just come with a crazy idea and expect the hackathon support to solve it for you.
+Reminder: Activities are there to provide you with ideas and guidance. If you want to go freestyle, just do it! We will help you to the best of our best abilities.
+However, it's your opportunity to practice and learn!
### Standalone activities and not in order
@@ -80,9 +80,9 @@ However, we are using a single, shared NSP instance.
Access control is widely in place to avoid people step on each others toes.
Make sure to name your automation artifacts uniquely adding your group-id to avoid surprises.
-### Help us make the hackathon the best it can be
+### Help us make the event the best it can be
-Each year we review the feedback and lessons learned from the previous years hackathon as we want to continually deliver the best, and most useful, experience we can. To help us do this we have two asks:
+Each year we review the feedback and lessons learned from the previous years event as we want to continually deliver the best, and most useful, experience we can. To help us do this we have two asks:
- You will notice, next to each task there is a blue `Start` button. When you start to attempt each task, would you please click the button.
- When you complete an activity (or even if you don't manage to complete it), you will find a very short questionairre at the end. Would you please fill it out as honestly as you feel able to, we won't be offended if you think something was awful, and equally we like praise as much as the next person!
@@ -94,11 +94,11 @@ These two small asks will help us continue to improve your experience for when y
If you need help at anytime you have a few options:
- Take a look at the reference material and hints provided in the activities.
-- Ask other members of your group, or other groups for help. Collaboration is one of the best elements of the hackathon.
+- Ask other members of your group, or other groups for help. Collaboration is one of the best elements of the event.
- Put your hand up or otherwise grab the attention of one of the team to assist you (that is what they are there for so please use them!)
## Ask us (almost) anything
-Not only are the team here to help you with anything in the hackathon, but they also have a wide range of knowledge about Nokia, our products, our services and our technologies. Please ask anything that's on your mind.
+Not only are the team here to help you with anything in the event, but they also have a wide range of knowledge about Nokia, our products, our services and our technologies. Please ask anything that's on your mind.
We'd also love to hear from you about what you're doing with automation and programmability in your network and any of the amazing or more challenging things you are working on.
diff --git a/docs/nsp/intermediate/71-nsp-ne-config-snapshot-rollback.md b/docs/nsp/intermediate/71-nsp-ne-config-snapshot-rollback.md
index adee591..0f5d6d4 100644
--- a/docs/nsp/intermediate/71-nsp-ne-config-snapshot-rollback.md
+++ b/docs/nsp/intermediate/71-nsp-ne-config-snapshot-rollback.md
@@ -20,7 +20,7 @@ tags:
## Objectives
-Network device configurations evolve continuously, and it's common practice to track configuration drift over time. When recent changes cause issues, you need to quickly understand what changed and when. Beyond analysis, you want the ability to revert to a known stable configuration—ideally applying a rollback as a quick fix without disrupting other services, avoiding outages that would otherwise need to wait for the next scheduled maintenance window.
+Network device configurations evolve continuously, and it is common practice to track configuration drift over time. When recent changes cause issues, you need to quickly understand what changed and when. Beyond analysis, you want the ability to revert to a known stable configuration—ideally applying a rollback as a quick fix without disrupting other services, avoiding outages that would otherwise need to wait for the next scheduled maintenance window.
In this activity, you will explore an alternative to the traditional NE Backup/Restore capabilities in NSP. Key differences include:
@@ -48,7 +48,7 @@ The device operation bundle you are developing is unsigned, allowing you to modi
///
/// warning
-Remember that you are using a shared NSP system. Therefore ensure your group-number is part of the operation and workflow names you are creating to ensure uniqueness.
+Remember that you are using a shared NSP system. Therefore, ensure your group-number is part of the operation and workflow names you are creating to ensure uniqueness.
///
**You should read these tasks from top-to-bottom before beginning the activity.**
@@ -128,7 +128,7 @@ In this step you will test your new operation. We continue using group 2 as an e
7. After the creation the user can check the operation status, it should set to `completed`.
8. Check the operation result and cross-navigate to see the underlying workflow executions.
-After finishing all steps we would have successfully used a custom workflow to create NE snapshots without relying on copying `config.cfg` from the NE.
+After finishing all steps, we would have successfully used a custom workflow to create NE snapshots without relying on copying `config.cfg` from the NE.
### Access Configuration Snapshots
@@ -178,9 +178,9 @@ Exploration Points:
* Break down the components of an artifact bundle to understand how artifacts are packaged and deployed.
* Analyze the elements of an operation artifact (operation model, mapping, script, etc.) and how they work together.
* Examine the role of the mapping profile in linking inputs and outputs to the underlying model.
-* Compare workflow input/output definitions against the operation model and mapping, and see how they align with the WebUI rendering.
+* Compare workflow input/output definitions against the operation model and mapping. See how they align with the WebUI rendering.
* Notice redundancies in rollback operation inputs (e.g., backup operation vs. backup path/filename). Reflect on why these exist, by triggering rollbacks from different WebUI contexts to observe differences in workflow execution inputs.
-* Observe how the snapshot storage path includes the nodal release, and consider how this design choice ensures version accuracy and compatibility.
+* Observe how the snapshot storage path includes the nodal release and consider how this design choice ensures version accuracy and compatibility.
### Improve your Snapshot Operation
@@ -188,7 +188,7 @@ Review the workflow that takes configuration snapshots. Check, if there is anyth
You may find that the action `getConfig` publishes the configuration as a JSON string. This approach works well for smaller configurations like we have in this hackathon. Applying this approach to production-scale nodal configurations can lead to publishing megabytes of data and is not recommended as it impacts resource consumption.
-To work around this, you may consider updating the workflow. The `nsp.https` action allows to store the result in the local filesystem by using the input attribute called `fileName`. Change the task to store the JSON response as file under the path `/tmp/<% $.neName %>.nokia-conf.json`. When applying this change, you need to consider to add another input attribute `resultFilter : $.content`. This applies a YAQL expression to the response before writing it to a file, else everything would be wrapped into a top-level element called `content`.
+To work around this, you may consider updating the workflow. The `nsp.https` action allows to store the result in the local filesystem by using the input attribute called `fileName`. Change the task to store the JSON response as file under the path `/tmp/<% $.neName %>.nokia-conf.json`. When applying this change, you need to consider adding another input attribute `resultFilter : $.content`. This applies a YAQL expression to the response before writing it to a file, else everything would be wrapped into a top-level element called `content`.
/// warning
By using `/tmp` for temporary storage, consider the case that multiple snapshots (typically on different target nodes) are generated in parallel. Therefore, consider using unique filenames, so parallel operation executions will not impact each other.
diff --git a/docs/overrides/main.html b/docs/overrides/main.html
index 00bfafb..c5aaaaf 100644
--- a/docs/overrides/main.html
+++ b/docs/overrides/main.html
@@ -111,6 +111,12 @@
+