MCPcopy Create free account
hub / github.com/coder/coder / logResourceReplacements

Function logResourceReplacements

provisioner/terraform/resource_replacements.go:355–402  ·  view source on GitHub ↗
(replacements []replacementLogEntry, sink logSink)

Source from the content-addressed store, hash-verified

353}
354
355func logResourceReplacements(replacements []replacementLogEntry, sink logSink) {
356 if len(replacements) == 0 {
357 return
358 }
359
360 // Sort a copy so the log output is deterministic without mutating
361 // the caller's slice.
362 logs := make([]replacementLogEntry, len(replacements))
363 copy(logs, replacements)
364 sort.Slice(logs, func(i, j int) bool {
365 return logs[i].resource < logs[j].resource
366 })
367
368 sink.ProvisionLog(proto.LogLevel_WARN, "Resource replacements:")
369 for _, replacement := range logs {
370 sink.ProvisionLog(
371 proto.LogLevel_WARN, fmt.Sprintf(" -/+ %s (replace)", replacement.resource))
372
373 if len(replacement.paths) == 0 {
374 sink.ProvisionLog(
375 proto.LogLevel_WARN, " ~ replacement reason unavailable")
376 continue
377 }
378
379 // Use a copy so we don't mutate the replacement entry.
380 paths := make([]string, len(replacement.paths))
381 copy(paths, replacement.paths)
382 sort.Strings(paths)
383
384 for _, path := range paths {
385 vals, ok := replacement.values[path]
386 if ok {
387 sink.ProvisionLog(
388 proto.LogLevel_WARN, fmt.Sprintf(" ~ %s: %s -> %s (forces replacement)",
389 path,
390 formatReplacementValue(vals.before),
391 formatReplacementValue(vals.after),
392 ),
393 )
394 continue
395 }
396
397 sink.ProvisionLog(
398 proto.LogLevel_WARN, fmt.Sprintf(" ~ %s (forces replacement)", path),
399 )
400 }
401 }
402}
403
404func formatReplacementValue(value replacementValue) string {
405 if !value.valid {

Calls 3

formatReplacementValueFunction · 0.85
StringsMethod · 0.80
ProvisionLogMethod · 0.65