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, }); }
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)); }
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 })); }