private async Task <(string urn, string id, Struct data, ImmutableDictionary <string, ImmutableHashSet <Resource> > dependencies)> ReadResourceAsync( Resource resource, string id, ResourceArgs args, ResourceOptions options) { var name = resource.GetResourceName(); var type = resource.GetResourceType(); var label = $"resource:{name}[{type}]#..."; Log.Debug($"Reading resource: id={id}, t=${type}, name=${name}"); var prepareResult = await this.PrepareResourceAsync( label, resource, custom : true, remote : false, args, options).ConfigureAwait(false); var serializer = new Serializer(_excessiveDebugOutput); Log.Debug($"ReadResource RPC prepared: id={id}, t={type}, name={name}" + (_excessiveDebugOutput ? $", obj={prepareResult.SerializedProps}" : "")); // Create a resource request and do the RPC. var request = new ReadResourceRequest { Type = type, Name = name, Id = id, Parent = prepareResult.ParentUrn, Provider = prepareResult.ProviderRef, Properties = prepareResult.SerializedProps, Version = options?.Version ?? "", AcceptSecrets = true, AcceptResources = !_disableResourceReferences, }; request.Dependencies.AddRange(prepareResult.AllDirectDependencyURNs); // Now run the operation, serializing the invocation if necessary. var response = await this.Monitor.ReadResourceAsync(resource, request); return(response.Urn, id, response.Properties, ImmutableDictionary <string, ImmutableHashSet <Resource> > .Empty); }
public async Task <ReadResourceResponse> ReadResourceAsync(Resource resource, ReadResourceRequest request) { var(id, state) = await _mocks.NewResourceAsync(new MockResourceArgs { Type = request.Type, Name = request.Name, Inputs = ToDictionary(request.Properties), Provider = request.Provider, Id = request.Id, }).ConfigureAwait(false); var urn = NewUrn(request.Parent, request.Type, request.Name); var serializedState = await SerializeToDictionary(state).ConfigureAwait(false); lock (_registeredResources) { var builder = ImmutableDictionary.CreateBuilder <string, object>(); builder.Add("urn", urn); if (id != null) { builder.Add("id", id); } builder.Add("state", serializedState); _registeredResources[urn] = builder.ToImmutable(); } lock (this.Resources) { this.Resources.Add(resource); } return(new ReadResourceResponse { Urn = urn, Properties = Serializer.CreateStruct(serializedState), }); }
public async Task <ReadResourceResponse> ReadResourceAsync(Resource resource, ReadResourceRequest request) => await this._client.ReadResourceAsync(request);
public async Task <ReadResourceResponse> ReadResourceAsync(Resource resource, ReadResourceRequest request) { var(id, state) = await _mocks.NewResourceAsync(request.Type, request.Name, ToDictionary(request.Properties), request.Provider, request.Id).ConfigureAwait(false); lock (this.Resources) { this.Resources.Add(resource); } return(new ReadResourceResponse { Urn = NewUrn(request.Parent, request.Type, request.Name), Properties = await SerializeAsync(state).ConfigureAwait(false) }); }