(
sess *provisionersdk.Session, request *proto.GraphRequest, canceledOrComplete <-chan struct{},
)
| 221 | } |
| 222 | |
| 223 | func (s *server) Graph( |
| 224 | sess *provisionersdk.Session, request *proto.GraphRequest, canceledOrComplete <-chan struct{}, |
| 225 | ) *proto.GraphComplete { |
| 226 | ctx, span := s.startTrace(sess.Context(), tracing.FuncName()) |
| 227 | defer span.End() |
| 228 | ctx, cancel, killCtx, kill := s.setupContexts(ctx, canceledOrComplete) |
| 229 | defer cancel() |
| 230 | defer kill() |
| 231 | |
| 232 | e := s.executor(sess.Files, database.ProvisionerJobTimingStageGraph) |
| 233 | if err := e.checkMinVersion(ctx); err != nil { |
| 234 | return provisionersdk.GraphError("%s", err.Error()) |
| 235 | } |
| 236 | logTerraformEnvVars(sess) |
| 237 | |
| 238 | modules := []*tfjson.StateModule{} |
| 239 | switch request.Source { |
| 240 | case proto.GraphSource_SOURCE_PLAN: |
| 241 | plan, err := e.parsePlan(ctx, killCtx, e.files.PlanFilePath()) |
| 242 | if err != nil { |
| 243 | return provisionersdk.GraphError("parse plan for graph: %s", err) |
| 244 | } |
| 245 | |
| 246 | modules = planModules(plan) |
| 247 | case proto.GraphSource_SOURCE_STATE: |
| 248 | tfState, err := e.state(ctx, killCtx) |
| 249 | if err != nil { |
| 250 | return provisionersdk.GraphError("load tfstate for graph: %s", err) |
| 251 | } |
| 252 | if tfState.Values != nil { |
| 253 | modules = []*tfjson.StateModule{tfState.Values.RootModule} |
| 254 | } |
| 255 | default: |
| 256 | return provisionersdk.GraphError("unknown graph source: %q", request.Source.String()) |
| 257 | } |
| 258 | |
| 259 | endStage := e.timings.startStage(database.ProvisionerJobTimingStageGraph) |
| 260 | rawGraph, err := e.graph(ctx, killCtx) |
| 261 | endStage(err) |
| 262 | if err != nil { |
| 263 | return provisionersdk.GraphError("generate graph: %s", err) |
| 264 | } |
| 265 | |
| 266 | state, err := ConvertState(ctx, modules, rawGraph, e.server.logger) |
| 267 | if err != nil { |
| 268 | return provisionersdk.GraphError("convert state for graph: %s", err) |
| 269 | } |
| 270 | |
| 271 | return &proto.GraphComplete{ |
| 272 | Error: "", |
| 273 | Timings: e.timings.aggregate(), |
| 274 | Resources: state.Resources, |
| 275 | Parameters: state.Parameters, |
| 276 | ExternalAuthProviders: state.ExternalAuthProviders, |
| 277 | Presets: state.Presets, |
| 278 | HasAiTasks: state.HasAITasks, |
| 279 | AiTasks: state.AITasks, |
| 280 | HasExternalAgents: state.HasExternalAgents, |
nothing calls this directly
no test coverage detected