(dialCtx context.Context, name string, provisionerTypes []codersdk.ProvisionerType, provisionerTags map[string]string, opts ...MemoryProvisionerDaemonOption)
| 2397 | } |
| 2398 | |
| 2399 | func (api *API) CreateInMemoryTaggedProvisionerDaemon(dialCtx context.Context, name string, provisionerTypes []codersdk.ProvisionerType, provisionerTags map[string]string, opts ...MemoryProvisionerDaemonOption) (client proto.DRPCProvisionerDaemonClient, err error) { |
| 2400 | options := &memoryProvisionerDaemonOptions{} |
| 2401 | for _, opt := range opts { |
| 2402 | opt(options) |
| 2403 | } |
| 2404 | |
| 2405 | tracer := api.TracerProvider.Tracer(tracing.TracerName) |
| 2406 | clientSession, serverSession := drpcsdk.MemTransportPipe() |
| 2407 | defer func() { |
| 2408 | if err != nil { |
| 2409 | _ = clientSession.Close() |
| 2410 | _ = serverSession.Close() |
| 2411 | } |
| 2412 | }() |
| 2413 | |
| 2414 | // All in memory provisioners will be part of the default org for now. |
| 2415 | //nolint:gocritic // in-memory provisioners are owned by system |
| 2416 | defaultOrg, err := api.Database.GetDefaultOrganization(dbauthz.AsSystemRestricted(dialCtx)) |
| 2417 | if err != nil { |
| 2418 | return nil, xerrors.Errorf("unable to fetch default org for in memory provisioner: %w", err) |
| 2419 | } |
| 2420 | |
| 2421 | dbTypes := make([]database.ProvisionerType, 0, len(provisionerTypes)) |
| 2422 | for _, tp := range provisionerTypes { |
| 2423 | dbTypes = append(dbTypes, database.ProvisionerType(tp)) |
| 2424 | } |
| 2425 | |
| 2426 | keyID, err := uuid.Parse(string(codersdk.ProvisionerKeyIDBuiltIn)) |
| 2427 | if err != nil { |
| 2428 | return nil, xerrors.Errorf("failed to parse built-in provisioner key ID: %w", err) |
| 2429 | } |
| 2430 | |
| 2431 | apiVersion := proto.CurrentVersion.String() |
| 2432 | if options.versionOverride != "" && flag.Lookup("test.v") != nil { |
| 2433 | // This should only be usable for unit testing. To fake a different provisioner version |
| 2434 | apiVersion = options.versionOverride |
| 2435 | } |
| 2436 | |
| 2437 | //nolint:gocritic // in-memory provisioners are owned by system |
| 2438 | daemon, err := api.Database.UpsertProvisionerDaemon(dbauthz.AsSystemRestricted(dialCtx), database.UpsertProvisionerDaemonParams{ |
| 2439 | Name: name, |
| 2440 | OrganizationID: defaultOrg.ID, |
| 2441 | CreatedAt: dbtime.Now(), |
| 2442 | Provisioners: dbTypes, |
| 2443 | Tags: provisionersdk.MutateTags(uuid.Nil, provisionerTags), |
| 2444 | LastSeenAt: sql.NullTime{Time: dbtime.Now(), Valid: true}, |
| 2445 | Version: buildinfo.Version(), |
| 2446 | APIVersion: apiVersion, |
| 2447 | KeyID: keyID, |
| 2448 | }) |
| 2449 | if err != nil { |
| 2450 | return nil, xerrors.Errorf("failed to create in-memory provisioner daemon: %w", err) |
| 2451 | } |
| 2452 | |
| 2453 | mux := drpcmux.New() |
| 2454 | api.Logger.Debug(dialCtx, "starting in-memory provisioner daemon", slog.F("name", name)) |
| 2455 | logger := api.Logger.Named(fmt.Sprintf("inmem-provisionerd-%s", name)) |
| 2456 | srv, err := provisionerdserver.NewServer( |
no test coverage detected