pulumi/pkg/resource/resource_state.go
joeduffy 40747a94bf Merge inputs with outputs
For Update and Delete operations, we provided just the input state
for a resource.  This is insufficient, because the provider may need
to depend on output state from the Create or prior Update operations.
This change merges the output atop the input during the step application.
2017-07-21 14:00:30 -07:00

44 lines
1.7 KiB
Go

// Copyright 2016-2017, Pulumi Corporation. All rights reserved.
package resource
import (
"github.com/pulumi/lumi/pkg/tokens"
"github.com/pulumi/lumi/pkg/util/contract"
)
// State is a structure containing state associated with a resource. This resource may have been serialized and
// deserialized, or snapshotted from a live graph of resource objects. The value's state is not, however, associated
// with any runtime objects in memory that may be actively involved in ongoing computations.
type State struct {
t tokens.Type // the resource's type.
urn URN // the resource's object urn, a human-friendly, unique name for the resource.
id ID // the resource's unique ID, assigned by the resource provider (or blank if uncreated).
inputs PropertyMap // the resource's input properties (as specified by the program).
outputs PropertyMap // the resource's output properties (as specified by the resource provider).
}
var _ Resource = (*State)(nil)
// NewState creates a new resource value from existing resource state information.
func NewState(t tokens.Type, urn URN, id ID, inputs PropertyMap, outputs PropertyMap) *State {
contract.Assert(t != "")
contract.Assert(urn != "")
contract.Assert(id != "")
contract.Assert(inputs != nil)
return &State{
t: t,
urn: urn,
id: id,
inputs: inputs,
outputs: outputs,
}
}
func (r *State) ID() ID { return r.id }
func (r *State) URN() URN { return r.urn }
func (r *State) Type() tokens.Type { return r.t }
func (r *State) Inputs() PropertyMap { return r.inputs }
func (r *State) Outputs() PropertyMap { return r.outputs }
func (r *State) Combined() PropertyMap { return r.inputs.Merge(r.outputs) }