원클릭으로
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()