Complete batch import v2 runtime and host capability recovery
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
||||
"sub2api-cn-relay-manager/internal/host/sub2api"
|
||||
"sub2api-cn-relay-manager/internal/pack"
|
||||
"sub2api-cn-relay-manager/internal/provision"
|
||||
"sub2api-cn-relay-manager/internal/reconcile"
|
||||
"sub2api-cn-relay-manager/internal/store/sqlite"
|
||||
)
|
||||
|
||||
@@ -20,7 +21,7 @@ type installPackFunc func(context.Context, installPackCLIRequest) (provision.Pac
|
||||
type importProviderFunc func(context.Context, importCLIRequest) (provision.ImportReport, error)
|
||||
type previewProviderFunc func(context.Context, previewCLIRequest) (provision.PreviewReport, error)
|
||||
type rollbackProviderFunc func(context.Context, rollbackCLIRequest) (rollbackSummary, error)
|
||||
type reconcileProviderFunc func(context.Context, reconcileCLIRequest) (provision.ReconcileResult, error)
|
||||
type reconcileProviderFunc func(context.Context, reconcileCLIRequest) (reconcile.Result, error)
|
||||
|
||||
type installPackCLIRequest struct {
|
||||
HostBaseURL string
|
||||
@@ -445,34 +446,39 @@ func runRollbackProvider(ctx context.Context, req rollbackCLIRequest) (rollbackS
|
||||
}, nil
|
||||
}
|
||||
|
||||
func runReconcileProvider(ctx context.Context, req reconcileCLIRequest) (provision.ReconcileResult, error) {
|
||||
func runReconcileProvider(ctx context.Context, req reconcileCLIRequest) (reconcile.Result, error) {
|
||||
loadedPack, err := pack.LoadDir(req.PackDir)
|
||||
if err != nil {
|
||||
return provision.ReconcileResult{}, err
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
|
||||
providerManifest, err := findProvider(loadedPack, req.ProviderID)
|
||||
if err != nil {
|
||||
return provision.ReconcileResult{}, err
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
|
||||
client, err := sub2api.NewClient(req.HostBaseURL, sub2api.WithAPIKey(req.HostAPIKey), sub2api.WithBearerToken(req.HostBearerToken))
|
||||
if err != nil {
|
||||
return provision.ReconcileResult{}, err
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
|
||||
startupConfig, err := config.LoadStartupFromEnv()
|
||||
if err != nil {
|
||||
return provision.ReconcileResult{}, err
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
store, err := sqlite.Open(ctx, startupConfig.Database.SQLiteDSN)
|
||||
if err != nil {
|
||||
return provision.ReconcileResult{}, err
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
service := provision.NewReconcileService(store, client)
|
||||
return service.Reconcile(ctx, provision.ReconcileRequest{HostBaseURL: req.HostBaseURL, AccessProbeAPIKey: req.AccessAPIKey, Pack: loadedPack, Provider: providerManifest})
|
||||
hostRow, err := store.Hosts().GetByBaseURL(ctx, req.HostBaseURL)
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
|
||||
service := reconcile.NewService(store, client)
|
||||
return service.Reconcile(ctx, reconcile.Request{HostID: hostRow.HostID, HostBaseURL: req.HostBaseURL, AccessProbeAPIKey: req.AccessAPIKey, Pack: loadedPack, Provider: providerManifest})
|
||||
}
|
||||
|
||||
func findProvider(loaded pack.LoadedPack, providerID string) (pack.ProviderManifest, error) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"sub2api-cn-relay-manager/internal/config"
|
||||
"sub2api-cn-relay-manager/internal/provision"
|
||||
"sub2api-cn-relay-manager/internal/reconcile"
|
||||
"sub2api-cn-relay-manager/internal/store/sqlite"
|
||||
)
|
||||
|
||||
@@ -221,12 +222,12 @@ func TestExecuteReconcileProviderWritesSummary(t *testing.T) {
|
||||
"--pack-dir", "/tmp/pack",
|
||||
"--provider-id", "deepseek",
|
||||
"--access-api-key", "user-key",
|
||||
}, nil, nil, nil, nil, nil, func(_ context.Context, req reconcileCLIRequest) (provision.ReconcileResult, error) {
|
||||
}, nil, nil, nil, nil, nil, func(_ context.Context, req reconcileCLIRequest) (reconcile.Result, error) {
|
||||
reconcileCalled = true
|
||||
if req.ProviderID != "deepseek" || req.AccessAPIKey != "user-key" {
|
||||
t.Fatalf("unexpected reconcile request: %+v", req)
|
||||
}
|
||||
return provision.ReconcileResult{Status: "drifted", MissingCount: 1, ExtraCount: 2, ProbeFailureCount: 1, AccessStatus: provision.AccessStatusBroken}, nil
|
||||
return reconcile.Result{Status: "drifted", MissingCount: 1, ExtraCount: 2, ProbeFailureCount: 1, AccessStatus: provision.AccessStatusBroken}, nil
|
||||
}, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("execute() reconcile error = %v", err)
|
||||
|
||||
Reference in New Issue
Block a user