Пример #1
0
        public async Task <UpgradeResourceState.Types.Response> UpgradeResourceState(UpgradeResourceState.Types.Request request)
        {
            var upgraded = await _resourceUpgrader.UpgradeResourceStateAsync(request.Version, request.RawState.Json.Memory);

            var upgradedSerialized = SerializeDynamicValue(upgraded);

            return(new UpgradeResourceState.Types.Response
            {
                UpgradedState = upgradedSerialized,
            });
        }
Пример #2
0
        public override async Task <UpgradeResourceState.Types.Response> UpgradeResourceState(
            UpgradeResourceState.Types.Request request, ServerCallContext context)
        {
            var response = new UpgradeResourceState.Types.Response();

            var providerType = _schemaResolver.PluginDetails.Provider;
            var resType      = _schemaResolver.GetResourceSchemas()[request.TypeName].Type;

            if (providerType.HasUpgradeResourceStateSkill(resType))
            {
                providerType.InvokeUpgradeResourceStateSkill(
                    PluginProviderInstance,
                    resType,
                    writeInput: (inputType, input) => {
                    inputType.GetProperty(nameof(request.Version)).SetValue(input,
                                                                            request.Version);
                    inputType.GetProperty(nameof(request.RawState)).SetValue(input,
                                                                             new TFRawState(request.RawState.Json.ToByteArray()));
                },
                    readResult: (resultType, result) => {
                    var diagnostics = ((TFDiagnostics)resultType.GetProperty(nameof(response.Diagnostics))
                                       .GetValue(result));
                    if (diagnostics.Count() > 0)
                    {
                        response.Diagnostics.Add(diagnostics.All());
                    }

                    var upgradedState = resultType.GetProperty(nameof(response.UpgradedState))
                                        .GetValue(result);
                    if (upgradedState != null)
                    {
                        response.UpgradedState = upgradedState.MarshalToDynamicValue(resType);
                    }
                });
            }
            else
            {
                _log.LogWarning("provider does not handle applying change for resource [{type}]", resType);
            }

            return(await Task.FromResult(response));
        }
Пример #3
0
    public override Task <UpgradeResourceState.Types.Response> UpgradeResourceState(UpgradeResourceState.Types.Request request, ServerCallContext context)
    {
        if (!_resourceRegistry.Types.TryGetValue(request.TypeName, out var resourceType))
        {
            return(Task.FromResult(new UpgradeResourceState.Types.Response
            {
                Diagnostics =
                {
                    new Diagnostic {
                        Detail = "Unkonwn type name."
                    },
                },
            }));
        }

        var providerHostType = typeof(ResourceProviderHost <>).MakeGenericType(resourceType);
        var provider         = _serviceProvider.GetService(providerHostType);

        return((Task <UpgradeResourceState.Types.Response>)providerHostType.GetMethod(nameof(ResourceProviderHost <object> .UpgradeResourceState))
               .Invoke(provider, new[] { request }));
    }