<jupyter_start><jupyter_text>This notebook shows how to use Orchestrator APIs for user experiments<jupyter_code>import os
from fabrictestbed.slice_manager import SliceManager, Status
import json
credmgr_host = os.environ['FABRIC_CREDMGR_HOST']
orchestrator_host = os.environ['FABRIC_ORCHESTRATOR_HOST']
print(f"CM Host: {credmgr_host} Orchestrator Host: {orchestrator_host}")<jupyter_output><empty_output><jupyter_text>Create Slice Manager ObjectUsers can request tokens with different Project and Scopes by altering `project_name` and `scope` parameters in the refresh call below.<jupyter_code>slice_manager = SliceManager(oc_host=orchestrator_host, cm_host=credmgr_host, project_name='all', scope='all')

# Initialize the slice manager
slice_manager.initialize()<jupyter_output><empty_output><jupyter_text>Orchestrator API example to query for available resources<jupyter_code>status, advertised_topology = slice_manager.resources()

print(f"Status: {status}")
if status == Status.OK:
    print(f"Toplogy: {advertised_topology}")
else:
    print(f"Error: {advertised_topology}")
if status == Status.OK:
    advertised_topology.draw()<jupyter_output><empty_output><jupyter_text>Create Slice<jupyter_code>from fabrictestbed.slice_editor import ExperimentTopology, Capacities, ComponentType, ComponentModelType, ServiceType
# Create topology
t = ExperimentTopology()

# Add node
#n1 = t.add_node(name='n1', site='UKY')

# Set capacities
cap = Capacities()
cap.set_fields(core=2, ram=6, disk=10)

# Set Properties
#n1.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')

# Add PCI devices
#n1.add_component(ctype=ComponentType.NVME, model='P4510', name='c1')

# Add node
n2 = t.add_node(name='n2', site='LBNL')

# Set properties
n2.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')
#n2.add_component(model_type=ComponentModelType.SmartNIC_ConnectX_6, name='n2-nic1')
n2.add_component(ctype=ComponentType.NVME, model='P4510', name='c1')
#n2.add_component(ctype=ComponentType.GPU, model='Tesla T4', name='c3')

# Generate Slice Graph
slice_graph = t.serialize()

ssh_key = None
with open ("/home/fabric/.ssh/id_rsa.pub", "r") as myfile:
    ssh_key=myfile.read()
    ssh_key=ssh_key.strip()

# Request slice from Orchestrator
status, reservations = slice_manager.create(slice_name='Slice-comps-only', slice_graph=slice_graph, ssh_key=ssh_key)

print("Response Status {}".format(status))
if status == Status.OK:
    print("Reservations created {}".format(reservations))
else:
    print(f"Failure: {reservations}")
# Set the Slice ID from output of the above command
slice_id=reservations[0].slice_id<jupyter_output><empty_output><jupyter_text>Query Slices<jupyter_code>status, slices = slice_manager.slices(state="All")

print("Response Status {}".format(status))
if status == Status.OK:
    print("Slices {}".format(slices))
else:
    print(f"Failure: {slices}")<jupyter_output><empty_output><jupyter_text>Query Slivers<jupyter_code>status, slivers = slice_manager.slivers(slice_id=slice_id)

print("Response Status {}".format(status))
if status == Status.OK:
    print("Slivers {}".format(slivers))
else:
    print(f"Failure: {slivers}")<jupyter_output><empty_output><jupyter_text>Sliver Status<jupyter_code>for s in slivers:
    status, sliver_status = slice_manager.sliver_status(slice_id=slice_id, sliver_id=s.reservation_id)

    print("Response Status {}".format(status))
    if status == Status.OK:
        print()
        print("Sliver Status {}".format(sliver_status))
        print()<jupyter_output><empty_output><jupyter_text>Delete Slice<jupyter_code>status, result = slice_manager.delete(slice_id=slice_id)

print("Response Status {}".format(status))
print("Response received {}".format(result))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12888771744860306, 'fraction_numerical': 0.008961518186610437, 'mean_word_length': 7.9504716981132075, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '25280', 'license': 'MIT', 'n_tokens_mistral': 1341, 'n_tokens_neox': 1331, 'n_words': 240, 'path': 'fabric_examples/beta_functionality/orchestrator.ipynb', 'repo_name': 'fabric-testbed/jupyternb-template', 'size': '3794'}