Skip to content

Commit

Permalink
chore: do not expose parameterization surface
Browse files Browse the repository at this point in the history
  • Loading branch information
rquitales committed Sep 9, 2024
1 parent 79b08e2 commit 5885307
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 25 deletions.
26 changes: 10 additions & 16 deletions provider/pkg/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ package provider

import (
"bufio"
"bytes"
"context"
"encoding/json"
"errors"
Expand Down Expand Up @@ -252,31 +251,26 @@ func (k *kubeProvider) GetMapping(ctx context.Context, request *pulumirpc.GetMap

// GetSchema returns the JSON-encoded schema for this provider's package.
func (k *kubeProvider) GetSchema(ctx context.Context, req *pulumirpc.GetSchemaRequest) (*pulumirpc.GetSchemaResponse, error) {
// TODO(rquitales): Do not hardcode the output schema. We need to merge the CRD schemas with the base provider schema.
if v := req.GetVersion(); v != 0 {
return nil, fmt.Errorf("unsupported schema version %d", v)
}

for _, p := range k.crdSchemas.crdSchemas {
if p == nil {
continue
if req.SubpackageName != "" && req.SubpackageVersion != "" {
spec := k.crdSchemas.get(req.SubpackageName, req.SubpackageVersion)
if spec == nil {
return nil, fmt.Errorf("no schema found for %s", req.SubpackageName)
}

p.Version = k.version

var out bytes.Buffer
encoder := json.NewEncoder(&out)
encoder.SetEscapeHTML(false)
encoder.SetIndent("", " ")
if err := encoder.Encode(*p); err != nil {
// Encode into JSON string.
specJSON, err := json.Marshal(spec)
if err != nil {
return nil, err
}
return &pulumirpc.GetSchemaResponse{Schema: out.String()}, nil
}

return nil, fmt.Errorf("no CRD schemas found")
return &pulumirpc.GetSchemaResponse{Schema: string(specJSON)}, nil
}

// return &pulumirpc.GetSchemaResponse{Schema: string(k.pulumiSchema)}, nil
return &pulumirpc.GetSchemaResponse{Schema: string(k.pulumiSchema)}, nil
}

// CheckConfig validates the configuration for this provider.
Expand Down
22 changes: 13 additions & 9 deletions provider/pkg/provider/provider_parameterize.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,24 +53,26 @@ type parameterizedPackageMap struct {
crdSchemas map[string]*pulumischema.PackageSpec
}

func (c *parameterizedPackageMap) mapKey(name, version string) string {
return fmt.Sprintf("%s@%s", name, version)
}

// get retrieves the CRD schema for the given package name.
//
//nolint:unused // TODO: Will be used once extension parameterization is implemented.
func (c *parameterizedPackageMap) get(name string) *pulumischema.PackageSpec {
func (c *parameterizedPackageMap) get(name, version string) *pulumischema.PackageSpec {
c.Lock()
defer c.Unlock()
return c.crdSchemas[name]
return c.crdSchemas[c.mapKey(name, version)]
}

// add adds the PackageSpec for a given parameterized package.
func (c *parameterizedPackageMap) add(name string, schema *pulumischema.PackageSpec) {
func (c *parameterizedPackageMap) add(name, version string, schema *pulumischema.PackageSpec) {
c.Lock()
defer c.Unlock()
if c.crdSchemas == nil {
c.crdSchemas = make(map[string]*pulumischema.PackageSpec)
}

c.crdSchemas[name] = schema
c.crdSchemas[c.mapKey(name, version)] = schema
}

// ParameterizedArgs is the struct that holds the arguments for the Kubernetes Provider parameterization.
Expand Down Expand Up @@ -263,7 +265,7 @@ func mergeSpecs(specs []*spec.Swagger) (*spec.Swagger, error) {
}

// generateSchema generates the Pulumi schema with parameterization for the given OpenAPI spec.
func generateSchema(swagger *spec.Swagger, baseProvName, baseProvVersion string) *pulumischema.PackageSpec {
func generateSchema(swagger *spec.Swagger, packageVersion, baseProvName, baseProvVersion string) *pulumischema.PackageSpec {
// TODO(rquitales): We need to handle field name normalization here so that we can generate typed SDKs that contain valid field names,
// for example, not allowing hyphens.
marshaledOpenAPISchema, err := json.Marshal(swagger)
Expand All @@ -285,6 +287,8 @@ func generateSchema(swagger *spec.Swagger, baseProvName, baseProvVersion string)
Parameter: marshaledOpenAPISchema,
}))

pSchema.Version = packageVersion

return &pSchema
}

Expand Down Expand Up @@ -344,10 +348,10 @@ func (k *kubeProvider) parameterizeRequest_Args(p *pulumirpc.ParameterizeRequest
return nil, fmt.Errorf("error merging OpenAPI specs for all provided CRDs: %w", err)
}

crdsPackageSpec := generateSchema(mergedSpecs, k.name, k.version)
crdsPackageSpec := generateSchema(mergedSpecs, args.PackageVersion, k.name, k.version)

if crdsPackageSpec != nil {
k.crdSchemas.add(crdPackageName, crdsPackageSpec)
k.crdSchemas.add(crdPackageName, args.PackageVersion, crdsPackageSpec)
}

return &pulumirpc.ParameterizeResponse{Name: crdPackageName, Version: args.PackageVersion}, nil
Expand Down

0 comments on commit 5885307

Please sign in to comment.