repo_description: Pulumi - Infrastructure as Code in any programming language 🚀
repo_topics: aws azure cloud cloud-computing containers csharp dotnet fsharp gcp go golang iac infrastructure-as-code javascript kubernetes python serverless typescript
code: // Copyright 2016, Pulumi Corporation.
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package display
  
  import (
  	"time"
  
  	"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
  	"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
  	"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
  )
  
  // StepOp represents the kind of operation performed by a step.  It evaluates to its string label.
  type StepOp string
  
  // ResourceChanges contains the aggregate resource changes by operation type.
  type ResourceChanges map[StepOp]int
  
  // PreviewDigest is a JSON-serializable overview of a preview operation.
  type PreviewDigest struct {
  	// Config contains a map of configuration keys/values used during the preview. Any secrets will be blinded.
  	Config map[string]string `json:"config,omitempty"`
  
  	// Steps contains a detailed list of all resource step operations.
  	Steps []*PreviewStep `json:"steps,omitempty"`
  	// Diagnostics contains a record of all warnings/errors that took place during the preview. Note that
  	// ephemeral and debug messages are omitted from this list, as they are meant for display purposes only.
  	Diagnostics []PreviewDiagnostic `json:"diagnostics,omitempty"`
  
  	// Duration records the amount of time it took to perform the preview.
  	Duration time.Duration `json:"duration,omitempty"`
  	// ChangeSummary contains a map of count per operation (create, update, etc).
  	ChangeSummary ResourceChanges `json:"changeSummary,omitempty"`
  	// MaybeCorrupt indicates whether one or more resources may be corrupt.
  	MaybeCorrupt bool `json:"maybeCorrupt,omitempty"`
  }
  
  // PropertyDiff contains information about the difference in a single property value.
  type PropertyDiff struct {
  	// Kind is the kind of difference.
  	Kind string `json:"kind"`
  	// InputDiff is true if this is a difference between old and new inputs instead of old state and new inputs.
  	InputDiff bool `json:"inputDiff"`
  }
  
  // PreviewStep is a detailed overview of a step the engine intends to take.
  type PreviewStep struct {
  	// Op is the kind of operation being performed.
  	Op StepOp `json:"op"`
  	// URN is the resource being affected by this operation.
  	URN resource.URN `json:"urn"`
  	// Provider is the provider that will perform this step.
  	Provider string `json:"provider,omitempty"`
  	// OldState is the old state for this resource, if appropriate given the operation type.
  	OldState *apitype.ResourceV3 `json:"oldState,omitempty"`
  	// NewState is the new state for this resource, if appropriate given the operation type.
  	NewState *apitype.ResourceV3 `json:"newState,omitempty"`
  	// DiffReasons is a list of keys that are causing a diff (for updating steps only).
  	DiffReasons []resource.PropertyKey `json:"diffReasons,omitempty"`
  	// ReplaceReasons is a list of keys that are causing replacement (for replacement steps only).
  	ReplaceReasons []resource.PropertyKey `json:"replaceReasons,omitempty"`
  	// DetailedDiff is a structured diff that indicates precise per-property differences.
  	DetailedDiff map[string]PropertyDiff `json:"detailedDiff"`
  }
  
  // PreviewDiagnostic is a warning or error emitted during the execution of the preview.
  type PreviewDiagnostic struct {
  	URN      resource.URN  `json:"urn,omitempty"`
  	Prefix   string        `json:"prefix,omitempty"`
  	Message  string        `json:"message,omitempty"`
  	Severity diag.Severity `json:"severity,omitempty"`
  }
  