github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/command/jsonformat/computed/renderers/sensitive.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  var _ computed.DiffRenderer = (*sensitiveRenderer)(nil)
    14  
    15  func Sensitive(change computed.Diff, beforeSensitive, afterSensitive bool) computed.DiffRenderer {
    16  	return &sensitiveRenderer{
    17  		inner:           change,
    18  		beforeSensitive: beforeSensitive,
    19  		afterSensitive:  afterSensitive,
    20  	}
    21  }
    22  
    23  type sensitiveRenderer struct {
    24  	inner computed.Diff
    25  
    26  	beforeSensitive bool
    27  	afterSensitive  bool
    28  }
    29  
    30  func (renderer sensitiveRenderer) RenderHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) string {
    31  	return fmt.Sprintf("(sensitive value)%s%s", nullSuffix(diff.Action, opts), forcesReplacement(diff.Replace, opts))
    32  }
    33  
    34  func (renderer sensitiveRenderer) 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  	var warning string
    43  	if renderer.beforeSensitive {
    44  		warning = opts.Colorize.Color(fmt.Sprintf("  # [yellow]Warning[reset]: this attribute value will no longer be marked as sensitive\n%s  # after applying this change.", formatIndent(indent)))
    45  	} else {
    46  		warning = opts.Colorize.Color(fmt.Sprintf("  # [yellow]Warning[reset]: this attribute value will be marked as sensitive and will not\n%s  # display in UI output after applying this change.", formatIndent(indent)))
    47  	}
    48  
    49  	if renderer.inner.Action == plans.NoOp {
    50  		return []string{fmt.Sprintf("%s The value is unchanged.", warning)}
    51  	}
    52  	return []string{warning}
    53  }