بنقرة واحدة
fabric-slice-manage
List, inspect, renew, modify, and delete FABRIC experiment slices
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
List, inspect, renew, modify, and delete FABRIC experiment slices
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Run iPerf3 network performance benchmarks with optional CPU pinning and SmartNIC optimization
Generate FABRIC testbed environment setup, configuration validation, and SSH key management code
Deploy Docker containers and Kubernetes clusters on FABRIC nodes
Connect FABRIC to external testbeds via facility ports and set up port mirroring
Provision and flash Xilinx U280 FPGAs on FABRIC nodes
Provision GPU nodes on FABRIC with driver installation and CUDA setup
| name | fabric-slice-manage |
| description | List, inspect, renew, modify, and delete FABRIC experiment slices |
| allowed-tools | ["Read","Grep","Glob","Write","Edit","Bash"] |
When invoked, generate code for FABRIC slice lifecycle management operations. Determine which operation the user needs:
Always assume FABlib is initialized as fablib.
fablib.list_slices(
excludes: list[SliceState] = None, # States to exclude
output: str = None, # "text", "pandas", "json", "list"
fields: list[str] = None, # Fields to display
quiet: bool = False,
filter_function=None,
pretty_names: bool = True,
)
# By name
slice = fablib.get_slice(name="my-slice")
# By ID
slice = fablib.get_slice(slice_id="abc-123-def")
# Get multiple slices
slices = fablib.get_slices(
excludes: list[SliceState] = None,
slice_name: str = None,
slice_id: str = None,
user_only: bool = True,
)
slice.show(fields=None, output=None, quiet=False, colors=False, pretty_names=True)
slice.list_nodes(output=None, fields=None, colors=False, quiet=False, filter_function=None, pretty_names=True)
slice.list_networks(output=None, fields=None, colors=False, quiet=False, filter_function=None, pretty_names=True)
slice.list_interfaces(output=None, fields=None, quiet=False, filter_function=None, pretty_names=True, refresh=False)
node = slice.get_node(name="node1")
nodes = slice.get_nodes()
# Execute commands on a node
stdout, stderr = node.execute("hostname")
# SSH command for manual access
print(node.get_ssh_command())
# Management IP (IPv6)
print(node.get_management_ip())
# Renew by number of days
slice.renew(days=14)
# Renew to a specific end date (UTC)
from datetime import datetime, timezone, timedelta
end_date = (datetime.now(timezone.utc) + timedelta(days=6)).strftime("%Y-%m-%d %H:%M:%S %z")
slice.renew(end_date=end_date)
# Add a new node to running slice
new_node = slice.add_node(name="node3", site="TACC", cores=4, ram=16, disk=50)
slice.modify(
wait=True,
wait_timeout=600,
wait_interval=10,
progress=True,
post_boot_config=True,
)
# Accept modifications (required after modify)
slice.modify_accept()
# Delete a specific slice
slice.delete()
# Delete all slices (with confirmation progress)
fablib.delete_all(progress=True)
from fabrictestbed.slice_manager import SliceState
# Common states:
# SliceState.StableOK - Running normally
# SliceState.StableError - Error state
# SliceState.Configuring - Being set up
# SliceState.Nascent - Just created, not submitted
# SliceState.Dead - Deleted/expired
# Wait for all nodes to be SSH-accessible
slice.wait_ssh(timeout=1800, interval=20, progress=False)
# Test SSH on all nodes
slice.test_ssh() -> bool
# Run post-boot config (SSH keys, etc.) — only after non-blocking submit
slice.post_boot_config()
# Update slice state from server
slice.update()
fablib.list_slices()
from fabrictestbed.slice_manager import SliceState
fablib.list_slices(
excludes=[SliceState.Dead, SliceState.Closing],
output="text",
)
fablib.list_slices(
filter_function=lambda x: x["state"] == "StableOK"
)
slice_list = fablib.list_slices(output="list", quiet=True)
for s in slice_list:
print(f"Slice: {s['id']}, {s['name']}, {s['state']}")
slice = fablib.get_slice(name="my-experiment")
slice.show()
print("\n--- Nodes ---")
slice.list_nodes()
print("\n--- Networks ---")
slice.list_networks()
print("\n--- Interfaces ---")
slice.list_interfaces()
from datetime import datetime, timezone, timedelta
slice = fablib.get_slice(name="my-experiment")
# Extend by 14 days
slice.renew(days=14)
# Verify new end date
print(f"Lease End: {slice.get_lease_end()}")
slice = fablib.get_slice(name="my-experiment")
for node in slice.get_nodes():
stdout, stderr = node.execute("uname -a")
print(f"{node.get_name()}: {stdout}")
node = slice.get_node(name="node1")
# Upload
node.upload_file("local_script.sh", "/home/ubuntu/script.sh")
node.execute("chmod +x /home/ubuntu/script.sh && /home/ubuntu/script.sh")
# Download
node.download_file("local_results.tar.gz", "/home/ubuntu/results.tar.gz")
slice = fablib.get_slice(name="my-experiment")
# Add a new node
new_node = slice.add_node(name="worker3", site="TACC", cores=8, ram=32, disk=100)
# Submit modification
slice.modify()
# Accept the modification
slice.modify_accept()
# Verify
slice.list_nodes()
slice = fablib.get_slice(name="my-experiment")
slice.delete()
print("Slice deleted successfully")
# WARNING: This deletes ALL your slices
fablib.delete_all(progress=True)
# After a node reboot, wait for SSH to come back
slice.wait_ssh(timeout=360, interval=10, progress=True)
slice.update()
slice.test_ssh()