diff --git a/frinx-machine/getting-started/readme.md b/frinx-machine/getting-started/readme.md index 024d26310..4749b139c 100644 --- a/frinx-machine/getting-started/readme.md +++ b/frinx-machine/getting-started/readme.md @@ -7,17 +7,12 @@ order: 2000 # FRINX Machine introduction FRINX Machine is a dockerized deployment of multiple elements. The FRINX -Machine enables large scale automation of network devices, services and -retrieval of operational state data from a network. User specific +Machine enables large-scale automation of network devices, services and +retrieval of operational state data from a network. User-specific workflows are designed through the use of OpenConfig NETCONF & YANG models, vendor native models, and the CLI. The FRINX Machine uses dockerized containers that are designed and tested to work together to -create a user specific solution. - -!!! -For installation, please refer to: [FRINX Machine -repository](https://github.com/FRINXio/FRINX-machine) -!!! +create a user-specific solution. !!! FRINX-machine can be installed in Kubernetes using the [Helm chart](https://artifacthub.io/packages/helm/frinx-helm-charts/frinx-machine) @@ -27,40 +22,40 @@ FRINX-machine can be installed in Kubernetes using the [Helm chart](https://arti ### FRINX UniConfig -- Connects to the devices in network +- Connects to the devices in the network - Retrieves and stores configuration from devices - Pushes configuration data to devices - Builds diffs between actual and intended config to execute atomic configuration changes - Retrieves operational data from devices - Manages transactions across one or multiple devices -- Translates between CLI, vendor native, and industry standard data +- Translates between CLI, vendor native, and industry-standard data models (i.e. OpenConfig) - Reads and stores vendor native data models from mounted network devices (i.e YANG models) -- Ensures high availability, reducing network outages and down time +- Ensures high availability, reducing network outages and downtime - Executes commands on multiple devices simultaneously -### Netflix Conductor (workflow engine) - core of Workflow manager +### Netflix Conductor (workflow engine) - the core of the Workflow manager - Atomic tasks are chained together into more complex workflows - Defines, executes and monitors workflows (via REST or UI) We chose Netflix’s conductor workflow engine since it has been proven to -be highly scalable open-source technology that integrates very well with -FRINX UniConfig. Further information about conductor can be found at: +be a highly scalable open-source technology that integrates very well with +FRINX UniConfig. Further information about Conductor can be found at: - **Sources:** https://github.com/Netflix/conductor - **FRINXio sources:** https://github.com/FRINXio/conductor-community - **Docs:** https://conductor-oss.github.io/conductor/index.html -### Postgres database - core of Device inventory +### Postgres database - the core of Device inventory - Stores inventory data ### Monitoring software: loki + grafana + influxdb + telegraf - core of Monitoring -- Stores workflow execution and meta data +- Stores workflow execution and metadata - Stores UniConfig logs - Stores docker container logs @@ -72,32 +67,28 @@ FRINX UniConfig. Further information about conductor can be found at: - Allows users to mount devices and view their status. The UI allows users to execute UniConfig operations such as read, edit, and commit. Configurations can be pushed to or synced from the network -- Device inventory, workflow execution, resource manager are +- Device inventory, workflow execution, and resource manager are all accessible through the UI -## High Level Architecture +## High-Level Architecture -Following diagram outlines main functional components in the FRINX +The following diagram outlines the main functional components in the FRINX Machine solution: ![FM Architecture](FRINX_Machine_Architecture.png) -FRINX Machine repository is available at https://github.com/FRINXio/FRINX-machine - -Frinx-conductor repository is available at https://github.com/FRINXio/conductor - ## Defining a workflow -The workflows are defined using a JSON based domain specific language +The workflows are defined using a JSON-based domain-specific language (DSL) by wiring a set of tasks together. The tasks are either control tasks (fork, conditional, etc.) or application tasks (i.e. encoding a file) that are executed on a remote device. -The FRINX Machine distribution comes pre-loaded with a number of +The FRINX Machine distribution comes pre-loaded with several standardized workflows A detailed description of how to run workflows and tasks, along with -examples, can be found in the official [Netflix Conductor +examples can be found in the official [Netflix Conductor documentation](https://conductor-oss.github.io/conductor/documentation/configuration/workflowdef/index.html) ## Operating FRINX Machine diff --git a/frinx-machine/installation/readme.md b/frinx-machine/installation/readme.md new file mode 100644 index 000000000..6502d0462 --- /dev/null +++ b/frinx-machine/installation/readme.md @@ -0,0 +1,135 @@ +--- +icon: rocket +expanded: false +order: 2000 +--- + +# FRINX Machine Helm Chart Installation Guide + +This guide provides the step-by-step instructions for installing FRINX Machine on a Kubernetes cluster using Helm charts. + +## Prerequisites + +- `Minikube`: Make sure that Minikube is installed on your local machine. Follow the Minikube installation guide if necessary. +- `Helm`: Make sure that Helm is installed. Follow the Helm installation guide if necessary. + + +## Step 1: Start Minikube + +```bash +# Minimal recommended setup +minikube start --cpus=12 --memory=24G --kubernetes-version=v1.27 --addons=ingress + +# Alternatively, use maximum available CPUs +minikube start --cpus=max --memory=24G --kubernetes-version=v1.27 --addons=ingress +``` + +## Step 2: Add the FRINX Helm Repository + +Add the FRINX Helm repository and update the repository list: + +```bash +helm repo add frinx https://FRINXio.github.io/helm-charts +helm repo update +``` + +## Step 3: Install Operators and CRDs + +Install FRINX Machine operators and custom resource definitions (CRDs): + +```bash +helm install -n frinx --create-namespace frinx-machine-operators frinx/frinx-machine-operators +``` + +Verify the installation by checking the pods in the frinx namespace: + + +```bash +kubectl get pods -n frinx +``` + +You should see output similar to: + +```bash +NAME READY STATUS RESTARTS AGE +arango-frinx-machine-operators-operator-6dfdff75bd-cnwmp 1/1 Running 0 25s +arango-frinx-machine-operators-operator-6dfdff75bd-k8kqp 1/1 Running 0 25s +frinx-machine-operators-cloudnative-pg-d9566444c-85w8g 1/1 Running 0 25s +``` + +## Step 4: Create Docker Registry Secret + +Create a Docker registry secret for pulling images: + +For more info about accessing private images, visit [Download Frinx Uniconfig](https://docs.frinx.io/frinx-uniconfig/getting-started/#download-frinx-uniconfig) + +```bash +kubectl create secret -n frinx docker-registry regcred \ + --docker-server="https://index.docker.io/v1/" \ + --docker-username="" \ + --docker-password="" +``` + +## Step 5: Install FRINX Machine + +Install the FRINX Machine using Helm: + +```bash +helm install -n frinx frinx-machine frinx/frinx-machine +``` + +Verify the installation by checking the pods in the frinx namespace: + +```bash +kubectl get pods -n frinx +``` + +You should see output similar to: + +```bash +NAME READY STATUS RESTARTS AGE +arango-frinx-machine-operators-operator-6dfdff75bd-h6mxb 1/1 Running 0 21m +arango-frinx-machine-operators-operator-6dfdff75bd-xh9x6 1/1 Running 0 21m +arangodb-sngl-yxxouifa-e0f232 1/1 Running 0 11m +conductor-server-6757754659-tss78 2/2 Running 0 19m +device-induction-56fdd555b8-j646n 1/1 Running 0 19m +frinx-frontend-7c596b6bfc-qgthp 2/2 Running 0 19m +frinx-machine-operators-cloudnative-pg-d9566444c-fgp5w 1/1 Running 0 21m +grafana-64986657b8-zzc5x 1/1 Running 0 19m +influxdb-0 1/1 Running 0 19m +inventory-57994dcd85-9v2f9 1/1 Running 0 19m +kafka-controller-0 1/1 Running 0 19m +krakend-85bb6cd88b-6ldg7 2/2 Running 0 19m +loki-0 1/1 Running 0 19m +performance-monitor-f6885b4dc-4wrfp 1/1 Running 0 19m +postgresql-1 1/1 Running 0 11m +postgresql-2 1/1 Running 0 11m +promtail-zfmkn 1/1 Running 0 19m +resource-manager-d98d6866b-w5d6x 1/1 Running 0 19m +swagger-ui-5b9fc85b99-8tzdd 1/1 Running 0 19m +telegraf-ds-drsh7 1/1 Running 0 19m +timescale-db-0 1/1 Running 0 19m +topology-discovery-6d8c975876-gqg79 2/2 Running 0 19m +uc-zone-lb-9cd56dd7-x82tz 1/1 Running 0 19m +uniconfig-controller-75d945f9c5-lggdb 1/1 Running 0 12m +uniconfig-postgresql-1 1/1 Running 0 12m +uniconfig-postgresql-2 1/1 Running 0 12m +``` + +## Step 6: Access the UI + +Add the following entries to your /etc/hosts file: + +``` +# /etc/hosts +... +192.168.49.2 krakend.127.0.0.1.nip.io fm.127.0.0.1.nip.io +``` + +Enable the KrakenD ingress for the FRINX Machine: + +``` +helm upgrade --install -n frinx frinx-machine frinx/frinx-machine --set krakend.ingress.enabled=true +``` + +Visit Frinx Machine page in your browser on `https://krakend.127.0.0.1.nip.io/frinxui` diff --git a/frinx-uniconfig/getting-started.md b/frinx-uniconfig/getting-started.md index b3d681b49..d4a59eeac 100644 --- a/frinx-uniconfig/getting-started.md +++ b/frinx-uniconfig/getting-started.md @@ -83,7 +83,7 @@ docker stop uniconfig ### Download FRINX UniConfig -Download a ZIP archive of the latest FRINX UniConfig: [uniconfig-5.0.7.zip](https://license.frinx.io/download/uniconfig-5.0.7.zip) +To download UniConfig, please contact: marketing@elisapolystar.com By downloading, you accept the [FRINX software agreement](https://frinx.io/eula). @@ -111,6 +111,3 @@ The file can be found here: See [OpenAPI](https://docs.frinx.io/frinx-uniconfig/user-guide/operational-procedures/openapi/) for more information. -## Offline Activation - -For offline activation of UniConfig, please contact **support@frinx.io**. diff --git a/frinx-uniconfig/release-notes/index.md b/frinx-uniconfig/release-notes/index.md index 2ce7c6ef2..e3e158259 100644 --- a/frinx-uniconfig/release-notes/index.md +++ b/frinx-uniconfig/release-notes/index.md @@ -1,5 +1,12 @@ # Release notes +- [Release notes for UniConfig 6.1.2](../release-notes/uniconfig-6.1.2.md) +- [Release notes for UniConfig 6.0.6](../release-notes/uniconfig-6.0.6.md) +- [Release notes for UniConfig 6.0.5](../release-notes/uniconfig-6.0.5.md) +- [Release notes for UniConfig 6.1.1](../release-notes/uniconfig-6.1.1.md) +- [Release notes for UniConfig 6.1.0](../release-notes/uniconfig-6.1.0.md) +- [Release notes for UniConfig 5.1.23](../release-notes/uniconfig-5.1.23.md) +- [Release notes for UniConfig 6.0.4](../release-notes/uniconfig-6.0.4.md) - [Release notes for UniConfig 6.0.3](../release-notes/uniconfig-6.0.3.md) - [Release notes for UniConfig 5.1.22](../release-notes/uniconfig-5.1.22.md) - [Release notes for UniConfig 6.0.2](../release-notes/uniconfig-6.0.2.md) diff --git a/frinx-uniconfig/release-notes/uniconfig-5.1.23.md b/frinx-uniconfig/release-notes/uniconfig-5.1.23.md new file mode 100644 index 000000000..f7b4dd52b --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-5.1.23.md @@ -0,0 +1,9 @@ + + +## What's Changed +### βœ… New Features +* Added 13.* version support for ARRIS devices +### πŸ”¨ Dependency Upgrades +* Embedded Postgres 16 +### πŸ”§ Other Changes +* Bump to 5.1.23-SNAPSHOT. diff --git a/frinx-uniconfig/release-notes/uniconfig-6.0.4.md b/frinx-uniconfig/release-notes/uniconfig-6.0.4.md new file mode 100644 index 000000000..c428eccfe --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-6.0.4.md @@ -0,0 +1,56 @@ + + +## What's Changed +### 🐞 Bug Fixes +* [UNIC-1728] Fix reading of sample VNF config from netconf-testtool +* Add missing dependencies to testtool +* Swagger - add missing namespace when node is augmenting on deeper level +* SwaggerUI - show extensions +* Fix gnmi missing schemaContext handling +* Swagger - fix required statement +* Swagger - fix url parameters +* Docker Compose - add NET_RAW capability +* [UNIC-966] Fix create and update operation in PATCH +* Fix update tag in PATCH and apply-template +* [UNIC-1657] Set found subtree isSelected to true. +* [UNIC-1746] Swagger: fix custom operational path +* [UNIC-1737] Fix synchronization of datastore from DatabaseDOMDataBroker +* Fix sending netconf or gnmi mount body with param schema-cache-directory set to "" (empty string) +* [UNIC-1744] UC Shell: Fix show on choice nodes +### βœ… New Features +* [UNIC-1710] CLI health-check +* Added 13.* version support for ARRIS devices +### πŸ’‘ Improvements +* Switch to Exificient +* [UNIC-397] Improve error message for keys in payload. +* [UNIC-1038] Rewrite Dockerfile +* [UNIC-1735] Improve gnmi list deserialization +* Refactor crypto mount parameter to device-crypto in java client side. +* Cleanup dependencies +* Swagger - use oneOf for choice nodes +### πŸ”¨ Dependency Upgrades +* Update wrapper script and mvnw to version 3.3.1 +* build(deps): bump org.jetbrains.kotlin:kotlin-maven-plugin from 1.9.23 to 1.9.24 +* Remove unused dependency - objenesis +* Use Embedded Postgres version 16 +* Revert "Use Embedded Postgres version 16 (#2419)" +* Docker scout CVE fixes +* Embedded PostgreSQL 16 +* build(deps): bump io.swagger.core.v3:swagger-core from 2.2.21 to 2.2.22 +* build(deps): bump org.codehaus.mojo:build-helper-maven-plugin from 3.5.0 to 3.6.0 +* build(deps): bump org.owasp:dependency-check-maven from 9.1.0 to 9.2.0 +* build(deps): bump grpc.version from 1.63.0 to 1.64.0 +* build(deps): bump org.apache.commons:commons-compress from 1.26.1 to 1.26.2 +* build(deps): bump org.codehaus.mojo:exec-maven-plugin from 3.2.0 to 3.3.0 +* build(deps): bump com.puppycrawl.tools:checkstyle from 10.16.0 to 10.17.0 +* build(deps): bump org.apache.maven.plugins:maven-invoker-plugin from 3.6.1 to 3.7.0 +* build(deps): bump commons-cli:commons-cli from 1.7.0 to 1.8.0 +* build(deps): bump org.springframework.boot:spring-boot-dependencies from 3.1.11 to 3.1.12 +* build(deps): bump org.jetbrains.kotlin:kotlin-maven-plugin from 1.9.24 to 2.0.0 +* build(deps): bump maven.core.version from 3.9.6 to 3.9.7 +### πŸ”§ Other Changes +* Bump to 6.0.4-SNAPSHOT. +* Clean up constants +* Update dependabot.yml +* Revert protocol uppercase back to lowercase. +* Fix typo diff --git a/frinx-uniconfig/release-notes/uniconfig-6.0.5.md b/frinx-uniconfig/release-notes/uniconfig-6.0.5.md new file mode 100644 index 000000000..727356a15 --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-6.0.5.md @@ -0,0 +1,28 @@ + + +## What's Changed +### 🐞 Bug Fixes +* [UNIC-1739] - Fix advisory session unlocking (#2467) +* Swagger: Fix missing cli topology in path parameters (#2480) +* [UNIC-1751] Fix mount operation duplication in the same tx (#2460) +* [UNIC-1753] Multiple gnmi notification fixes for IOS Xr7 (#2483) +* [UNIC-1756] Fix wrong snmp connection establishment +* [UNIC-1754] Fix yang-patch rfc8040 error response (#2489) +* Fixed JUNOS version 13 installation +* [UNIC-1758] Database error: Failed to update node YANG repository because repository does not exist in DB +* Fix augmentation qname handling +* [UNIC-883] Fix DB tx exception handling +* [UNIC-1743] Create calculate-diff-shell rpc. (#2468) +* Fix cli session closeup +* Fix traefik changing URL query param from ; to & (#2514) +* [UNIC-1763] Swagger: Fix generation of action nodes and tags (#2525) +* Fix default reading properties (#2527) +* [UNIC-1771] Refresh schemactx +* Swagger - add module name to choice schema node definition (#2541) +### πŸ’‘ Improvements +* Add banner to logs (#2509) +### πŸ”§ Other Changes +* Fix verify and merge wfs +* Bump to 6.0.5-SNAPSHOT. +* [UNIC-1764] Support to optionally wrap cases in choice node (#2539) +* Release 6.0.5. diff --git a/frinx-uniconfig/release-notes/uniconfig-6.0.6.md b/frinx-uniconfig/release-notes/uniconfig-6.0.6.md new file mode 100644 index 000000000..1dd8c5adc --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-6.0.6.md @@ -0,0 +1,18 @@ + + +## What's Changed +### 🐞 Bug Fixes +* [UNIC-1778] Fix journal size dispatch +* Fix merge concurrency group +* [UNIC-1775] Improve generic PromptResolutionStrategy +* [UNIC-1781] Skip nested constraints in union type (#2573) +* Interrupt task when its tx has been expired (#2589) +* [UNIC-1789] Complex types constraints skipping (#2592) +* [UNIC-1784] Fix checked-commit no rollback (#2593) +### πŸ”¨ Dependency Upgrades +* build(deps): bump maven.core.version from 3.9.7 to 3.9.8 (#2529) +* build(deps): bump org.owasp:dependency-check-maven from 9.2.0 to 10.0.0 +* Bump odc to 10.0.2 +### πŸ”§ Other Changes +* Bump to 6.0.6-SNAPSHOT. +* Release 6.0.6. diff --git a/frinx-uniconfig/release-notes/uniconfig-6.1.0.md b/frinx-uniconfig/release-notes/uniconfig-6.1.0.md new file mode 100644 index 000000000..ee31e879b --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-6.1.0.md @@ -0,0 +1,57 @@ + + +## What's Changed +### 🐞 Bug Fixes +* [UNIC-1728] Fix reading of sample VNF config from netconf-testtool +* Add missing dependencies to testtool +* Swagger - add missing namespace when node is augmenting on deeper level +* SwaggerUI - show extensions +* Fix gnmi missing schemaContext handling +* Swagger - fix required statement +* Swagger - fix url parameters +* Docker Compose - add NET_RAW capability +* [UNIC-966] Fix create and update operation in PATCH +* Fix update tag in PATCH and apply-template +* [UNIC-1657] Set found subtree isSelected to true. +* [UNIC-1746] Swagger: fix custom operational path +* [UNIC-1737] Fix synchronization of datastore from DatabaseDOMDataBroker +* Fix sending netconf or gnmi mount body with param schema-cache-directory set to "" (empty string) +* [UNIC-1744] UC Shell: Fix show on choice nodes +### βœ… New Features +* [UNIC-1710] CLI health-check +* Added 13.* version support for ARRIS devices +### πŸ’‘ Improvements +* Switch to Exificient +* [UNIC-397] Improve error message for keys in payload. +* [UNIC-1038] Rewrite Dockerfile +* [UNIC-1735] Improve gnmi list deserialization +* Refactor crypto mount parameter to device-crypto in java client side. +* Cleanup dependencies +* Swagger - use oneOf for choice nodes +### πŸ”¨ Dependency Upgrades +* Update wrapper script and mvnw to version 3.3.1 +* build(deps): bump org.jetbrains.kotlin:kotlin-maven-plugin from 1.9.23 to 1.9.24 +* Remove unused dependency - objenesis +* Use Embedded Postgres version 16 +* Revert "Use Embedded Postgres version 16 (#2419)" +* Docker scout CVE fixes +* Embedded PostgreSQL 16 +* build(deps): bump io.swagger.core.v3:swagger-core from 2.2.21 to 2.2.22 +* build(deps): bump org.codehaus.mojo:build-helper-maven-plugin from 3.5.0 to 3.6.0 +* build(deps): bump org.owasp:dependency-check-maven from 9.1.0 to 9.2.0 +* build(deps): bump grpc.version from 1.63.0 to 1.64.0 +* build(deps): bump org.apache.commons:commons-compress from 1.26.1 to 1.26.2 +* build(deps): bump org.codehaus.mojo:exec-maven-plugin from 3.2.0 to 3.3.0 +* build(deps): bump com.puppycrawl.tools:checkstyle from 10.16.0 to 10.17.0 +* build(deps): bump org.apache.maven.plugins:maven-invoker-plugin from 3.6.1 to 3.7.0 +* build(deps): bump commons-cli:commons-cli from 1.7.0 to 1.8.0 +* build(deps): bump org.springframework.boot:spring-boot-dependencies from 3.1.11 to 3.1.12 +* build(deps): bump org.jetbrains.kotlin:kotlin-maven-plugin from 1.9.24 to 2.0.0 +* build(deps): bump maven.core.version from 3.9.6 to 3.9.7 +### πŸ”§ Other Changes +* Bump to 6.0.4-SNAPSHOT. +* Clean up constants +* Update dependabot.yml +* Revert protocol uppercase back to lowercase. +* Fix typo +* Release 6.1.0. diff --git a/frinx-uniconfig/release-notes/uniconfig-6.1.1.md b/frinx-uniconfig/release-notes/uniconfig-6.1.1.md new file mode 100644 index 000000000..bc369b5eb --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-6.1.1.md @@ -0,0 +1,63 @@ + + +## What's Changed +### 🐞 Bug Fixes +* [UNIC-1739] - Fix advisory session unlocking +* Swagger: Fix missing cli topology in path parameters +* Swagger: Fix missing snmp topology in path parameters +* [UNIC-1753] Multiple gnmi notification fixes for IOS Xr7 +* [UNIC-1751] Fix mount operation duplication in the same tx +* [UNIC-1756] Fix wrong snmp connection establishment +* [UNIC-1754] Fix yang-patch rfc8040 error response +* Fixed JUNOS version 13 installation (#2485) +* [UNIC-1758] Database error: Failed to update node YANG repository because repository does not exist in DB +* Fix augmentation qname handling +* [UNIC-883] Fix DB tx exception handling +* Fix cli session closeup +* Fix traefik changing URL query param from ; to & +* Support check-nodes-connection for southbound only +* [UNIC-1763] Swagger: Fix generation of action nodes and tags +* Fix default reading properties +* [UNIC-1771] Fix register-repository +* Fix 'End of input' exception on netconf session.close() +### βœ… New Features +* [UNIC-1580] - Integration of 'fields' query parameter into NETCONF subtree filtering +* [UNIC-1762] Bulk-get RPC +### πŸ’‘ Improvements +* [UNIC-1743] Create calculate-diff-shell rpc. +* Add banner to logs +* [UNIC-1761] Fix time range in gnmi streaming +* [UNIC-1400] Refactor and extract uniconfig diff +* Package logback cluster configuration +* Swagger - add module name to choice schema node definition +### πŸ”¨ Dependency Upgrades +* build(deps): bump org.apache.maven.plugins:maven-shade-plugin from 3.5.3 to 3.6.0 +* build(deps): bump org.apache.maven.plugins:maven-plugin-plugin from 3.13.0 to 3.13.1 +* build(deps): bump org.apache.maven.plugins:maven-enforcer-plugin from 3.4.1 to 3.5.0 +* build(deps): bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.3 to 3.7.0 +* build(deps): bump com.google.errorprone:error_prone_core from 2.27.1 to 2.28.0 +* build(deps): bump com.google.errorprone:error_prone_annotations from 2.27.1 to 2.28.0 +* build(deps): bump com.google.guava:guava from 33.2.0-jre to 33.2.1-jre +* build(deps): bump docker/login-action from 3.1.0 to 3.2.0 +* build(deps-dev): bump org.apache.maven.plugin-tools:maven-plugin-annotations from 3.13.0 to 3.13.1 +* build(deps): bump org.apache.maven.plugins:maven-checkstyle-plugin from 3.3.1 to 3.4.0 +* build(deps): bump commons-net:commons-net from 3.10.0 to 3.11.0 +* build(deps): bump org.checkerframework:checker-qual from 3.43.0 to 3.44.0 +* build(deps): bump io.github.git-commit-id:git-commit-id-maven-plugin from 8.0.2 to 9.0.0 +* build(deps): bump org.apache.maven.plugins:maven-surefire-plugin from 3.2.5 to 3.3.0 +* build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin from 3.2.5 to 3.3.0 +* build(deps): bump org.apache.maven.plugins:maven-dependency-plugin from 3.6.1 to 3.7.0 +* build(deps): bump org.apache.maven.plugins:maven-release-plugin from 3.0.1 to 3.1.0 +* build(deps): bump org.apache.maven.plugins:maven-project-info-reports-plugin from 3.5.0 to 3.6.0 +* build(deps): bump commons-net:commons-net from 3.11.0 to 3.11.1 +* build(deps): bump docker/build-push-action from 5 to 6 +* build(deps): bump maven.core.version from 3.9.7 to 3.9.8 +* build(deps): bump org.apache.maven.plugins:maven-jar-plugin from 3.4.1 to 3.4.2 +* build(deps): bump org.apache.maven.plugins:maven-clean-plugin from 3.3.2 to 3.4.0 +* build(deps): bump com.github.spotbugs:spotbugs-annotations from 4.8.5 to 4.8.6 +* build(deps): bump jline.version from 3.26.1 to 3.26.2 +* build(deps): bump org.apache.maven.plugins:maven-dependency-plugin from 3.7.0 to 3.7.1 +### πŸ”§ Other Changes +* Bump to 6.1.1-SNAPSHOT. +* [UNIC-1764] Support to optionally wrap cases in choice node +* Release 6.1.1. diff --git a/frinx-uniconfig/release-notes/uniconfig-6.1.2.md b/frinx-uniconfig/release-notes/uniconfig-6.1.2.md new file mode 100644 index 000000000..4809e2dc7 --- /dev/null +++ b/frinx-uniconfig/release-notes/uniconfig-6.1.2.md @@ -0,0 +1,40 @@ + + +## What's Changed +### 🐞 Bug Fixes +* [UNIC-1778] Fix journal size dispatch +* [UNIC-1775] Improve generic PromptResolutionStrategy +* Fix class cast exception when getting direct child. +* Fix UC Shell remove redundant findNode step. +* [UNIC-1781] Skip nested constraints in union type +* Interrupt task when its tx has been expired +* [UNIC-1789] Complex types constraints skipping +* [UNIC-1784] Fix checked-commit no rollback +### πŸ’‘ Improvements +* Added a path field to notification +* [UNIC-1783] - Adjust bulk-get output +### πŸ”¨ Dependency Upgrades +* build(deps): bump tech.pantheon.triemap:triemap from 1.3.1 to 1.3.2 +* build(deps): bump com.github.spotbugs:spotbugs-maven-plugin from 4.8.5.0 to 4.8.6.1 +* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui from 2.5.0 to 2.6.0 +* build(deps): bump org.apache.maven.plugins:maven-project-info-reports-plugin from 3.6.0 to 3.6.1 +* build(deps): bump grpc.version from 1.64.0 to 1.65.0 +* build(deps): bump org.owasp:dependency-check-maven from 9.2.0 to 10.0.0 +* build(deps): bump org.owasp:dependency-check-maven from 10.0.0 to 10.0.2 +* build(deps): bump io.github.git-commit-id:git-commit-id-maven-plugin from 9.0.0 to 9.0.1 +* build(deps): bump com.github.spotbugs:spotbugs-maven-plugin from 4.8.6.1 to 4.8.6.2 +* build(deps): bump org.checkerframework:checker-qual from 3.44.0 to 3.45.0 +* build(deps): bump actions/upload-artifact from 4.3.3 to 4.3.4 +* build(deps): bump actions/download-artifact from 4.1.7 to 4.1.8 +* build(deps): bump org.apache.maven.plugins:maven-release-plugin from 3.1.0 to 3.1.1 +* build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin from 3.3.0 to 3.3.1 +* build(deps): bump org.apache.maven.plugins:maven-surefire-plugin from 3.3.0 to 3.3.1 +* build(deps): bump org.apache.maven.plugins:maven-project-info-reports-plugin from 3.6.1 to 3.6.2 +* build(deps): bump grpc.version from 1.65.0 to 1.65.1 +* build(deps): bump actions/setup-python from 5.1.0 to 5.1.1 +### πŸ”§ Other Changes +* Bump to 6.1.2-SNAPSHOT. +* Switch vulnscan workflow stable branch +* Remove mdsal-binding-util +* Update spotbugs-exclude.xml +* Release 6.1.2. diff --git a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig-installing/readme.md b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig-installing/readme.md index 73d1054e1..f785af2ee 100644 --- a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig-installing/readme.md +++ b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig-installing/readme.md @@ -720,7 +720,7 @@ Basic connection parameters used to identify a remote device: - `node-id` - Name of the node that represents the device/mountpoint in the topology. - `gnmi-topology:host` - IP address or domain name of the target device running the gNMI server. - `gnmi-topology:port` - TCP port where the gNMI server is listening to incoming connections. -- `gnmi-topology:device-type` - Specific device type. For now, only the `sonic` device type is supported. This parameter is used to create a device-type specific gNOI session. By default, this parameter is not specified. +- `gnmi-topology:device-type` - Specific device type, which enables some device-specific behavior. By default, this parameter is not specified. - `gnmi-topology:connection-type` - If specified, an insecure connection is created. The insecure connection is available only for DEBUG reasons. To establish a gRPC connection without TLS, choose the insecure connection type `PLAINTEXT`. The connection type `PLAINTEXT` indicates that the target should skip the signature verification steps if a secure connection is used. - `gnmi-topology:keystore-id` - If specified, a secure connection is created. Also requires `keystore-id` (identifier of the keystore), which is defined in the `gnmi-certificate-storage` model. diff --git a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/iosxr7.md b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/iosxr7.md new file mode 100644 index 000000000..2296578a8 --- /dev/null +++ b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/iosxr7.md @@ -0,0 +1,62 @@ +# IosXR 7 device + +## Install device + +A IosXR7 device can be installed through gNMI with the following request: + +```bash +curl --location 'http://localhost:8181/rests/operations/connection-manager:install-node' \ +--header 'Content-Type: application/json' \ +--data '{ + "input": { + "node-id": "iosxr7", + "gnmi": { + "schema-cache-directory": "{cache-directory}", + "uniconfig-config:whitelist": { + "path": [ + "Cisco-IOS-XR-ifmgr-cfg:interface-configurations", + "openconfig-interfaces:interfaces" + ] + }, + "uniconfig-config:uniconfig-native-enabled": true, + "uniconfig-config:sequence-read-active": true, + "connection-parameters": { + "host": "127.0.0.1", + "port": 57400, + "connection-type": "INSECURE", + "device-type": "iosxr7", + "credentials": { + "username": "admin", + "password": "admin" + } + }, + "session-timers": { + "request-timeout": 100 + }, + "extensions-parameters": { + "gnmi-parameters": { + "use-model-name-prefix": true + }, + "force-cached-capabilities": [ + null + ] + } + } + } +}' +``` + +## Uninstall device + +To uninstall a device: + +```bash +curl --location 'http://localhost:8181/rests/operations/connection-manager:uninstall-node' \ +--header 'Content-Type: application/json' \ +--data '{ + "input": { + "node-id": "iosxr7", + "connection-type": "gnmi" + } +}' +``` \ No newline at end of file diff --git a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/nokia.md b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/nokia.md index 5ef2d5d02..507ce4d8c 100644 --- a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/nokia.md +++ b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/nokia.md @@ -26,6 +26,7 @@ curl --location 'http://localhost:8181/rests/operations/connection-manager:insta "connection-parameters": { "host": "127.0.0.1", "port": 57400, + "device-type": "nokia", "connection-type": "PLAINTEXT", "credentials": { "username": "", diff --git a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/readme.md b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/readme.md index 02c831757..012899c2c 100644 --- a/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/readme.md +++ b/frinx-uniconfig/user-guide/network-management-protocols/uniconfig_gnmi/readme.md @@ -121,7 +121,11 @@ To create subscriptions, the following are required in **application.properties* - `notifications.kafka.gnmi-notifications-topic-name=gnmi-notifications` - `notifications.kafka.embedded-kafka.enabled=true` (or its own Kafka, in which case kafka-servers needs to be adjusted) -The install request must specify the parameters necessary to create a subscription for a specific device. Mandatory fields are `stream-name` (a marker for the particular subscription) and `paths` (a list of paths to which the gNMI souhtbound plugin will be subscribed, with at least one path). Non-mandatory fields specify a time range of the subscription. Both `start-time` and `stop-time` are in [RFC339 format](https://datatracker.ietf.org/doc/html/rfc3339). +The install request must specify the parameters necessary to create a subscription for a specific device. +Mandatory fields are `stream-name` (a marker for the particular subscription) and `paths` +(a list of paths to which the gNMI souhtbound plugin will be subscribed, with at least one path). +Non-mandatory fields specify a time range of the subscription or subscription mode. Both `start-time` and `stop-time` are in [RFC3339 format](https://datatracker.ietf.org/doc/html/rfc3339). +Subscription mode can be SAMPLE, ON_CHANGE or TARGET_DEFINED ```json stream inside of install-node RPC request { @@ -141,7 +145,8 @@ The install request must specify the parameters necessary to create a subscripti "stream-name": "GNMI_lldp", "paths": [ "openconfig-lldp:lldp" - ] + ], + "mode": "SAMPLE" } ] } @@ -150,7 +155,7 @@ The install request must specify the parameters necessary to create a subscripti Subscriptions are created independently from node installation. The result of the install-node RPC relates only to node installation, and that RPC will only invoke the telemetry stream subscription process. -Subscriptions are created in the gNMI southbound plugin using the Subscribe RPC from the gNMI service defined in the proto3 file. The gNMI southbound plugin can subscribe to wildcarded paths as well as multiple paths at once. It only supports the `STREAM` subscription mode and `ON_CHANGE` stream mode. +Subscriptions are created in the gNMI southbound plugin using the Subscribe RPC from the gNMI service defined in the proto3 file. The gNMI southbound plugin can subscribe to wildcarded paths as well as multiple paths at once. It supports only the `STREAM` subscription mode with `SAMPLE`, `ON_CHANGE` and `TARGET_DEFINED` stream mode. If a time range is specified, it is part of the Subscribe request. If the device does not support time ranges on its server side, the gNMI southbound plugin can handle them. Note that if the timestamp of the received message is outside of the specified time range, the message is not saved to the database or published to the Kafka topic. @@ -174,3 +179,4 @@ The tool is used for scale-testing purposes to simulate the interactions of thou Examples: - [!ref](sonic.md) - [!ref](nokia.md) +- [!ref](iosxr7.md) diff --git a/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/index.md b/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/index.md index 1b952920e..e00d60b34 100644 --- a/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/index.md +++ b/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/index.md @@ -26,4 +26,5 @@ See below for additional information on individual RPCs: - [RPC replace-config-with-operational](../uniconfig-node-manager/rpc_replace-config-with-oper) - [RPC sync-from-network](../uniconfig-node-manager/rpc_sync-from-network) - [RPC validate](../uniconfig-node-manager/rpc_validate) +- [RPC bulk-get](../uniconfig-node-manager/rpc_bulk-get) - [RPC uninstall-multiple-nodes](../uniconfig-node-manager/uniconfig_uninstall_multiple_nodes) diff --git a/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/rpc_bulk-get/index.md b/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/rpc_bulk-get/index.md new file mode 100644 index 000000000..60fc1ce88 --- /dev/null +++ b/frinx-uniconfig/user-guide/uniconfig-operations/uniconfig-node-manager/rpc_bulk-get/index.md @@ -0,0 +1,316 @@ +# RPC bulk-get + +This RPC provides multiple get operations on multiple nodes, paths and contents. +It is possible to get data from 'Operational' datastore of UniConfig topology if no content is specified, +otherwise data is retrieved from the device directly (over mount-point). +Operation is executed over actual/existing UniConfig transaction (immediate-commit model / manual user transaction). +Each GET operation is executed in parallel. For mount-point read, it is enough to have node installed +on southbound topology (if multiple mount-points with the same node-id exist, user need to specify also connection-type) +or just stored in uniconfig database. + +RPC input contains a list of node inputs where each consists of mandatory fields such as `node-id` (UniConfig node identifier) and +`path`, which points to specific subtree. Optional fields are `content`, `connection-type` and `ignore-missing-data-error`. Content determines that the call will be +over mount-point to target device datastore `config, operational, state, all`, where `state, all` are only for gnmi node. +Connection type is needed only in a scenario where multiple southbound mount-points are defined with the same `node-id`. +If data-missing error is not wanted, user may add `ignore-missing-data-error` and set it to true (default is false) which will display empty config in `data` leaf. + +If get operation on any nodes failed (node is not installed, connection lost, data is not present, ...) the response +will display only failed nodes in common RFC8040 errors container. In a success case, the result is structured in +node-results format. Each node-result consists of `node-id`, `content` (if over mount-point) `path` and +`data` that contains wanted subtree config. + +## RPC examples + +### Successful example + +RPC input contains valid nodes that are installed in UniConfig topology. Bulk-get will read config on following paths +from UniConfig operational datastore. + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:bulk-get' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [ + { + "node-id": "R1", + "path": "frinx-openconfig-interfaces:interfaces/interface" + }, + { + "node-id": "R2", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration" + } + ] + } +}' +``` + +```json RPC Response, Status: 200 +{ + "output": { + "node-results": { + "node-result": [ + { + "node-id": "R1", + "data": "{\"interface\": [{\"name\": \"GigabitEthernet0/0/0/1\", \"config\": { ... } }, ... ]}", + "path": "frinx-openconfig-interfaces:interfaces/interface" + }, + { + "node-id": "R2", + "data": "{\"interface-configuration\": [{\"name\": \"GigabitEthernet0/0/0/1\", \"act\": \"active\" }, ... ]}", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration" + } + ] + } + } +} +``` + +### Successful example + +RPC input contains valid nodes, from which Ri is installed in UniConfig topology, and R2 is installed as southbound only. +Bulk-get will read config on following paths from following content target datastores. + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:bulk-get' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [ + { + "node-id": "R1", + "path": "frinx-openconfig-interfaces:interfaces/interface", + "content": "config" + }, + { + "node-id": "R2", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration", + "content": "operational" + } + ] + } +}' +``` + +```json RPC Response, Status: 200 +{ + "output": { + "node-results": { + "node-result": [ + { + "node-id": "R1", + "data": "{\"interface\": [{\"name\": \"GigabitEthernet0/0/0/1\", \"config\": { ... } }, ... ]}", + "path": "frinx-openconfig-interfaces:interfaces/interface", + "content": "config" + }, + { + "node-id": "R2", + "data": "{\"interface-configuration\": [{\"name\": \"GigabitEthernet0/0/0/1\", \"act\": \"active\" }, ... ]}", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration", + "content": "operational" + } + ] + } + } +} +``` + +### Successful example + +RPC input contains two nodes, where R1 is successful and R2 does not provide any config on given path, but `ignore-missing-data-error` is present. + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:bulk-get' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [ + { + "node-id": "R1", + "path": "frinx-openconfig-interfaces:interfaces/interface", + "content": "config" + }, + { + "node-id": "R2", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration", + "content": "operational" + } + ] + } +}' +``` + +```json RPC Response, Status: 200 +{ + "output": { + "node-results": { + "node-result": [ + { + "node-id": "R1", + "data": "{\"interface\": [{\"name\": \"GigabitEthernet0/0/0/1\", \"config\": { ... } }, ... ]}", + "path": "frinx-openconfig-interfaces:interfaces/interface", + "content": "config" + }, + { + "node-id": "R2", + "data": "{}", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration", + "content": "operational" + } + ] + } + } +} +``` + +### Failed example + +RPC input contains valid node R1 and an invalid node R2, which is not installed in uniconfig topology +and content is not specified for that node. + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:bulk-get' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [ + { + "node-id": "R1", + "path": "frinx-openconfig-interfaces:interfaces/interface" + }, + { + "node-id": "R2", + "path": "Cisco-IOS-XR-ifmgr-cfg:interface-configurations/interface-configuration" + } + ] + } +}' +``` + +```json RPC Response, Status: 404 +{ + "errors": { + "error": [ + { + "error-tag": "data-missing", + "error-info": { + "node-id": "R2" + }, + "error-message": "Node 'R2' is not installed in uniconfig topology", + "error-type": "application" + } + ] + } +} +``` + +### Failed example + +RPC input contains one node with node-id R1 that has two mount-points (one is mounted over cli and the other over netconf) +and no connection-type is specified. + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:bulk-get' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [ + { + "node-id": "R1", + "path": "frinx-openconfig-interfaces:interfaces/interface", + "content": "operational" + } + ] + } +}' +``` + +```json RPC Response, Status: 409 +{ + "errors": { + "error": [ + { + "error-tag": "protocol-conflict", + "error-info": { + "node-id": "R1", + "error": "Specify connection-type [cli, netconf, gnmi, snmp]" + }, + "error-message": "Node 'R1' is installed in multiple southbound topologies 'netconf, cli'", + "error-type": "application" + } + ] + } +} +``` + +### Failed example + +RPC input contains one node with node-id R3 that is not installed in uniconfig under any southbound topology. + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:bulk-get' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [ + { + "node-id": "R3", + "path": "frinx-openconfig-interfaces:interfaces/interface", + "content": "operational" + } + ] + } +}' +``` + +```json RPC Response, Status: 404 +{ + "errors": { + "error": [ + { + "error-tag": "data-missing", + "error-info": { + "node-id": "R3" + }, + "error-message": "Node 'R3' is not installed in any southbound topology", + "error-type": "application" + } + ] + } +} +``` + +### Failed example + +If RPC input does not contain any node inputs + +```bash RPC Request +curl --location --request POST 'http://localhost:8181/rests/operations/uniconfig-manager:is-in-sync' \ +--header 'Accept: application/json' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "input": { + "nodes": [] + } +}' +``` + +```json RPC Response, Status: 400 +{ + "errors": { + "error": [ + { + "error-tag": "missing-element", + "error-type": "application", + "error-message": "Input cannot be empty!" + } + ] + } +} +```