686 lines
17 KiB
Markdown
686 lines
17 KiB
Markdown
|
|
# Provisioning Platform Installer - Nushell Deployment Scripts
|
||
|
|
|
||
|
|
Comprehensive Nushell deployment scripts for the Provisioning Platform Installer, providing three deployment modes: interactive, headless, and unattended automation.
|
||
|
|
|
||
|
|
## Table of Contents
|
||
|
|
|
||
|
|
- [Overview](#overview)
|
||
|
|
- [Features](#features)
|
||
|
|
- [Prerequisites](#prerequisites)
|
||
|
|
- [Installation](#installation)
|
||
|
|
- [Deployment Modes](#deployment-modes)
|
||
|
|
- [Interactive Mode](#interactive-mode)
|
||
|
|
- [Headless Mode](#headless-mode)
|
||
|
|
- [Unattended Mode](#unattended-mode)
|
||
|
|
- [Platform Support](#platform-support)
|
||
|
|
- [Configuration](#configuration)
|
||
|
|
- [Usage Examples](#usage-examples)
|
||
|
|
- [Integration](#integration)
|
||
|
|
- [Troubleshooting](#troubleshooting)
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
The Nushell deployment scripts provide a flexible, automation-friendly way to deploy the Provisioning Platform across multiple container platforms and orchestrators. These scripts complement the Rust TUI installer and enable CI/CD integration.
|
||
|
|
|
||
|
|
### Architecture
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────┐
|
||
|
|
│ Deployment Entry │
|
||
|
|
│ ┌──────────┐ ┌──────────┐ ┌─────────────────┐ │
|
||
|
|
│ │Interactive│ │ Headless │ │ Unattended │ │
|
||
|
|
│ │ Mode │ │ Mode │ │ Mode │ │
|
||
|
|
│ └─────┬────┘ └─────┬────┘ └────────┬────────┘ │
|
||
|
|
└────────┼─────────────┼────────────────┼─────────────┘
|
||
|
|
│ │ │
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌─────────────────────────────────────────────────────┐
|
||
|
|
│ Core Helper Functions │
|
||
|
|
│ • Prerequisites Check • Config Validation │
|
||
|
|
│ • Health Checks • Rollback Management │
|
||
|
|
│ • Secret Generation • Manifest Creation │
|
||
|
|
└─────────────────────────────────────────────────────┘
|
||
|
|
│ │ │
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌─────────────────────────────────────────────────────┐
|
||
|
|
│ Platform-Specific Deployers │
|
||
|
|
│ ┌────────┐ ┌────────┐ ┌───────────┐ ┌────────┐ │
|
||
|
|
│ │ Docker │ │ Podman │ │Kubernetes │ │OrbStack│ │
|
||
|
|
│ └────────┘ └────────┘ └───────────┘ └────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────┘
|
||
|
|
│ │ │
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌─────────────────────────────────────────────────────┐
|
||
|
|
│ Integration Layer │
|
||
|
|
│ • MCP Server • REST API • Webhooks │
|
||
|
|
│ • Rust Installer • Notifications • Monitoring │
|
||
|
|
└─────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
### Core Features
|
||
|
|
|
||
|
|
- **Three Deployment Modes**
|
||
|
|
- Interactive TUI via Rust installer
|
||
|
|
- Headless CLI for scripted deployments
|
||
|
|
- Unattended automation for CI/CD
|
||
|
|
|
||
|
|
- **Multi-Platform Support**
|
||
|
|
- Docker (docker-compose)
|
||
|
|
- Podman (podman-compose)
|
||
|
|
- Kubernetes (kubectl)
|
||
|
|
- OrbStack (native macOS integration)
|
||
|
|
|
||
|
|
- **Robust Error Handling**
|
||
|
|
- Prerequisites validation
|
||
|
|
- Configuration validation
|
||
|
|
- Health checks
|
||
|
|
- Automatic rollback on failure
|
||
|
|
|
||
|
|
- **External Integrations**
|
||
|
|
- MCP (Model Context Protocol) servers
|
||
|
|
- REST APIs
|
||
|
|
- Webhook notifications (Slack, Discord, Teams)
|
||
|
|
- Deployment tracking
|
||
|
|
|
||
|
|
### Deployment Modes
|
||
|
|
|
||
|
|
#### Solo Mode
|
||
|
|
- **Target**: Single developer, local development
|
||
|
|
- **Services**: 3-7 services
|
||
|
|
- **Resources**: 2 CPU, 4GB RAM
|
||
|
|
- **Features**: Minimal setup, fast deployment
|
||
|
|
|
||
|
|
#### Multi-User Mode
|
||
|
|
- **Target**: Team collaboration
|
||
|
|
- **Services**: 7-9 services
|
||
|
|
- **Resources**: 4 CPU, 8GB RAM
|
||
|
|
- **Features**: Git server, shared database
|
||
|
|
|
||
|
|
#### CI/CD Mode
|
||
|
|
- **Target**: Automation pipelines
|
||
|
|
- **Services**: 8-10 services
|
||
|
|
- **Resources**: 8 CPU, 16GB RAM
|
||
|
|
- **Features**: API server, registry, automation
|
||
|
|
|
||
|
|
#### Enterprise Mode
|
||
|
|
- **Target**: Production deployments
|
||
|
|
- **Services**: 15+ services
|
||
|
|
- **Resources**: 16 CPU, 32GB RAM
|
||
|
|
- **Features**: Full observability, security, HA
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
### Required Tools
|
||
|
|
|
||
|
|
- **Nushell** >= 0.107.0 - Shell and scripting runtime
|
||
|
|
- **Docker** >= 20.10.0 - Container runtime (for Docker/OrbStack)
|
||
|
|
- **Podman** >= 3.0.0 - Container runtime (for Podman)
|
||
|
|
- **kubectl** >= 1.25.0 - Kubernetes CLI (for Kubernetes)
|
||
|
|
- **Git** >= 2.30.0 - Version control
|
||
|
|
|
||
|
|
### Optional Tools
|
||
|
|
|
||
|
|
- **podman-compose** - For Podman deployments
|
||
|
|
- **orb** - OrbStack CLI tools
|
||
|
|
- **glow** - Markdown rendering for help
|
||
|
|
|
||
|
|
### System Resources
|
||
|
|
|
||
|
|
Minimum resources depend on deployment mode:
|
||
|
|
|
||
|
|
| Mode | CPU Cores | Memory | Disk Space |
|
||
|
|
|------|-----------|--------|------------|
|
||
|
|
| Solo | 2 | 4GB | 10GB |
|
||
|
|
| Multi-User | 4 | 8GB | 20GB |
|
||
|
|
| CI/CD | 8 | 16GB | 50GB |
|
||
|
|
| Enterprise | 16 | 32GB | 100GB |
|
||
|
|
|
||
|
|
## Installation
|
||
|
|
|
||
|
|
### 1. Build Rust Installer
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd provisioning/platform/installer
|
||
|
|
cargo build --release
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Verify Nushell Scripts
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd scripts
|
||
|
|
nu mod.nu
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Run Prerequisites Check
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; check-prerequisites"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Deployment Modes
|
||
|
|
|
||
|
|
### Interactive Mode
|
||
|
|
|
||
|
|
**Best for**: First-time users, exploratory deployments
|
||
|
|
|
||
|
|
Launch the Rust TUI installer for guided configuration:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Using Nushell
|
||
|
|
nu -c "use mod.nu *; deploy-interactive"
|
||
|
|
|
||
|
|
# Or directly
|
||
|
|
../target/release/provisioning-installer
|
||
|
|
```
|
||
|
|
|
||
|
|
**Features**:
|
||
|
|
- Step-by-step wizard
|
||
|
|
- Visual platform detection
|
||
|
|
- Service selection UI
|
||
|
|
- Real-time validation
|
||
|
|
|
||
|
|
### Headless Mode
|
||
|
|
|
||
|
|
**Best for**: Scripted deployments, known configurations
|
||
|
|
|
||
|
|
Deploy via command-line arguments without interactive prompts:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Basic deployment
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo"
|
||
|
|
|
||
|
|
# With custom domain
|
||
|
|
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --domain prod.example.com"
|
||
|
|
|
||
|
|
# Specific services
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo --services orchestrator,control-center,postgres"
|
||
|
|
|
||
|
|
# Auto-confirm
|
||
|
|
nu -c "use mod.nu *; deploy-headless podman cicd --auto-confirm"
|
||
|
|
|
||
|
|
# Config generation only
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo --config-only"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Parameters**:
|
||
|
|
- `platform`: docker | podman | kubernetes | orbstack
|
||
|
|
- `mode`: solo | multi-user | cicd | enterprise
|
||
|
|
- `--domain`: Custom domain (default: localhost)
|
||
|
|
- `--services`: Comma-separated service list
|
||
|
|
- `--auto-confirm`: Skip confirmation prompts
|
||
|
|
- `--config-only`: Generate config without deploying
|
||
|
|
|
||
|
|
### Unattended Mode
|
||
|
|
|
||
|
|
**Best for**: CI/CD pipelines, automated deployments
|
||
|
|
|
||
|
|
Fully automated deployment from configuration files:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# From TOML file
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ./configs/solo-example.toml"
|
||
|
|
|
||
|
|
# From MCP server
|
||
|
|
nu -c "use mod.nu *; deploy-unattended mcp http://mcp-server:8084/config"
|
||
|
|
|
||
|
|
# From REST API
|
||
|
|
nu -c "use mod.nu *; deploy-unattended api http://api.example.com/deployment/config"
|
||
|
|
|
||
|
|
# With webhook notifications
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ./configs/enterprise-example.toml --webhook-url http://hooks.slack.com/services/..."
|
||
|
|
|
||
|
|
# Strict validation
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ./config.toml --strict"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Config Sources**:
|
||
|
|
- `file` - TOML configuration file
|
||
|
|
- `mcp` - MCP server endpoint
|
||
|
|
- `api` - REST API endpoint
|
||
|
|
|
||
|
|
**Options**:
|
||
|
|
- `--webhook-url`: Send progress notifications
|
||
|
|
- `--strict`: Enable strict validation (default: true)
|
||
|
|
|
||
|
|
## Platform Support
|
||
|
|
|
||
|
|
### Docker
|
||
|
|
|
||
|
|
Uses `docker-compose` with overlay files for different modes:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Requirements**:
|
||
|
|
- Docker Engine >= 20.10.0
|
||
|
|
- docker-compose (standalone or plugin)
|
||
|
|
|
||
|
|
**Compose Files**:
|
||
|
|
- Base: `docker-compose.yaml`
|
||
|
|
- Overlay: `docker-compose.{mode}.yaml`
|
||
|
|
|
||
|
|
### Podman
|
||
|
|
|
||
|
|
Uses `podman-compose` for rootless container deployment:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-headless podman multi-user"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Requirements**:
|
||
|
|
- Podman >= 3.0.0
|
||
|
|
- podman-compose (pip install podman-compose)
|
||
|
|
|
||
|
|
**Features**:
|
||
|
|
- Rootless deployment
|
||
|
|
- Compatible with Docker Compose files
|
||
|
|
|
||
|
|
### Kubernetes
|
||
|
|
|
||
|
|
Generates and applies Kubernetes manifests:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --domain k8s.example.com"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Requirements**:
|
||
|
|
- kubectl configured with cluster access
|
||
|
|
- Kubernetes >= 1.25.0
|
||
|
|
|
||
|
|
**Resources Created**:
|
||
|
|
- Namespace: `provisioning-platform`
|
||
|
|
- Deployments (one per service)
|
||
|
|
- Services (ClusterIP)
|
||
|
|
- ConfigMaps (for configuration)
|
||
|
|
|
||
|
|
### OrbStack
|
||
|
|
|
||
|
|
Uses OrbStack's optimized Docker on macOS:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-headless orbstack solo"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Requirements**:
|
||
|
|
- OrbStack installed
|
||
|
|
- orb CLI tools enabled
|
||
|
|
|
||
|
|
**Benefits**:
|
||
|
|
- Fast container startup
|
||
|
|
- Native macOS integration
|
||
|
|
- Efficient resource usage
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
### TOML Configuration Format
|
||
|
|
|
||
|
|
```toml
|
||
|
|
# Platform and mode
|
||
|
|
platform = "docker" # docker | podman | kubernetes | orbstack
|
||
|
|
mode = "solo" # solo | multi-user | cicd | enterprise
|
||
|
|
domain = "localhost"
|
||
|
|
auto_generate_secrets = true
|
||
|
|
|
||
|
|
# Service configuration
|
||
|
|
[[services]]
|
||
|
|
name = "orchestrator"
|
||
|
|
description = "Task coordination"
|
||
|
|
port = 8080
|
||
|
|
enabled = true
|
||
|
|
required = true
|
||
|
|
|
||
|
|
[[services]]
|
||
|
|
name = "control-center"
|
||
|
|
description = "Web UI"
|
||
|
|
port = 8081
|
||
|
|
enabled = true
|
||
|
|
required = true
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example Configurations
|
||
|
|
|
||
|
|
See `configs/` directory for examples:
|
||
|
|
|
||
|
|
- `solo-example.toml` - Solo developer setup
|
||
|
|
- `enterprise-example.toml` - Enterprise production setup
|
||
|
|
|
||
|
|
### Environment Variables
|
||
|
|
|
||
|
|
Generated `.env` file for Docker/Podman:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
PROVISIONING_MODE=solo
|
||
|
|
PROVISIONING_DOMAIN=localhost
|
||
|
|
PROVISIONING_PLATFORM=docker
|
||
|
|
ORCHESTRATOR_PORT=8080
|
||
|
|
ORCHESTRATOR_ENABLED=true
|
||
|
|
CONTROL_CENTER_PORT=8081
|
||
|
|
CONTROL_CENTER_ENABLED=true
|
||
|
|
```
|
||
|
|
|
||
|
|
## Usage Examples
|
||
|
|
|
||
|
|
### Quick Start
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Interactive mode (recommended for first time)
|
||
|
|
nu -c "use mod.nu *; deploy-interactive"
|
||
|
|
|
||
|
|
# Solo development
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo --auto-confirm"
|
||
|
|
|
||
|
|
# Team collaboration
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker multi-user --domain team.local"
|
||
|
|
```
|
||
|
|
|
||
|
|
### CI/CD Integration
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# GitLab CI
|
||
|
|
deploy-provisioning:
|
||
|
|
stage: deploy
|
||
|
|
script:
|
||
|
|
- cd provisioning/platform/installer/scripts
|
||
|
|
- nu -c "use mod.nu *; deploy-unattended file ../config/cicd-deploy.toml --webhook-url $SLACK_WEBHOOK"
|
||
|
|
```
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# GitHub Actions
|
||
|
|
- name: Deploy Provisioning Platform
|
||
|
|
run: |
|
||
|
|
cd provisioning/platform/installer/scripts
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ../config/prod-deploy.toml"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Custom Service Selection
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Only orchestrator and control center
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo --services orchestrator,control-center --auto-confirm"
|
||
|
|
|
||
|
|
# Full stack with all optional services
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo --services orchestrator,control-center,coredns,oci-registry,extension-registry,mcp-server,api-gateway"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Production Deployment
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Generate production config
|
||
|
|
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --domain prod.acme.com --config-only"
|
||
|
|
|
||
|
|
# Review and customize config
|
||
|
|
vim configs/deployment_*.toml
|
||
|
|
|
||
|
|
# Deploy with strict validation
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file configs/deployment_*.toml --strict --webhook-url https://hooks.slack.com/..."
|
||
|
|
```
|
||
|
|
|
||
|
|
## Integration
|
||
|
|
|
||
|
|
### MCP Server Integration
|
||
|
|
|
||
|
|
Load configuration from MCP server:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-unattended mcp http://mcp-server:8084/config"
|
||
|
|
```
|
||
|
|
|
||
|
|
MCP Request Format:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"jsonrpc": "2.0",
|
||
|
|
"id": 1,
|
||
|
|
"method": "config/get",
|
||
|
|
"params": {
|
||
|
|
"type": "deployment",
|
||
|
|
"include_defaults": true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### REST API Integration
|
||
|
|
|
||
|
|
Fetch deployment config from API:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-unattended api https://api.example.com/deployments/config"
|
||
|
|
```
|
||
|
|
|
||
|
|
Expected API Response:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"config": {
|
||
|
|
"platform": "kubernetes",
|
||
|
|
"mode": "enterprise",
|
||
|
|
"domain": "k8s.example.com",
|
||
|
|
"services": [...]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Webhook Notifications
|
||
|
|
|
||
|
|
Send deployment notifications to webhooks:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Slack
|
||
|
|
nu -c "use mod.nu *; notify-slack 'https://hooks.slack.com/...' 'Deployment started' --color good"
|
||
|
|
|
||
|
|
# Discord
|
||
|
|
nu -c "use mod.nu *; notify-discord 'https://discord.com/api/webhooks/...' 'Deployment complete' --success"
|
||
|
|
|
||
|
|
# Microsoft Teams
|
||
|
|
nu -c "use mod.nu *; notify-teams 'https://outlook.office.com/webhook/...' 'Deployment' 'Success' --success"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Calling Rust Installer
|
||
|
|
|
||
|
|
Deploy using Rust installer binary:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Convert config to CLI args
|
||
|
|
nu -c "
|
||
|
|
use mod.nu *;
|
||
|
|
let config = load-config-from-file ./configs/solo-example.toml;
|
||
|
|
deploy-with-installer $config --auto-confirm
|
||
|
|
"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Prerequisites Check Failed
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run diagnostics
|
||
|
|
nu -c "use mod.nu *; check-prerequisites"
|
||
|
|
|
||
|
|
# Install missing tools
|
||
|
|
# macOS
|
||
|
|
brew install nushell docker git
|
||
|
|
|
||
|
|
# Ubuntu/Debian
|
||
|
|
apt install nushell docker.io git
|
||
|
|
```
|
||
|
|
|
||
|
|
### Platform Not Available
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check platform availability
|
||
|
|
nu -c "use mod.nu *; check-platform-availability docker"
|
||
|
|
|
||
|
|
# Verify platform is running
|
||
|
|
docker ps # Docker
|
||
|
|
podman ps # Podman
|
||
|
|
kubectl version # Kubernetes
|
||
|
|
orb status # OrbStack
|
||
|
|
```
|
||
|
|
|
||
|
|
### Health Checks Failed
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# View service logs
|
||
|
|
docker-compose logs orchestrator # Docker
|
||
|
|
podman-compose logs orchestrator # Podman
|
||
|
|
kubectl logs -n provisioning-platform deployment/orchestrator # Kubernetes
|
||
|
|
|
||
|
|
# Manual health check
|
||
|
|
curl http://localhost:8080/health
|
||
|
|
```
|
||
|
|
|
||
|
|
### Deployment Rollback
|
||
|
|
|
||
|
|
Automatic rollback on failure, or manual:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Manual rollback
|
||
|
|
nu -c "
|
||
|
|
use mod.nu *;
|
||
|
|
let config = load-config-from-file ./configs/deployment_*.toml;
|
||
|
|
rollback-deployment $config
|
||
|
|
"
|
||
|
|
|
||
|
|
# Platform-specific
|
||
|
|
docker-compose down --volumes
|
||
|
|
podman-compose down --volumes
|
||
|
|
kubectl delete namespace provisioning-platform
|
||
|
|
```
|
||
|
|
|
||
|
|
### Configuration Validation
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Validate config file
|
||
|
|
nu -c "
|
||
|
|
use mod.nu *;
|
||
|
|
let config = load-config-from-file ./configs/my-config.toml;
|
||
|
|
validate-deployment-config $config --strict
|
||
|
|
"
|
||
|
|
|
||
|
|
# Check for errors
|
||
|
|
# - Missing required fields
|
||
|
|
# - Invalid platform/mode
|
||
|
|
# - Required services not enabled
|
||
|
|
```
|
||
|
|
|
||
|
|
## Module Reference
|
||
|
|
|
||
|
|
### Main Functions
|
||
|
|
|
||
|
|
| Function | Purpose |
|
||
|
|
|----------|---------|
|
||
|
|
| `deploy-interactive` | Launch TUI installer |
|
||
|
|
| `deploy-headless` | CLI deployment |
|
||
|
|
| `deploy-unattended` | Automated deployment |
|
||
|
|
| `deploy help` | Show usage help |
|
||
|
|
|
||
|
|
### Platform Functions
|
||
|
|
|
||
|
|
| Function | Purpose |
|
||
|
|
|----------|---------|
|
||
|
|
| `deploy-docker` | Docker deployment |
|
||
|
|
| `deploy-podman` | Podman deployment |
|
||
|
|
| `deploy-kubernetes` | Kubernetes deployment |
|
||
|
|
| `deploy-orbstack` | OrbStack deployment |
|
||
|
|
|
||
|
|
### Helper Functions
|
||
|
|
|
||
|
|
| Function | Purpose |
|
||
|
|
|----------|---------|
|
||
|
|
| `check-prerequisites` | Validate prerequisites |
|
||
|
|
| `validate-deployment-config` | Validate config |
|
||
|
|
| `check-deployment-health` | Run health checks |
|
||
|
|
| `rollback-deployment` | Rollback deployment |
|
||
|
|
| `generate-secrets` | Generate secrets |
|
||
|
|
|
||
|
|
### Integration Functions
|
||
|
|
|
||
|
|
| Function | Purpose |
|
||
|
|
|----------|---------|
|
||
|
|
| `load-config-from-mcp` | Load from MCP |
|
||
|
|
| `load-config-from-api` | Load from API |
|
||
|
|
| `notify-webhook` | Send webhook |
|
||
|
|
| `deploy-with-installer` | Use Rust installer |
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
### 1. Use Configuration Files
|
||
|
|
|
||
|
|
Store deployment configs in version control:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Bad
|
||
|
|
nu -c "use mod.nu *; deploy-headless docker solo --services svc1,svc2,svc3"
|
||
|
|
|
||
|
|
# Good
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ./configs/dev-deploy.toml"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Enable Strict Validation
|
||
|
|
|
||
|
|
Use `--strict` for production deployments:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ./prod.toml --strict"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Use Webhooks for Monitoring
|
||
|
|
|
||
|
|
Get notified of deployment status:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file ./config.toml --webhook-url $WEBHOOK"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Test Before Production
|
||
|
|
|
||
|
|
Use `--config-only` to preview:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Generate and review
|
||
|
|
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --config-only"
|
||
|
|
vim configs/deployment_*.toml
|
||
|
|
|
||
|
|
# Deploy after review
|
||
|
|
nu -c "use mod.nu *; deploy-unattended file configs/deployment_*.toml"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Automated Health Checks
|
||
|
|
|
||
|
|
Always verify deployment health:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nu -c "
|
||
|
|
use mod.nu *;
|
||
|
|
let config = load-config-from-file ./config.toml;
|
||
|
|
check-deployment-health $config
|
||
|
|
"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Contributing
|
||
|
|
|
||
|
|
Follow Nushell best practices from `.claude/best_nushell_code.md`:
|
||
|
|
|
||
|
|
- Single purpose functions
|
||
|
|
- Explicit type signatures
|
||
|
|
- Early validation and fail fast
|
||
|
|
- Pure functions (mark mutations with `!`)
|
||
|
|
- Comprehensive error handling
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
Part of the Provisioning Platform project. See main LICENSE file.
|
||
|
|
|
||
|
|
## Support
|
||
|
|
|
||
|
|
- **Documentation**: See `docs/` directory
|
||
|
|
- **Issues**: Open GitHub issues
|
||
|
|
- **Community**: Join discussions
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Version**: 1.0.0
|
||
|
|
**Nushell**: >= 0.107.0
|
||
|
|
**Last Updated**: 2025-10-06
|