MCPcopy Index your code
hub / github.com/coder/coder / Graph

Method Graph

provisioner/terraform/provision.go:223–282  ·  view source on GitHub ↗
(
	sess *provisionersdk.Session, request *proto.GraphRequest, canceledOrComplete <-chan struct{},
)

Source from the content-addressed store, hash-verified

221}
222
223func (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,

Callers

nothing calls this directly

Calls 15

startTraceMethod · 0.95
setupContextsMethod · 0.95
executorMethod · 0.95
FuncNameFunction · 0.92
GraphErrorFunction · 0.92
logTerraformEnvVarsFunction · 0.85
planModulesFunction · 0.85
ConvertStateFunction · 0.85
checkMinVersionMethod · 0.80
parsePlanMethod · 0.80
PlanFilePathMethod · 0.80
startStageMethod · 0.80

Tested by

no test coverage detected