feat: Phase 7 — SeedService, SecretsService, ProvisioningService + ssh Provisioner
Seed ingest/export moves behind ports.SeedRepository (SeedRepo in the postgres adapter; knowledge ingest absorbed from internal/knowledge, package deleted). pct_create flow (defaults, template/VMID/gateway pre-flights, pct create, graph registration) moves from httpapi's approved-execution path into app.ProvisioningService + the ssh provisioner adapter; CLI seed/export/secret become adapters over the services. EntityCreateInput gains EnrolledAt. Plan status corrected: phases 0-7 shipped, 8 + 9 gates open. VERSION 0.34.1.
This commit is contained in:
@@ -47,28 +47,66 @@ type TargetResolver interface {
|
||||
IsGuest(entityType string) bool
|
||||
}
|
||||
|
||||
// Provisioner creates guests via pct/qm on a Proxmox host (Phase 7 fills
|
||||
// the input payloads in; signatures firm up with ProvisioningService).
|
||||
// Provisioner creates guests via pct/qm on a Proxmox host. The ssh
|
||||
// adapter implements it over CommandExecutor: template-cache resolution,
|
||||
// cluster-wide VMID collision guard, gateway preflight, and the pct/qm
|
||||
// create itself. DB registration of the created guest is NOT part of the
|
||||
// port — ProvisioningService owns that over the entity/relationship
|
||||
// repositories.
|
||||
type Provisioner interface {
|
||||
CreateLXC(ctx context.Context, host domain.UUID, input LXCInput) (domain.UUID, error)
|
||||
CreateVM(ctx context.Context, host domain.UUID, input VMInput) (domain.UUID, error)
|
||||
CreateLXC(ctx context.Context, input LXCInput) (ProvisionResult, error)
|
||||
CreateVM(ctx context.Context, input VMInput) (ProvisionResult, error)
|
||||
}
|
||||
|
||||
// LXCInput is a placeholder until ProvisioningService (Phase 7) fixes the
|
||||
// create payloads; declared now so the port surface is complete.
|
||||
// LXCInput is a fully-defaulted LXC create spec (ProvisioningService
|
||||
// applies defaults before calling). HostAddr/HostUser are the resolved
|
||||
// SSH endpoint of the Proxmox host; Sink, when non-nil, receives the
|
||||
// create command's output chunks as they arrive.
|
||||
type LXCInput struct {
|
||||
Name string
|
||||
Template string
|
||||
Cores int
|
||||
MemoryMB int
|
||||
DiskGB int
|
||||
HostAddr string
|
||||
HostUser string
|
||||
HostSlug string
|
||||
|
||||
Hostname string
|
||||
VMID int
|
||||
Cores int
|
||||
MemoryMB int
|
||||
DiskGB int
|
||||
IP string
|
||||
GW string
|
||||
Bridge string
|
||||
Storage string
|
||||
Template string
|
||||
Privileged bool
|
||||
Nesting bool
|
||||
Mounts []string
|
||||
Nameserver string
|
||||
Searchdomain string
|
||||
|
||||
Sink func(stream string, chunk []byte)
|
||||
}
|
||||
|
||||
// VMInput mirrors LXCInput for VM creation via qm.
|
||||
type VMInput struct {
|
||||
HostAddr string
|
||||
HostUser string
|
||||
HostSlug string
|
||||
|
||||
Name string
|
||||
VMID int
|
||||
TemplateID int
|
||||
Cores int
|
||||
MemoryMB int
|
||||
DiskGB int
|
||||
|
||||
Sink func(stream string, chunk []byte)
|
||||
}
|
||||
|
||||
// ProvisionResult reports what the provisioner actually did — the VMID
|
||||
// may differ from the request (cluster collision guard reassigns), and
|
||||
// the template is the concrete cache entry picked.
|
||||
type ProvisionResult struct {
|
||||
VMID int
|
||||
Template string
|
||||
Output string
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user