// Copyright 2016-2023, Pulumi Corporation. All rights reserved. //go:build !all // +build !all package main import ( "context" "fmt" "strconv" "sync/atomic" pbempty "github.com/golang/protobuf/ptypes/empty" "github.com/pulumi/pulumi/pkg/v3/resource/provider" "github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/util/cmdutil" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" pulumiprovider "github.com/pulumi/pulumi/sdk/v3/go/pulumi/provider" pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go" ) type Component struct { pulumi.ResourceState } func NewComponent(ctx *pulumi.Context, name string, opts ...pulumi.ResourceOption) (*Component, error) { var comp Component if err := ctx.RegisterComponentResource("testcomponent:index:Component", name, &comp, opts...); err != nil { return nil, err } return &comp, nil } func main() { err := provider.Main("testcomponent", func(host *provider.HostClient) (pulumirpc.ResourceProviderServer, error) { return NewProvider(host, "testcomponent", "0.0.1"), nil }) if err != nil { cmdutil.Exit(err) } } type Provider struct { pulumirpc.UnimplementedResourceProviderServer host *provider.HostClient name string version string // The next ID to use for a resource. currentID atomic.Int64 } func NewProvider(host *provider.HostClient, name, version string) pulumirpc.ResourceProviderServer { return &Provider{ host: host, name: name, version: version, } } func (p *Provider) Create(ctx context.Context, req *pulumirpc.CreateRequest, ) (*pulumirpc.CreateResponse, error) { urn := resource.URN(req.GetUrn()) typ := urn.Type() if typ != "testcomponent:index:Resource" { return nil, fmt.Errorf("unknown resource type %q", typ) } id := p.currentID.Add(1) return &pulumirpc.CreateResponse{ Id: strconv.FormatInt(id, 10), }, nil } func (p *Provider) Construct(ctx context.Context, req *pulumirpc.ConstructRequest, ) (*pulumirpc.ConstructResponse, error) { return pulumiprovider.Construct(ctx, req, p.host.EngineConn(), func( ctx *pulumi.Context, typ, name string, inputs pulumiprovider.ConstructInputs, options pulumi.ResourceOption, ) (*pulumiprovider.ConstructResult, error) { if typ != "testcomponent:index:Component" { return nil, fmt.Errorf("unknown resource type %q", typ) } comp, err := NewComponent(ctx, name, options) if err != nil { return nil, err } return pulumiprovider.NewConstructResult(comp) }) } func (p *Provider) CheckConfig(ctx context.Context, req *pulumirpc.CheckRequest, ) (*pulumirpc.CheckResponse, error) { return &pulumirpc.CheckResponse{Inputs: req.GetNews()}, nil } func (p *Provider) DiffConfig(ctx context.Context, req *pulumirpc.DiffRequest, ) (*pulumirpc.DiffResponse, error) { return &pulumirpc.DiffResponse{}, nil } func (p *Provider) Configure(ctx context.Context, req *pulumirpc.ConfigureRequest, ) (*pulumirpc.ConfigureResponse, error) { panic("great sadness") } func (p *Provider) Check(ctx context.Context, req *pulumirpc.CheckRequest, ) (*pulumirpc.CheckResponse, error) { return &pulumirpc.CheckResponse{Inputs: req.News, Failures: nil}, nil } func (p *Provider) Diff(ctx context.Context, req *pulumirpc.DiffRequest) (*pulumirpc.DiffResponse, error) { return &pulumirpc.DiffResponse{}, nil } func (p *Provider) Read(ctx context.Context, req *pulumirpc.ReadRequest) (*pulumirpc.ReadResponse, error) { return &pulumirpc.ReadResponse{ Id: req.GetId(), Properties: req.GetProperties(), }, nil } func (p *Provider) Update(ctx context.Context, req *pulumirpc.UpdateRequest, ) (*pulumirpc.UpdateResponse, error) { return &pulumirpc.UpdateResponse{ Properties: req.GetNews(), }, nil } func (p *Provider) Delete(ctx context.Context, req *pulumirpc.DeleteRequest) (*pbempty.Empty, error) { return &pbempty.Empty{}, nil } func (p *Provider) GetPluginInfo(context.Context, *pbempty.Empty) (*pulumirpc.PluginInfo, error) { return &pulumirpc.PluginInfo{ Version: p.version, }, nil } func (p *Provider) Attach(ctx context.Context, req *pulumirpc.PluginAttach) (*pbempty.Empty, error) { return &pbempty.Empty{}, nil } func (p *Provider) GetSchema(ctx context.Context, req *pulumirpc.GetSchemaRequest, ) (*pulumirpc.GetSchemaResponse, error) { return &pulumirpc.GetSchemaResponse{}, nil } func (p *Provider) Cancel(context.Context, *pbempty.Empty) (*pbempty.Empty, error) { return &pbempty.Empty{}, nil } func (p *Provider) GetMapping(context.Context, *pulumirpc.GetMappingRequest) (*pulumirpc.GetMappingResponse, error) { return &pulumirpc.GetMappingResponse{}, nil } func (p *Provider) Invoke(ctx context.Context, req *pulumirpc.InvokeRequest, ) (*pulumirpc.InvokeResponse, error) { return nil, fmt.Errorf("unknown Invoke %q", req.GetTok()) } func (p *Provider) StreamInvoke(req *pulumirpc.InvokeRequest, server pulumirpc.ResourceProvider_StreamInvokeServer, ) error { return fmt.Errorf("unknown StreamInvoke %q", req.GetTok()) } func (p *Provider) Call(ctx context.Context, req *pulumirpc.CallRequest, ) (*pulumirpc.CallResponse, error) { return nil, fmt.Errorf("unknown Call %q", req.GetTok()) }