pulumi/pkg/engine/engine.go
joeduffy 7e48e8726b Add (back) component outputs
This change adds back component output properties.  Doing so
requires splitting the RPC interface for creating resources in
half, with an initial RegisterResource which contains all of the
input properties, and a final CompleteResource which optionally
contains any output properties synthesized by the component.
2017-11-20 17:38:09 -08:00

44 lines
1.9 KiB
Go

// Copyright 2017, Pulumi Corporation. All rights reserved.
package engine
import (
"github.com/pulumi/pulumi/pkg/resource/deploy"
"github.com/pulumi/pulumi/pkg/tokens"
)
type Engine struct {
Targets TargetProvider
Snapshots SnapshotProvider
}
// TargetProvider abstracts away retriving a target
type TargetProvider interface {
GetTarget(name tokens.QName) (*deploy.Target, error)
}
// SnapshotMutation abstracts away managing changes to snapshots
type SnapshotMutation interface {
// End indicates that the current mutation has completed and that its results (given by snapshot) should be
// persisted. See the comments on SnapshotProvider.BeginMutation for more details.
End(snapshot *deploy.Snapshot) error
}
// SnapshotProvider abstracts away retrieving and storing snapshots
type SnapshotProvider interface {
GetSnapshot(name tokens.QName) (*deploy.Snapshot, error)
// BeginMutation and SnapshotMutation.End allow a snapshot provider to be robust in the face of failures that occur
// between the points at which they are called. The semantics are as follows:
// 1. The engine calls `SnapshotProvider.Begin` to indicate that it is about to mutate the state of the
// resources tracked by the snapshot.
// 2. The engine mutates the state of the resoures tracked by the snapshot.
// 3. The engine calls `SnapshotMutation.End` with the new snapshot to indicate that the mutation(s) it was
// performing has/have finished.
// During (1), the snapshot provider should record the fact that any currently persisted snapshot is being mutated
// and cannot be assumed to represent the actual state of the system. This ensures that if the engine crashes during
// (2), then the current snapshot is known to be unreliable. During (3), the snapshot provider should persist the
// provided snapshot and record that it is known to be reliable.
BeginMutation(name tokens.QName) (SnapshotMutation, error)
}