# Rostyr A Rust-based configuration management tool for FreeBSD hosts, designed to configure workstations, servers, virtual machines, and jails using an idempotent, test-driven approach. ## Overview Rostyr rewrites and extends [styr](https://gitea.rowanbrook.net/jakob/styr) in Rust, bringing: - **Idempotency** - All operations are safe to run repeatedly - **Testing first** - Snapshot-based tests for every feature - **Safe rollbacks** - ZFS snapshots before every apply ## Architecture | Component | Technology | |-----------|------------| | Hosts | FreeBSD only | | Service Isolation | FreeBSD Jails (primary) | | Linux VMs | bhyve hypervisor | | Filesystem | ZFS with snapshots | | Config Format | TOML | ## CLI Commands ``` rostyr init # Scaffold new host config rostyr validate # Validate all TOML configs rostyr diff [--host H] # Show pending changes (dry-run) rostyr check [--host H] # Detect current system state rostyr apply [--host H] # Apply changes (creates ZFS snapshot first) rostyr rollback # Revert to last ZFS snapshot ``` ## Idempotency Strategy 1. **Detect** current state (jails, VMs, ZFS, users, packages) 2. **Diff** desired vs actual state 3. **Plan** minimal changes needed 4. **Execute** only when state differs 5. **Snapshot** ZFS before any apply ## Testing Strategy - **Unit tests**: Config parsing, state detection, diff logic - **Integration tests**: CLI commands against isolated test VMs - **Idempotency tests**: Run apply twice, verify no changes on second run (snapshot comparison) - **VMs for testing**: All tests run in isolated bhyve VMs before production deployment ## Project Structure ``` rostyr/ ├── src/ │ ├── main.rs │ ├── cli.rs # CLI argument handling │ ├── config/ # TOML parsing & validation │ ├── state/ # System state detection │ ├── planner/ # Diff & idempotency logic │ ├── executor/ # Command execution │ ├── jail/ # Jail management │ ├── vm/ # bhyve VM management │ ├── zfs/ # ZFS snapshot/rollback │ └── commands/ # init, validate, diff, apply, rollback ├── configs/ │ ├── hosts/ # Host TOML files │ ├── users/ # User TOML files │ └── services/ # Service definitions ├── tests/ │ ├── unit/ # Unit tests │ ├── integration/ # CLI tests │ └── idempotency/ # Snapshot-based tests └── Cargo.toml ``` ## Phased Roadmap ### Phase 1 - Core Foundation - Project scaffolding (Rust, CLI framework) - Config parsing (TOML) - Basic state detection (host info, ZFS) - init, validate commands ### Phase 2 - Idempotent Apply - Diff/planner logic - Apply command with ZFS snapshot - Rollback command - check command ### Phase 3 - Jails - Jail creation/management - Basic service jail templates - User management inside jails ### Phase 4 - bhyve VMs - VM lifecycle management - Linux VM templates - Service deployment to VMs ### Phase 5+ - Services - Individual service implementations (from styr) - Full port of styr functionality ## License Unlicense - see LICENSE file