github.com/opentofu/opentofu@v1.7.1/internal/command/jsonformat/computed/renderers/sensitive.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package renderers
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"github.com/opentofu/opentofu/internal/command/jsonformat/computed"
    12  	"github.com/opentofu/opentofu/internal/plans"
    13  )
    14  
    15  var _ computed.DiffRenderer = (*sensitiveRenderer)(nil)
    16  
    17  func Sensitive(change computed.Diff, beforeSensitive, afterSensitive bool) computed.DiffRenderer {
    18  	return &sensitiveRenderer{
    19  		inner:           change,
    20  		beforeSensitive: beforeSensitive,
    21  		afterSensitive:  afterSensitive,
    22  	}
    23  }
    24  
    25  type sensitiveRenderer struct {
    26  	inner computed.Diff
    27  
    28  	beforeSensitive bool
    29  	afterSensitive  bool
    30  }
    31  
    32  func (renderer sensitiveRenderer) RenderHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) string {
    33  	return fmt.Sprintf("(sensitive value)%s%s", nullSuffix(diff.Action, opts), forcesReplacement(diff.Replace, opts))
    34  }
    35  
    36  func (renderer sensitiveRenderer) WarningsHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) []string {
    37  	if (renderer.beforeSensitive == renderer.afterSensitive) || renderer.inner.Action == plans.Create || renderer.inner.Action == plans.Delete {
    38  		// Only display warnings for sensitive values if they are changing from
    39  		// being sensitive or to being sensitive and if they are not being
    40  		// destroyed or created.
    41  		return []string{}
    42  	}
    43  
    44  	var warning string
    45  	if renderer.beforeSensitive {
    46  		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)))
    47  	} else {
    48  		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)))
    49  	}
    50  
    51  	if renderer.inner.Action == plans.NoOp {
    52  		return []string{fmt.Sprintf("%s The value is unchanged.", warning)}
    53  	}
    54  	return []string{warning}
    55  }