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:
33
scripts/create-host/setup.py
Normal file
33
scripts/create-host/setup.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from setuptools import setup
|
||||
from pathlib import Path
|
||||
|
||||
# Read templates
|
||||
templates = [str(p.relative_to(".")) for p in Path("templates").glob("*.j2")]
|
||||
|
||||
setup(
|
||||
name="create-host",
|
||||
version="0.1.0",
|
||||
description="NixOS host configuration generator for homelab infrastructure",
|
||||
py_modules=[
|
||||
"create_host",
|
||||
"models",
|
||||
"validators",
|
||||
"generators",
|
||||
"manipulators",
|
||||
],
|
||||
include_package_data=True,
|
||||
data_files=[
|
||||
("templates", templates),
|
||||
],
|
||||
install_requires=[
|
||||
"typer",
|
||||
"jinja2",
|
||||
"rich",
|
||||
],
|
||||
entry_points={
|
||||
"console_scripts": [
|
||||
"create-host=create_host:app",
|
||||
],
|
||||
},
|
||||
python_requires=">=3.9",
|
||||
)
|
||||
Reference in New Issue
Block a user