Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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),
            });
        }
Esempio n. 3
0
 public async Task <ReadResourceResponse> ReadResourceAsync(Resource resource, ReadResourceRequest request)
 => await this._client.ReadResourceAsync(request);
Esempio n. 4
0
        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)
            });
        }