pipeline: add testing improvements for branch-based workflows
Some checks failed
Run nix flake check / flake-check (push) Has been cancelled
Some checks failed
Run nix flake check / flake-check (push) Has been cancelled
Implement dual improvements to enable efficient testing of pipeline changes without polluting master branch: 1. Add --force flag to create-host script - Skip hostname/IP uniqueness validation - Overwrite existing host configurations - Update entries in flake.nix and terraform/vms.tf (no duplicates) - Useful for iterating on configurations during testing 2. Add branch support to bootstrap mechanism - Bootstrap service reads NIXOS_FLAKE_BRANCH environment variable - Defaults to master if not set - Uses branch in git URL via ?ref= parameter - Service loads environment from /etc/environment 3. Add cloud-init disk support for branch configuration - VMs can specify flake_branch field in terraform/vms.tf - Automatically generates cloud-init snippet setting NIXOS_FLAKE_BRANCH - Uploads snippet to Proxmox via SSH - Production VMs omit flake_branch and use master 4. Update documentation - Document --force flag usage in create-host README - Add branch testing examples in terraform README - Update TODO.md with testing workflow - Add .generated/ to gitignore Testing workflow: Create feature branch, set flake_branch in VM definition, deploy with terraform, iterate with --force flag, clean up before merging. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -87,6 +87,21 @@ vms = {
|
||||
}
|
||||
```
|
||||
|
||||
### Example: Test VM with Custom Git Branch
|
||||
|
||||
For testing pipeline changes without polluting master:
|
||||
|
||||
```hcl
|
||||
vms = {
|
||||
"test-vm" = {
|
||||
ip = "10.69.13.100/24"
|
||||
flake_branch = "test-pipeline" # Bootstrap from this branch
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This VM will bootstrap from the `test-pipeline` branch instead of `master`. Production VMs should omit the `flake_branch` field.
|
||||
|
||||
## Configuration Options
|
||||
|
||||
Each VM in the `vms` map supports the following fields (all optional):
|
||||
@@ -98,6 +113,7 @@ Each VM in the `vms` map supports the following fields (all optional):
|
||||
| `cpu_cores` | Number of CPU cores | `2` |
|
||||
| `memory` | Memory in MB | `2048` |
|
||||
| `disk_size` | Disk size (e.g., "20G", "100G") | `"20G"` |
|
||||
| `flake_branch` | Git branch for bootstrap (for testing, omit for production) | `master` |
|
||||
| `target_node` | Proxmox node to deploy to | `"pve1"` |
|
||||
| `template_name` | Template VM to clone from | `"nixos-25.11.20260128.fa83fd8"` |
|
||||
| `storage` | Storage backend | `"local-zfs"` |
|
||||
@@ -182,9 +198,11 @@ deployment_summary = {
|
||||
- `main.tf` - Provider configuration
|
||||
- `variables.tf` - Variable definitions and defaults
|
||||
- `vms.tf` - VM definitions and deployment logic
|
||||
- `cloud-init.tf` - Custom cloud-init configuration for branch-specific bootstrap
|
||||
- `outputs.tf` - Output definitions for deployed VMs
|
||||
- `terraform.tfvars.example` - Example credentials file
|
||||
- `terraform.tfvars` - Your actual credentials (gitignored)
|
||||
- `.generated/` - Auto-generated cloud-init files (gitignored)
|
||||
- `vm.tf.old` - Archived single-VM configuration (reference)
|
||||
|
||||
## Notes
|
||||
|
||||
Reference in New Issue
Block a user