| name | fabric-resource-discovery |
| description | Query FABRIC testbed sites, available resources, hosts, images, and component types |
| allowed-tools | ["Read","Grep","Glob","Write","Edit","Bash"] |
Instructions
When the user asks about FABRIC sites, resources, available hardware, images, or capacity, generate code to discover and query testbed resources. This skill is also auto-invoked when context suggests the user needs resource information.
Always assume FABlib is already initialized as fablib. If unsure, prepend initialization code.
API Reference
Site Discovery
fablib.list_sites(
output=None,
fields=None,
quiet=False,
filter_function=None,
pretty_names=True,
start=None,
end=None,
)
fablib.list_hosts(
output=None,
fields=None,
quiet=False,
filter_function=None,
)
fablib.get_random_site(
avoid=None,
filter_function=None,
update=True,
) -> str
fablib.get_random_sites(
count=1,
avoid=None,
filter_function=None,
update=True,
) -> list[str]
Image Discovery
fablib.get_image_names() -> dict[str, dict]
Common Images
default_ubuntu_24 — Ubuntu 24.04 (default if not specified)
default_ubuntu_22 — Ubuntu 22.04
default_ubuntu_20 — Ubuntu 20.04
default_centos_9_stream — CentOS 9 Stream
default_centos_8 — CentOS 8
default_rocky_9 — Rocky Linux 9
default_rocky_8 — Rocky Linux 8
default_debian_12 — Debian 12
default_fedora_41 — Fedora 41
Component Model Constants
Use these string values with node.add_component(model=...):
NICs
| Model String | Description |
|---|
NIC_Basic | Single port 100 Gbps SR-IOV VF on ConnectX-6 |
NIC_ConnectX_5 | Dual port 25 Gbps Mellanox ConnectX-5 |
NIC_ConnectX_6 | Dual port 100 Gbps Mellanox ConnectX-6 |
NIC_ConnectX_7_100 | ConnectX-7 100 Gbps |
NIC_ConnectX_7_400 | ConnectX-7 400 Gbps |
NIC_BlueField_2_ConnectX_6 | BlueField-2 SmartNIC |
GPUs
| Model String | Description |
|---|
GPU_TeslaT4 | NVIDIA Tesla T4 |
GPU_RTX6000 | NVIDIA RTX 6000 |
GPU_A30 | NVIDIA A30 |
GPU_A40 | NVIDIA A40 |
Storage
| Model String | Description |
|---|
NVME_P4510 | Intel P4510 NVMe SSD |
FPGAs
| Model String | Description |
|---|
FPGA_Xilinx_U280 | Xilinx Alveo U280 |
FPGA_Xilinx_SN1022 | Xilinx SN1022 |
Filter Function Field Names
Filter functions receive a site dict. Use pretty_names=False on list_sites() to see programmatic field names. The non-pretty field names for filter functions are:
Resource Fields (append _available, _capacity, or _allocated)
| Field Prefix | Resource |
|---|
cores | CPU cores |
ram | RAM (GB) |
disk | Disk (GB) |
nic_basic | NIC_Basic (shared 100G) |
nic_connectx_5 | ConnectX-5 (25G) |
nic_connectx_6 | ConnectX-6 (100G) |
nic_connectx_7_100 | ConnectX-7 (100G) |
nic_connectx_7_400 | ConnectX-7 (400G) |
nvme | NVMe P4510 |
tesla_t4 | GPU Tesla T4 |
rtx6000 | GPU RTX 6000 |
a30 | GPU A30 |
a40 | GPU A40 |
fpga_u280 | FPGA Xilinx U280 |
Other Fields
name — Site name
state — Site state
address — Physical address
location — (lat, lon) tuple
ptp_capable — PTP support (bool)
hosts — Number of hosts
Patterns
List All Sites
fablib.list_sites()
List Sites with Programmatic Field Names
fablib.list_sites(pretty_names=False)
Find Sites with Specific Resources
fablib.list_sites(
output="text",
filter_function=lambda x: x["rtx6000_available"] > 0
)
Get a Random Site Avoiding Specific Ones
site = fablib.get_random_site(avoid=["EDC", "FIU"])
print(f"Selected site: {site}")
Find Sites with Specific Hardware
fablib.list_sites(
output="text",
fields=["name", "nvme_available", "cores_available", "ram_available"],
filter_function=lambda x: x["nvme_available"] > 0,
pretty_names=False,
)
Get Random Site with GPU
site = fablib.get_random_site(
filter_function=lambda x: x["tesla_t4_available"] > 0
)
print(f"GPU site: {site}")
Filter by Multiple Conditions
st_louis_lon = -96.797448
fablib.list_sites(
filter_function=lambda x: x["nic_connectx_5_available"] > 2
and x["location"][1] < st_louis_lon
)
Filter by PTP Capability
fablib.list_sites(filter_function=lambda x: x["ptp_capable"] is True)
Get Multiple Random Sites
sites = fablib.get_random_sites(
count=4,
filter_function=lambda x: x["rtx6000_available"] > 0
)
print(f"Selected sites: {sites}")
List Hosts at a Specific Site
fablib.list_hosts(
filter_function=lambda x: x["site"] == "TACC"
)
Check Future Availability
from datetime import datetime, timezone, timedelta
start = datetime.now(timezone.utc) + timedelta(days=1)
end = start + timedelta(days=1)
fablib.list_sites(start=start, end=end)
List as Python Objects for Processing
site_list = fablib.list_sites(output="list", quiet=True)
for site in site_list:
print(f"Site: {site['name']}, Cores: {site['cores_available']}")
List Facility Ports
fablib.list_facility_ports()
List Inter-Site Links
fablib.list_links()