diff --git a/artifact_manager.ipynb b/artifact_manager.ipynb new file mode 100644 index 00000000..f16e1330 --- /dev/null +++ b/artifact_manager.ipynb @@ -0,0 +1,75 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d95f0b2d-df12-4956-b049-19ede4d10f7e", + "metadata": {}, + "source": [ + "# FABRIC Artifact Manager:\n", + "\n", + "The FABRIC [Artifacts Manager](https://artifacts.fabric-testbed.net) is an invaluable tool for researchers and developers working with the FABRIC testbed. It facilitates the packaging, sharing, and reuse of complete, repeatable FABRIC experiments. By leveraging the FABRIC fablib, users can efficiently manage and interact with experimental artifacts in a streamlined, user-friendly manner. This not only ensures reproducibility but also enhances collaboration by making experiments easily accessible to others.\n", + "\n", + "## Accessing and Sharing Artifacts\n", + "Artifacts managed through the FABRIC Artifacts Manager can be easily accessed by anyone with the appropriate permissions. Whether you're looking to share your experiment with collaborators or make your work publicly available, the Artifact Manager simplifies this process.\n", + "\n", + "- **Public Artifacts**: Any user can read and download public artifacts directly from the Artifact Manager website or via the user interface generated by `ArtifactManagerUI`.\n", + "\n", + "- **Project-Specific Artifacts**: Artifacts that are tied to specific projects can also be accessed by project members, ensuring that all collaborators have easy access to the data and resources they need.\n", + "\n", + "This setup ensures that your experiments are not only repeatable but also sharable, fostering collaboration and innovation within the research community.\n" + ] + }, + { + "cell_type": "markdown", + "id": "9cb8171b-6b07-4d82-98fb-4d397602995a", + "metadata": {}, + "source": [ + "## Code Example\n", + "The following Python code demonstrates how to utilize the **FABRIC fablib** and `ArtifactManagerUI` to manage experimental artifacts. This example provides a foundation for interacting with and managing these artifacts directly through a user interface in the Jupyter Hub Environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7375a04e-91bf-4c03-8093-f9b3d2de8900", + "metadata": {}, + "outputs": [], + "source": [ + "from fabrictestbed_extensions.fablib.fablib import FablibManager\n", + "from fabrictestbed_extensions.ui.artifact_manager_ui import ArtifactManagerUI\n", + "\n", + "artifact_manager_ui = ArtifactManagerUI(fablib=FablibManager())\n", + "artifact_manager_ui.create_ui()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65cf8499-ecb7-49a0-95f2-ee9b552d05b5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/artifacts.json b/artifacts.json new file mode 100644 index 00000000..3baf7512 --- /dev/null +++ b/artifacts.json @@ -0,0 +1,508 @@ +{ + "configure_and_validate": { + "title": "FABRIC Example: Configure Environment", + "description_short": "Configure you Environment including creating the `fabric_rc` and `ssh_config` files.", + "description_long": "", + "location": "configure_and_validate", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "hello_fabric": { + "title": "FABRIC Example: Hello, FABRIC", + "description_short": "Simple First Slice Example.", + "description_long": "", + "location": "fabric_examples/fablib_api/hello_fabric", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "list_all_resources": { + "title": "FABRIC Example: Listing Available Resources", + "description_short": "List resource capacity and availability. Output options: Text, Pandas, JSON, and Python List[Dict]. Find sites containing available components and capacities.", + "description_long": "", + "location": "fabric_examples/fablib_api/sites_and_resources", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] + }, + "create_slice": { + "title": "FABRIC Example: Validate and Submit a Slice", + "description_short": "Options that can be used when creating, validating, and submitting current or future slices.", + "description_long": "", + "location": "fabric_examples/fablib_api/create_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] + }, + "delete_slice": { + "title": "FABRIC Example: Delete Slice(s)", + "description_short": "Options for deleting a slice or slices.", + "description_long": "", + "location": "fabric_examples/fablib_api/delete_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "list_slices": { + "title": "FABRIC Example: List All Slice(s), Slice's Nodes, Networks, Components, and Interfaces", + "description_short": "Options for listing slice(s).", + "description_long": "Find and list parts of slice(s).", + "location": "fabric_examples/fablib_api/slices", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] + }, + "renew_slice": { + "title": "FABRIC Example: Extending a Slice Reservation", + "description_short": "Extend a slice reservation for a longer period of time.", + "description_long": "", + "location": "fabric_examples/fablib_api/renew_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] + }, + "save_and_load": { + "title": "FABRIC Example: Save/Load Slices", + "description_short": "Save an experimental topology and load it at a later time.", + "description_long": "", + "location": "fabric_examples/fablib_api/save_and_load", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "ssh_keys": { + "title": "FABRIC Example: Add/Remove SSH Keys", + "description_short": "Add/Remove SSH Keys to VMs in your slice.", + "description_long": "", + "location": "fabric_examples/fablib_api/ssh_keys", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "slice_sharing": { + "title": "FABRIC Example: Share Slices", + "description_short": "Collaborative Slice Access between project members.", + "description_long": "", + "location": "fabric_examples/fablib_api/slice_sharing", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "modify_slice": { + "title": "FABRIC Example: Modifying Slices", + "description_short": "Modify an existing slice by adding/removing resources.", + "description_long": "", + "location": "fabric_examples/fablib_api/modify_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "customizing_nodes": { + "title": "FABRIC Example: Customizing Nodes", + "description_short": "Set node properties (site, image, cores, ram, disk, etc.).", + "description_long": "", + "location": "fabric_examples/fablib_api/customizing_nodes", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "ssh_to_nodes": { + "title": "FABRIC Example: Execute Commands on Nodes", + "description_short": "Show how to remotely log into a running FABRIC node.", + "description_long": "", + "location": "fabric_examples/fablib_api/ssh_to_nodes", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "ssh_tunnels": { + "title": "FABRIC Example: SSH Tunnels", + "description_short": "Create SSH tunnels from your local machine (i.e., your laptop) to FABRIC Nodes.", + "description_long": "", + "location": "fabric_examples/fablib_api/ssh_tunnels", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "local_disk": { + "title": "FABRIC Example: Local Disk", + "description_short": "Create a node with a custom local disk size.", + "description_long": "", + "location": "fabric_examples/fablib_api/local_disk", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "basic_nvme_devices": { + "title": "FABRIC Example: NVMe Devices", + "description_short": "Create a node with an NVMe device.", + "description_long": "", + "location": "fabric_examples/fablib_api/basic_nvme_devices", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "persistent_storage": { + "title": "FABRIC Example: Persistent Storage", + "description_short": "Connect to your project's persistent storage volume.", + "description_long": "", + "location": "fabric_examples/fablib_api/persistent_storage", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "fabric_all_gpus": { + "title": "FABRIC Example: All FABRIC GPUs: Tesla T4, RTX6000, A30, A40", + "description_short": "Create a node with any GPU type.", + "description_long": "", + "location": "fabric_examples/fablib_api/fabric_all_gpus", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "create_l3network_fabnet_ipv4": { + "title": "FABRIC Example: FABNet IPv4 (Layer 3)", + "description_short": "Connect to FABRIC's IPv4 internet", + "description_long": "Connect to FABRIC's IPv4 internet with three configuration options - auto, manual or user defined.", + "location": "fabric_examples/fablib_api/create_l3network_fabnet_ipv4", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "create_l3network_fabnet_ipv4_ext": { + "title": "FABRIC Example: FABNet IPv4 Ext (Layer 3)", + "description_short": "Connect to FABRIC's IPv4 internet with external access", + "description_long": "", + "location": "fabric_examples/fablib_api/create_l3network_fabnet_ipv4ext_manual", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "create_l3network_fabnet_ipv6": { + "title": "FABRIC Example: FABNet IPv6 (Layer 3)", + "description_short": "Connect to FABRIC's IPv6 internet", + "description_long": "Connect to FABRIC's IPv6 internet with three configuration options - auto, manual or user defined", + "location": "fabric_examples/fablib_api/create_l3network_fabnet_ipv6", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "create_l3network_fabnet_ipv6_ext": { + "title": "FABRIC Example: FABNet IPv6 Ext (Layer 3)", + "description_short": "Connect to FABRIC's IPv6 internet with external access", + "description_long": "", + "location": "fabric_examples/fablib_api/create_l3network_fabnet_ipv6ext_manual", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "create_l2network_basic": { + "title": "FABRIC Example: Local Ethernet (Layer 2)", + "description_short": "Create a private local Ethernet network on a FABRIC site", + "description_long": "Create a private local Ethernet network on a FABRIC site with three configuration options - auto, manual or user defined", + "location": "fabric_examples/fablib_api/create_l2network_basic", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "create_l2network_wide_area": { + "title": "FABRIC Example: Wide Area Link (Layer 2)", + "description_short": "Create a private WAN Ethernet link between FABRIC sites", + "description_long": "Create a private WAN Ethernet link between FABRIC sites with three configuration options - auto, manual or user defined", + "location": "fabric_examples/fablib_api/create_l2network_basic", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "create_port_mirror": { + "title": "FABRIC Example: Port Mirroring", + "description_short": "Listen in on traffic in FABRIC dataplane using PortMirror service", + "description_long": "Listen in on traffic in FABRIC dataplane using PortMirror service - Infrastructure Port Mirroring or InSlice Port Mirroring", + "location": "fabric_examples/fablib_api/create_port_mirror", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "sub_interfaces": { + "title": "FABRIC Example: Sub Interfaces", + "description_short": "Create VLAN-tagged sub-interfaces for Smart NICs, enabling multiple Network Services connections.", + "description_long": "", + "location": "fabric_examples/fablib_api/sub_interfaces", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "fabric_fpgas": { + "title": "FABRIC Example: Provision a single FPGA and/or configure it using ESnet workflow", + "description_short": "Provision a single FPGA and/or configure it using ESnet workflow.", + "description_long": "", + "location": "fabric_examples/fablib_api/fabric_fpgas", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "upload_and_execute": { + "title": "FABRIC Example: Upload and Execute Scripts", + "description_short": "Upload a script and execute it.", + "description_long": "", + "location": "fabric_examples/fablib_api/upload_and_execute", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "parallel_config": { + "title": "FABRIC Example: Parallel Experiment Configuration", + "description_short": "Use threads to configure experiments in parallel.", + "description_long": "", + "location": "fabric_examples/fablib_api/parallel_config", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "post_boot_tasks": { + "title": "FABRIC Example: Post Boot Tasks", + "description_short": "Define post boot tasks with or without templates to upload files and execute commands.", + "description_long": "", + "location": "fabric_examples/fablib_api/post_boot_tasks", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "docker_containers": { + "title": "FABRIC Example: Deploy Docker Containers", + "description_short": "Docker", + "description_long": "", + "location": "fabric_examples/fablib_api/docker_containers", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "add_keys_into_slice": { + "title": "FABRIC Example: Adding other user's keys into slice", + "description_short": "Add new keys on submit or add later via POA (Perform Operational Action).", + "description_long": "", + "location": "fabric_examples/fablib_api/other_ssh_keys", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "FRRouting": { + "title": "FABRIC Example: FRRouting OSPF", + "description_short": "Example of deploying OSPF across a wide-area using FRRouting (similar to Quagga).", + "description_long": "", + "location": "fabric_examples/complex_recipes/FRRouting", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "openvswitch": { + "title": "FABRIC Example: OpenVSwitch", + "description_short": "Example of deploying OpenVSwitch in a node.", + "description_long": "", + "location": "fabric_examples/complex_recipes/openvswitch", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "iperf3": { + "title": "FABRIC Example: iPerf3", + "description_short": "Test bandwidth across your FABRIC slice.", + "description_long": "Test bandwidth across your FABRIC slice. Apply CPU Pinning and Numa tuning with NIC_Basic or Smart NICs and test bandwidth across your FABRIC slice.", + "location": "fabric_examples/complex_recipes/iPerf3", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] + }, + "dpdk_smart_nic": { + "title": "FABRIC Example: DPDK and Pktgen with Smart NICs", + "description_short": "Program your smart nics with DPDK.", + "description_long": "", + "location": "fabric_examples/complex_recipes/networking/programmable_networking/dpdk_smart_nic", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] + }, + "peering_client": { + "title": "FABRIC Example: Peering Client", + "description_short": "Setting up a PEERING client on FABRIC", + "description_long": "", + "location": "fabric_examples/complex_recipes/networking/peering_client", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "lom2019@ufmg.br", + "kthare10@email.unc.edu" + ] + }, + "grafana_prometheus_servers": { + "title": "FABRIC Example: Measuring and Visualizing with Grafana and Prometheus", + "description_short": "Deploy a Grafana/Prometheus services on a FABIRC node using Docker. Create a slice that can be monitored by a Grafana/Prometheus server.", + "description_long": "", + "location": "fabric_examples/complex_recipes/grafana_prometheus_servers", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "kubernetes": { + "title": "FABRIC Example: Kubernetes Cluster", + "description_short": "Create a private Kubernetes cluster on FABRIC resources.", + "description_long": "", + "location": "fabric_examples/complex_recipes/kubernetes", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "tailscale": { + "title": "FABRIC Example: Tailscale Mesh VPN", + "description_short": "Create a private mesh VPN with [Tailscale](http://tailscale.com) to accesss and manage your slice.", + "description_long": "", + "location": "fabric_examples/complex_recipes/tailscale", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "p4_labs_bmv2": { + "title": "FABRIC Example: P4 Labs (BMv2)", + "description_short": "Lab series on P4 programmable switches using the Behavioral Model (BMv2).", + "description_long": "", + "location": "fabric_examples/complex_recipes/p4_labs_bmv2", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "ekfoury@email.sc.edu" + ] + }, + "public_demos": { + "title": "FABRIC Example: Demos and Tutorials", + "description_short": "Files for live demos and tutorials.", + "description_long": "", + "location": "fabric_examples/public_demos", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] + }, + "Chameleon_Facility_Port": { + "title": "FABRIC Example: Chameleon Facility Ports", + "description_short": "Create slices spanning Chameleon and FABRIC via Layer 2 or Layer 3", + "description_long": "", + "location": "fabric_examples/complex_recipes/Chameleon_Facility_Port", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] + }, + "Cloudlab_Facility_Port": { + "title": "FABRIC Example: CloudLab Facility Ports", + "description_short": "Create slices spanning Cloud Lab and FABRIC via Layer 2", + "description_long": "", + "location": "fabric_examples/complex_recipes/Cloudlab_Facility_Port", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kissel@es.net" + ] + }, + "mflib": { + "title": "FABRIC Example: Monitoring with MFLib Examples", + "description_short": "Examples for setting up automated monitoring in your slice.", + "description_long": "", + "location": "fabric_examples/mflib", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "hussam.nasir@uky.edu", + "charles.s.carpenter@uky.edu", + "yongwook.song@uky.edu", + "mami.hayashida@uky.edu", + "pinyi.shi@uky.edu" + ] + } +} diff --git a/configure_and_validate.ipynb b/configure_and_validate/configure_and_validate.ipynb similarity index 100% rename from configure_and_validate.ipynb rename to configure_and_validate/configure_and_validate.ipynb diff --git a/fabric_examples/fablib_api/create_l2network_basic_auto/create_l2network_basic_auto.ipynb b/fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_auto.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l2network_basic_auto/create_l2network_basic_auto.ipynb rename to fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_auto.ipynb diff --git a/fabric_examples/fablib_api/create_l2network_basic_config/create_l2network_basic_config.ipynb b/fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_config.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l2network_basic_config/create_l2network_basic_config.ipynb rename to fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_config.ipynb diff --git a/fabric_examples/fablib_api/create_l2network_basic_manual/create_l2network_basic_manual.ipynb b/fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_manual.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l2network_basic_manual/create_l2network_basic_manual.ipynb rename to fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_manual.ipynb diff --git a/fabric_examples/fablib_api/create_l2network_wide_area_auto/create_l2network_wide_area_auto.ipynb b/fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_auto.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l2network_wide_area_auto/create_l2network_wide_area_auto.ipynb rename to fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_auto.ipynb diff --git a/fabric_examples/fablib_api/create_l2network_wide_area_config/create_l2network_wide_area_config.ipynb b/fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_config.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l2network_wide_area_config/create_l2network_wide_area_config.ipynb rename to fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_config.ipynb diff --git a/fabric_examples/fablib_api/create_l2network_wide_area_ero_auto/create_l2network_wide_area_ero_auto.ipynb b/fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_ero_auto.ipynb similarity index 77% rename from fabric_examples/fablib_api/create_l2network_wide_area_ero_auto/create_l2network_wide_area_ero_auto.ipynb rename to fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_ero_auto.ipynb index 4a76c0b3..da00bd55 100644 --- a/fabric_examples/fablib_api/create_l2network_wide_area_ero_auto/create_l2network_wide_area_ero_auto.ipynb +++ b/fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_ero_auto.ipynb @@ -38,9 +38,9 @@ "source": [ "## Create the Experiment Slice\n", "\n", - "The following script sets up two nodes, each with dedicated NICs connected to two isolated WAN Ethernets, with and without Explicit Routes.\n", + "The script below configures two nodes on the Tera Core, each equipped with a dedicated NIC connected to two separate WAN Ethernets, one with and one without Explicit Routes.\n", "\n", - "Two nodes are instantiated, each with a NIC component added. This script employs components modeled after NIC_ConnectX_6, representing a 100 Gpbs Mellanox ConnectX-6 PCI device. When using dedicated PCI devices, the entire physical device is allocated to one node, accessed through PCI passthrough. Using the `get_interfaces()` method on a component retrieves a list of interfaces. Many dedicated NIC components may have multiple ports, with either port connectable to the network.\n", + "Two nodes are instantiated, each with a dedicated NIC component, as a Point-to-Point connection is required, which is only supported by dedicated NICs. The nodes are then connected via two distinct Wide Area Layer 2 networks, with each network following a different explicitly specified path. The resulting latency differences between the two paths are then observed.\n", "\n", "\n", "NIC component model options include:\n", @@ -55,13 +55,15 @@ "outputs": [], "source": [ "slice_name = 'MySlice-ero'\n", - "[site1, site2, site3] = fablib.get_random_sites(count=3)\n", - "print(f\"Sites: {site1}, {site2}, {site3}\")\n", + "[site1, site2, site3, site4] = [\"ATLA\", \"WASH\", \"STAR\", \"NEWY\"]\n", + "print(f\"Sites: {site1}, {site2}, {site3}, {site4}\")\n", "\n", "node1_name = 'Node1'\n", "node2_name = 'Node2'\n", - "net1_name = 'net-with-ero'\n", - "net2_name = 'net'" + "# Path1 : LOSA -> SALT -> NEWY\n", + "# Path2 : LOSA -> DALL -> NEWY\n", + "net1_name = 'net-with-ero-path1' \n", + "net2_name = 'net-with-ero-path2'" ] }, { @@ -94,7 +96,7 @@ "net2.add_interface(n1_nic1.get_interfaces()[1])\n", "\n", "# Node2\n", - "node2 = slice.add_node(name=node2_name, site=site2)\n", + "node2 = slice.add_node(name=node2_name, site=site4)\n", "n2_nic1 = node2.add_component(model='NIC_ConnectX_5', name='nic1')\n", "\n", "n2_nic1.get_interfaces()[0].set_mode('auto')\n", @@ -107,8 +109,10 @@ "net2.add_interface(n2_nic1.get_interfaces()[1])\n", "\n", "# Set Explicit Route Options for Network1\n", - "net1.set_l2_route_hops(hops=[site3])\n", + "net1.set_l2_route_hops(hops=[site2])\n", "\n", + "# Set Explicit Route Options for Network2\n", + "net2.set_l2_route_hops(hops=[site3])\n", "\n", "#Submit Slice Request\n", "slice.submit()" @@ -119,7 +123,7 @@ "metadata": {}, "source": [ "## Run the Experiment\n", - "We demonstrate the variance in delay between two networks. It's important to note that the network utilizing ERO exhibits greater ping delay compared to the network without ERO." + "We illustrate the variation in delay between the two networks, highlighting that latency varies depending on the selected paths." ] }, { @@ -139,7 +143,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Ping on the Network with Explicit Routes" + "### Ping on the Network with Explicit Routes on Path1" ] }, { @@ -157,7 +161,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Ping on the Network without Explicit Routes" + "### Ping on the Network with Explicit Routes on Path2 " ] }, { @@ -188,6 +192,13 @@ "source": [ "slice.delete()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/fabric_examples/fablib_api/create_l2network_wide_area_manual/create_l2network_wide_area_manual.ipynb b/fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_manual.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l2network_wide_area_manual/create_l2network_wide_area_manual.ipynb rename to fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_manual.ipynb diff --git a/fabric_examples/fablib_api/create_l3network_fabnet_ipv4_auto/create_l3network_fabnet_ipv4_auto.ipynb b/fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_auto.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l3network_fabnet_ipv4_auto/create_l3network_fabnet_ipv4_auto.ipynb rename to fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_auto.ipynb diff --git a/fabric_examples/fablib_api/create_l3network_fabnet_ipv4_full_auto/create_l3network_fabnet_ipv4_full_auto.ipynb b/fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_full_auto.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l3network_fabnet_ipv4_full_auto/create_l3network_fabnet_ipv4_full_auto.ipynb rename to fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_full_auto.ipynb diff --git a/fabric_examples/fablib_api/create_l3network_fabnet_ipv4_manual/create_l3network_fabnet_ipv4_manual.ipynb b/fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_manual.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l3network_fabnet_ipv4_manual/create_l3network_fabnet_ipv4_manual.ipynb rename to fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_manual.ipynb diff --git a/fabric_examples/fablib_api/create_l3network_fabnet_ipv6_auto/create_l3network_fabnet_ipv6_auto.ipynb b/fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_auto.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l3network_fabnet_ipv6_auto/create_l3network_fabnet_ipv6_auto.ipynb rename to fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_auto.ipynb diff --git a/fabric_examples/fablib_api/create_l3network_fabnet_ipv6_full_auto/create_l3network_fabnet_ipv6_full_auto.ipynb b/fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_full_auto.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l3network_fabnet_ipv6_full_auto/create_l3network_fabnet_ipv6_full_auto.ipynb rename to fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_full_auto.ipynb diff --git a/fabric_examples/fablib_api/create_l3network_fabnet_ipv6_manual/create_l3network_fabnet_ipv6_manual.ipynb b/fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_manual.ipynb similarity index 100% rename from fabric_examples/fablib_api/create_l3network_fabnet_ipv6_manual/create_l3network_fabnet_ipv6_manual.ipynb rename to fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_manual.ipynb diff --git a/start_here.ipynb b/start_here.ipynb index 9f854b4c..1fdc0ac4 100644 --- a/start_here.ipynb +++ b/start_here.ipynb @@ -24,9 +24,11 @@ "## Getting Started\n", "\n", "- Setup Environment\n", - " - [Configure Environment](./configure_and_validate.ipynb): Configure you Environment including creating the `fabric_rc` and `ssh_config` files.\n", + " - [Configure Environment](./configure_and_validate/configure_and_validate.ipynb): Configure you Environment including creating the `fabric_rc` and `ssh_config` files.\n", "- First Experiment\n", " - [Hello, FABRIC](./fabric_examples/fablib_api/hello_fabric/hello_fabric.ipynb): Simple First Slice Example.\n", + "- Artifact Manager\n", + " - [Explore FABRIC Artifacts](./artifact_manager.ipynb): Managing and Sharing Reproducible Experiments with FABRIC Artifacts Manager.\n", "\n", "## Basic Examples\n", "\n", @@ -60,12 +62,12 @@ "\n", "- Networking\n", "\n", - " - FABNet IPv4 (Layer 3): Connect to FABRIC's IPv4 internet ([manual](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4_manual/create_l3network_fabnet_ipv4_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4_auto/create_l3network_fabnet_ipv4_auto.ipynb), [full auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4_full_auto/create_l3network_fabnet_ipv4_full_auto.ipynb))\n", + " - FABNet IPv4 (Layer 3): Connect to FABRIC's IPv4 internet ([manual](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_auto.ipynb), [full auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4/create_l3network_fabnet_ipv4_full_auto.ipynb))\n", " - FABNet IPv4 Ext (Layer 3): Connect to FABRIC's IPv4 internet with external access ([manual](./fabric_examples/fablib_api/create_l3network_fabnet_ipv4ext_manual/create_l3network_fabnet_ipv4ext_manual.ipynb))\n", - " - FABNet IPv6 (Layer 3): Connect to FABRIC's IPv6 internet ([manual](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6_manual/create_l3network_fabnet_ipv6_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6_auto/create_l3network_fabnet_ipv6_auto.ipynb), [full auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6_full_auto/create_l3network_fabnet_ipv6_full_auto.ipynb))\n", + " - FABNet IPv6 (Layer 3): Connect to FABRIC's IPv6 internet ([manual](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_auto.ipynb), [full auto](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6/create_l3network_fabnet_ipv6_full_auto.ipynb))\n", " - FABNet IPv6 Ext (Layer 3): Connect to FABRIC's IPv6 internet with external access ([manual](./fabric_examples/fablib_api/create_l3network_fabnet_ipv6ext_manual/create_l3network_fabnet_ipv6ext_manual.ipynb))\n", - " - Local Ethernet (Layer 2): Create a private local Ethernet network on a FABRIC site ([manual](./fabric_examples/fablib_api/create_l2network_basic_manual/create_l2network_basic_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l2network_basic_auto/create_l2network_basic_auto.ipynb), [user defined](./fabric_examples/fablib_api/create_l2network_basic_config/create_l2network_basic_config.ipynb))\n", - " - Wide Area Link (Layer 2): Create a private WAN Ethernet link between FABRIC sites ([manual](./fabric_examples/fablib_api/create_l2network_wide_area_manual/create_l2network_wide_area_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l2network_wide_area_auto/create_l2network_wide_area_auto.ipynb), [user defined](./fabric_examples/fablib_api/create_l2network_wide_area_config/create_l2network_wide_area_config.ipynb), [explicit routes](./fabric_examples/fablib_api/create_l2network_wide_area_ero_auto/create_l2network_wide_area_ero_auto.ipynb))\n", + " - Local Ethernet (Layer 2): Create a private local Ethernet network on a FABRIC site ([manual](./fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_auto.ipynb), [user defined](./fabric_examples/fablib_api/create_l2network_basic/create_l2network_basic_config.ipynb))\n", + " - Wide Area Link (Layer 2): Create a private WAN Ethernet link between FABRIC sites ([manual](./fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_manual.ipynb), [auto](./fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_auto.ipynb), [user defined](./fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_config.ipynb), [explicit routes](./fabric_examples/fablib_api/create_l2network_wide_area/create_l2network_wide_area_ero_auto.ipynb))\n", " - [Facility Ports](./fabric_examples/fablib_api/facility_port/facility_port.ipynb): Connect a FABRIC experiment to an external facility such as [Chameleon](https://www.chameleoncloud.org/). \n", " - Port Mirroring: Listen in on traffic in FABRIC dataplane using PortMirror service ([Infrastructure](./fabric_examples/fablib_api/create_port_mirror/port_mirror.ipynb), [InSlice](./fabric_examples/fablib_api/create_port_mirror/port_mirror_basic.ipynb))\n", " - [Sub Interfaces](./fabric_examples/fablib_api/sub_interfaces/sub_interfaces.ipynb): Create VLAN-tagged sub-interfaces for Smart NICs, enabling multiple Network Services connections.\n", @@ -108,7 +110,7 @@ " - [Peering Client](./fabric_examples/complex_recipes/networking/peering_client/peering-client-setup.ipynb): setting up a PEERING client on FABRIC\n", "- Component Benchmarking\n", " - Storage\n", - " - [Benchmarking FABRIC Storage: Local disk and NVMe](./fabric_examples/fablib_api/bbenchmarking_storage/enchmarking_storage.ipynb): Create and benchmark a node with local disk and NVMe device.\n", + " - [Benchmarking FABRIC Storage: Local disk and NVMe](./fabric_examples/fablib_api/benchmarking_storage/benchmarking_storage.ipynb): Create and benchmark a node with local disk and NVMe device.\n", "- Experiment Measurements\n", " - Measuring and Visualizing with Grafana and Prometheus\n", " - [Grafana/Prometheus Server](./fabric_examples/complex_recipes/grafana_prometheus_servers/grafana-prometheus-servers.ipynb): Deploy a Grafana/Prometheus services on a FABIRC node using Docker.\n",