377 lines
7.5 KiB
Markdown
377 lines
7.5 KiB
Markdown
# Terminal User Interface (TUI)
|
|
|
|
## Overview
|
|
|
|
AtlasOS provides a Terminal User Interface (TUI) for managing the storage system from the command line. The TUI provides an interactive menu-driven interface that connects to the Atlas API.
|
|
|
|
## Features
|
|
|
|
- **Interactive Menus**: Navigate through system features with simple menus
|
|
- **Authentication**: Secure login to the API
|
|
- **ZFS Management**: View and manage pools, datasets, and ZVOLs
|
|
- **Storage Services**: Manage SMB shares, NFS exports, and iSCSI targets
|
|
- **Snapshot Management**: Create snapshots and manage policies
|
|
- **System Information**: View system health and diagnostics
|
|
- **Backup & Restore**: Manage configuration backups
|
|
|
|
## Installation
|
|
|
|
Build the TUI binary:
|
|
|
|
```bash
|
|
go build ./cmd/atlas-tui
|
|
```
|
|
|
|
Or use the Makefile:
|
|
|
|
```bash
|
|
make build
|
|
```
|
|
|
|
This creates the `atlas-tui` binary.
|
|
|
|
## Configuration
|
|
|
|
### API URL
|
|
|
|
Set the API URL via environment variable:
|
|
|
|
```bash
|
|
export ATLAS_API_URL=http://localhost:8080
|
|
./atlas-tui
|
|
```
|
|
|
|
Default: `http://localhost:8080`
|
|
|
|
## Usage
|
|
|
|
### Starting the TUI
|
|
|
|
```bash
|
|
./atlas-tui
|
|
```
|
|
|
|
### Authentication
|
|
|
|
On first run, you'll be prompted to login:
|
|
|
|
```
|
|
=== AtlasOS Login ===
|
|
Username: admin
|
|
Password: ****
|
|
Login successful!
|
|
```
|
|
|
|
### Main Menu
|
|
|
|
```
|
|
=== AtlasOS Terminal Interface ===
|
|
1. ZFS Management
|
|
2. Storage Services
|
|
3. Snapshots
|
|
4. System Information
|
|
5. Backup & Restore
|
|
0. Exit
|
|
```
|
|
|
|
## Menu Options
|
|
|
|
### 1. ZFS Management
|
|
|
|
**Sub-menu:**
|
|
- List Pools
|
|
- List Datasets
|
|
- List ZVOLs
|
|
- List Disks
|
|
|
|
**Example - List Pools:**
|
|
```
|
|
=== ZFS Pools ===
|
|
1. tank
|
|
Size: 10TB
|
|
Used: 2TB
|
|
```
|
|
|
|
### 2. Storage Services
|
|
|
|
**Sub-menu:**
|
|
- SMB Shares
|
|
- NFS Exports
|
|
- iSCSI Targets
|
|
|
|
**SMB Shares:**
|
|
- List Shares
|
|
- Create Share
|
|
|
|
**Example - Create SMB Share:**
|
|
```
|
|
Share name: data-share
|
|
Dataset: tank/data
|
|
Path (optional, press Enter to auto-detect):
|
|
Description (optional): Main data share
|
|
SMB share created successfully!
|
|
Share: data-share
|
|
```
|
|
|
|
**NFS Exports:**
|
|
- List Exports
|
|
- Create Export
|
|
|
|
**Example - Create NFS Export:**
|
|
```
|
|
Dataset: tank/data
|
|
Path (optional, press Enter to auto-detect):
|
|
Clients (comma-separated, e.g., 192.168.1.0/24,*): 192.168.1.0/24
|
|
NFS export created successfully!
|
|
Export: /tank/data
|
|
```
|
|
|
|
**iSCSI Targets:**
|
|
- List Targets
|
|
- Create Target
|
|
|
|
**Example - Create iSCSI Target:**
|
|
```
|
|
IQN (e.g., iqn.2024-12.com.atlas:target1): iqn.2024-12.com.atlas:target1
|
|
iSCSI target created successfully!
|
|
Target: iqn.2024-12.com.atlas:target1
|
|
```
|
|
|
|
### 3. Snapshots
|
|
|
|
**Sub-menu:**
|
|
- List Snapshots
|
|
- Create Snapshot
|
|
- List Snapshot Policies
|
|
|
|
**Example - Create Snapshot:**
|
|
```
|
|
Dataset name: tank/data
|
|
Snapshot name: backup-2024-12-20
|
|
Snapshot created successfully!
|
|
Snapshot: tank/data@backup-2024-12-20
|
|
```
|
|
|
|
### 4. System Information
|
|
|
|
**Sub-menu:**
|
|
- System Info
|
|
- Health Check
|
|
- Dashboard
|
|
|
|
**System Info:**
|
|
```
|
|
=== System Information ===
|
|
Version: v0.1.0-dev
|
|
Uptime: 3600 seconds
|
|
Go Version: go1.21.0
|
|
Goroutines: 15
|
|
|
|
Services:
|
|
smb: running
|
|
nfs: running
|
|
iscsi: stopped
|
|
```
|
|
|
|
**Health Check:**
|
|
```
|
|
=== Health Check ===
|
|
Status: healthy
|
|
|
|
Component Checks:
|
|
zfs: healthy
|
|
database: healthy
|
|
smb: healthy
|
|
nfs: healthy
|
|
iscsi: stopped
|
|
```
|
|
|
|
**Dashboard:**
|
|
```
|
|
=== Dashboard ===
|
|
Pools: 2
|
|
Datasets: 10
|
|
SMB Shares: 5
|
|
NFS Exports: 3
|
|
iSCSI Targets: 2
|
|
```
|
|
|
|
### 5. Backup & Restore
|
|
|
|
**Sub-menu:**
|
|
- List Backups
|
|
- Create Backup
|
|
- Restore Backup
|
|
|
|
**Example - Create Backup:**
|
|
```
|
|
Description (optional): Weekly backup
|
|
Backup created successfully!
|
|
Backup ID: backup-1703123456
|
|
```
|
|
|
|
**Example - Restore Backup:**
|
|
```
|
|
=== Backups ===
|
|
1. backup-1703123456
|
|
Created: 2024-12-20T10:30:56Z
|
|
Description: Weekly backup
|
|
|
|
Backup ID: backup-1703123456
|
|
Restore backup? This will overwrite current configuration. (yes/no): yes
|
|
Backup restored successfully!
|
|
```
|
|
|
|
## Navigation
|
|
|
|
- **Select Option**: Enter the number or letter corresponding to the menu option
|
|
- **Back**: Enter `0` to go back to the previous menu
|
|
- **Exit**: Enter `0`, `q`, or `exit` to quit the application
|
|
- **Interrupt**: Press `Ctrl+C` for graceful shutdown
|
|
|
|
## Keyboard Shortcuts
|
|
|
|
- `Ctrl+C`: Graceful shutdown
|
|
- `0`: Back/Exit
|
|
- `q`: Exit
|
|
- `exit`: Exit
|
|
|
|
## Examples
|
|
|
|
### Complete Workflow
|
|
|
|
```bash
|
|
# Start TUI
|
|
./atlas-tui
|
|
|
|
# Login
|
|
Username: admin
|
|
Password: admin
|
|
|
|
# Navigate to ZFS Management
|
|
Select option: 1
|
|
|
|
# List pools
|
|
Select option: 1
|
|
|
|
# Go back
|
|
Select option: 0
|
|
|
|
# Create SMB share
|
|
Select option: 2
|
|
Select option: 1
|
|
Select option: 2
|
|
Share name: myshare
|
|
Dataset: tank/data
|
|
...
|
|
|
|
# Exit
|
|
Select option: 0
|
|
Select option: 0
|
|
```
|
|
|
|
## API Client
|
|
|
|
The TUI uses an HTTP client to communicate with the Atlas API:
|
|
|
|
- **Authentication**: JWT token-based authentication
|
|
- **Error Handling**: Clear error messages for API failures
|
|
- **Timeout**: 30-second timeout for requests
|
|
|
|
## Error Handling
|
|
|
|
The TUI handles errors gracefully:
|
|
|
|
- **Connection Errors**: Clear messages when API is unreachable
|
|
- **Authentication Errors**: Prompts for re-authentication
|
|
- **API Errors**: Displays error messages from API responses
|
|
- **Invalid Input**: Validates user input before sending requests
|
|
|
|
## Configuration File
|
|
|
|
Future enhancement: Support for configuration file:
|
|
|
|
```yaml
|
|
api_url: http://localhost:8080
|
|
username: admin
|
|
# Token can be stored (with appropriate security)
|
|
```
|
|
|
|
## Security Considerations
|
|
|
|
1. **Password Input**: Currently visible (future: hidden input)
|
|
2. **Token Storage**: Token stored in memory only
|
|
3. **HTTPS**: Use HTTPS for production API URLs
|
|
4. **Credentials**: Never log credentials
|
|
|
|
## Limitations
|
|
|
|
- **Password Visibility**: Passwords are currently visible during input
|
|
- **No Token Persistence**: Must login on each TUI start
|
|
- **Basic Interface**: Text-based menus (not a full TUI library)
|
|
- **Limited Error Recovery**: Some errors require restart
|
|
|
|
## Future Enhancements
|
|
|
|
1. **Hidden Password Input**: Use library to hide password input
|
|
2. **Token Persistence**: Store token securely for session persistence
|
|
3. **Advanced TUI**: Use Bubble Tea or similar for rich interface
|
|
4. **Command Mode**: Support command-line arguments for non-interactive use
|
|
5. **Configuration File**: Support for config file
|
|
6. **Auto-completion**: Tab completion for commands
|
|
7. **History**: Command history support
|
|
8. **Color Output**: Colored output for better readability
|
|
9. **Progress Indicators**: Show progress for long operations
|
|
10. **Batch Operations**: Support for batch operations
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Errors
|
|
|
|
```
|
|
Error: request failed: dial tcp 127.0.0.1:8080: connect: connection refused
|
|
```
|
|
|
|
**Solution**: Ensure the API server is running:
|
|
```bash
|
|
./atlas-api
|
|
```
|
|
|
|
### Authentication Errors
|
|
|
|
```
|
|
Error: login failed: invalid credentials
|
|
```
|
|
|
|
**Solution**: Check username and password. Default credentials:
|
|
- Username: `admin`
|
|
- Password: `admin`
|
|
|
|
### API URL Configuration
|
|
|
|
If API is on a different host/port:
|
|
|
|
```bash
|
|
export ATLAS_API_URL=http://192.168.1.100:8080
|
|
./atlas-tui
|
|
```
|
|
|
|
## Comparison with Web GUI
|
|
|
|
| Feature | TUI | Web GUI |
|
|
|---------|-----|---------|
|
|
| **Access** | Local console | Browser |
|
|
| **Setup** | No browser needed | Requires browser |
|
|
| **Network** | Works offline (local) | Requires network |
|
|
| **Rich UI** | Text-based | HTML/CSS/JS |
|
|
| **Initial Setup** | Ideal for setup | Better for daily use |
|
|
| **Maintenance** | Good for maintenance | Good for monitoring |
|
|
|
|
## Best Practices
|
|
|
|
1. **Use TUI for Initial Setup**: TUI is ideal for initial system configuration
|
|
2. **Use Web GUI for Daily Operations**: Web GUI provides better visualization
|
|
3. **Keep API Running**: TUI requires the API server to be running
|
|
4. **Secure Credentials**: Don't share credentials or tokens
|
|
5. **Use HTTPS in Production**: Always use HTTPS for production API URLs
|