Skip to content

Commit 366b838

Browse files
committed
Add a self reference to CallRequest and ConstructRequest
1 parent 9be2d7b commit 366b838

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

pulumi

Submodule pulumi updated 238 files

sdk/Pulumi/Provider/Provider.cs

+28-4
Original file line numberDiff line numberDiff line change
@@ -363,13 +363,15 @@ public DeleteRequest(Urn urn, string id, ImmutableDictionary<string, PropertyVal
363363

364364
public sealed class ConstructRequest
365365
{
366+
public ProviderResource? Provider { get; init; }
366367
public string Type { get; init; }
367368
public string Name { get; init; }
368369
public ImmutableDictionary<string, PropertyValue> Inputs { get; init; }
369370
public ComponentResourceOptions Options { get; init; }
370371

371-
public ConstructRequest(string type, string name, ImmutableDictionary<string, PropertyValue> inputs, ComponentResourceOptions options)
372+
public ConstructRequest(ProviderResource? provider, string type, string name, ImmutableDictionary<string, PropertyValue> inputs, ComponentResourceOptions options)
372373
{
374+
Provider = provider;
373375
Type = type;
374376
Name = name;
375377
Inputs = inputs;
@@ -393,12 +395,14 @@ public ConstructResponse(Urn urn, IDictionary<string, PropertyValue> state, IDic
393395

394396
public sealed class CallRequest
395397
{
398+
public ProviderResource? Provider { get; init; }
396399
public ResourceReference? Self { get; }
397400
public string Tok { get; init; }
398401
public ImmutableDictionary<string, PropertyValue> Args { get; init; }
399402

400-
public CallRequest(ResourceReference? self, string tok, ImmutableDictionary<string, PropertyValue> args)
403+
public CallRequest(ProviderResource? provider, ResourceReference? self, string tok, ImmutableDictionary<string, PropertyValue> args)
401404
{
405+
Provider = provider;
402406
Self = self;
403407
Tok = tok;
404408
Args = args;
@@ -611,6 +615,9 @@ class ResourceProviderService : ResourceProvider.ResourceProviderBase, IDisposab
611615
private Provider? implementation;
612616
private readonly string version;
613617
private string? engineAddress;
618+
// More recent versions of the engine send URN and ID of the provider to `Configure`. With that we can construct
619+
// a `DependencyProviderResource` to use in `Construct` and `Call` to refer to the provider itself.
620+
private string? providerSelfReference;
614621

615622
Provider Implementation
616623
{
@@ -876,6 +883,11 @@ private ImmutableDictionary<string, PropertyValue> Unmarshal(Struct? properties)
876883
{
877884
return WrapProviderCall(async () =>
878885
{
886+
// Save the URN and ID for self provider references in Construct/Call later.
887+
if (request.HasId && request.HasUrn) {
888+
this.providerSelfReference = request.Urn + "::" + request.Id;
889+
}
890+
879891
var domRequest = new ConfigureRequest(request.Variables.ToImmutableDictionary(), Unmarshal(request.Args), request.AcceptSecrets,
880892
request.AcceptResources);
881893
using var cts = GetToken(context);
@@ -1057,7 +1069,13 @@ public override Task<Empty> Delete(Pulumirpc.DeleteRequest request, ServerCallCo
10571069
},
10581070
};
10591071

1060-
var domRequest = new ConstructRequest(request.Type, request.Name,
1072+
ProviderResource? provider = null;
1073+
if (providerSelfReference != null)
1074+
{
1075+
provider = new DependencyProviderResource(providerSelfReference);
1076+
}
1077+
1078+
var domRequest = new ConstructRequest(provider, request.Type, request.Name,
10611079
Unmarshal(request.Inputs), opts);
10621080
using var cts = GetToken(context);
10631081

@@ -1098,7 +1116,13 @@ public override Task<Empty> Delete(Pulumirpc.DeleteRequest request, ServerCallCo
10981116

10991117
domArgs = PatchArgDependencies(request, domArgs);
11001118

1101-
var domRequest = new CallRequest(self, request.Tok, domArgs);
1119+
ProviderResource? provider = null;
1120+
if (providerSelfReference != null)
1121+
{
1122+
provider = new DependencyProviderResource(providerSelfReference);
1123+
}
1124+
1125+
var domRequest = new CallRequest(provider, self, request.Tok, domArgs);
11021126
using var cts = GetToken(context);
11031127

11041128
var inlineDeploymentSettings = new InlineDeploymentSettings(logger, EngineAddress, request.MonitorEndpoint, request.Config,

0 commit comments

Comments
 (0)