one9s Documentation

Install, configure and use the OpenNebula TUI.

Requirements

  • Go 1.24+ to build from source.
  • An OpenNebula installation with XML-RPC API enabled (default port 2633).
  • Credentials via ONE_AUTH environment variable or ~/.one/one_auth.

Installation

Pre-built binaries (recommended)

Download the zip for your platform from GitHub Releases:

curl -LO https://github.com/SergioZ3R0/one9s/releases/latest/download/one9s-linux-amd64.zip
unzip one9s-linux-amd64.zip
chmod +x one9s

Platforms: one9s-linux-amd64, one9s-linux-arm64, one9s-darwin-amd64, one9s-darwin-arm64, one9s-windows-amd64.exe.

From source

git clone https://github.com/SergioZ3R0/one9s.git
cd one9s
make build

Configuration

one9s looks for credentials in this order:

  1. ONE_AUTH + ONE_XMLRPC environment variables
  2. ~/.one9s/config file (recommended)
  3. ~/.one/one_auth file (legacy, OpenNebula CLI compatible)

Quick setup (recommended)

mkdir -p ~/.one9s
cat > ~/.one9s/config << 'EOF'
ONE_XMLRPC=http://opennebula:2633/RPC2
ONE_AUTH=oneadmin:password
EOF
chmod 600 ~/.one9s/config
./one9s

Config file format

~/.one9s/config is a simple KEY=VALUE file:

ONE_XMLRPC=http://localhost:2633/RPC2
ONE_AUTH=oneadmin:password

Lines starting with # are comments. Blank lines are ignored.

Encrypted vault (recommended)

Store credentials encrypted with AES-256-GCM:

# Create encrypted vault
one9s vault init

# Run (prompts for vault password)
./one9s

# Skip vault with direct env vars
ONE_AUTH="oneadmin:password" ONE_XMLRPC="http://opennebula:2633/RPC2" ./one9s
CommandDescription
one9s vault initCreate new encrypted config
one9s vault encryptEncrypt existing plain config
one9s vault decryptDecrypt and display contents
one9s vault editDecrypt, edit in $EDITOR, re-encrypt (password rotation, endpoint change)

Note: Vault password can be set via ONE_VAULT_PASS env var to skip the prompt. When ONE_AUTH + ONE_XMLRPC are set directly, vault is not used.

Alternative: environment variables

ONE_AUTH="oneadmin:password" ONE_XMLRPC="http://opennebula:2633/RPC2" ./one9s

Note: If neither config file nor environment variables are set, one9s shows a clear error with setup instructions.

Usage & key bindings

one9s opens a tabbed TUI. Navigate tabs and interact with the data.

KeyAction
q / Ctrl+CQuit
tabNext tab
?Help / back to VMs
↑/↓ / j/kNavigate rows
PgUp/PgDn / b/fPage up / page down
g/GGo to start / end
enterView details (VMs/Hosts split view)
/Fuzzy search / filter (all tabs)
F5Refresh current view

VMs tab

All VMs with state, user, CPU, memory, IP and host. Split view with detail pane on the right. Press enter to load VM details. Filter by state (i active, o stopped, p poweroff, e error, a all) or use / for fuzzy text search.

Hosts tab

Cluster hosts with state, CPU%, memory%, running VMs. Enter to view host details with CPU/Memory progress bars. Enable, disable, offline, delete or rename hosts.

Datastores tab

Storage pools with type, total capacity, used and free space.

ACLs tab

Access control rules with decoded hex values: user, resource, rights and zone in human-readable format.

Quotas tab

User quotas for VMs, CPU, Memory, Running VMs, Images, Size and Leases.

VM Actions

Actions are performed on the selected VM. State-aware: invalid actions show an error.

KeyActionValid States
rRebootACTIVE only
sStopACTIVE only
uResume / StartPOWEROFF, SUSPENDED, STOPPED, UNDEPLOYED
xSuspendACTIVE only
dTerminate (hard)Any state (with confirmation)

State filters

KeyFilter
aAll VMs
iActive only (ACTIVE/*)
oStopped (STOPPED, SUSPENDED, HOLD, DONE)
pPoweroff (POWEROFF, UNDEPLOYED)
eError (CLONING_FAILURE, ACTIVE/*FAILURE*)

Host Actions

KeyActionConfirmation
eEnable hostNo
dDisable hostNo
oOffline hostYes (y/n modal)
xDelete hostType yes to confirm
nRename hostType new name

ACL Decoding

OpenNebula ACL rules are stored as hex values. one9s decodes them automatically:

FieldExampleDecoded
User100000002#2 (UID 2)
User200000001@1 (GID 1)
User400000000* (all)
Resource20400000000HOST
Resource40100000065NET/#101
RightsfUSE+MANAGE+ADMIN+CREATE
Rights2MANAGE
Zone400000000* (all zones)

Quotas

one9s shows per-user quotas fetched from one.user.info for each user. The table lists global VM quotas and a summary of datastore quotas. Press enter for the full breakdown, or e to edit.

  • VMs, total VMs allocated
  • CPU, CPU cores allocated
  • Memory, Memory in MB
  • Running, Currently running VMs
  • Datastores, per-datastore SIZE and IMAGES limits (e.g. 1:10G)

Edit form is sectioned:

  • Virtual machine quotas — VMs, CPU, memory, running limits, sys disk
  • Datastore quotas (existing) — size MB + images per datastore that already has a quota
  • Network quotas (existing) — leases per network that already has a quota
  • Create datastore quota — one block: Datastore ID + Size MB + Images (all three apply to that ID)
  • Create network quota — Network ID + Leases (both apply to that ID)

Note: Empty form fields keep the current limit. -1 = use default, -2 = unlimited. Per-resource quotas survive VM-only updates (OpenNebula merges section-wise).

Note: Quota data requires individual one.user.info calls per user. With many users, the first load may take a few seconds.

Networks

Tab 4:Net lists virtual networks with:

  • ID, name, bridge, VN_MAD (dummy/bridge/vxlan/...)
  • Lease usage used/total (total = sum of AR sizes)
  • Owner

Use / to filter. Numbers 1–6 jump between tabs.