2025-07-10 20:32:57 +00:00
# Provisioning
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
< div align = "center" >
< img src = "resources/images/provisioning_logo-light.svg" alt = "Provisioning Logo" width = "200" / >
< br >
< br >
< picture >
< source media = "(prefers-color-scheme: dark)" srcset = "resources/images/provisioning_logo-text-dark.svg" >
< source media = "(prefers-color-scheme: light)" srcset = "resources/images/provisioning_logo-text-light.svg" >
< img alt = "Provisioning Logo Text" src = "resources/images/provisioning_logo-text-light.svg" width = "400" >
< / picture >
< / div >
2024-08-14 18:45:09 +00:00
2025-07-10 20:32:57 +00:00
A provisioning system built with Nushell and KCL for infrastructure automation and Kubernetes cluster management.
2024-08-14 18:47:40 +00:00
2025-07-10 20:41:03 +00:00
2025-07-10 20:19:18 +00:00
## Table of Contents
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
- [Overview ](#overview )
- [Prerequisites ](#prerequisites )
- [System Requirements ](#system-requirements )
- [Required Tools ](#required-tools )
- [Environment Variables ](#environment-variables )
- [Installation and Setup ](#installation-and-setup )
- [Installation Methods ](#installation-methods )
- [Installation Process ](#installation-process )
- [Post-Installation Verification ](#post-installation-verification )
- [Environment Configuration ](#environment-configuration )
- [Nushell Session ](#nushell-session )
- [Basic Usage ](#basic-usage )
- [Main Commands ](#main-commands )
- [Server Management ](#server-management )
- [Task Services (Infrastructure Components) ](#task-services-infrastructure-components )
- [Cluster Operations ](#cluster-operations )
- [Infrastructure Generation ](#infrastructure-generation )
- [Project Architecture ](#project-architecture )
- [High-Level Structure ](#high-level-structure )
- [Key Components ](#key-components )
- [Common Workflows ](#common-workflows )
- [1. Set Up New Infrastructure ](#1-set-up-new-infrastructure )
- [2. Install Kubernetes ](#2-install-kubernetes )
- [3. Deploy Cluster Services ](#3-deploy-cluster-services )
- [4. SSH Server Access ](#4-ssh-server-access )
- [Development and Debug Flags ](#development-and-debug-flags )
- [Secret Management ](#secret-management )
- [Edit Encrypted Files ](#edit-encrypted-files )
- [Age Configuration ](#age-configuration )
- [File Structure Patterns ](#file-structure-patterns )
- [Troubleshooting ](#troubleshooting )
- [Installation Issues ](#installation-issues )
- [Common Runtime Issues ](#common-runtime-issues )
- [Debug Commands ](#debug-commands )
- [Contributing ](#contributing )
- [Nushell Plugins ](#nushell-plugins )
- [License ](#license )
- [Support ](#support )
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
## Overview
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
This system provides a complete Infrastructure as Code (IaC) platform that enables provisioning, configuration, and management of infrastructure across multiple cloud providers with a strong focus on cloud-native Kubernetes deployments.
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
### Key Features
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
- **Multi-provider**: Support for AWS, UpCloud, and local environments
- **Infrastructure as Code**: Declarative configuration using KCL
- **Secret Management**: Integration with SOPS and Age for encryption
- **Modular**: Component-based reusable architecture
- **Kubernetes-first**: Designed for cloud-native deployments
2024-08-14 18:45:09 +00:00
2025-07-10 20:19:18 +00:00
## Prerequisites
### System Requirements
- **Operating System**: Linux, macOS, or Windows (WSL2)
- **Architecture**: x86_64 or ARM64
- **Memory**: Minimum 4GB RAM (8GB recommended)
- **Storage**: At least 2GB free space
- **Network**: Internet connection for downloading dependencies
### Required Tools
The installation process will automatically install these tools if not present:
- **Nushell 0.105.2** - Primary shell and scripting language
- **KCL 0.11.2** - Configuration language for infrastructure (CLI required + optional nu_plugin_kcl)
- **nu_plugin_tera** - Native Nushell plugin for template rendering
- **SOPS 3.10.2** - Secret management
- **Age 1.2.1** - Encryption tool
- **K9s 0.50.6** - Kubernetes management interface
### Environment Variables
Set these environment variables before installation:
```bash
# Main provisioning directory (default: /usr/local/provisioning)
export PROVISIONING="/usr/local/provisioning"
# Path to cloud infrastructure configurations
export PROVISIONING_KLOUD_PATH="/path/to/your/infrastructure/configurations"
# Path to infrastructure definitions
export PROVISIONING_INFRA_PATH="/path/to/your/infrastructure/definitions"
# Path to SOPS configuration file
export PROVISIONING_SOPS="/path/to/your/sops/configuration"
# Path to Age encryption key file
export PROVISIONING_KAGE="/path/to/your/age/key/file"
```
## Installation and Setup
### Installation Methods
#### Method 1: Pre-built Package (Recommended)
Download the pre-built package and install:
```bash
# Download the provisioning package (replace with actual download link)
wget https://releases.example.com/provisioning.tar.gz
# Extract the package
tar xzf provisioning.tar.gz
# Run the installation script
sudo ./install-provisioning
```
#### Method 2: Install from Source
For development or custom installations:
```bash
# Clone the repository
git clone < repository-url >
cd provisioning
# Install directly from repository
./distro/from-repo.sh
```
#### Method 3: Package Installation Script
If you have access to the source and want to install from a generated package:
```bash
# Requires SRC_DEVS environment variable to be set
./distro/pack-install.sh
```
### Installation Process
The `install-provisioning` script performs these steps automatically:
1. **Core System Installation**
- Installs to `/usr/local/provisioning` by default
- Creates symlink at `/usr/local/bin/provisioning` for global access
- Removes any previous installation
- Sets up directory structure
2. **Dependency Installation**
- Installs **Nushell 0.105.2** (primary shell)
- Installs **KCL 0.11.2** (configuration language CLI - required for nu_plugin_kcl)
- Installs **SOPS 3.10.2** (secrets management)
- Installs **Age 1.2.1** (encryption)
- Installs **K9s 0.50.6** (Kubernetes management)
3. **Configuration Setup**
- Creates user configuration directories
- Initializes Nushell configuration files
- Sets up provisioning context and library loading
4. **Tool Configuration**
- Configures tool paths and middleware
- Installs and registers nu_plugin_tera and nu_plugin_kcl (requires KCL CLI)
- Verifies tool versions and plugin compatibility
- Sets up provider integrations
### Post-Installation Verification
After installation, verify your setup:
```bash
# Check installation
provisioning version
# Verify environment configuration
provisioning env
# Show all configuration details
provisioning allenv
# Test basic functionality
provisioning help
```
### Environment Configuration
Configure your environment after installation:
```bash
# Add to your shell profile (.bashrc, .zshrc, etc.)
export PROVISIONING="/usr/local/provisioning"
export PATH="$PROVISIONING/bin:$PATH"
# Reload your shell or source the profile
source ~/.bashrc # or ~/.zshrc
```
### Nushell Session
Start working with the provisioning system:
```bash
# Start interactive Nushell session with provisioning library loaded
provisioning nu
# Or run specific commands
provisioning help
provisioning context
```
## Basic Usage
### Main Commands
```bash
# General help
./core/nulib/provisioning help
# Version information
./core/nulib/provisioning version
# Context management
./core/nulib/provisioning context
```
### Server Management
```bash
# Create new servers
./core/nulib/provisioning server create
# Delete servers
./core/nulib/provisioning server delete
# List all servers
./core/nulib/provisioning server list
# SSH to server
./core/nulib/provisioning server ssh < server >
# Show server pricing
./core/nulib/provisioning server price
```
### Task Services (Infrastructure Components)
```bash
# Install infrastructure service
./core/nulib/provisioning taskserv create < service >
# Remove infrastructure service
./core/nulib/provisioning taskserv delete < service >
# List available services
./core/nulib/provisioning taskserv list
# Generate service configuration
./core/nulib/provisioning taskserv generate < service >
```
### Cluster Operations
```bash
# Create Kubernetes cluster
./core/nulib/provisioning cluster create
# Delete cluster
./core/nulib/provisioning cluster delete
# List cluster components
./core/nulib/provisioning cluster list
```
### Infrastructure Generation
```bash
# Generate server configurations
./core/nulib/provisioning generate server
# Generate task service configurations
./core/nulib/provisioning generate taskserv
# Generate cluster configurations
./core/nulib/provisioning generate cluster
# Generate infrastructure configurations
./core/nulib/provisioning generate infra
```
## Project Architecture
### High-Level Structure
```
provisioning/
├── core/ # Core system
├── providers/ # Cloud providers
├── taskservs/ # Infrastructure services
├── cluster/ # Cluster configurations
├── kcl/ # Configuration language
├── templates/ # Templates and generation
├── generate/ # Generation scripts
└── resources/ # Project resources
```
### Key Components
#### 1. Core System (`/core/`)
- **Entry Point**: `core/nulib/provisioning` - CLI interface script
- **Library**: `core/nulib/lib_provisioning/` - Core provisioning library modules
- **Utilities**: `core/nulib/lib_provisioning/utils/` - Helper functions
#### 2. Providers (`/providers/`)
- **AWS**: `providers/aws/` - Amazon Web Services provider
- **UpCloud**: `providers/upcloud/` - UpCloud provider
- **Local**: `providers/local/` - Local development provider
#### 3. Task Services (`/taskservs/`)
Infrastructure services that can be deployed:
- **Kubernetes**: Core K8s installation
- **Container Runtimes**: containerd, cri-o, crun, runc, youki
- **Networking**: Cilium, CoreDNS, proxy/HAProxy
- **Storage**: Rook-Ceph, external-NFS, Mayastor
- **Container Registry**: OCI registry
- **Development Tools**: Gitea, PostgreSQL
#### 4. Cluster Configurations (`/cluster/`)
- **Buildkit**: Container build system
- **CI/CD**: ArgoCD, Tekton pipelines
- **Git**: Git server configurations
- **Web**: Web service deployments
## Common Workflows
### 1. Set Up New Infrastructure
```bash
# Generate new infrastructure
./core/nulib/provisioning generate infra --new < name >
# Create servers (check mode)
./core/nulib/provisioning server create --infra < name > --check
# Confirm creation
./core/nulib/provisioning server create --infra < name >
```
### 2. Install Kubernetes
```bash
# Install Kubernetes on infrastructure
./core/nulib/provisioning taskserv create kubernetes --infra < name >
# Verify installation
./core/nulib/provisioning taskserv list
```
### 3. Deploy Cluster Services
```bash
# Create cluster services
./core/nulib/provisioning cluster create --infra < name >
# List components
./core/nulib/provisioning cluster list
```
### 4. SSH Server Access
```bash
# SSH to specific server
./core/nulib/provisioning server ssh < hostname >
```
## Development and Debug Flags
- `--debug` or `-x` - Enable debug mode
- `--check` or `-c` - Check mode (no actual changes)
- `--yes` or `-y` - Auto-confirm operations
- `--wait` or `-w` - Wait for operations to complete
- `--infra` or `-i` - Specify infrastructure target
- `--out` - Output format (json, yaml, text)
## Secret Management
### Edit Encrypted Files
```bash
# Edit file with SOPS
./core/nulib/provisioning sops < file >
```
### Age Configuration
Ensure `PROVISIONING_KAGE` points to the correct Age key file.
## File Structure Patterns
- **KCL files** (`.k`): Infrastructure configuration and schemas
- **Nushell files** (`.nu`): Automation scripts and modules
- **Jinja2 templates** (`.j2`): Configuration file templates
- **TOML files** (`.toml`): Definitions and configurations
- **YAML files** (`.yaml`): Kubernetes manifests and settings
## Troubleshooting
### Installation Issues
1. **Installation fails with permission errors**
```bash
# Ensure you run the installer with sudo
sudo ./install-provisioning
# Check if /usr/local is writable
ls -la /usr/local/
```
2. **Package extraction fails**
```bash
# Verify package integrity
file provisioning.tar.gz
# Extract with verbose output
tar xzvf provisioning.tar.gz
```
3. **Nushell installation fails**
```bash
# Check Nushell version after installation
nu --version
# If missing, the installer should handle this automatically
# Contact support if this persists
```
4. **Missing dependencies**
```bash
# Check tool versions
provisioning version
# Verify tool installation
provisioning setup tools check all
```
5. **Environment variables not set**
```bash
# Check current environment
provisioning env
# Set missing variables
export PROVISIONING="/usr/local/provisioning"
export PATH="$PROVISIONING/bin:$PATH"
```
### Common Runtime Issues
1. **Missing environment variables**
```bash
provisioning env
```
2. **KCL compilation errors**
```bash
kcl fmt file.k
```
3. **nu_plugin_kcl issues**
```bash
# Check if KCL CLI is installed (required for nu_plugin_kcl)
kcl version
# Check if plugin is registered
version | get installed_plugins | str contains "nu_plugin_kcl"
```
3. **SOPS/Age encryption issues**
- Verify `PROVISIONING_KAGE` path and key file
4. **Provider authentication**
- Verify cloud provider credentials and permissions
5. **Command not found**
```bash
# Check if provisioning is in PATH
which provisioning
# Add to PATH if needed
export PATH="/usr/local/bin:$PATH"
```
### Debug Commands
```bash
# Enable verbose logging
./core/nulib/provisioning --debug < command >
# View current configuration
./core/nulib/provisioning show settings
# List server status
./core/nulib/provisioning show servers
# Interactive shell with library loaded
./core/nulib/provisioning nu
```
## Contributing
This project uses a modular architecture where:
- **Providers** handle cloud-specific operations
- **Task Services** are reusable infrastructure components
- **Clusters** define complete deployment configurations
- **Core** provides unified CLI and library functions
### Nushell Plugins
Plugins are sourced from: https://repo.jesusperez.pro/jesus/nushell-plugins
## License
See LICENSE file for details.
## Support
2025-07-10 20:32:57 +00:00
For issues and questions, consult the documentation in `core/README.md` or use the built-in help commands.