From 50d5cb3ad9d023e31ac9d321c0e879449ca3e2a5 Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Mon, 12 Aug 2024 16:56:53 -0400 Subject: [PATCH 1/4] update the ero notebook --- .../create_l2network_wide_area_ero_auto.ipynb | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) 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_ero_auto/create_l2network_wide_area_ero_auto.ipynb index 4a76c0b..da00bd5 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_ero_auto/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": { From f8fb89bb6bc55509fb5efe107368e7128c6ffb7c Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Thu, 22 Aug 2024 14:15:38 -0400 Subject: [PATCH 2/4] restructured examples to enable automatic push to artifact manager --- artifacts.json | 272 ++++++++++++++++++ .../configure_and_validate.ipynb | 0 .../create_l2network_basic_auto.ipynb | 0 .../create_l2network_basic_config.ipynb | 0 .../create_l2network_basic_manual.ipynb | 0 .../create_l2network_wide_area_auto.ipynb | 0 .../create_l2network_wide_area_config.ipynb | 0 .../create_l2network_wide_area_ero_auto.ipynb | 0 .../create_l2network_wide_area_manual.ipynb | 0 .../create_l3network_fabnet_ipv4_auto.ipynb | 0 ...eate_l3network_fabnet_ipv4_full_auto.ipynb | 0 .../create_l3network_fabnet_ipv4_manual.ipynb | 0 .../create_l3network_fabnet_ipv6_auto.ipynb | 0 ...eate_l3network_fabnet_ipv6_full_auto.ipynb | 0 .../create_l3network_fabnet_ipv6_manual.ipynb | 0 start_here.ipynb | 12 +- 16 files changed, 278 insertions(+), 6 deletions(-) create mode 100644 artifacts.json rename configure_and_validate.ipynb => fabric_examples/configure_and_validate/configure_and_validate.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_basic_auto => create_l2network_basic}/create_l2network_basic_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_basic_config => create_l2network_basic}/create_l2network_basic_config.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_basic_manual => create_l2network_basic}/create_l2network_basic_manual.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_wide_area_auto => create_l2network_wide_area}/create_l2network_wide_area_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_wide_area_config => create_l2network_wide_area}/create_l2network_wide_area_config.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_wide_area_ero_auto => create_l2network_wide_area}/create_l2network_wide_area_ero_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l2network_wide_area_manual => create_l2network_wide_area}/create_l2network_wide_area_manual.ipynb (100%) rename fabric_examples/fablib_api/{create_l3network_fabnet_ipv4_auto => create_l3network_fabnet_ipv4}/create_l3network_fabnet_ipv4_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l3network_fabnet_ipv4_full_auto => create_l3network_fabnet_ipv4}/create_l3network_fabnet_ipv4_full_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l3network_fabnet_ipv4_manual => create_l3network_fabnet_ipv4}/create_l3network_fabnet_ipv4_manual.ipynb (100%) rename fabric_examples/fablib_api/{create_l3network_fabnet_ipv6_auto => create_l3network_fabnet_ipv6}/create_l3network_fabnet_ipv6_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l3network_fabnet_ipv6_full_auto => create_l3network_fabnet_ipv6}/create_l3network_fabnet_ipv6_full_auto.ipynb (100%) rename fabric_examples/fablib_api/{create_l3network_fabnet_ipv6_manual => create_l3network_fabnet_ipv6}/create_l3network_fabnet_ipv6_manual.ipynb (100%) diff --git a/artifacts.json b/artifacts.json new file mode 100644 index 0000000..4c3a833 --- /dev/null +++ b/artifacts.json @@ -0,0 +1,272 @@ +{ + "configure_and_validate": { + "title": "Configure Environment", + "description_short": "Configure you Environment including creating the `fabric_rc` and `ssh_config` files.", + "description_long": "", + "location": "configure_and_validate" + }, + "hello_fabric": { + "title": "Hello, FABRIC", + "description_short": "Simple First Slice Example.", + "description_long": "", + "location": "fabric_examples/fablib_api/hello_fabric" + }, + "list_all_resources": { + "title": "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" + }, + "create_slice": { + "title": "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" + }, + "delete_slice": { + "title": "Delete Slice(s)", + "description_short": "Options for deleting a slice or slices.", + "description_long": "", + "location": "fabric_examples/fablib_api/delete_slice" + }, + "list_slices": { + "title": "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" + }, + "renew_slice": { + "title": "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/renew_slice" + }, + "save_and_load": { + "title": "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" + }, + "ssh_keys": { + "title": "Add/Remove SSH Keys", + "description_short": "Add/Remove SSH Keys to VMs in your slice.", + "description_long": "", + "location": "fabric_examples/fablib_api/ssh_keys" + }, + "slice_sharing": { + "title": "Share Slices", + "description_short": "Collaborative Slice Access between project members.", + "description_long": "", + "location": "fabric_examples/fablib_api/slice_sharing" + }, + "modify_slice": { + "title": "Modifying Slices", + "description_short": "Modify an existing slice by adding/removing resources.", + "description_long": "", + "location": "fabric_examples/fablib_api/modify_slice" + }, + "customizing_nodes": { + "title": "Customizing Nodes", + "description_short": "Set node properties (site, image, cores, ram, disk, etc.).", + "description_long": "", + "location": "fabric_examples/fablib_api/customizing_nodes" + }, + "ssh_to_nodes": { + "title": "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" + }, + "ssh_tunnels": { + "title": "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" + }, + "local_disk": { + "title": "Local Disk", + "description_short": "Create a node with a custom local disk size.", + "description_long": "", + "location": "fabric_examples/fablib_api/local_disk" + }, + "basic_nvme_devices": { + "title": "NVMe Devices", + "description_short": "Create a node with an NVMe device.", + "description_long": "", + "location": "fabric_examples/fablib_api/basic_nvme_devices" + }, + "persistent_storage": { + "title": "Persistent Storage", + "description_short": "Connect to your project's persistent storage volume.", + "description_long": "", + "location": "fabric_examples/fablib_api/persistent_storage" + }, + "fabric_all_gpus": { + "title": "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" + }, + "create_l3network_fabnet_ipv4": { + "title": "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" + }, + "create_l3network_fabnet_ipv4_ext": { + "title": "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" + }, + "create_l3network_fabnet_ipv6": { + "title": "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" + }, + "create_l3network_fabnet_ipv6_ext": { + "title": "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" + }, + "create_l2network_basic": { + "title": "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" + }, + "create_l2network_wide_area": { + "title": "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" + }, + "create_port_mirror": { + "title": "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" + }, + "sub_interfaces": { + "title": "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" + }, + "fabric_fpgas": { + "title": "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" + }, + "upload_and_execute": { + "title": "Upload and Execute Scripts", + "description_short": "Upload a script and execute it.", + "description_long": "", + "location": "fabric_examples/fablib_api/upload_and_execute" + }, + "parallel_config": { + "title": "Parallel Experiment Configuration", + "description_short": "Use threads to configure experiments in parallel.", + "description_long": "", + "location": "fabric_examples/fablib_api/parallel_config" + }, + "post_boot_tasks": { + "title": "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" + }, + "docker_containers": { + "title": "Deploy Docker Containers", + "description_short": "Docker", + "description_long": "", + "location": "fabric_examples/fablib_api/docker_containers" + }, + "add_keys_into_slice": { + "title": "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" + }, + "FRRouting": { + "title": "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" + }, + "openvswitch": { + "title": "OpenVSwitch", + "description_short": "Example of deploying OpenVSwitch in a node.", + "description_long": "", + "location": "fabric_examples/complex_recipes/openvswitch" + }, + "iperf3": { + "title": "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" + }, + "dpdk_smart_nic": { + "title": "DPDK and Pktgen with Smart NICs", + "description_short": "Program your smart nics with DPDK.", + "description_long": "", + "location": "fabric_examples/complex_recipes/dpdk_smart_nic" + }, + "peering_client": { + "title": "Peering Client", + "description_short": "Setting up a PEERING client on FABRIC", + "description_long": "", + "location": "fabric_examples/complex_recipes/peering_client" + }, + "grafana_prometheus_servers": { + "title": "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" + }, + "kubernetes": { + "title": "Kubernetes Cluster", + "description_short": "Create a private Kubernetes cluster on FABRIC resources.", + "description_long": "", + "location": "fabric_examples/complex_recipes/kubernetes" + }, + "tailscale": { + "title": "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" + }, + "p4_labs_bmv2": { + "title": "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" + }, + "public_demos": { + "title": "Demos and Tutorials", + "description_short": "Files for live demos and tutorials.", + "description_long": "", + "location": "fabric_examples/complex_recipes/public_demos" + }, + "Chameleon_Facility_Port": { + "title": "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" + }, + "Cloudlab_Facility_Port": { + "title": "CloudLab Facility Ports", + "description_short": "Create slices spanning Cloud Labe and FABRIC via Layer 2", + "description_long": "", + "location": "fabric_examples/complex_recipes/Cloudlab_Facility_Port" + }, + "mflib": { + "title": "Monitoring with MFLib Examples", + "description_short": "Examples for setting up automated monitoring in your slice.", + "description_long": "", + "location": "fabric_examples/mflib" + } +} \ No newline at end of file diff --git a/configure_and_validate.ipynb b/fabric_examples/configure_and_validate/configure_and_validate.ipynb similarity index 100% rename from configure_and_validate.ipynb rename to fabric_examples/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 100% 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 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 9f854b4..61769b4 100644 --- a/start_here.ipynb +++ b/start_here.ipynb @@ -24,7 +24,7 @@ "## 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", "\n", @@ -60,12 +60,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 +108,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", From 0e6c373705d6c11b42990bc2259d507dc40cd211 Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Fri, 30 Aug 2024 17:30:57 -0400 Subject: [PATCH 3/4] add artifact manager initial support --- artifact_manager.ipynb | 75 ++++ artifacts.json | 420 ++++++++++++++---- .../configure_and_validate.ipynb | 0 start_here.ipynb | 2 + 4 files changed, 405 insertions(+), 92 deletions(-) create mode 100644 artifact_manager.ipynb rename {fabric_examples/configure_and_validate => configure_and_validate}/configure_and_validate.ipynb (100%) diff --git a/artifact_manager.ipynb b/artifact_manager.ipynb new file mode 100644 index 0000000..f16e133 --- /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 index 4c3a833..3baf751 100644 --- a/artifacts.json +++ b/artifacts.json @@ -1,272 +1,508 @@ { "configure_and_validate": { - "title": "Configure Environment", + "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" + "location": "configure_and_validate", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "hello_fabric": { - "title": "Hello, FABRIC", + "title": "FABRIC Example: Hello, FABRIC", "description_short": "Simple First Slice Example.", "description_long": "", - "location": "fabric_examples/fablib_api/hello_fabric" + "location": "fabric_examples/fablib_api/hello_fabric", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "list_all_resources": { - "title": "Listing Available 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" + "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": "Validate and Submit a 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" + "location": "fabric_examples/fablib_api/create_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] }, "delete_slice": { - "title": "Delete Slice(s)", + "title": "FABRIC Example: Delete Slice(s)", "description_short": "Options for deleting a slice or slices.", "description_long": "", - "location": "fabric_examples/fablib_api/delete_slice" + "location": "fabric_examples/fablib_api/delete_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "list_slices": { - "title": "List All Slice(s), Slice's Nodes, Networks, Components, and Interfaces", + "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" + "location": "fabric_examples/fablib_api/slices", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] }, "renew_slice": { - "title": "Extending a Slice Reservation", + "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/renew_slice" + "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": "Save/Load Slices", + "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" + "location": "fabric_examples/fablib_api/save_and_load", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "ssh_keys": { - "title": "Add/Remove 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" + "location": "fabric_examples/fablib_api/ssh_keys", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "slice_sharing": { - "title": "Share Slices", + "title": "FABRIC Example: Share Slices", "description_short": "Collaborative Slice Access between project members.", "description_long": "", - "location": "fabric_examples/fablib_api/slice_sharing" + "location": "fabric_examples/fablib_api/slice_sharing", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "modify_slice": { - "title": "Modifying Slices", + "title": "FABRIC Example: Modifying Slices", "description_short": "Modify an existing slice by adding/removing resources.", "description_long": "", - "location": "fabric_examples/fablib_api/modify_slice" + "location": "fabric_examples/fablib_api/modify_slice", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "customizing_nodes": { - "title": "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" + "location": "fabric_examples/fablib_api/customizing_nodes", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "ssh_to_nodes": { - "title": "Execute Commands on 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" + "location": "fabric_examples/fablib_api/ssh_to_nodes", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "ssh_tunnels": { - "title": "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" + "location": "fabric_examples/fablib_api/ssh_tunnels", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "local_disk": { - "title": "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" + "location": "fabric_examples/fablib_api/local_disk", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "basic_nvme_devices": { - "title": "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" + "location": "fabric_examples/fablib_api/basic_nvme_devices", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "persistent_storage": { - "title": "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" + "location": "fabric_examples/fablib_api/persistent_storage", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "fabric_all_gpus": { - "title": "All FABRIC GPUs: Tesla T4, RTX6000, A30, A40", + "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" + "location": "fabric_examples/fablib_api/fabric_all_gpus", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "create_l3network_fabnet_ipv4": { - "title": "FABNet IPv4 (Layer 3)", + "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" + "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": "FABNet IPv4 Ext (Layer 3)", + "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" + "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": "FABNet IPv6 (Layer 3)", + "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" + "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": "FABNet IPv6 Ext (Layer 3)", + "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" + "location": "fabric_examples/fablib_api/create_l3network_fabnet_ipv6ext_manual", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "create_l2network_basic": { - "title": "Local Ethernet (Layer 2)", + "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" + "location": "fabric_examples/fablib_api/create_l2network_basic", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "create_l2network_wide_area": { - "title": "Wide Area Link (Layer 2)", + "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" + "location": "fabric_examples/fablib_api/create_l2network_basic", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "create_port_mirror": { - "title": "Port Mirroring", + "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" + "location": "fabric_examples/fablib_api/create_port_mirror", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "sub_interfaces": { - "title": "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" + "location": "fabric_examples/fablib_api/sub_interfaces", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "fabric_fpgas": { - "title": "Provision a single FPGA and/or configure it using ESnet workflow", + "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" + "location": "fabric_examples/fablib_api/fabric_fpgas", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "upload_and_execute": { - "title": "Upload and Execute Scripts", + "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" + "location": "fabric_examples/fablib_api/upload_and_execute", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "parallel_config": { - "title": "Parallel Experiment Configuration", + "title": "FABRIC Example: Parallel Experiment Configuration", "description_short": "Use threads to configure experiments in parallel.", "description_long": "", - "location": "fabric_examples/fablib_api/parallel_config" + "location": "fabric_examples/fablib_api/parallel_config", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "post_boot_tasks": { - "title": "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" + "location": "fabric_examples/fablib_api/post_boot_tasks", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "docker_containers": { - "title": "Deploy Docker Containers", + "title": "FABRIC Example: Deploy Docker Containers", "description_short": "Docker", "description_long": "", - "location": "fabric_examples/fablib_api/docker_containers" + "location": "fabric_examples/fablib_api/docker_containers", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "add_keys_into_slice": { - "title": "Adding other user's 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" + "location": "fabric_examples/fablib_api/other_ssh_keys", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "FRRouting": { - "title": "FRRouting OSPF", + "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" + "location": "fabric_examples/complex_recipes/FRRouting", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "openvswitch": { - "title": "OpenVSwitch", + "title": "FABRIC Example: OpenVSwitch", "description_short": "Example of deploying OpenVSwitch in a node.", "description_long": "", - "location": "fabric_examples/complex_recipes/openvswitch" + "location": "fabric_examples/complex_recipes/openvswitch", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "iperf3": { - "title": "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" + "location": "fabric_examples/complex_recipes/iPerf3", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] }, "dpdk_smart_nic": { - "title": "DPDK and Pktgen with Smart NICs", + "title": "FABRIC Example: DPDK and Pktgen with Smart NICs", "description_short": "Program your smart nics with DPDK.", "description_long": "", - "location": "fabric_examples/complex_recipes/dpdk_smart_nic" + "location": "fabric_examples/complex_recipes/networking/programmable_networking/dpdk_smart_nic", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kthare10@email.unc.edu" + ] }, "peering_client": { - "title": "Peering Client", + "title": "FABRIC Example: Peering Client", "description_short": "Setting up a PEERING client on FABRIC", "description_long": "", - "location": "fabric_examples/complex_recipes/peering_client" + "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": "Measuring and Visualizing with Grafana and Prometheus", + "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" + "location": "fabric_examples/complex_recipes/grafana_prometheus_servers", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "kubernetes": { - "title": "Kubernetes Cluster", + "title": "FABRIC Example: Kubernetes Cluster", "description_short": "Create a private Kubernetes cluster on FABRIC resources.", "description_long": "", - "location": "fabric_examples/complex_recipes/kubernetes" + "location": "fabric_examples/complex_recipes/kubernetes", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "tailscale": { - "title": "Tailscale Mesh VPN", + "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" + "location": "fabric_examples/complex_recipes/tailscale", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "p4_labs_bmv2": { - "title": "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" + "location": "fabric_examples/complex_recipes/p4_labs_bmv2", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "ekfoury@email.sc.edu" + ] }, "public_demos": { - "title": "Demos and Tutorials", + "title": "FABRIC Example: Demos and Tutorials", "description_short": "Files for live demos and tutorials.", "description_long": "", - "location": "fabric_examples/complex_recipes/public_demos" + "location": "fabric_examples/public_demos", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu", + "kthare10@email.unc.edu" + ] }, "Chameleon_Facility_Port": { - "title": "Chameleon Facility Ports", + "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" + "location": "fabric_examples/complex_recipes/Chameleon_Facility_Port", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "pruth@email.unc.edu" + ] }, "Cloudlab_Facility_Port": { - "title": "CloudLab Facility Ports", - "description_short": "Create slices spanning Cloud Labe and FABRIC via Layer 2", + "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" + "location": "fabric_examples/complex_recipes/Cloudlab_Facility_Port", + "tags": ["fabric", "tutorial"], + "visibility": "public", + "authors":[ + "kissel@es.net" + ] }, "mflib": { - "title": "Monitoring with MFLib Examples", + "title": "FABRIC Example: Monitoring with MFLib Examples", "description_short": "Examples for setting up automated monitoring in your slice.", "description_long": "", - "location": "fabric_examples/mflib" + "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" + ] } -} \ No newline at end of file +} diff --git a/fabric_examples/configure_and_validate/configure_and_validate.ipynb b/configure_and_validate/configure_and_validate.ipynb similarity index 100% rename from fabric_examples/configure_and_validate/configure_and_validate.ipynb rename to configure_and_validate/configure_and_validate.ipynb diff --git a/start_here.ipynb b/start_here.ipynb index 61769b4..b94004e 100644 --- a/start_here.ipynb +++ b/start_here.ipynb @@ -27,6 +27,8 @@ " - [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): Simple First Slice Example.\n", "\n", "## Basic Examples\n", "\n", From d5641b7efa2cdb7c33d29fdd330efeca27f9ac9f Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Fri, 30 Aug 2024 17:32:17 -0400 Subject: [PATCH 4/4] update title for artifact manager --- start_here.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start_here.ipynb b/start_here.ipynb index b94004e..1fdc0ac 100644 --- a/start_here.ipynb +++ b/start_here.ipynb @@ -28,7 +28,7 @@ "- 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): Simple First Slice Example.\n", + " - [Explore FABRIC Artifacts](./artifact_manager.ipynb): Managing and Sharing Reproducible Experiments with FABRIC Artifacts Manager.\n", "\n", "## Basic Examples\n", "\n",