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 }