From 6db71fed21e70c71d1e4c67c84fa39b8c18293d9 Mon Sep 17 00:00:00 2001 From: Aaron Friel Date: Fri, 9 Dec 2022 18:00:22 -0800 Subject: [PATCH] Add forward compatible UnimplementedProvider for bridge --- .../common/resource/plugin/provider_test.go | 3 + .../resource/plugin/provider_unimplemented.go | 85 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 sdk/go/common/resource/plugin/provider_unimplemented.go diff --git a/sdk/go/common/resource/plugin/provider_test.go b/sdk/go/common/resource/plugin/provider_test.go index 3626db040564..5f9f38bd7224 100644 --- a/sdk/go/common/resource/plugin/provider_test.go +++ b/sdk/go/common/resource/plugin/provider_test.go @@ -128,3 +128,6 @@ func TestNewDetailedDiff(t *testing.T) { }) } } + +// Assert that UnimplementedProvider implements Provider +var _ = Provider((*UnimplementedProvider)(nil)) diff --git a/sdk/go/common/resource/plugin/provider_unimplemented.go b/sdk/go/common/resource/plugin/provider_unimplemented.go new file mode 100644 index 000000000000..b065046d4002 --- /dev/null +++ b/sdk/go/common/resource/plugin/provider_unimplemented.go @@ -0,0 +1,85 @@ +// Copyright 2016-2022, Pulumi Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// nolint: lll +package plugin + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/common/resource" + "github.com/pulumi/pulumi/sdk/v3/go/common/tokens" + "github.com/pulumi/pulumi/sdk/v3/go/common/workspace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// UnimplementedProvider can be embedded to have forward compatible implementations. +type UnimplementedProvider struct{} + +func (p *UnimplementedProvider) Close() error { + return status.Error(codes.Unimplemented, "Close is not yet implemented") +} +func (p *UnimplementedProvider) SignalCancellation() error { + return status.Error(codes.Unimplemented, "SignalCancellation is not yet implemented") +} +func (p *UnimplementedProvider) Pkg() tokens.Package { + return tokens.Package("") +} +func (p *UnimplementedProvider) GetSchema(version int) ([]byte, error) { + return nil, status.Error(codes.Unimplemented, "GetSchema is not yet implemented") +} +func (p *UnimplementedProvider) CheckConfig(urn resource.URN, olds resource.PropertyMap, news resource.PropertyMap, allowUnknowns bool) (resource.PropertyMap, []CheckFailure, error) { + return resource.PropertyMap{}, nil, status.Error(codes.Unimplemented, "CheckConfig is not yet implemented") +} +func (p *UnimplementedProvider) DiffConfig(urn resource.URN, olds resource.PropertyMap, news resource.PropertyMap, allowUnknowns bool, ignoreChanges []string) (DiffResult, error) { + return DiffResult{}, status.Error(codes.Unimplemented, "DiffConfig is not yet implemented") +} +func (p *UnimplementedProvider) Configure(inputs resource.PropertyMap) error { + return status.Error(codes.Unimplemented, "Configure is not yet implemented") +} +func (p *UnimplementedProvider) Check(urn resource.URN, olds resource.PropertyMap, news resource.PropertyMap, allowUnknowns bool, randomSeed []byte) (resource.PropertyMap, []CheckFailure, error) { + return resource.PropertyMap{}, nil, status.Error(codes.Unimplemented, "Check is not yet implemented") +} +func (p *UnimplementedProvider) Diff(urn resource.URN, id resource.ID, olds resource.PropertyMap, news resource.PropertyMap, allowUnknowns bool, ignoreChanges []string) (DiffResult, error) { + return DiffResult{}, status.Error(codes.Unimplemented, "Diff is not yet implemented") +} +func (p *UnimplementedProvider) Create(urn resource.URN, news resource.PropertyMap, timeout float64, preview bool) (resource.ID, resource.PropertyMap, resource.Status, error) { + return resource.ID(""), resource.PropertyMap{}, resource.StatusUnknown, status.Error(codes.Unimplemented, "Create is not yet implemented") +} +func (p *UnimplementedProvider) Read(urn resource.URN, id resource.ID, inputs resource.PropertyMap, state resource.PropertyMap) (ReadResult, resource.Status, error) { + return ReadResult{}, resource.StatusUnknown, status.Error(codes.Unimplemented, "Read is not yet implemented") +} +func (p *UnimplementedProvider) Update(urn resource.URN, id resource.ID, olds resource.PropertyMap, news resource.PropertyMap, timeout float64, ignoreChanges []string, preview bool) (resource.PropertyMap, resource.Status, error) { + return resource.PropertyMap{}, resource.StatusUnknown, status.Error(codes.Unimplemented, "Update is not yet implemented") +} +func (p *UnimplementedProvider) Delete(urn resource.URN, id resource.ID, props resource.PropertyMap, timeout float64) (resource.Status, error) { + return resource.StatusUnknown, status.Error(codes.Unimplemented, "Delete is not yet implemented") +} +func (p *UnimplementedProvider) Construct(info ConstructInfo, typ tokens.Type, name tokens.QName, parent resource.URN, inputs resource.PropertyMap, options ConstructOptions) (ConstructResult, error) { + return ConstructResult{}, status.Error(codes.Unimplemented, "Construct is not yet implemented") +} +func (p *UnimplementedProvider) Invoke(tok tokens.ModuleMember, args resource.PropertyMap) (resource.PropertyMap, []CheckFailure, error) { + return resource.PropertyMap{}, nil, status.Error(codes.Unimplemented, "Invoke is not yet implemented") +} +func (p *UnimplementedProvider) StreamInvoke(tok tokens.ModuleMember, args resource.PropertyMap, onNext func(resource.PropertyMap) error) ([]CheckFailure, error) { + return nil, status.Error(codes.Unimplemented, "StreamInvoke is not yet implemented") +} +func (p *UnimplementedProvider) Call(tok tokens.ModuleMember, args resource.PropertyMap, info CallInfo, options CallOptions) (CallResult, error) { + return CallResult{}, status.Error(codes.Unimplemented, "Call is not yet implemented") +} +func (p *UnimplementedProvider) GetPluginInfo() (workspace.PluginInfo, error) { + return workspace.PluginInfo{}, status.Error(codes.Unimplemented, "GetPluginInfo is not yet implemented") +} +func (p *UnimplementedProvider) GetMapping(key string) ([]byte, string, error) { + return nil, "", status.Error(codes.Unimplemented, "GetMapping is not yet implemented") +}