Skip to content

Expeto CLI Guide for Operations⚓︎

The Expeto CLI is an interactive shell for operations staff. It reads live state from the network functions of an xCore or xRouter Site and runs operational commands against them: querying a subscriber's session, listing radio connections, forcing a synchronisation with xControl. It runs as a sidecar of the Expeto Agent pod, so it needs no network access beyond kubectl exec.

Accessing the CLI⚓︎

Open an interactive session in the CLI container of the Agent pod. The pod and container names depend on how the core was installed:

kubectl -n xcore exec -it xcore-xfabric-agent-0 -c agent-cli -- cli
kubectl -n xrouter exec -it xrouter-agent-0 -c cli -- cli

Replace the namespace and the release-name prefix with your own. The shell fetches the command sets of the connected functions at start-up and shows the expeto_shell> prompt.

The CLI features a hierarchical, folder-like structure categorized by network types and functions (e.g., lte for 4G Core, nr for 5G Core, debug for operational commands).

  • List Directory (ls): Displays sub-directories, connected instances, and available commands (nouns and verbs) in the current context.
  • Change Directory (cd): Navigates through the command hierarchy. For example, cd lte moves into the 4G Core command set, and cd ../nr moves back and into the 5G Core command set.
  • Auto-complete (Tab): Press Tab at any time to auto-complete commands, noun names, or see available options. This is highly recommended to explore available parameters.
  • Help (help or ?): Type help to see descriptions of commands in the current folder. You can also append help to a specific command to view its usage and options (e.g., cmd sync-sub help).

Command structure⚓︎

Commands in the Expeto CLI generally follow a Verb + Noun + [Options] pattern.

Verbs⚓︎

Verbs define the action to be taken on a resource. The available verbs depend on the noun: - read: Lists available records (e.g., a list of subscribers) or retrieves the detailed state of a specific record. - add: Adds a new record. - update: Modifies an existing record. - delete: Deletes a record. - show: Displays the current operational state of a component. - set: Changes the operational state of a component. - cmd: Executes a specific operational command or action.

Nouns⚓︎

Nouns represent the network components or data entities you are interacting with. To see available nouns for your current context, use the ls command. - 4G (LTE) Examples: hss, mme, sgw, pgw, enodeb. - 5G (NR) Examples: amf, smf, upf, udr, udsf.

Examples⚓︎

Exploring available commands⚓︎

After login, ls shows the top-level folders:

expeto_shell>ls
Sub-directories:
-debug
-lte      4G Core
-nr       5G Core

Listing components and supported actions⚓︎

Enter a core (here 5G) and list its resources:

expeto_shell>cd nr
expeto_shell>nr>ls

Instances:
- name: birch-udr1
  description: HttpEndpoint(url=http://local-udr.default.svc.cluster.local:8080)

┌────────────┬────────────┐
│Noun        │Verb(s)     │
├────────────┼────────────┤
│amf         │read, delete│
│associations│read        │
│smf         │delete, read│
│udsf        │read, delete│
│...         │...         │
└────────────┴────────────┘

Reading and paginating records⚓︎

To list the records of a function, for example the Unstructured Data Storage Function (UDSF):

expeto_shell>nr>read udsf
With many records, page through them with the -o (offset) option:
expeto_shell>nr>read udsf -o 10

Viewing a record⚓︎

To see the full state of one record, append its identifier to read:

expeto_shell>nr>read udsf UPF:Controller:enterprise1:slice1:SmfInitHbInfoKey

Running operational actions⚓︎

Operational actions, such as forcing a subscriber synchronisation with xControl, live in the debug folder. Run help on a command before executing it:

expeto_shell>nr>cd ../debug/ops/
expeto_shell>debug>ops>cmd sync-sub help
The help output lists the options: a single imsi, siteWide for the whole Site, and the type of synchronisation (UPDATE or RECREATE).

Loading subscriber-store keys⚓︎

The keys the subscriber store needs are loaded through the CLI: the transport key of a SIM batch into the HSS (cd /lte, add keyset name=<HSS Identifier>) and the UDR (cd /nr, add udr-keyset name=<HSS Identifier>), and the home network's SUCI private key into the UDR (cd /nr, add suci pkId=<key identifier>). The CLI prompts for every key with masked input and never takes one on the command line. Follow the procedure in Load the subscriber-store keys.