github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/command/jsonformat/computed/renderers/sensitive_block.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package renderers
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/terramate-io/tf/command/jsonformat/computed"
    10  	"github.com/terramate-io/tf/plans"
    11  )
    12  
    13  func SensitiveBlock(diff computed.Diff, beforeSensitive, afterSensitive bool) computed.DiffRenderer {
    14  	return &sensitiveBlockRenderer{
    15  		inner:           diff,
    16  		beforeSensitive: beforeSensitive,
    17  		afterSensitive:  afterSensitive,
    18  	}
    19  }
    20  
    21  type sensitiveBlockRenderer struct {
    22  	inner computed.Diff
    23  
    24  	afterSensitive  bool
    25  	beforeSensitive bool
    26  }
    27  
    28  func (renderer sensitiveBlockRenderer) RenderHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) string {
    29  	cachedLinePrefix := fmt.Sprintf("%s%s", formatIndent(indent), writeDiffActionSymbol(plans.NoOp, opts))
    30  	return fmt.Sprintf("{%s\n%s  # At least one attribute in this block is (or was) sensitive,\n%s  # so its contents will not be displayed.\n%s}",
    31  		forcesReplacement(diff.Replace, opts), cachedLinePrefix, cachedLinePrefix, cachedLinePrefix)
    32  }
    33  
    34  func (renderer sensitiveBlockRenderer) WarningsHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) []string {
    35  	if (renderer.beforeSensitive == renderer.afterSensitive) || renderer.inner.Action == plans.Create || renderer.inner.Action == plans.Delete {
    36  		// Only display warnings for sensitive values if they are changing from
    37  		// being sensitive or to being sensitive and if they are not being
    38  		// destroyed or created.
    39  		return []string{}
    40  	}
    41  
    42  	if renderer.beforeSensitive {
    43  		return []string{opts.Colorize.Color(fmt.Sprintf("  # [yellow]Warning[reset]: this block will no longer be marked as sensitive\n%s  # after applying this change.", formatIndent(indent)))}
    44  	} else {
    45  		return []string{opts.Colorize.Color(fmt.Sprintf("  # [yellow]Warning[reset]: this block will be marked as sensitive and will not\n%s  # display in UI output after applying this change.", formatIndent(indent)))}
    46  	}
    47  }