{"id":20074181,"url":"https://github.com/juniper/nita","last_synced_at":"2025-07-05T05:36:38.871Z","repository":{"id":47075150,"uuid":"292030556","full_name":"Juniper/nita","owner":"Juniper","description":"The parent repo of a framework to automatically build and test networks.","archived":false,"fork":false,"pushed_at":"2025-03-13T15:20:46.000Z","size":2336,"stargazers_count":32,"open_issues_count":6,"forks_count":16,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-05-05T21:35:08.066Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Juniper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-01T15:08:00.000Z","updated_at":"2025-03-20T10:22:32.000Z","dependencies_parsed_at":"2023-02-08T19:01:01.790Z","dependency_job_id":"8856eb98-22ce-409d-ab30-ebc74867e2d5","html_url":"https://github.com/Juniper/nita","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Juniper/nita","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fnita","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fnita/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fnita/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fnita/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Juniper","download_url":"https://codeload.github.com/Juniper/nita/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fnita/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263691546,"owners_count":23496874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T14:49:41.529Z","updated_at":"2025-07-05T05:36:38.851Z","avatar_url":"https://github.com/Juniper.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NITA 23.12\n\nWelcome to NITA 23.12\n\nNITA is an open source platform for automating the building and testing of complex networks.\n\n# Release Notes\n\nThe major change in this version is that all components now run within pods under the control of Kubernetes, rather than as Docker containers. Consequently we have updated some infrastructure as well as the ``nita-cmd`` CLI to support Kubernetes.\n\nWe have also tested extensively on Ubuntu version 22.04.03 LTS and AlmaLinux 9.3 Server, either of which is required if you wish to use the new ``install.sh`` script. We recommend that your system has at least 8GB of free memory and 20GB of storage space.\n\nFor a list of previous features, bug fixes and other release details, please look at the [NITA Webapp README](https://github.com/Juniper/nita-webapp/blob/22.8/README.md#217-new-features-and-bug-fixes).\n\n# Installation\n\nA new ``install.sh`` script is provided with this release, which makes it easy to install everything that you need in one go. It should work for most people in most cases, if you are running either Ubuntu 22.04 LTS or AlmaLinux 9.3 Server. Because the script can install required system dependencies you will need super user access to run it, either as ``root`` or as a user with ``sudo`` privileges. Simply download the raw script file from this GitHub repository, make it executable and then run it like this:\n\n```\n$ sudo -E ./install.sh\n[sudo] password for user:\ninstall.sh: NITA install script.\nInstall system dependencies (y|n|q)? [n] y\n.\n.\n.\n```\nAnswer ``Y`` for each action that you want to perform, ``N`` to skip and ``Q`` to quit out of the script completely. Most people will just need to enter ``Y`` and accept the defaults. Note that on a barebones Ubuntu system, you will need approximately 15GB of free storage in order to install NITA, which includes all of the system dependencies and the Kubernetes pods.\n\n## Environment Variables\n\nThe ``install.sh`` script uses several environment variables, which you can set in the parent shell beforehand if you want to use something other than the defaults. These variables are outlined in this table:\n\nEnvironment Variable | Default Value | Meaning\n---|---|---\n``NITAROOT`` | ``/opt`` | Where to install the NITA repositories\n``BINDIR`` | ``/usr/local/bin`` | Where to install executables such as ``nita-cmd``\n``BASH_COMPLETION`` | ``/etc/bash_completion.d`` | Location of bash completion files\n``K8SROOT`` | ``$NITAROOT/nita/k8s`` | Location of Kubernetes ``YAML`` files\n``PROXY`` | ``$K8SROOT/proxy`` | Location of ``nginx`` configuration\n``CERTS`` | ``$PROXY/certificates`` | Location of ``nginx`` certificate files\n``JENKINS`` | ``$K8SROOT/jenkins`` | Location of Jenkins keys and certificate files\n``KEYPASS`` | ``nita123`` | Passkey used to create self-signed Jenkins keys\n``KUBEROOT`` | ``/etc/kubernetes`` | System location for Kubernetes configuration\n``KUBECONFIG`` | ``$KUBEROOT/admin.conf`` | Location of user's Kubernetes configuration\n``DEBUG`` | unset | Set it to true in the parent shell, to see additional output\n``IGNORE_WARNINGS`` | unset | Set it to true in the parent shell if you want to install NITA and ignore any important warnings\n\n# History\n\nNITA was developed by a small team of Professional Services consultants at Juniper Networks in 2015 and it has been fed and watered by them ever since. In 2020 it was open sourced and made available on GitHub to allow anyone in the industry to use for free and to contribute to if they wished.\n\n# What Does NITA Do?\n\nAs a platform, NITA comprises some of the best Automation tools currently available, such as:\n\n* Ansible, for configuration change management\n* Jenkins, for automation and job control\n* Robot Framework, for test automation\n* Kubernetes, for container orchestration\n\nIn a nutshell, NITA can be used as a toolbox from which you can automate the deployment and testing of very complex networks. It is vendor neutral and so can be used to build and test networks from all of the leading vendors in the market. And because it is a toolbox it can be extended to include any other tool that you may need.\n\nHere is a short video declaring how NITA can be used in your project, please follow the link:\n[YouTube|NITA](https://www.youtube.com/watch?v=6edtVe8Ueis)\n\n# Example Projects\n\nIf you want to experiment to see what NITA can do, we currently have [3 example projects](https://github.com/Juniper/nita/tree/main/examples) that are provided in this repository, please proceed to review the [Examples README](https://github.com/Juniper/nita/tree/main/docs/nita-examples.md) to familiarise yourself with NITA Webapp usage:\n\n* [ChatGPT Integration with Robot and Jenkins](https://github.com/Juniper/nita/tree/main/examples/chatgpt).\n\n    Ever needed help investigating why an automated test has failed? This example will send failed test case descriptions to ChatGPT and ask for the top suggestions on how to solve them. All of a sudden, you will look like a genius!\n\n* Build and test an [EVPN VXLAN data centre using Juniper QFX devices](https://github.com/Juniper/nita/tree/main/examples/evpn_vxlan_erb_dc)\n\n    This includes all of the config that you need to build the data centre fabric and VXLAN overlay along with 14 example Robot tests for the firewalls, switches, BGP leaf and spine devices and end IP connectivity.\nWe show integration with other operational tools for \"Day 2 Management\", storing inventory in Netbox and having that push changes to the network via the Juniper Paragon Insights product.\n\n* Build and test a [Simple DC WAN topology based on IPCLOS and eBGP](https://github.com/Juniper/nita/tree/main/examples/ebgp_wan)\n\n    This is between 2 example datacentres, with 13 example Robot tests for border leaf routers, DC spines and WAN PE devices, plus BGP and IP connectivity tests.\n\n# Training\n\nIf you are planning on using NITA or any of the technologies related to NITA then please consider following the Juniper Networks Automation and DevOps Learning Path\nand taking the Junos Platform and Automation training courses.  These will give you the essential knowledge you need to do successful network automation! For more information, please see the link below:\n\nhttps://learningportal.juniper.net/juniper/user_activity_info.aspx?id=10840\n\n# Other NITA Repositories\n\nYou have landed on the meta repository which links to all of the Juniper Networks NITA submodules on GitHub. Modules can be downloaded independently from these links:\n\n* https://github.com/Juniper/nita-webapp\n* https://github.com/Juniper/nita-ansible\n* https://github.com/Juniper/nita-jenkins\n* https://github.com/Juniper/nita-robot\n* https://github.com/Juniper/nita-yaml-to-excel\n\nPlease refer to the README in each submodule for more details.\n\n# Porting NITA to Kubernetes\n\nThis section gives some details of the pods used in NITA, which you may find helpful if you want to go off-piste. The setup of the infrastructure pods is straightforward, and at the end of the setup we should have 4 running pods that are:\n```\nkubectl get pods -n nita\nNAME                      READY   STATUS    RESTARTS       AGE\ndb-6878b6446-gk6rs        1/1     Running   5 (3d1h ago)   52d\njenkins-577757858-jqvg5   1/1     Running   0              4h56m\nproxy-6d75b768bc-kpdpr    1/1     Running   7 (3d1h ago)   52d\nwebapp-67d64dbb99-pfrb9   1/1     Running   0              25h\n```\nThe files ```pv.yaml``` and ```pv2.yaml``` create persistent volumes for Jenkins and MariaDB pods, which are claimed with the files ```jenkins-home-persistenvolumeclaime.yaml``` and ```mariadb-persistentvolumeclaim.yaml```:\n\n```\njcluser@ubuntu:~$ kubectl get pv -n nita\nNAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                  STORAGECLASS   REASON   AGE\npv-volume        2Gi        RWO            Retain           Bound    default/mariadb        manual                  52d\ntask-pv-volume   20Gi       RWO            Retain           Bound    default/jenkins-home   manual                  52d\n```\nand\n```\njcluser@ubuntu:~$ kubectl get pvc -n nita\nNAME           STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE\njenkins-home   Bound    task-pv-volume   20Gi       RWO            manual         52d\nmariadb        Bound    pv-volume        2Gi        RWO            manual         52d\n```\nThe files ```jenkins-deployment.yaml```, ```db-deployment.yaml```, ```proxy-deployment.yaml``` and ```webapp-deployment.yaml``` are used to spin the actual deployments of the containers:\n```\njcluser@ubuntu:~$ kubectl get deployments -n nita\nNAME      READY   UP-TO-DATE   AVAILABLE   AGE\ndb        1/1     1            1           52d\njenkins   1/1     1            1           5h21m\nproxy     1/1     1            1           52d\nwebapp    1/1     1            1           25h\n```\nThe files ```db-service.yaml```, ```jenkins-service.yaml```, ```proxy-service.yaml``` and ```webapp-service.yaml``` are used to expose ports between the applications and to the outside world:\n```\njcluser@ubuntu:~$ kubectl get services -n nita\nNAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE\ndb           ClusterIP   10.109.37.245   \u003cnone\u003e        3306/TCP            52d\njenkins      ClusterIP   10.104.250.46   \u003cnone\u003e        8443/TCP,8080/TCP   52d\nwebapp       ClusterIP   10.108.92.21    \u003cnone\u003e        8000/TCP            52d\n```\nThe files ```role.yaml```, ```role-binding.yaml``` and ```service-account.yaml``` allow the jenkins pod to make API calls with ```kubectl``` to the host kubernetes engine:\n```\njcluser@ubuntu:~$ kubectl get role\nNAME          CREATED AT\nmodify-pods   2023-08-22T13:17:17Z\n```\nand:\n```\njcluser@ubuntu:~$ kubectl get sa\nNAME                   SECRETS   AGE\ndefault                0         52d\ninternal-jenknis-pod   0         52d\n```\nTo be able to use the nita-cli Jenkins commands we have to extract the crt from the jenkins_keystore create a Kubernetes configMap and the jenkins-deployment yaml will load that at pod initialization.\nFirst create a jenkins_keystore if you did not create one previously:\n```\nkeytool -genkey -keyalg RSA -alias selfsigned -keystore jenkins_keystore.jks -keypass nita123 -storepass nita123 -keysize 4096 -dname \"cn=jenkins, ou=, o=, l=, st=, c=\"\nkeytool -importkeystore -srckeystore jenkins_keystore.jks -destkeystore jenkins.p12 -deststoretype PKCS12\nopenssl pkcs12 -in jenkins.p12 -nokeys -out jenkins.crt\n```\nOther special considerations are configmaps for jenkins and its proxy:\n```\nkubectl create configmap jenkins-crt --from-file=/home/jcluser/nita-jenkins/certificates/jenkins.crt --namespace nita\nkubectl create cm jenkins-keystore --from-file=/home/jcluser/nita-jenkins/certificates/jenkins_keystore.jks --namespace nita\nkubectl create cm proxy-config-cm --from-file=/home/jcluser/nginx/nginx.conf --namespace nita\nkubectl create cm proxy-cert-cm --from-file=/home/jcluser/nginx/certificates/ --namespace nita\n```\nas shown here:\n```\njcluser@ubuntu:~$ kubectl get cm -n nita\nNAME               DATA   AGE\njenkins-crt        1      52d\njenkins-keystore   1      52d\nproxy-cert-cm      2      52d\nproxy-config-cm    1      52d\n```\n\n# Getting Involved\n\nWe hope that you enjoy using NITA, and if you do, please give the code a star on GitHub. If you spot anything wrong please raise an Issue and if you want to contribute please raise a Pull Request on the work that you have done. You can find out more details about how to contribute by reading the [CONTRIBUTE.md](CONTRIBUTE.md) document.\n\n# Copyright\n\nCopyright 2024, Juniper Networks, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuniper%2Fnita","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuniper%2Fnita","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuniper%2Fnita/lists"}