Files
opentf/internal/command/jsonformat/change/sensitive.go
Liam Cervante 8975eebf84 Add support for maps in the structured renderer (#32397)
* prep for processing the structured run output

* undo unwanted change to a json key

* Add skeleton functions and API for refactored renderer

* goimports

* Fix documentation of the RenderOpts struct

* Add rendering functionality for primitives to the structured renderer

* add test case for override

* Add support for parsing and rendering sensitive values in the renderer

* Add support for unknown/computed values in the structured renderer

* delete missing unit tests

* Add support for object attributes in the structured renderer

* goimports

* Add support for the replace paths data in the structured renderer

* Add support for maps in the structured renderer
2023-01-09 12:41:24 +01:00

49 lines
1.6 KiB
Go

package change
import (
"fmt"
"reflect"
)
func Sensitive(before, after interface{}, beforeSensitive, afterSensitive bool) Renderer {
return &sensitiveRenderer{
before: before,
after: after,
beforeSensitive: beforeSensitive,
afterSensitive: afterSensitive,
}
}
type sensitiveRenderer struct {
before interface{}
after interface{}
beforeSensitive bool
afterSensitive bool
}
func (renderer sensitiveRenderer) Render(change Change, indent int, opts RenderOpts) string {
return fmt.Sprintf("(sensitive)%s%s", change.nullSuffix(opts.overrideNullSuffix), change.forcesReplacement())
}
func (renderer sensitiveRenderer) Warnings(change Change, indent int) []string {
if (renderer.beforeSensitive == renderer.afterSensitive) || renderer.before == nil || renderer.after == nil {
// Only display warnings for sensitive values if they are changing from
// being sensitive or to being sensitive and if they are not being
// destroyed or created.
return []string{}
}
var warning string
if renderer.beforeSensitive {
warning = fmt.Sprintf(" # [yellow]Warning[reset]: this attribute value will no longer be marked as sensitive\n%s # after applying this change.", change.indent(indent))
} else {
warning = 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.", change.indent(indent))
}
if reflect.DeepEqual(renderer.before, renderer.after) {
return []string{fmt.Sprintf("%s The value is unchanged.", warning)}
}
return []string{warning}
}