private void ReadResult(Type resType, Type resultType, object result, PlanResourceChange.Types.Response response) { var diagnostics = ((TFDiagnostics)resultType .GetProperty(nameof(response.Diagnostics)).GetValue(result)); var plannedPrivate = resultType .GetProperty(nameof(response.PlannedPrivate)).GetValue(result); var plannedState = resultType .GetProperty(nameof(response.PlannedState)).GetValue(result); var requiresReplace = resultType .GetProperty(nameof(response.RequiresReplace)).GetValue(result); if (diagnostics.Count() > 0) { response.Diagnostics.Add(diagnostics.All()); } if (plannedPrivate != null) { response.PlannedPrivate = ByteString.CopyFrom((byte[])plannedPrivate); } if (plannedState != null) { response.PlannedState = plannedState.MarshalToDynamicValue(resType, withUnknowns: true); } if (requiresReplace != null) { // Translates our internal representation of ValuePath to AttributePath var paths = (IEnumerable <TFSteps>)requiresReplace; response.RequiresReplace.Add(TFAttributePaths.ToPaths(paths)); } }
public override async Task <PlanResourceChange.Types.Response> PlanResourceChange( PlanResourceChange.Types.Request request, ServerCallContext context) { var response = new PlanResourceChange.Types.Response(); var providerType = _schemaResolver.PluginDetails.Provider; var resType = _schemaResolver.GetResourceSchemas()[request.TypeName].Type; if (providerType.HasPlanResourceChangeSkill(resType)) { providerType.InvokePlanResourceChangeSkill( PluginProviderInstance, resType, writeInput: (inputType, input) => WriteInput(resType, request, inputType, input), readResult: (resultType, result) => ReadResult(resType, resultType, result, response) ); } else { _log.LogWarning("provider does not handle planning change for resource [{type}]", resType); } return(await Task.FromResult(response)); }