scripts: add create-host tool for automated host configuration generation
Implements Phase 2 of the automated deployment pipeline. This commit adds a Python CLI tool that automates the creation of NixOS host configurations, eliminating manual boilerplate and reducing errors. Features: - Python CLI using typer framework with rich terminal UI - Comprehensive validation (hostname format/uniqueness, IP subnet/uniqueness) - Jinja2 templates for NixOS configurations - Automatic updates to flake.nix and terraform/vms.tf - Support for both static IP and DHCP configurations - Dry-run mode for safe previews - Packaged as Nix derivation and added to devShell Usage: create-host --hostname myhost --ip 10.69.13.50/24 The tool generates: - hosts/<hostname>/default.nix - hosts/<hostname>/configuration.nix - Updates flake.nix with new nixosConfigurations entry - Updates terraform/vms.tf with new VM definition All generated configurations include full system imports (monitoring, SOPS, autoupgrade, etc.) and are validated with nix flake check and tofu validate. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
62
TODO.md
62
TODO.md
@@ -50,28 +50,58 @@ Automate the entire process of creating, configuring, and deploying new NixOS ho
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Host Configuration Generator
|
||||
### Phase 2: Host Configuration Generator ✅ COMPLETED
|
||||
|
||||
**Status:** ✅ Fully implemented and tested
|
||||
**Completed:** 2025-02-01
|
||||
|
||||
**Goal:** Automate creation of host configuration files
|
||||
|
||||
Doesn't have to be a plain shell script, we could also use something like python, would probably make templating easier.
|
||||
**Implementation:**
|
||||
- Python CLI tool packaged as Nix derivation
|
||||
- Available as `create-host` command in devShell
|
||||
- Rich terminal UI with configuration previews
|
||||
- Comprehensive validation (hostname format/uniqueness, IP subnet/uniqueness)
|
||||
- Jinja2 templates for NixOS configurations
|
||||
- Automatic updates to flake.nix and terraform/vms.tf
|
||||
|
||||
**Tasks:**
|
||||
- [ ] Create script `scripts/create-host-config.sh`
|
||||
- [ ] Takes parameters: hostname, IP, CPU cores, memory, disk size
|
||||
- [ ] Generates `/hosts/<hostname>/` directory structure from template
|
||||
- [ ] Creates `configuration.nix` with proper hostname and networking
|
||||
- [ ] Generates `default.nix` with standard imports
|
||||
- [ ] Copies/links `hardware-configuration.nix` from template
|
||||
- [ ] Add host entry to `flake.nix` programmatically
|
||||
- [ ] Parse flake.nix
|
||||
- [ ] Insert new nixosConfiguration entry
|
||||
- [ ] Maintain formatting
|
||||
- [ ] Generate corresponding OpenTofu configuration
|
||||
- [ ] Create `terraform/hosts/<hostname>.tf` with VM definition
|
||||
- [ ] Use parameters from script input
|
||||
- [x] Create Python CLI with typer framework
|
||||
- [x] Takes parameters: hostname, IP, CPU cores, memory, disk size
|
||||
- [x] Generates `/hosts/<hostname>/` directory structure
|
||||
- [x] Creates `configuration.nix` with proper hostname and networking
|
||||
- [x] Generates `default.nix` with standard imports
|
||||
- [x] References shared `hardware-configuration.nix` from template
|
||||
- [x] Add host entry to `flake.nix` programmatically
|
||||
- [x] Text-based manipulation (regex insertion)
|
||||
- [x] Inserts new nixosConfiguration entry
|
||||
- [x] Maintains proper formatting
|
||||
- [x] Generate corresponding OpenTofu configuration
|
||||
- [x] Adds VM definition to `terraform/vms.tf`
|
||||
- [x] Uses parameters from CLI input
|
||||
- [x] Supports both static IP and DHCP modes
|
||||
- [x] Package as Nix derivation with templates
|
||||
- [x] Add to flake packages and devShell
|
||||
- [x] Implement dry-run mode
|
||||
- [x] Write comprehensive README
|
||||
|
||||
**Deliverable:** Script generates all config files for a new host
|
||||
**Usage:**
|
||||
```bash
|
||||
# In nix develop shell
|
||||
create-host \
|
||||
--hostname test01 \
|
||||
--ip 10.69.13.50/24 \ # optional, omit for DHCP
|
||||
--cpu 4 \ # optional, default 2
|
||||
--memory 4096 \ # optional, default 2048
|
||||
--disk 50G \ # optional, default 20G
|
||||
--dry-run # optional preview mode
|
||||
```
|
||||
|
||||
**Files:**
|
||||
- `scripts/create-host/` - Complete Python package with Nix derivation
|
||||
- `scripts/create-host/README.md` - Full documentation and examples
|
||||
|
||||
**Deliverable:** ✅ Tool generates all config files for a new host, validated with Nix and Terraform
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user