fixup! vault: implement bootstrap integration
Some checks failed
Run nix flake check / flake-check (push) Failing after 12m6s
Some checks failed
Run nix flake check / flake-check (push) Failing after 12m6s
This commit is contained in:
@@ -307,13 +307,24 @@ tofu apply
|
|||||||
```
|
```
|
||||||
❌ **Expected**: Bootstrap fails with message about expired token
|
❌ **Expected**: Bootstrap fails with message about expired token
|
||||||
|
|
||||||
**Fix:**
|
**Fix (Option 1 - Regenerate token only):**
|
||||||
```bash
|
```bash
|
||||||
|
# Only regenerates the wrapped token, preserves all other configuration
|
||||||
|
nix run .#create-host -- --hostname vaulttest01 --regenerate-token
|
||||||
|
cd terraform
|
||||||
|
tofu apply
|
||||||
|
```
|
||||||
|
|
||||||
|
**Fix (Option 2 - Full regeneration with --force):**
|
||||||
|
```bash
|
||||||
|
# Overwrites entire host configuration (including any manual changes)
|
||||||
nix run .#create-host -- --hostname vaulttest01 --force
|
nix run .#create-host -- --hostname vaulttest01 --force
|
||||||
cd terraform
|
cd terraform
|
||||||
tofu apply
|
tofu apply
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Recommendation**: Use `--regenerate-token` to avoid losing manual configuration changes.
|
||||||
|
|
||||||
### Scenario 6: Already-Used Wrapped Token
|
### Scenario 6: Already-Used Wrapped Token
|
||||||
Try to deploy the same VM twice without regenerating token.
|
Try to deploy the same VM twice without regenerating token.
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ def main(
|
|||||||
dry_run: bool = typer.Option(False, "--dry-run", help="Preview changes without creating files"),
|
dry_run: bool = typer.Option(False, "--dry-run", help="Preview changes without creating files"),
|
||||||
force: bool = typer.Option(False, "--force", help="Overwrite existing host configuration"),
|
force: bool = typer.Option(False, "--force", help="Overwrite existing host configuration"),
|
||||||
skip_vault: bool = typer.Option(False, "--skip-vault", help="Skip Vault configuration and token generation"),
|
skip_vault: bool = typer.Option(False, "--skip-vault", help="Skip Vault configuration and token generation"),
|
||||||
|
regenerate_token: bool = typer.Option(False, "--regenerate-token", help="Only regenerate Vault wrapped token (no other changes)"),
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Create a new NixOS host configuration.
|
Create a new NixOS host configuration.
|
||||||
@@ -60,6 +61,51 @@ def main(
|
|||||||
ctx.get_help()
|
ctx.get_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Get repository root
|
||||||
|
repo_root = get_repo_root()
|
||||||
|
|
||||||
|
# Handle token regeneration mode
|
||||||
|
if regenerate_token:
|
||||||
|
# Validate that incompatible options aren't used
|
||||||
|
if force or dry_run or skip_vault:
|
||||||
|
console.print("[bold red]Error:[/bold red] --regenerate-token cannot be used with --force, --dry-run, or --skip-vault\n")
|
||||||
|
sys.exit(1)
|
||||||
|
if ip or cpu != 2 or memory != 2048 or disk != "20G":
|
||||||
|
console.print("[bold red]Error:[/bold red] --regenerate-token only regenerates the token. Other options (--ip, --cpu, --memory, --disk) are ignored.\n")
|
||||||
|
console.print("[yellow]Tip:[/yellow] Use without those options, or use --force to update the entire configuration.\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
console.print(f"\n[bold blue]Regenerating Vault token for {hostname}...[/bold blue]")
|
||||||
|
|
||||||
|
# Validate hostname exists
|
||||||
|
host_dir = repo_root / "hosts" / hostname
|
||||||
|
if not host_dir.exists():
|
||||||
|
console.print(f"[bold red]Error:[/bold red] Host {hostname} does not exist")
|
||||||
|
console.print(f"Host directory not found: {host_dir}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Generate new wrapped token
|
||||||
|
wrapped_token = generate_wrapped_token(hostname, repo_root)
|
||||||
|
|
||||||
|
# Update only the wrapped token in vms.tf
|
||||||
|
add_wrapped_token_to_vm(hostname, wrapped_token, repo_root)
|
||||||
|
console.print("[green]✓[/green] Regenerated and updated wrapped token in terraform/vms.tf")
|
||||||
|
|
||||||
|
console.print("\n[bold green]✓ Token regenerated successfully![/bold green]")
|
||||||
|
console.print(f"\n[yellow]⚠️[/yellow] Token expires in 24 hours")
|
||||||
|
console.print(f"[yellow]⚠️[/yellow] Deploy the VM within 24h or regenerate token again\n")
|
||||||
|
|
||||||
|
console.print("[bold cyan]Next steps:[/bold cyan]")
|
||||||
|
console.print(f" cd terraform && tofu apply")
|
||||||
|
console.print(f" # Then redeploy VM to pick up new token\n")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
console.print(f"\n[bold red]Error regenerating token:[/bold red] {e}\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Build configuration
|
# Build configuration
|
||||||
config = HostConfig(
|
config = HostConfig(
|
||||||
@@ -70,9 +116,6 @@ def main(
|
|||||||
disk=disk,
|
disk=disk,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Get repository root
|
|
||||||
repo_root = get_repo_root()
|
|
||||||
|
|
||||||
# Validate configuration
|
# Validate configuration
|
||||||
console.print("\n[bold blue]Validating configuration...[/bold blue]")
|
console.print("\n[bold blue]Validating configuration...[/bold blue]")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user