Pass ignoreChanges to providers. (#3005)

These changes add support for passing `ignoreChanges` paths to resource
providers. This is intended to accommodate providers that perform diffs
between resource inputs and resource state (e.g. all Terraform-based
providers, the k8s provider when using API server dry-runs). These paths
are specified using the same syntax as the paths used in detailed diffs.

In addition to passing these paths to providers, the existing support
for `ignoreChanges` in inputs has been extended to accept paths rather
than top-level keys. It is an error to specify a path that is missing
one or more component in the old or new inputs.

Fixes #2936, #2663.
This commit is contained in:
Pat Gavlin 2019-07-31 11:39:07 -05:00 committed by GitHub
parent 7bdd590586
commit 67ec74bdc5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 1124 additions and 592 deletions

View file

@ -16,6 +16,11 @@ CHANGELOG
- Fix an error message from the logging subsystem which was introduced in v0.17.26
[#2989](https://github.com/pulumi/pulumi/pull/2997)
- Add support for property paths in `ignoreChanges`, and pass `ignoreChanges` to providers
[#3005](https://github.com/pulumi/pulumi/pull/3005). This allows differences between the actual and desired
state of the resource that are not captured by differences in the resource's inputs to be ignored (including
differences that may occur due to resource provider bugs).
## 0.17.26 (2019-07-26)
- Add `get_object`, `require_object`, `get_secret_object` and `require_secret_object` APIs to Python

View file

@ -1,88 +1,12 @@
package display
import (
"strconv"
"strings"
"github.com/pkg/errors"
"github.com/pulumi/pulumi/pkg/engine"
"github.com/pulumi/pulumi/pkg/resource"
"github.com/pulumi/pulumi/pkg/resource/plugin"
"github.com/pulumi/pulumi/pkg/util/contract"
)
func parseDiffPath(path string) ([]interface{}, error) {
// Complete paths obey the following EBNF-ish grammar:
//
// propertyName := [a-zA-Z_$] { [a-zA-Z0-9_$] }
// quotedPropertyName := '"' ( '\' '"' | [^"] ) { ( '\' '"' | [^"] ) } '"'
// arrayIndex := { [0-9] }
//
// propertyIndex := '[' ( quotedPropertyName | arrayIndex ) ']'
// rootProperty := ( propertyName | propertyIndex )
// propertyAccessor := ( ( '.' propertyName ) | propertyIndex )
// path := rootProperty { propertyAccessor }
//
// We interpret this a little loosely in order to keep things simple. Specifically, we will accept something close
// to the following:
// pathElement := { '.' } ( '[' ( [0-9]+ | '"' ('\' '"' | [^"] )+ '"' ']' | [a-zA-Z_$][a-zA-Z0-9_$] )
// path := { pathElement }
var elements []interface{}
for len(path) > 0 {
switch path[0] {
case '.':
path = path[1:]
case '[':
// If the character following the '[' is a '"', parse a string key.
var pathElement interface{}
if path[1] == '"' {
var propertyKey []byte
var i int
for i = 2; ; {
if i == len(path) {
return nil, errors.New("missing closing quote in property name")
} else if path[i] == '"' {
i++
break
} else if path[i] == '\\' && i+1 < len(path) && path[i+1] == '"' {
propertyKey = append(propertyKey, '"')
i += 2
} else {
propertyKey = append(propertyKey, path[i])
i++
}
}
if i == len(path) || path[i] != ']' {
return nil, errors.New("missing closing bracket in property access")
}
pathElement, path = string(propertyKey), path[i:]
} else {
// Look for a closing ']'
rbracket := strings.IndexRune(path, ']')
if rbracket == -1 {
return nil, errors.New("missing closing bracket in array index")
}
index, err := strconv.ParseInt(path[1:rbracket], 10, 0)
if err != nil {
return nil, errors.Wrap(err, "invalid array index")
}
pathElement, path = int(index), path[rbracket:]
}
elements, path = append(elements, pathElement), path[1:]
default:
for i := 0; ; i++ {
if i == len(path) || path[i] == '.' || path[i] == '[' {
elements, path = append(elements, path[:i]), path[i:]
break
}
}
}
}
return elements, nil
}
// getProperty fetches the child property with the indicated key from the given property value. If the key does not
// exist, it returns an empty `PropertyValue`.
func getProperty(key interface{}, v resource.PropertyValue) resource.PropertyValue {
@ -114,7 +38,7 @@ func getProperty(key interface{}, v resource.PropertyValue) resource.PropertyVal
// property named by the first element of the path exists in both parents, we snip off the first element of the path
// and recurse into the property itself. If the property does not exist in one parent or the other, the diff kind is
// disregarded and the change is treated as either an Add or a Delete.
func addDiff(path []interface{}, kind plugin.DiffKind, parent *resource.ValueDiff,
func addDiff(path resource.PropertyPath, kind plugin.DiffKind, parent *resource.ValueDiff,
oldParent, newParent resource.PropertyValue) {
contract.Require(len(path) > 0, "len(path) > 0")
@ -217,7 +141,7 @@ func translateDetailedDiff(step engine.StepEventMetadata) *resource.ObjectDiff {
var diff resource.ValueDiff
for path, pdiff := range step.DetailedDiff {
elements, err := parseDiffPath(path)
elements, err := resource.ParsePropertyPath(path)
contract.Assert(err == nil)
olds := resource.NewObjectProperty(step.Old.Outputs)

View file

@ -9,80 +9,6 @@ import (
"github.com/stretchr/testify/assert"
)
func TestParseDiffPath(t *testing.T) {
cases := []struct {
path string
elements []interface{}
}{
{
"root",
[]interface{}{"root"},
},
{
"root.nested",
[]interface{}{"root", "nested"},
},
{
`root["nested"]`,
[]interface{}{"root", "nested"},
},
{
"root.double.nest",
[]interface{}{"root", "double", "nest"},
},
{
`root["double"].nest`,
[]interface{}{"root", "double", "nest"},
},
{
`root["double"]["nest"]`,
[]interface{}{"root", "double", "nest"},
},
{
"root.array[0]",
[]interface{}{"root", "array", 0},
},
{
"root.array[100]",
[]interface{}{"root", "array", 100},
},
{
"root.array[0].nested",
[]interface{}{"root", "array", 0, "nested"},
},
{
"root.array[0][1].nested",
[]interface{}{"root", "array", 0, 1, "nested"},
},
{
"root.nested.array[0].double[1]",
[]interface{}{"root", "nested", "array", 0, "double", 1},
},
{
`root["key with \"escaped\" quotes"]`,
[]interface{}{"root", `key with "escaped" quotes`},
},
{
`root["key with a ."]`,
[]interface{}{"root", "key with a ."},
},
{
`["root key with \"escaped\" quotes"].nested`,
[]interface{}{`root key with "escaped" quotes`, "nested"},
},
{
`["root key with a ."][100]`,
[]interface{}{"root key with a .", 100},
},
}
for _, c := range cases {
elements, err := parseDiffPath(c.path)
assert.NoError(t, err)
assert.Equal(t, c.elements, elements)
}
}
func TestTranslateDetailedDiff(t *testing.T) {
var (
A = plugin.PropertyDiff{Kind: plugin.DiffAdd}

View file

@ -421,7 +421,7 @@ func TestVexingDeployment(t *testing.T) {
// cPrime now exists, c is now pending deletion
// dPrime now depends on cPrime, which got replaced
dPrime := NewResource(string(d.URN), cPrime.URN)
applyStep(deploy.NewUpdateStep(nil, MockRegisterResourceEvent{}, d, dPrime, nil, nil, nil))
applyStep(deploy.NewUpdateStep(nil, MockRegisterResourceEvent{}, d, dPrime, nil, nil, nil, nil))
lastSnap := sp.SavedSnapshots[len(sp.SavedSnapshots)-1]
assert.Len(t, lastSnap.Resources, 6)
@ -581,7 +581,7 @@ func TestRecordingUpdateSuccess(t *testing.T) {
})
manager, sp := MockSetup(t, snap)
step := deploy.NewUpdateStep(nil, &MockRegisterResourceEvent{}, resourceA, resourceANew, nil, nil, nil)
step := deploy.NewUpdateStep(nil, &MockRegisterResourceEvent{}, resourceA, resourceANew, nil, nil, nil, nil)
mutation, err := manager.BeginMutation(step)
if !assert.NoError(t, err) {
t.FailNow()
@ -620,7 +620,7 @@ func TestRecordingUpdateFailure(t *testing.T) {
})
manager, sp := MockSetup(t, snap)
step := deploy.NewUpdateStep(nil, &MockRegisterResourceEvent{}, resourceA, resourceANew, nil, nil, nil)
step := deploy.NewUpdateStep(nil, &MockRegisterResourceEvent{}, resourceA, resourceANew, nil, nil, nil, nil)
mutation, err := manager.BeginMutation(step)
if !assert.NoError(t, err) {
t.FailNow()

View file

@ -719,7 +719,8 @@ func TestSingleResourceDefaultProviderReplace(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffConfigF: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
ignoreChanges []string) (plugin.DiffResult, error) {
// Always require replacement.
keys := []resource.PropertyKey{}
for k := range news {
@ -797,7 +798,7 @@ func TestSingleResourceExplicitProviderReplace(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffConfigF: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
ignoreChanges []string) (plugin.DiffResult, error) {
// Always require replacement.
keys := []resource.PropertyKey{}
for k := range news {
@ -888,7 +889,7 @@ func TestSingleResourceExplicitProviderDeleteBeforeReplace(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffConfigF: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
ignoreChanges []string) (plugin.DiffResult, error) {
// Always require replacement.
keys := []resource.PropertyKey{}
for k := range news {
@ -999,7 +1000,7 @@ func TestSingleResourceDiffUnavailable(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap) (plugin.DiffResult, error) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
return plugin.DiffResult{}, plugin.DiffUnavailable("diff unavailable")
},
@ -2208,14 +2209,16 @@ func TestUpdatePartialFailure(t *testing.T) {
loaders := []*deploytest.ProviderLoader{
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap) (plugin.DiffResult, error) {
DiffF: func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
ignoreChanges []string) (plugin.DiffResult, error) {
return plugin.DiffResult{
Changes: plugin.DiffSome,
}, nil
},
UpdateF: func(urn resource.URN, id resource.ID, olds,
news resource.PropertyMap, timeout float64) (resource.PropertyMap, resource.Status, error) {
UpdateF: func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
timeout float64, ignoreChanges []string) (resource.PropertyMap, resource.Status, error) {
outputs := resource.NewPropertyMapFromMap(map[string]interface{}{
"output_prop": 42,
})
@ -2605,7 +2608,7 @@ func TestDeleteBeforeReplace(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffConfigF: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
ignoreChanges []string) (plugin.DiffResult, error) {
if !olds["A"].DeepEquals(news["A"]) {
return plugin.DiffResult{
ReplaceKeys: []resource.PropertyKey{"A"},
@ -2615,7 +2618,7 @@ func TestDeleteBeforeReplace(t *testing.T) {
return plugin.DiffResult{}, nil
},
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap) (plugin.DiffResult, error) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
if !olds["A"].DeepEquals(news["A"]) {
return plugin.DiffResult{ReplaceKeys: []resource.PropertyKey{"A"}}, nil
@ -2766,7 +2769,7 @@ func TestExplicitDeleteBeforeReplace(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap) (plugin.DiffResult, error) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
if !olds["A"].DeepEquals(news["A"]) {
return plugin.DiffResult{ReplaceKeys: []resource.PropertyKey{"A"}}, nil
@ -2918,14 +2921,30 @@ func TestExplicitDeleteBeforeReplace(t *testing.T) {
}
func TestSingleResourceIgnoreChanges(t *testing.T) {
var expectedIgnoreChanges []string
loaders := []*deploytest.ProviderLoader{
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{}, nil
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
assert.Equal(t, expectedIgnoreChanges, ignoreChanges)
return plugin.DiffResult{}, nil
},
UpdateF: func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
timeout float64, ignoreChanges []string) (resource.PropertyMap, resource.Status, error) {
assert.Equal(t, expectedIgnoreChanges, ignoreChanges)
return resource.PropertyMap{}, resource.StatusOK, nil
},
}, nil
}),
}
updateProgramWithProps := func(snap *deploy.Snapshot, props resource.PropertyMap, ignoreChanges []string,
allowedOps []deploy.StepOp) *deploy.Snapshot {
expectedIgnoreChanges = ignoreChanges
program := deploytest.NewLanguageRuntime(func(_ plugin.RunInfo, monitor *deploytest.ResourceMonitor) error {
_, _, _, err := monitor.RegisterResource("pkgA:m:typA", "resA", true, deploytest.ResourceOptions{
Inputs: props,
@ -2956,35 +2975,47 @@ func TestSingleResourceIgnoreChanges(t *testing.T) {
return p.Run(t, snap)
}
snap := updateProgramWithProps(nil, resource.PropertyMap{
"a": resource.NewNumberProperty(1),
}, []string{"a"}, []deploy.StepOp{deploy.OpCreate})
snap := updateProgramWithProps(nil, resource.NewPropertyMapFromMap(map[string]interface{}{
"a": 1,
"b": map[string]interface{}{
"c": "foo",
},
}), []string{"a", "b.c"}, []deploy.StepOp{deploy.OpCreate})
// Ensure that a change to an ignored property results in an OpSame
snap = updateProgramWithProps(snap, resource.PropertyMap{
"a": resource.NewNumberProperty(2),
}, []string{"a"}, []deploy.StepOp{deploy.OpSame})
snap = updateProgramWithProps(snap, resource.NewPropertyMapFromMap(map[string]interface{}{
"a": 2,
"b": map[string]interface{}{
"c": "bar",
},
}), []string{"a", "b.c"}, []deploy.StepOp{deploy.OpSame})
// Ensure that a change to an un-ignored property results in an OpUpdate
snap = updateProgramWithProps(snap, resource.PropertyMap{
"a": resource.NewNumberProperty(3),
}, nil, []deploy.StepOp{deploy.OpUpdate})
snap = updateProgramWithProps(snap, resource.NewPropertyMapFromMap(map[string]interface{}{
"a": 3,
"b": map[string]interface{}{
"c": "qux",
},
}), nil, []deploy.StepOp{deploy.OpUpdate})
// Ensure that a removing an ignored property results in an OpSame
snap = updateProgramWithProps(snap, resource.PropertyMap{}, []string{"a"}, []deploy.StepOp{deploy.OpSame})
snap = updateProgramWithProps(snap, resource.PropertyMap{}, []string{"a", "b"}, []deploy.StepOp{deploy.OpSame})
// Ensure that a removing an un-ignored property results in an OpUpdate
snap = updateProgramWithProps(snap, resource.PropertyMap{}, nil, []deploy.StepOp{deploy.OpUpdate})
// Ensure that adding an ignored property results in an OpSame
snap = updateProgramWithProps(snap, resource.PropertyMap{
"a": resource.NewNumberProperty(4),
}, []string{"a"}, []deploy.StepOp{deploy.OpSame})
snap = updateProgramWithProps(snap, resource.NewPropertyMapFromMap(map[string]interface{}{
"a": 4,
"b": map[string]interface{}{
"c": "zed",
},
}), []string{"a", "b"}, []deploy.StepOp{deploy.OpSame})
// Ensure that adding an un-ignored property results in an OpUpdate
_ = updateProgramWithProps(snap, resource.PropertyMap{
"b": resource.NewNumberProperty(4),
}, []string{"a"}, []deploy.StepOp{deploy.OpUpdate})
"c": resource.NewNumberProperty(4),
}, []string{"a", "b"}, []deploy.StepOp{deploy.OpUpdate})
}
// TestDefaultProviderDiff tests that the engine can gracefully recover whenever a resource's default provider changes
@ -3105,7 +3136,9 @@ func TestDefaultProviderDiffReplacement(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("0.17.10"), func() (plugin.Provider, error) {
return &deploytest.Provider{
// This implementation of DiffConfig always requests replacement.
DiffConfigF: func(_ resource.URN, olds, news resource.PropertyMap, _ bool) (plugin.DiffResult, error) {
DiffConfigF: func(_ resource.URN, olds, news resource.PropertyMap,
ignoreChanges []string) (plugin.DiffResult, error) {
keys := []resource.PropertyKey{}
for k := range news {
keys = append(keys, k)
@ -3234,7 +3267,9 @@ func TestAliases(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
// The `forcesReplacement` key forces replacement and all other keys can update in place
DiffF: func(res resource.URN, id resource.ID, olds, news resource.PropertyMap) (plugin.DiffResult, error) {
DiffF: func(res resource.URN, id resource.ID, olds, news resource.PropertyMap,
ignoreChanges []string) (plugin.DiffResult, error) {
replaceKeys := []resource.PropertyKey{}
old, hasOld := olds["forcesReplacement"]
new, hasNew := news["forcesReplacement"]
@ -3497,7 +3532,7 @@ func TestPersistentDiff(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap) (plugin.DiffResult, error) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
return plugin.DiffResult{Changes: plugin.DiffSome}, nil
},
@ -3573,7 +3608,7 @@ func TestDetailedDiffReplace(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap) (plugin.DiffResult, error) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
return plugin.DiffResult{
Changes: plugin.DiffSome,
@ -3632,7 +3667,7 @@ func TestImport(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffF: func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap) (plugin.DiffResult, error) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
if olds["foo"].DeepEquals(news["foo"]) {
return plugin.DiffResult{Changes: plugin.DiffNone}, nil
@ -3914,7 +3949,7 @@ func TestProviderDiffMissingOldOutputs(t *testing.T) {
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
DiffConfigF: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
ignoreChanges []string) (plugin.DiffResult, error) {
// Always require replacement if any diff exists.
if !olds.DeepEquals(news) {
keys := []resource.PropertyKey{}

View file

@ -46,7 +46,7 @@ func (p *builtinProvider) CheckConfig(urn resource.URN, olds,
// DiffConfig checks what impacts a hypothetical change to this provider's configuration will have on the provider.
func (p *builtinProvider) DiffConfig(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
return plugin.DiffResult{Changes: plugin.DiffNone}, nil
}
@ -82,7 +82,7 @@ func (p *builtinProvider) Check(urn resource.URN, state, inputs resource.Propert
}
func (p *builtinProvider) Diff(urn resource.URN, id resource.ID, state, inputs resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
contract.Assert(urn.Type() == stackReferenceType)
@ -109,8 +109,8 @@ func (p *builtinProvider) Create(urn resource.URN,
return id, state, resource.StatusOK, nil
}
func (p *builtinProvider) Update(urn resource.URN, id resource.ID, state,
inputs resource.PropertyMap, timeout float64) (resource.PropertyMap, resource.Status, error) {
func (p *builtinProvider) Update(urn resource.URN, id resource.ID, state, inputs resource.PropertyMap,
timeout float64, ignoreChanges []string) (resource.PropertyMap, resource.Status, error) {
contract.Failf("unexpected update for builtin resource %v", urn)
contract.Assert(urn.Type() == stackReferenceType)

View file

@ -34,16 +34,18 @@ type Provider struct {
CheckConfigF func(urn resource.URN, olds,
news resource.PropertyMap, allowUnknowns bool) (resource.PropertyMap, []plugin.CheckFailure, error)
DiffConfigF func(urn resource.URN, olds, news resource.PropertyMap, allowUnknowns bool) (plugin.DiffResult, error)
ConfigureF func(news resource.PropertyMap) error
DiffConfigF func(urn resource.URN, olds, news resource.PropertyMap,
ignoreChanges []string) (plugin.DiffResult, error)
ConfigureF func(news resource.PropertyMap) error
CheckF func(urn resource.URN,
olds, news resource.PropertyMap) (resource.PropertyMap, []plugin.CheckFailure, error)
DiffF func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap) (plugin.DiffResult, error)
DiffF func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
ignoreChanges []string) (plugin.DiffResult, error)
CreateF func(urn resource.URN,
inputs resource.PropertyMap, timeout float64) (resource.ID, resource.PropertyMap, resource.Status, error)
UpdateF func(urn resource.URN, id resource.ID,
olds, news resource.PropertyMap, timeout float64) (resource.PropertyMap, resource.Status, error)
UpdateF func(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
timeout float64, ignoreChanges []string) (resource.PropertyMap, resource.Status, error)
DeleteF func(urn resource.URN, id resource.ID, olds resource.PropertyMap, timeout float64) (resource.Status, error)
ReadF func(urn resource.URN, id resource.ID,
@ -83,12 +85,12 @@ func (prov *Provider) CheckConfig(urn resource.URN, olds,
}
return prov.CheckConfigF(urn, olds, news, allowUnknowns)
}
func (prov *Provider) DiffConfig(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
func (prov *Provider) DiffConfig(urn resource.URN, olds, news resource.PropertyMap, _ bool,
ignoreChanges []string) (plugin.DiffResult, error) {
if prov.DiffConfigF == nil {
return plugin.DiffResult{}, nil
}
return prov.DiffConfigF(urn, olds, news, allowUnknowns)
return prov.DiffConfigF(urn, olds, news, ignoreChanges)
}
func (prov *Provider) Configure(inputs resource.PropertyMap) error {
contract.Assert(!prov.configured)
@ -115,19 +117,18 @@ func (prov *Provider) Create(urn resource.URN, props resource.PropertyMap, timeo
return prov.CreateF(urn, props, timeout)
}
func (prov *Provider) Diff(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, _ bool) (plugin.DiffResult, error) {
olds resource.PropertyMap, news resource.PropertyMap, _ bool, ignoreChanges []string) (plugin.DiffResult, error) {
if prov.DiffF == nil {
return plugin.DiffResult{}, nil
}
return prov.DiffF(urn, id, olds, news)
return prov.DiffF(urn, id, olds, news, ignoreChanges)
}
func (prov *Provider) Update(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, timeout float64) (resource.PropertyMap,
resource.Status, error) {
func (prov *Provider) Update(urn resource.URN, id resource.ID, olds resource.PropertyMap, news resource.PropertyMap,
timeout float64, ignoreChanges []string) (resource.PropertyMap, resource.Status, error) {
if prov.UpdateF == nil {
return news, resource.StatusOK, nil
}
return prov.UpdateF(urn, id, olds, news, timeout)
return prov.UpdateF(urn, id, olds, news, timeout, ignoreChanges)
}
func (prov *Provider) Delete(urn resource.URN,
id resource.ID, props resource.PropertyMap, timeout float64) (resource.Status, error) {

View file

@ -194,7 +194,7 @@ func (r *Registry) CheckConfig(urn resource.URN, olds,
// DiffConfig checks what impacts a hypothetical change to this provider's configuration will have on the provider.
func (r *Registry) DiffConfig(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
contract.Fail()
return plugin.DiffResult{}, errors.New("the provider registry is not configurable")
}
@ -260,7 +260,7 @@ func (r *Registry) Check(urn resource.URN, olds, news resource.PropertyMap,
// Diff diffs the configuration of the indicated provider. The provider corresponding to the given URN must have
// previously been loaded by a call to Check.
func (r *Registry) Diff(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
contract.Require(id != "", "id")
label := fmt.Sprintf("%s.Diff(%s,%s)", r.label(), urn, id)
@ -276,7 +276,7 @@ func (r *Registry) Diff(urn resource.URN, id resource.ID, olds, news resource.Pr
provider, ok = r.GetProvider(mustNewReference(urn, id))
contract.Assertf(ok, "Provider must have been registered by NewRegistry for DBR Diff (%v::%v)", urn, id)
diff, err := provider.DiffConfig(urn, olds, news, allowUnknowns)
diff, err := provider.DiffConfig(urn, olds, news, allowUnknowns, ignoreChanges)
if err != nil {
return plugin.DiffResult{Changes: plugin.DiffUnknown}, err
}
@ -284,7 +284,7 @@ func (r *Registry) Diff(urn resource.URN, id resource.ID, olds, news resource.Pr
}
// Diff the properties.
diff, err := provider.DiffConfig(urn, olds, news, allowUnknowns)
diff, err := provider.DiffConfig(urn, olds, news, allowUnknowns, ignoreChanges)
if err != nil {
return plugin.DiffResult{Changes: plugin.DiffUnknown}, err
}
@ -334,8 +334,8 @@ func (r *Registry) Create(urn resource.URN,
// reference indicated by the (URN, ID) pair.
//
// THe provider must have been loaded by a prior call to Check.
func (r *Registry) Update(urn resource.URN, id resource.ID, olds,
news resource.PropertyMap, timeout float64) (resource.PropertyMap, resource.Status, error) {
func (r *Registry) Update(urn resource.URN, id resource.ID, olds, news resource.PropertyMap,
timeout float64, ignoreChanges []string) (resource.PropertyMap, resource.Status, error) {
contract.Assert(!r.isPreview)

View file

@ -85,7 +85,7 @@ type testProvider struct {
configured bool
checkConfig func(resource.URN, resource.PropertyMap,
resource.PropertyMap, bool) (resource.PropertyMap, []plugin.CheckFailure, error)
diffConfig func(resource.URN, resource.PropertyMap, resource.PropertyMap, bool) (plugin.DiffResult, error)
diffConfig func(resource.URN, resource.PropertyMap, resource.PropertyMap, bool, []string) (plugin.DiffResult, error)
config func(resource.PropertyMap) error
}
@ -103,8 +103,8 @@ func (prov *testProvider) CheckConfig(urn resource.URN, olds,
return prov.checkConfig(urn, olds, news, allowUnknowns)
}
func (prov *testProvider) DiffConfig(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
return prov.diffConfig(urn, olds, news, allowUnknowns)
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
return prov.diffConfig(urn, olds, news, allowUnknowns, ignoreChanges)
}
func (prov *testProvider) Configure(inputs resource.PropertyMap) error {
if err := prov.config(inputs); err != nil {
@ -126,11 +126,11 @@ func (prov *testProvider) Read(urn resource.URN, id resource.ID,
return plugin.ReadResult{}, resource.StatusUnknown, errors.New("unsupported")
}
func (prov *testProvider) Diff(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, _ bool) (plugin.DiffResult, error) {
olds resource.PropertyMap, news resource.PropertyMap, _ bool, _ []string) (plugin.DiffResult, error) {
return plugin.DiffResult{}, errors.New("unsupported")
}
func (prov *testProvider) Update(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, timeout float64) (resource.PropertyMap,
olds resource.PropertyMap, news resource.PropertyMap, timeout float64, ignoreChanges []string) (resource.PropertyMap,
resource.Status, error) {
return nil, resource.StatusOK, errors.New("unsupported")
}
@ -216,7 +216,7 @@ func newSimpleLoader(t *testing.T, pkg, version string, config func(resource.Pro
return news, nil, nil
},
diffConfig: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
return plugin.DiffResult{}, nil
},
config: config,
@ -471,7 +471,7 @@ func TestCRUD(t *testing.T) {
assert.False(t, p.(*testProvider).configured)
// Diff
diff, err := r.Diff(urn, id, olds, news, false)
diff, err := r.Diff(urn, id, olds, news, false, nil)
assert.NoError(t, err)
assert.Equal(t, plugin.DiffResult{}, diff)
@ -481,7 +481,7 @@ func TestCRUD(t *testing.T) {
assert.Equal(t, old, p2)
// Update
outs, status, err := r.Update(urn, id, olds, inputs, timeout)
outs, status, err := r.Update(urn, id, olds, inputs, timeout, nil)
assert.NoError(t, err)
assert.Equal(t, resource.PropertyMap{}, outs)
assert.Equal(t, resource.StatusOK, status)
@ -531,7 +531,7 @@ func TestCRUDPreview(t *testing.T) {
return news, nil, nil
},
diffConfig: func(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (plugin.DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (plugin.DiffResult, error) {
// Always reuquire replacement.
return plugin.DiffResult{ReplaceKeys: []resource.PropertyKey{"id"}}, nil
},
@ -600,7 +600,7 @@ func TestCRUDPreview(t *testing.T) {
assert.True(t, p.(*testProvider).configured)
// Diff
diff, err := r.Diff(urn, id, olds, news, false)
diff, err := r.Diff(urn, id, olds, news, false, nil)
assert.NoError(t, err)
assert.Equal(t, plugin.DiffResult{}, diff)
@ -633,7 +633,7 @@ func TestCRUDPreview(t *testing.T) {
assert.True(t, p.(*testProvider).configured)
// Diff
diff, err := r.Diff(urn, id, olds, news, false)
diff, err := r.Diff(urn, id, olds, news, false, nil)
assert.NoError(t, err)
assert.True(t, diff.Replace())

View file

@ -348,19 +348,21 @@ func (s *RemovePendingReplaceStep) Apply(preview bool) (resource.Status, StepCom
// UpdateStep is a mutating step that updates an existing resource's state.
type UpdateStep struct {
plan *Plan // the current plan.
reg RegisterResourceEvent // the registration intent to convey a URN back to.
old *resource.State // the state of the existing resource.
new *resource.State // the newly computed state of the resource after updating.
stables []resource.PropertyKey // an optional list of properties that won't change during this update.
diffs []resource.PropertyKey // the keys causing a diff.
detailedDiff map[string]plugin.PropertyDiff // the structured diff.
plan *Plan // the current plan.
reg RegisterResourceEvent // the registration intent to convey a URN back to.
old *resource.State // the state of the existing resource.
new *resource.State // the newly computed state of the resource after updating.
stables []resource.PropertyKey // an optional list of properties that won't change during this update.
diffs []resource.PropertyKey // the keys causing a diff.
detailedDiff map[string]plugin.PropertyDiff // the structured diff.
ignoreChanges []string // a list of property paths to ignore when updating.
}
var _ Step = (*UpdateStep)(nil)
func NewUpdateStep(plan *Plan, reg RegisterResourceEvent, old *resource.State,
new *resource.State, stables, diffs []resource.PropertyKey, detailedDiff map[string]plugin.PropertyDiff) Step {
new *resource.State, stables, diffs []resource.PropertyKey, detailedDiff map[string]plugin.PropertyDiff,
ignoreChanges []string) Step {
contract.Assert(old != nil)
contract.Assert(old.URN != "")
contract.Assert(old.ID != "" || !old.Custom)
@ -374,13 +376,14 @@ func NewUpdateStep(plan *Plan, reg RegisterResourceEvent, old *resource.State,
contract.Assert(!new.External)
contract.Assert(!old.External)
return &UpdateStep{
plan: plan,
reg: reg,
old: old,
new: new,
stables: stables,
diffs: diffs,
detailedDiff: detailedDiff,
plan: plan,
reg: reg,
old: old,
new: new,
stables: stables,
diffs: diffs,
detailedDiff: detailedDiff,
ignoreChanges: ignoreChanges,
}
}
@ -411,7 +414,8 @@ func (s *UpdateStep) Apply(preview bool) (resource.Status, StepCompleteFunc, err
}
// Update to the combination of the old "all" state, but overwritten with new inputs.
outs, rst, upderr := prov.Update(s.URN(), s.old.ID, s.old.Outputs, s.new.Inputs, s.new.CustomTimeouts.Update)
outs, rst, upderr := prov.Update(s.URN(), s.old.ID, s.old.Outputs, s.new.Inputs,
s.new.CustomTimeouts.Update, s.ignoreChanges)
if upderr != nil {
if rst != resource.StatusPartialFailure {
return rst, nil, upderr
@ -713,17 +717,18 @@ func (s *RefreshStep) Apply(preview bool) (resource.Status, StepCompleteFunc, er
}
type ImportStep struct {
plan *Plan // the current plan.
reg RegisterResourceEvent // the registration intent to convey a URN back to.
original *resource.State // the original resource, if this is an import-replace.
old *resource.State // the state of the resource fetched from the provider.
new *resource.State // the newly computed state of the resource after importing.
replacing bool // true if we are replacing a Pulumi-managed resource.
diffs []resource.PropertyKey // any keys that differed between the user's program and the actual state.
detailedDiff map[string]plugin.PropertyDiff // the structured property diff.
plan *Plan // the current plan.
reg RegisterResourceEvent // the registration intent to convey a URN back to.
original *resource.State // the original resource, if this is an import-replace.
old *resource.State // the state of the resource fetched from the provider.
new *resource.State // the newly computed state of the resource after importing.
replacing bool // true if we are replacing a Pulumi-managed resource.
diffs []resource.PropertyKey // any keys that differed between the user's program and the actual state.
detailedDiff map[string]plugin.PropertyDiff // the structured property diff.
ignoreChanges []string // a list of property paths to ignore when updating.
}
func NewImportStep(plan *Plan, reg RegisterResourceEvent, new *resource.State) Step {
func NewImportStep(plan *Plan, reg RegisterResourceEvent, new *resource.State, ignoreChanges []string) Step {
contract.Assert(new != nil)
contract.Assert(new.URN != "")
contract.Assert(new.ID != "")
@ -732,13 +737,16 @@ func NewImportStep(plan *Plan, reg RegisterResourceEvent, new *resource.State) S
contract.Assert(!new.External)
return &ImportStep{
plan: plan,
reg: reg,
new: new,
plan: plan,
reg: reg,
new: new,
ignoreChanges: ignoreChanges,
}
}
func NewImportReplacementStep(plan *Plan, reg RegisterResourceEvent, original, new *resource.State) Step {
func NewImportReplacementStep(plan *Plan, reg RegisterResourceEvent, original, new *resource.State,
ignoreChanges []string) Step {
contract.Assert(original != nil)
contract.Assert(new != nil)
contract.Assert(new.URN != "")
@ -748,11 +756,12 @@ func NewImportReplacementStep(plan *Plan, reg RegisterResourceEvent, original, n
contract.Assert(!new.External)
return &ImportStep{
plan: plan,
reg: reg,
original: original,
new: new,
replacing: true,
plan: plan,
reg: reg,
original: original,
new: new,
replacing: true,
ignoreChanges: ignoreChanges,
}
}
@ -819,7 +828,8 @@ func (s *ImportStep) Apply(preview bool) (resource.Status, StepCompleteFunc, err
s.new.Inputs = inputs
// Diff the user inputs against the provider inputs. If there are any differences, fail the import.
diff, err := diffResource(s.new.URN, s.new.ID, s.old.Inputs, s.old.Outputs, s.new.Inputs, prov, preview)
diff, err := diffResource(s.new.URN, s.new.ID, s.old.Inputs, s.old.Outputs, s.new.Inputs, prov, preview,
s.ignoreChanges)
if err != nil {
return rst, nil, err
}

View file

@ -15,6 +15,8 @@
package deploy
import (
"strings"
"github.com/pkg/errors"
"github.com/pulumi/pulumi/pkg/apitype"
@ -162,7 +164,11 @@ func (sg *stepGenerator) GenerateSteps(event RegisterResourceEvent) ([]Step, res
inputs := goal.Properties
if hasOld {
// Set inputs back to their old values (if any) for any "ignored" properties
inputs = sg.processIgnoreChanges(inputs, oldInputs, goal.IgnoreChanges)
processedInputs, res := processIgnoreChanges(inputs, oldInputs, goal.IgnoreChanges)
if res != nil {
return nil, res
}
inputs = processedInputs
}
// Produce a new state object that we'll build up as operations are performed. Ultimately, this is what will
@ -201,11 +207,11 @@ func (sg *stepGenerator) GenerateSteps(event RegisterResourceEvent) ([]Step, res
new.ID = goal.ID
if isReplace := hasOld && !recreating; isReplace {
return []Step{
NewImportReplacementStep(sg.plan, event, old, new),
NewImportReplacementStep(sg.plan, event, old, new, goal.IgnoreChanges),
NewReplaceStep(sg.plan, old, new, nil, nil, nil, true),
}, nil
}
return []Step{NewImportStep(sg.plan, event, new)}, nil
return []Step{NewImportStep(sg.plan, event, new, goal.IgnoreChanges)}, nil
}
// Ensure the provider is okay with this resource and fetch the inputs to pass to subsequent methods.
@ -327,7 +333,7 @@ func (sg *stepGenerator) GenerateSteps(event RegisterResourceEvent) ([]Step, res
// be replaced, we do so. If it does not, we update the resource in place.
if hasOld {
contract.Assert(old != nil)
diff, err := sg.diff(urn, old, new, oldInputs, oldOutputs, inputs, prov, allowUnknowns)
diff, err := sg.diff(urn, old, new, oldInputs, oldOutputs, inputs, prov, allowUnknowns, goal.IgnoreChanges)
if err != nil {
// If the plugin indicated that the diff is unavailable, assume that the resource will be updated and
// report the message contained in the error.
@ -455,7 +461,8 @@ func (sg *stepGenerator) GenerateSteps(event RegisterResourceEvent) ([]Step, res
logging.V(7).Infof("Planner decided to update '%v' (oldprops=%v inputs=%v", urn, oldInputs, new.Inputs)
}
return []Step{
NewUpdateStep(sg.plan, event, old, new, diff.StableKeys, diff.ChangedKeys, diff.DetailedDiff),
NewUpdateStep(sg.plan, event, old, new, diff.StableKeys, diff.ChangedKeys, diff.DetailedDiff,
goal.IgnoreChanges),
}, nil
}
@ -463,7 +470,7 @@ func (sg *stepGenerator) GenerateSteps(event RegisterResourceEvent) ([]Step, res
// step to attempt to "continue" awaiting initialization.
if len(old.InitErrors) > 0 {
sg.updates[urn] = true
return []Step{NewUpdateStep(sg.plan, event, old, new, diff.StableKeys, nil, nil)}, nil
return []Step{NewUpdateStep(sg.plan, event, old, new, diff.StableKeys, nil, nil, nil)}, nil
}
// No need to update anything, the properties didn't change.
@ -704,7 +711,7 @@ func (sg *stepGenerator) providerChanged(urn resource.URN, old, new *resource.St
newRes, ok := sg.providers[newRef.URN()]
contract.Assertf(ok, "new plan didn't have provider, despite resource using it?")
diff, err := newProv.DiffConfig(newRef.URN(), oldRes.Inputs, newRes.Inputs, true)
diff, err := newProv.DiffConfig(newRef.URN(), oldRes.Inputs, newRes.Inputs, true, nil)
if err != nil {
return false, err
}
@ -724,7 +731,8 @@ func (sg *stepGenerator) providerChanged(urn resource.URN, old, new *resource.St
// diff returns a DiffResult for the given resource.
func (sg *stepGenerator) diff(urn resource.URN, old, new *resource.State, oldInputs, oldOutputs,
newInputs resource.PropertyMap, prov plugin.Provider, allowUnknowns bool) (plugin.DiffResult, error) {
newInputs resource.PropertyMap, prov plugin.Provider, allowUnknowns bool,
ignoreChanges []string) (plugin.DiffResult, error) {
// Before diffing the resource, diff the provider field. If the provider field changes, we may or may
// not need to replace the resource.
@ -750,18 +758,19 @@ func (sg *stepGenerator) diff(urn resource.URN, old, new *resource.State, oldInp
return plugin.DiffResult{Changes: plugin.DiffSome}, nil
}
return diffResource(urn, old.ID, oldInputs, oldOutputs, newInputs, prov, allowUnknowns)
return diffResource(urn, old.ID, oldInputs, oldOutputs, newInputs, prov, allowUnknowns, ignoreChanges)
}
// diffResource invokes the Diff function for the given custom resource's provider and returns the result.
func diffResource(urn resource.URN, id resource.ID, oldInputs, oldOutputs,
newInputs resource.PropertyMap, prov plugin.Provider, allowUnknowns bool) (plugin.DiffResult, error) {
newInputs resource.PropertyMap, prov plugin.Provider, allowUnknowns bool,
ignoreChanges []string) (plugin.DiffResult, error) {
contract.Require(prov != nil, "prov != nil")
// Grab the diff from the provider. At this point we know that there were changes to the Pulumi inputs, so if the
// provider returns an "unknown" diff result, pretend it returned "diffs exist".
diff, err := prov.Diff(urn, id, oldOutputs, newInputs, allowUnknowns)
diff, err := prov.Diff(urn, id, oldOutputs, newInputs, allowUnknowns, ignoreChanges)
if err != nil {
return diff, err
}
@ -795,19 +804,41 @@ func issueCheckErrors(plan *Plan, new *resource.State, urn resource.URN, failure
// processIgnoreChanges sets the value for each ignoreChanges property in inputs to the value from oldInputs. This has
// the effect of ensuring that no changes will be made for the corresponding property.
func (sg *stepGenerator) processIgnoreChanges(inputs, oldInputs resource.PropertyMap,
ignoreChanges []string) resource.PropertyMap {
func processIgnoreChanges(inputs, oldInputs resource.PropertyMap,
ignoreChanges []string) (resource.PropertyMap, result.Result) {
ignoredInputs := inputs.Copy()
ignoredInputs := resource.NewObjectProperty(inputs.Copy())
var invalidPaths []string
for _, ignoreChange := range ignoreChanges {
ignoreChangePropertyKey := resource.PropertyKey(ignoreChange)
if oldValue, has := oldInputs[ignoreChangePropertyKey]; has {
ignoredInputs[ignoreChangePropertyKey] = oldValue
} else {
delete(ignoredInputs, ignoreChangePropertyKey)
path, err := resource.ParsePropertyPath(ignoreChange)
if err != nil {
continue
}
oldValue, hasOld := path.Get(resource.NewObjectProperty(oldInputs))
_, hasNew := path.Get(resource.NewObjectProperty(inputs))
var ok bool
switch {
case hasOld && hasNew:
ok = path.Set(ignoredInputs, oldValue)
contract.Assert(ok)
case hasOld && !hasNew:
ok = path.Set(ignoredInputs, oldValue)
case !hasOld && hasNew:
ok = path.Delete(ignoredInputs)
default:
ok = true
}
if !ok {
invalidPaths = append(invalidPaths, ignoreChange)
}
}
return ignoredInputs
if len(invalidPaths) != 0 {
return nil, result.Errorf("cannot ignore changes to the following properties because one or more elements of "+
"the path are missing: %q", strings.Join(invalidPaths, ", "))
}
return ignoredInputs.ObjectValue(), nil
}
func (sg *stepGenerator) loadResourceProvider(
@ -912,7 +943,7 @@ func (sg *stepGenerator) calculateDependentReplacements(root *resource.State) ([
contract.Assert(prov != nil)
// Call the provider's `Diff` method and return.
diff, err := prov.Diff(r.URN, r.ID, r.Outputs, inputsForDiff, true)
diff, err := prov.Diff(r.URN, r.ID, r.Outputs, inputsForDiff, true, nil)
if err != nil {
return false, nil, result.FromError(err)
}

View file

@ -0,0 +1,115 @@
package deploy
import (
"testing"
"github.com/pulumi/pulumi/pkg/resource"
"github.com/stretchr/testify/assert"
)
func TestIgnoreChanges(t *testing.T) {
cases := []struct {
name string
oldInputs map[string]interface{}
newInputs map[string]interface{}
expected map[string]interface{}
ignoreChanges []string
expectFailure bool
}{
{
name: "Present in old and new sets",
oldInputs: map[string]interface{}{
"a": map[string]interface{}{
"b": "foo",
},
},
newInputs: map[string]interface{}{
"a": map[string]interface{}{
"b": "bar",
},
"c": 42,
},
expected: map[string]interface{}{
"a": map[string]interface{}{
"b": "foo",
},
"c": 42,
},
ignoreChanges: []string{"a.b"},
},
{
name: "Missing in new sets",
oldInputs: map[string]interface{}{
"a": map[string]interface{}{
"b": "foo",
},
},
newInputs: map[string]interface{}{
"a": map[string]interface{}{},
"c": 42,
},
expected: map[string]interface{}{
"a": map[string]interface{}{
"b": "foo",
},
"c": 42,
},
ignoreChanges: []string{"a.b"},
},
{
name: "Missing in old deletes",
oldInputs: map[string]interface{}{},
newInputs: map[string]interface{}{
"a": map[string]interface{}{
"b": "foo",
},
"c": 42,
},
expected: map[string]interface{}{
"a": map[string]interface{}{},
"c": 42,
},
ignoreChanges: []string{"a.b"},
},
{
name: "Missing keys in old and new are OK",
oldInputs: map[string]interface{}{},
newInputs: map[string]interface{}{},
ignoreChanges: []string{
"a",
"a.b",
"a.c[0]",
},
},
{
name: "Missing parent keys in only new fail",
oldInputs: map[string]interface{}{
"a": map[string]interface{}{
"b": "foo",
},
},
newInputs: map[string]interface{}{},
ignoreChanges: []string{"a.b"},
expectFailure: true,
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
olds, news := resource.NewPropertyMapFromMap(c.oldInputs), resource.NewPropertyMapFromMap(c.newInputs)
expected := olds
if c.expected != nil {
expected = resource.NewPropertyMapFromMap(c.expected)
}
processed, res := processIgnoreChanges(news, olds, c.ignoreChanges)
if c.expectFailure {
assert.NotNil(t, res)
} else {
assert.Nil(t, res)
assert.Equal(t, expected, processed)
}
})
}
}

View file

@ -43,7 +43,8 @@ type Provider interface {
CheckConfig(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (resource.PropertyMap, []CheckFailure, error)
// DiffConfig checks what impacts a hypothetical change to this provider's configuration will have on the provider.
DiffConfig(urn resource.URN, olds, news resource.PropertyMap, allowUnknowns bool) (DiffResult, error)
DiffConfig(urn resource.URN, olds, news resource.PropertyMap, allowUnknowns bool,
ignoreChanges []string) (DiffResult, error)
// Configure configures the resource provider with "globals" that control its behavior.
Configure(inputs resource.PropertyMap) error
@ -53,7 +54,7 @@ type Provider interface {
allowUnknowns bool) (resource.PropertyMap, []CheckFailure, error)
// Diff checks what impacts a hypothetical update will have on the resource's properties.
Diff(urn resource.URN, id resource.ID, olds resource.PropertyMap, news resource.PropertyMap,
allowUnknowns bool) (DiffResult, error)
allowUnknowns bool, ignoreChanges []string) (DiffResult, error)
// Create allocates a new instance of the provided resource and returns its unique resource.ID.
Create(urn resource.URN, news resource.PropertyMap, timeout float64) (resource.ID, resource.PropertyMap,
resource.Status, error)
@ -64,7 +65,8 @@ type Provider interface {
inputs, state resource.PropertyMap) (ReadResult, resource.Status, error)
// Update updates an existing resource with new values.
Update(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, timeout float64) (resource.PropertyMap, resource.Status, error)
olds resource.PropertyMap, news resource.PropertyMap, timeout float64,
ignoreChanges []string) (resource.PropertyMap, resource.Status, error)
// Delete tears down an existing resource.
Delete(urn resource.URN, id resource.ID, props resource.PropertyMap, timeout float64) (resource.Status, error)
// Invoke dynamically executes a built-in function in the provider.

View file

@ -238,7 +238,7 @@ func decodeDetailedDiff(resp *pulumirpc.DiffResponse) map[string]PropertyDiff {
// DiffConfig checks what impacts a hypothetical change to this provider's configuration will have on the provider.
func (p *provider) DiffConfig(urn resource.URN, olds, news resource.PropertyMap,
allowUnknowns bool) (DiffResult, error) {
allowUnknowns bool, ignoreChanges []string) (DiffResult, error) {
label := fmt.Sprintf("%s.DiffConfig(%s)", p.label(), urn)
logging.V(7).Infof("%s executing (#olds=%d,#news=%d)", label, len(olds), len(news))
molds, err := MarshalProperties(olds, MarshalOptions{
@ -258,9 +258,10 @@ func (p *provider) DiffConfig(urn resource.URN, olds, news resource.PropertyMap,
}
resp, err := p.clientRaw.DiffConfig(p.ctx.Request(), &pulumirpc.DiffRequest{
Urn: string(urn),
Olds: molds,
News: mnews,
Urn: string(urn),
Olds: molds,
News: mnews,
IgnoreChanges: ignoreChanges,
})
if err != nil {
rpcError := rpcerror.Convert(err)
@ -495,7 +496,9 @@ func (p *provider) Check(urn resource.URN,
// Diff checks what impacts a hypothetical update will have on the resource's properties.
func (p *provider) Diff(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, allowUnknowns bool) (DiffResult, error) {
olds resource.PropertyMap, news resource.PropertyMap, allowUnknowns bool,
ignoreChanges []string) (DiffResult, error) {
contract.Assert(urn != "")
contract.Assert(id != "")
contract.Assert(news != nil)
@ -539,10 +542,11 @@ func (p *provider) Diff(urn resource.URN, id resource.ID,
}
resp, err := client.Diff(p.ctx.Request(), &pulumirpc.DiffRequest{
Id: string(id),
Urn: string(urn),
Olds: molds,
News: mnews,
Id: string(id),
Urn: string(urn),
Olds: molds,
News: mnews,
IgnoreChanges: ignoreChanges,
})
if err != nil {
rpcError := rpcerror.Convert(err)
@ -774,8 +778,9 @@ func (p *provider) Read(urn resource.URN, id resource.ID,
// Update updates an existing resource with new values.
func (p *provider) Update(urn resource.URN, id resource.ID,
olds resource.PropertyMap, news resource.PropertyMap, timeout float64) (resource.PropertyMap, resource.Status,
error) {
olds resource.PropertyMap, news resource.PropertyMap, timeout float64,
ignoreChanges []string) (resource.PropertyMap, resource.Status, error) {
contract.Assert(urn != "")
contract.Assert(id != "")
contract.Assert(news != nil)
@ -813,11 +818,12 @@ func (p *provider) Update(urn resource.URN, id resource.ID,
var resourceError error
var resourceStatus = resource.StatusOK
resp, err := client.Update(p.ctx.Request(), &pulumirpc.UpdateRequest{
Id: string(id),
Urn: string(urn),
Olds: molds,
News: mnews,
Timeout: timeout,
Id: string(id),
Urn: string(urn),
Olds: molds,
News: mnews,
Timeout: timeout,
IgnoreChanges: ignoreChanges,
})
if err != nil {
resourceStatus, _, liveObject, _, resourceError = parseError(err)

View file

@ -0,0 +1,194 @@
package resource
import (
"strconv"
"strings"
"github.com/pkg/errors"
)
// PropertyPath represents a path to a nested property. The path may be composed of strings (which access properties
// in ObjectProperty values) and integers (which access elements of ArrayProperty values).
type PropertyPath []interface{}
// ParsePropertyPath parses a property path into a PropertyPath value.
//
// A property path string is essentially a Javascript property access expression in which all elements are literals.
// Valid property paths obey the following EBNF-ish grammar:
//
// propertyName := [a-zA-Z_$] { [a-zA-Z0-9_$] }
// quotedPropertyName := '"' ( '\' '"' | [^"] ) { ( '\' '"' | [^"] ) } '"'
// arrayIndex := { [0-9] }
//
// propertyIndex := '[' ( quotedPropertyName | arrayIndex ) ']'
// rootProperty := ( propertyName | propertyIndex )
// propertyAccessor := ( ( '.' propertyName ) | propertyIndex )
// path := rootProperty { propertyAccessor }
//
// Examples of valid paths:
// - root
// - root.nested
// - root["nested"]
// - root.double.nest
// - root["double"].nest
// - root["double"]["nest"]
// - root.array[0]
// - root.array[100]
// - root.array[0].nested
// - root.array[0][1].nested
// - root.nested.array[0].double[1]
// - root["key with \"escaped\" quotes"]
// - root["key with a ."]
// - ["root key with \"escaped\" quotes"].nested
// - ["root key with a ."][100]
func ParsePropertyPath(path string) (PropertyPath, error) {
// We interpret the grammar above a little loosely in order to keep things simple. Specifically, we will accept
// something close to the following:
// pathElement := { '.' } ( '[' ( [0-9]+ | '"' ('\' '"' | [^"] )+ '"' ']' | [a-zA-Z_$][a-zA-Z0-9_$] )
// path := { pathElement }
var elements []interface{}
for len(path) > 0 {
switch path[0] {
case '.':
path = path[1:]
case '[':
// If the character following the '[' is a '"', parse a string key.
var pathElement interface{}
if len(path) > 1 && path[1] == '"' {
var propertyKey []byte
var i int
for i = 2; ; {
if i >= len(path) {
return nil, errors.New("missing closing quote in property name")
} else if path[i] == '"' {
i++
break
} else if path[i] == '\\' && i+1 < len(path) && path[i+1] == '"' {
propertyKey = append(propertyKey, '"')
i += 2
} else {
propertyKey = append(propertyKey, path[i])
i++
}
}
if i >= len(path) || path[i] != ']' {
return nil, errors.New("missing closing bracket in property access")
}
pathElement, path = string(propertyKey), path[i:]
} else {
// Look for a closing ']'
rbracket := strings.IndexRune(path, ']')
if rbracket == -1 {
return nil, errors.New("missing closing bracket in array index")
}
index, err := strconv.ParseInt(path[1:rbracket], 10, 0)
if err != nil {
return nil, errors.Wrap(err, "invalid array index")
}
pathElement, path = int(index), path[rbracket:]
}
elements, path = append(elements, pathElement), path[1:]
default:
for i := 0; ; i++ {
if i == len(path) || path[i] == '.' || path[i] == '[' {
elements, path = append(elements, path[:i]), path[i:]
break
}
}
}
}
return PropertyPath(elements), nil
}
// Get attempts to get the value located by the PropertyPath inside the given PropertyValue. If any component of the
// path does not exist, this function will return (NullPropertyValue, false).
func (p PropertyPath) Get(v PropertyValue) (PropertyValue, bool) {
for _, key := range p {
switch {
case v.IsArray():
index, ok := key.(int)
if !ok || index < 0 || index >= len(v.ArrayValue()) {
return PropertyValue{}, false
}
v = v.ArrayValue()[index]
case v.IsObject():
k, ok := key.(string)
if !ok {
return PropertyValue{}, false
}
v, ok = v.ObjectValue()[PropertyKey(k)]
if !ok {
return PropertyValue{}, false
}
default:
return PropertyValue{}, false
}
}
return v, true
}
// Set attempts to set the location inside a PropertyValue indicated by the PropertyPath to the given value If any
// component of the path besides the last component does not exist, this function will return false.
func (p PropertyPath) Set(dest, v PropertyValue) bool {
if len(p) == 0 {
return false
}
dest, ok := p[:len(p)-1].Get(dest)
if !ok {
return false
}
key := p[len(p)-1]
switch {
case dest.IsArray():
index, ok := key.(int)
if !ok || index < 0 || index >= len(dest.ArrayValue()) {
return false
}
dest.ArrayValue()[index] = v
case dest.IsObject():
k, ok := key.(string)
if !ok {
return false
}
dest.ObjectValue()[PropertyKey(k)] = v
default:
return false
}
return true
}
// Delete attempts to delete the value located by the PropertyPath inside the given PropertyValue. If any component
// of the path does not exist, this function will return false.
func (p PropertyPath) Delete(dest PropertyValue) bool {
if len(p) == 0 {
return false
}
dest, ok := p[:len(p)-1].Get(dest)
if !ok {
return false
}
key := p[len(p)-1]
switch {
case dest.IsArray():
index, ok := key.(int)
if !ok || index < 0 || index >= len(dest.ArrayValue()) {
return false
}
dest.ArrayValue()[index] = PropertyValue{}
case dest.IsObject():
k, ok := key.(string)
if !ok {
return false
}
delete(dest.ObjectValue(), PropertyKey(k))
default:
return false
}
return true
}

View file

@ -0,0 +1,164 @@
package resource
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestPropertyPath(t *testing.T) {
value := NewObjectProperty(NewPropertyMapFromMap(map[string]interface{}{
"root": map[string]interface{}{
"nested": map[string]interface{}{
"array": []interface{}{
map[string]interface{}{
"double": []interface{}{
nil,
true,
},
},
},
},
"double": map[string]interface{}{
"nest": true,
},
"array": []interface{}{
map[string]interface{}{
"nested": true,
},
true,
},
"array2": []interface{}{
[]interface{}{
nil,
map[string]interface{}{
"nested": true,
},
},
},
`key with "escaped" quotes`: true,
"key with a .": true,
},
`root key with "escaped" quotes`: map[string]interface{}{
"nested": true,
},
"root key with a .": []interface{}{
nil,
true,
},
}))
cases := []struct {
path string
parsed PropertyPath
}{
{
"root",
PropertyPath{"root"},
},
{
"root.nested",
PropertyPath{"root", "nested"},
},
{
`root["nested"]`,
PropertyPath{"root", "nested"},
},
{
"root.double.nest",
PropertyPath{"root", "double", "nest"},
},
{
`root["double"].nest`,
PropertyPath{"root", "double", "nest"},
},
{
`root["double"]["nest"]`,
PropertyPath{"root", "double", "nest"},
},
{
"root.array[0]",
PropertyPath{"root", "array", 0},
},
{
"root.array[1]",
PropertyPath{"root", "array", 1},
},
{
"root.array[0].nested",
PropertyPath{"root", "array", 0, "nested"},
},
{
"root.array2[0][1].nested",
PropertyPath{"root", "array2", 0, 1, "nested"},
},
{
"root.nested.array[0].double[1]",
PropertyPath{"root", "nested", "array", 0, "double", 1},
},
{
`root["key with \"escaped\" quotes"]`,
PropertyPath{"root", `key with "escaped" quotes`},
},
{
`root["key with a ."]`,
PropertyPath{"root", "key with a ."},
},
{
`["root key with \"escaped\" quotes"].nested`,
PropertyPath{`root key with "escaped" quotes`, "nested"},
},
{
`["root key with a ."][1]`,
PropertyPath{"root key with a .", 1},
},
}
for _, c := range cases {
t.Run(c.path, func(t *testing.T) {
parsed, err := ParsePropertyPath(c.path)
assert.NoError(t, err)
assert.Equal(t, c.parsed, parsed)
v, ok := parsed.Get(value)
assert.True(t, ok)
assert.False(t, v.IsNull())
ok = parsed.Delete(value)
assert.True(t, ok)
ok = parsed.Set(value, v)
assert.True(t, ok)
u, ok := parsed.Get(value)
assert.True(t, ok)
assert.Equal(t, v, u)
})
}
negativeCases := []string{
// Syntax errors
"root[",
`root["nested]`,
`root."double".nest`,
"root.array[abc]",
"root.[1]",
// Missing values
"root[1]",
"root.nested.array[100]",
"root.nested.array.bar",
"foo",
}
for _, c := range negativeCases {
t.Run(c, func(t *testing.T) {
parsed, err := ParsePropertyPath(c)
if err == nil {
v, ok := parsed.Get(value)
assert.False(t, ok)
assert.True(t, v.IsNull())
}
})
}
}

View file

@ -1809,12 +1809,19 @@ proto.pulumirpc.CheckFailure.prototype.setReason = function(value) {
* @constructor
*/
proto.pulumirpc.DiffRequest = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.pulumirpc.DiffRequest.repeatedFields_, null);
};
goog.inherits(proto.pulumirpc.DiffRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
proto.pulumirpc.DiffRequest.displayName = 'proto.pulumirpc.DiffRequest';
}
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.pulumirpc.DiffRequest.repeatedFields_ = [5];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -1847,7 +1854,8 @@ proto.pulumirpc.DiffRequest.toObject = function(includeInstance, msg) {
id: jspb.Message.getFieldWithDefault(msg, 1, ""),
urn: jspb.Message.getFieldWithDefault(msg, 2, ""),
olds: (f = msg.getOlds()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f),
news: (f = msg.getNews()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f)
news: (f = msg.getNews()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f),
ignorechangesList: jspb.Message.getRepeatedField(msg, 5)
};
if (includeInstance) {
@ -1902,6 +1910,10 @@ proto.pulumirpc.DiffRequest.deserializeBinaryFromReader = function(msg, reader)
reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader);
msg.setNews(value);
break;
case 5:
var value = /** @type {string} */ (reader.readString());
msg.addIgnorechanges(value);
break;
default:
reader.skipField();
break;
@ -1961,6 +1973,13 @@ proto.pulumirpc.DiffRequest.serializeBinaryToWriter = function(message, writer)
google_protobuf_struct_pb.Struct.serializeBinaryToWriter
);
}
f = message.getIgnorechangesList();
if (f.length > 0) {
writer.writeRepeatedString(
5,
f
);
}
};
@ -2054,6 +2073,35 @@ proto.pulumirpc.DiffRequest.prototype.hasNews = function() {
};
/**
* repeated string ignoreChanges = 5;
* @return {!Array.<string>}
*/
proto.pulumirpc.DiffRequest.prototype.getIgnorechangesList = function() {
return /** @type {!Array.<string>} */ (jspb.Message.getRepeatedField(this, 5));
};
/** @param {!Array.<string>} value */
proto.pulumirpc.DiffRequest.prototype.setIgnorechangesList = function(value) {
jspb.Message.setField(this, 5, value || []);
};
/**
* @param {!string} value
* @param {number=} opt_index
*/
proto.pulumirpc.DiffRequest.prototype.addIgnorechanges = function(value, opt_index) {
jspb.Message.addToRepeatedField(this, 5, value, opt_index);
};
proto.pulumirpc.DiffRequest.prototype.clearIgnorechangesList = function() {
this.setIgnorechangesList([]);
};
/**
* Generated by JsPbCodeGenerator.
@ -3503,12 +3551,19 @@ proto.pulumirpc.ReadResponse.prototype.hasInputs = function() {
* @constructor
*/
proto.pulumirpc.UpdateRequest = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.pulumirpc.UpdateRequest.repeatedFields_, null);
};
goog.inherits(proto.pulumirpc.UpdateRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
proto.pulumirpc.UpdateRequest.displayName = 'proto.pulumirpc.UpdateRequest';
}
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.pulumirpc.UpdateRequest.repeatedFields_ = [6];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -3542,7 +3597,8 @@ proto.pulumirpc.UpdateRequest.toObject = function(includeInstance, msg) {
urn: jspb.Message.getFieldWithDefault(msg, 2, ""),
olds: (f = msg.getOlds()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f),
news: (f = msg.getNews()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f),
timeout: +jspb.Message.getFieldWithDefault(msg, 5, 0.0)
timeout: +jspb.Message.getFieldWithDefault(msg, 5, 0.0),
ignorechangesList: jspb.Message.getRepeatedField(msg, 6)
};
if (includeInstance) {
@ -3601,6 +3657,10 @@ proto.pulumirpc.UpdateRequest.deserializeBinaryFromReader = function(msg, reader
var value = /** @type {number} */ (reader.readDouble());
msg.setTimeout(value);
break;
case 6:
var value = /** @type {string} */ (reader.readString());
msg.addIgnorechanges(value);
break;
default:
reader.skipField();
break;
@ -3667,6 +3727,13 @@ proto.pulumirpc.UpdateRequest.serializeBinaryToWriter = function(message, writer
f
);
}
f = message.getIgnorechangesList();
if (f.length > 0) {
writer.writeRepeatedString(
6,
f
);
}
};
@ -3775,6 +3842,35 @@ proto.pulumirpc.UpdateRequest.prototype.setTimeout = function(value) {
};
/**
* repeated string ignoreChanges = 6;
* @return {!Array.<string>}
*/
proto.pulumirpc.UpdateRequest.prototype.getIgnorechangesList = function() {
return /** @type {!Array.<string>} */ (jspb.Message.getRepeatedField(this, 6));
};
/** @param {!Array.<string>} value */
proto.pulumirpc.UpdateRequest.prototype.setIgnorechangesList = function(value) {
jspb.Message.setField(this, 6, value || []);
};
/**
* @param {!string} value
* @param {number=} opt_index
*/
proto.pulumirpc.UpdateRequest.prototype.addIgnorechanges = function(value, opt_index) {
jspb.Message.addToRepeatedField(this, 6, value, opt_index);
};
proto.pulumirpc.UpdateRequest.prototype.clearIgnorechangesList = function() {
this.setIgnorechangesList([]);
};
/**
* Generated by JsPbCodeGenerator.

View file

@ -501,37 +501,37 @@ var _Analyzer_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("analyzer.proto", fileDescriptor_analyzer_eb1faef40b250be3) }
var fileDescriptor_analyzer_eb1faef40b250be3 = []byte{
// 512 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x4c,
0x10, 0x8e, 0x93, 0xb4, 0x49, 0x26, 0x69, 0x9a, 0xae, 0xf4, 0xff, 0x35, 0x6e, 0x85, 0x2c, 0x1f,
0x50, 0x84, 0x90, 0x23, 0xc2, 0x81, 0x1b, 0x22, 0x28, 0x55, 0x54, 0x09, 0x4a, 0x70, 0x51, 0x25,
0x0e, 0x1c, 0x5c, 0x77, 0x62, 0x59, 0xd8, 0xde, 0x65, 0x77, 0x0d, 0x32, 0x8f, 0xc3, 0xcb, 0xf0,
0x06, 0x3c, 0x0f, 0xf2, 0xda, 0x71, 0x1c, 0xbb, 0xea, 0xa1, 0xb7, 0x9d, 0xf9, 0xbe, 0xf9, 0x76,
0xf6, 0x1b, 0x8f, 0x61, 0xec, 0xc6, 0x6e, 0x98, 0xfe, 0x42, 0x6e, 0x33, 0x4e, 0x25, 0x25, 0x03,
0x96, 0x84, 0x49, 0x14, 0x70, 0xe6, 0x19, 0x23, 0x16, 0x26, 0x7e, 0x10, 0xe7, 0x80, 0x71, 0xe6,
0x53, 0xea, 0x87, 0x38, 0x53, 0xd1, 0x6d, 0xb2, 0x99, 0x61, 0xc4, 0x64, 0x5a, 0x80, 0xe7, 0x75,
0x50, 0x48, 0x9e, 0x78, 0x32, 0x47, 0xad, 0xaf, 0x30, 0x5e, 0xe4, 0xb7, 0x38, 0xf8, 0x3d, 0x41,
0x21, 0x09, 0x81, 0xae, 0x4c, 0x19, 0xea, 0x9a, 0xa9, 0x4d, 0x07, 0x8e, 0x3a, 0x93, 0xd7, 0x00,
0x8c, 0x53, 0x86, 0x5c, 0x06, 0x28, 0xf4, 0xb6, 0xa9, 0x4d, 0x87, 0xf3, 0x53, 0x3b, 0x17, 0xb6,
0xb7, 0xc2, 0xf6, 0xb5, 0x12, 0x76, 0x2a, 0x54, 0xeb, 0x13, 0x1c, 0x97, 0xf2, 0x82, 0xd1, 0x58,
0x20, 0x79, 0x03, 0xc3, 0xbb, 0xc0, 0xf5, 0x63, 0x2a, 0x64, 0xe0, 0x65, 0x62, 0x9d, 0xe9, 0x70,
0x7e, 0x6e, 0x97, 0x6f, 0xb3, 0x8b, 0x82, 0x65, 0x49, 0x72, 0xaa, 0x05, 0xd6, 0xef, 0x36, 0x9c,
0x34, 0x28, 0xe4, 0x29, 0x00, 0xa3, 0x61, 0xe0, 0xa5, 0x57, 0x6e, 0xb4, 0xed, 0xbd, 0x92, 0x21,
0xcf, 0x60, 0x9c, 0x47, 0x6b, 0xd7, 0xfb, 0xa6, 0x38, 0x6d, 0xc5, 0xa9, 0x65, 0xc9, 0x0b, 0x38,
0xd9, 0x65, 0x6e, 0x90, 0x8b, 0x80, 0xc6, 0x7a, 0x47, 0x51, 0x9b, 0x00, 0x31, 0x61, 0x78, 0x87,
0xc2, 0xe3, 0x01, 0x93, 0x19, 0xaf, 0xab, 0x78, 0xd5, 0x14, 0xd1, 0xa1, 0x17, 0xa1, 0x10, 0xae,
0x8f, 0xfa, 0x81, 0x42, 0xb7, 0xa1, 0xf2, 0xd9, 0xf5, 0x85, 0x7e, 0x68, 0x76, 0x94, 0xcf, 0xae,
0x2f, 0xc8, 0x0a, 0x26, 0x18, 0x6f, 0x28, 0xf7, 0x30, 0xc2, 0x58, 0xbe, 0xc7, 0x1f, 0x18, 0xea,
0x3d, 0x53, 0x9b, 0x8e, 0xe7, 0x67, 0x15, 0x83, 0x2e, 0x6a, 0x14, 0xa7, 0x51, 0x64, 0xfd, 0x84,
0x51, 0xe1, 0x11, 0xbf, 0x8c, 0x37, 0x34, 0xbb, 0x2c, 0xde, 0x19, 0xa3, 0xce, 0xaa, 0xf9, 0x40,
0xb0, 0xd0, 0x4d, 0x2b, 0x7e, 0x54, 0x53, 0xe4, 0x25, 0xf4, 0xd5, 0x9b, 0xb3, 0xa1, 0x77, 0xd4,
0x9c, 0xfe, 0xab, 0xb4, 0xb1, 0x56, 0x76, 0x64, 0xf2, 0x4e, 0x49, 0xb3, 0xfe, 0x68, 0x00, 0x3b,
0xe0, 0x91, 0xf7, 0xd6, 0x6c, 0xed, 0x3c, 0x68, 0x6b, 0x77, 0xdf, 0xd6, 0xfb, 0x2c, 0x3c, 0x78,
0x84, 0x85, 0xcf, 0x67, 0x30, 0xa9, 0xb3, 0xc8, 0x08, 0xfa, 0x8b, 0xe5, 0xcd, 0xe5, 0xf5, 0x47,
0xe7, 0xcb, 0xa4, 0x45, 0x8e, 0x60, 0xf0, 0x61, 0x71, 0xb5, 0x5c, 0x7c, 0xce, 0x42, 0x6d, 0xfe,
0x57, 0x83, 0xfe, 0xd6, 0x74, 0xf2, 0x0e, 0x7a, 0xc5, 0x99, 0x3c, 0x69, 0x7e, 0xdb, 0xc5, 0xae,
0x19, 0xc6, 0x7d, 0x50, 0xbe, 0x27, 0x56, 0x8b, 0x2c, 0xe1, 0x78, 0x85, 0x72, 0x6f, 0x8e, 0xff,
0x37, 0x96, 0xee, 0x22, 0x5b, 0x75, 0xe3, 0xb4, 0x29, 0xa4, 0x0a, 0xac, 0x16, 0x79, 0x0b, 0x47,
0x2b, 0x94, 0x6b, 0xf5, 0xbf, 0x78, 0x50, 0x63, 0x6f, 0xb6, 0x25, 0xdd, 0x6a, 0xdd, 0x1e, 0x2a,
0xe2, 0xab, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x83, 0xde, 0x75, 0xe5, 0x90, 0x04, 0x00, 0x00,
// 506 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x40,
0x10, 0x8d, 0x93, 0xb4, 0x69, 0xa6, 0x69, 0x9a, 0xae, 0x04, 0x35, 0x6e, 0x85, 0x2a, 0x1f, 0x10,
0x42, 0xc8, 0x11, 0xe1, 0xc0, 0x0d, 0x11, 0x94, 0xaa, 0xaa, 0x04, 0x25, 0xb8, 0xa8, 0x12, 0x07,
0x0e, 0xae, 0x99, 0x5a, 0x16, 0xb6, 0x77, 0xd9, 0x5d, 0x83, 0xcc, 0xe7, 0xf0, 0x33, 0xfc, 0x01,
0xdf, 0xd3, 0xf5, 0xda, 0x71, 0x1c, 0xbb, 0xea, 0xa1, 0xb7, 0x9d, 0x79, 0x6f, 0xde, 0xce, 0xbe,
0xf1, 0x18, 0xc6, 0x5e, 0xe2, 0x45, 0xd9, 0x1f, 0xe4, 0x0e, 0xe3, 0x54, 0x52, 0x32, 0x64, 0x69,
0x94, 0xc6, 0x21, 0x67, 0xbe, 0x35, 0x62, 0x51, 0x1a, 0x84, 0x49, 0x01, 0x58, 0x47, 0x01, 0xa5,
0x41, 0x84, 0x53, 0x1d, 0x5d, 0xa7, 0x37, 0x53, 0x8c, 0x99, 0xcc, 0x4a, 0xf0, 0xb8, 0x09, 0x0a,
0xc9, 0x53, 0x5f, 0x16, 0xa8, 0xfd, 0x0d, 0xc6, 0xf3, 0xe2, 0x16, 0x17, 0x7f, 0xa6, 0x28, 0x24,
0x21, 0xd0, 0x97, 0x19, 0x43, 0xd3, 0x38, 0x31, 0x9e, 0x0f, 0x5d, 0x7d, 0x26, 0x6f, 0x00, 0x14,
0x9d, 0x21, 0x97, 0x21, 0x0a, 0xb3, 0xab, 0x90, 0xdd, 0xd9, 0xa1, 0x53, 0x08, 0x3b, 0x2b, 0x61,
0xe7, 0x52, 0x0b, 0xbb, 0x35, 0xaa, 0xfd, 0x19, 0xf6, 0x2b, 0x79, 0xc1, 0x68, 0x22, 0x90, 0xbc,
0x85, 0xdd, 0xef, 0xa1, 0x17, 0x24, 0x54, 0xc8, 0xd0, 0xcf, 0xc5, 0x7a, 0x4a, 0xec, 0xd8, 0xa9,
0xde, 0xe6, 0x94, 0x05, 0x8b, 0x8a, 0xe4, 0xd6, 0x0b, 0xec, 0xbf, 0x5d, 0x38, 0x68, 0x51, 0xc8,
0x53, 0xd5, 0x21, 0x8d, 0x42, 0x3f, 0xbb, 0xf0, 0xe2, 0x55, 0xef, 0xb5, 0x0c, 0x79, 0x06, 0xe3,
0x22, 0x5a, 0x7a, 0xfe, 0x0f, 0xcd, 0xe9, 0x6a, 0x4e, 0x23, 0x4b, 0x5e, 0xc2, 0xc1, 0x3a, 0x73,
0x85, 0x5c, 0x84, 0x34, 0x31, 0x7b, 0x9a, 0xda, 0x06, 0xc8, 0x89, 0x7a, 0x0b, 0x0a, 0x9f, 0x87,
0x4c, 0xe6, 0xbc, 0xbe, 0xe6, 0xd5, 0x53, 0xc4, 0x84, 0x41, 0x8c, 0x42, 0x78, 0x01, 0x9a, 0x5b,
0x1a, 0x5d, 0x85, 0xda, 0x67, 0x2f, 0x10, 0xe6, 0xb6, 0x32, 0x20, 0xf7, 0x59, 0x9d, 0xc9, 0x19,
0x4c, 0x30, 0xb9, 0xa1, 0xdc, 0xc7, 0x18, 0x13, 0xf9, 0x01, 0x7f, 0x61, 0x64, 0x0e, 0x54, 0xd9,
0x78, 0x76, 0x54, 0x33, 0xe8, 0xb4, 0x41, 0x71, 0x5b, 0x45, 0xf6, 0x6f, 0x18, 0x95, 0x1e, 0xf1,
0x73, 0x85, 0xe5, 0x97, 0x25, 0x6b, 0x63, 0xf4, 0x59, 0x37, 0x1f, 0x0a, 0x16, 0x79, 0x59, 0xcd,
0x8f, 0x7a, 0x8a, 0xbc, 0x82, 0x1d, 0xfd, 0xe6, 0x7c, 0xe8, 0x3d, 0x3d, 0xa7, 0x47, 0xb5, 0x36,
0x96, 0xda, 0x8e, 0x5c, 0xde, 0xad, 0x68, 0xf6, 0x3f, 0x03, 0x60, 0x0d, 0x3c, 0xf0, 0xde, 0x86,
0xad, 0xbd, 0x7b, 0x6d, 0xed, 0x6f, 0xda, 0x7a, 0x97, 0x85, 0x5b, 0x0f, 0xb0, 0xf0, 0xc5, 0x14,
0x26, 0x4d, 0x16, 0x19, 0xc1, 0xce, 0x7c, 0x71, 0x75, 0x7e, 0xf9, 0xc9, 0xfd, 0x3a, 0xe9, 0x90,
0x3d, 0x18, 0x7e, 0x9c, 0x5f, 0x2c, 0xe6, 0x5f, 0xf2, 0xd0, 0x98, 0xfd, 0x37, 0x14, 0x5a, 0x9a,
0x4e, 0xde, 0xc3, 0xa0, 0x3c, 0x93, 0x27, 0xed, 0x6f, 0xbb, 0xdc, 0x35, 0xcb, 0xba, 0x0b, 0x2a,
0xf6, 0xc4, 0xee, 0x90, 0x05, 0xec, 0x9f, 0xa1, 0xdc, 0x98, 0xe3, 0xe3, 0xd6, 0xd2, 0x9d, 0xe6,
0xab, 0x6e, 0x1d, 0xb6, 0x85, 0x74, 0x81, 0x52, 0x79, 0x07, 0x7b, 0x4a, 0x65, 0xa9, 0xff, 0x17,
0xf7, 0x6a, 0x6c, 0xcc, 0xb6, 0xa2, 0xdb, 0x9d, 0xeb, 0x6d, 0x4d, 0x7c, 0x7d, 0x1b, 0x00, 0x00,
0xff, 0xff, 0x83, 0xde, 0x75, 0xe5, 0x90, 0x04, 0x00, 0x00,
}

View file

@ -431,28 +431,27 @@ var _Engine_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("engine.proto", fileDescriptor_engine_8ab3bc277096818e) }
var fileDescriptor_engine_8ab3bc277096818e = []byte{
// 356 bytes of a gzipped FileDescriptorProto
// 352 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x91, 0x4f, 0x4b, 0xeb, 0x40,
0x14, 0xc5, 0x3b, 0x4d, 0xff, 0x24, 0xb7, 0x8f, 0xf7, 0xc2, 0xc0, 0x4b, 0xf3, 0xf2, 0x5c, 0xc4,
0xac, 0x42, 0x85, 0x14, 0x2a, 0xb8, 0x70, 0xa7, 0x18, 0x4b, 0xa1, 0xb4, 0x30, 0x41, 0x04, 0x77,
0x6d, 0xbd, 0xc6, 0x42, 0x93, 0x89, 0x99, 0x89, 0xd0, 0x2f, 0xe4, 0x67, 0x74, 0x29, 0x4d, 0xda,
0x58, 0x35, 0xd6, 0xdd, 0xcc, 0xbd, 0x87, 0x1f, 0xe7, 0x9e, 0x03, 0xbf, 0x30, 0x0e, 0x97, 0x31,
0x7a, 0x49, 0xca, 0x25, 0xa7, 0x5a, 0x92, 0xad, 0xb2, 0x68, 0x99, 0x26, 0x0b, 0xeb, 0x7f, 0xc8,
0x79, 0xb8, 0xc2, 0x7e, 0xbe, 0x98, 0x67, 0x0f, 0x7d, 0x8c, 0x12, 0xb9, 0x2e, 0x74, 0xce, 0x0b,
0x01, 0x18, 0xf3, 0x90, 0xe1, 0x53, 0x86, 0x42, 0xd2, 0x01, 0xa8, 0x02, 0x9f, 0x31, 0x5d, 0xca,
0xb5, 0x49, 0x6c, 0xe2, 0xfe, 0x1e, 0x18, 0x5e, 0x49, 0xf2, 0xc6, 0x3c, 0x0c, 0xb6, 0x5b, 0x56,
0xea, 0xa8, 0x09, 0xed, 0x08, 0x85, 0x98, 0x85, 0x68, 0xd6, 0x6d, 0xe2, 0x6a, 0x6c, 0xf7, 0xa5,
0x3a, 0x28, 0x59, 0x1a, 0x9b, 0x4a, 0x3e, 0xdd, 0x3c, 0xa9, 0x05, 0xaa, 0x90, 0x29, 0xce, 0xa2,
0xd1, 0xbd, 0xd9, 0xb0, 0x89, 0xdb, 0x64, 0xe5, 0x9f, 0x1e, 0x81, 0x86, 0xc9, 0x23, 0x46, 0x98,
0xce, 0x56, 0x66, 0xd3, 0x26, 0xae, 0xca, 0xde, 0x07, 0x8e, 0x09, 0xc6, 0x10, 0x25, 0xe3, 0x5c,
0x32, 0x14, 0x3c, 0x4b, 0x17, 0xb8, 0xf5, 0xec, 0x9c, 0x40, 0xf7, 0xcb, 0x46, 0x24, 0x3c, 0x16,
0xa5, 0x01, 0x52, 0x1a, 0x70, 0x7a, 0x60, 0x04, 0x95, 0x98, 0x0a, 0xed, 0x3f, 0xe8, 0x06, 0xd5,
0xe0, 0xde, 0x39, 0x74, 0xf6, 0xc2, 0xa0, 0x1a, 0x34, 0xaf, 0xfc, 0xcb, 0x9b, 0xa1, 0x5e, 0xa3,
0x2a, 0x34, 0x46, 0x93, 0xeb, 0xa9, 0x4e, 0x68, 0x07, 0xda, 0xb7, 0x17, 0x6c, 0x32, 0x9a, 0x0c,
0xf5, 0xfa, 0x46, 0xe1, 0x33, 0x36, 0x65, 0xba, 0x32, 0x78, 0x25, 0xd0, 0xf2, 0xf3, 0xae, 0xe8,
0x19, 0x28, 0x63, 0x1e, 0xd2, 0xbf, 0x1f, 0x33, 0xde, 0x3a, 0xb2, 0x0c, 0xaf, 0x68, 0xce, 0xdb,
0x35, 0xe7, 0xf9, 0x9b, 0xe6, 0x9c, 0x1a, 0xbd, 0x83, 0x3f, 0x9f, 0x4e, 0xa6, 0xc7, 0x7b, 0x8c,
0xea, 0xa0, 0x2c, 0xe7, 0x90, 0xa4, 0x38, 0xac, 0x60, 0x07, 0x07, 0xd8, 0xc1, 0xcf, 0xec, 0xe0,
0x3b, 0xf6, 0xbc, 0x95, 0x5f, 0x72, 0xfa, 0x16, 0x00, 0x00, 0xff, 0xff, 0x26, 0x3e, 0xcf, 0xd2,
0xac, 0x02, 0x00, 0x00,
0x14, 0xc5, 0x9b, 0xa6, 0xff, 0x72, 0xfb, 0x78, 0x2f, 0x0c, 0xbc, 0x74, 0x8c, 0x2e, 0x34, 0x2b,
0xa9, 0x90, 0x42, 0x05, 0x17, 0xee, 0x14, 0x63, 0x29, 0x48, 0x0b, 0x13, 0x44, 0x70, 0xd7, 0xd6,
0x6b, 0x2c, 0x34, 0x99, 0x38, 0x33, 0x11, 0xfa, 0x85, 0xfc, 0x8c, 0x2e, 0x4d, 0x93, 0x36, 0x56,
0x8d, 0x75, 0x97, 0xb9, 0xe7, 0xe4, 0xc7, 0xb9, 0xf7, 0xc0, 0x1f, 0x8c, 0x82, 0x79, 0x84, 0x6e,
0x2c, 0xb8, 0xe2, 0xc4, 0x88, 0x93, 0x45, 0x12, 0xce, 0x45, 0x3c, 0xb3, 0xf7, 0x03, 0xce, 0x83,
0x05, 0xf6, 0x32, 0x61, 0x9a, 0x3c, 0xf6, 0x30, 0x8c, 0xd5, 0x32, 0xf7, 0x39, 0xaf, 0x1a, 0xc0,
0x0d, 0x0f, 0x18, 0x3e, 0x27, 0x28, 0x15, 0xe9, 0x43, 0x4b, 0xe2, 0x0b, 0x8a, 0xb9, 0x5a, 0x52,
0xed, 0x50, 0x3b, 0xfe, 0xdb, 0xb7, 0xdc, 0x82, 0xe4, 0xa6, 0x46, 0x7f, 0xad, 0xb2, 0xc2, 0x47,
0x28, 0x34, 0x43, 0x94, 0x72, 0x12, 0x20, 0xad, 0xa6, 0xbf, 0x18, 0x6c, 0xf3, 0x24, 0x26, 0xe8,
0x89, 0x88, 0xa8, 0x9e, 0x4d, 0x57, 0x9f, 0xc4, 0x4e, 0xf9, 0x4a, 0xe0, 0x24, 0x1c, 0x3e, 0xd0,
0x5a, 0x3a, 0xae, 0xb3, 0xe2, 0x4d, 0x0e, 0xc0, 0xc0, 0xf8, 0x09, 0x43, 0x14, 0x93, 0x05, 0xad,
0xa7, 0x62, 0x8b, 0x7d, 0x0c, 0x1c, 0x0a, 0xd6, 0x00, 0x15, 0xe3, 0x5c, 0x31, 0x94, 0x3c, 0x11,
0x33, 0x5c, 0x67, 0x76, 0x4e, 0xa0, 0xf3, 0x4d, 0x91, 0x31, 0x8f, 0x64, 0x11, 0x40, 0x2b, 0x02,
0x38, 0x5d, 0xb0, 0xfc, 0x52, 0x4c, 0x89, 0x77, 0x0f, 0x3a, 0x7e, 0x39, 0xb8, 0x7b, 0x0e, 0xed,
0xad, 0x63, 0x10, 0x03, 0xea, 0x57, 0xde, 0xe5, 0xed, 0xc0, 0xac, 0x90, 0x16, 0xd4, 0x86, 0xa3,
0xeb, 0xb1, 0xa9, 0x91, 0x36, 0x34, 0xef, 0x2e, 0xd8, 0x68, 0x38, 0x1a, 0x98, 0xd5, 0x95, 0xc3,
0x63, 0x6c, 0xcc, 0x4c, 0xbd, 0xff, 0xa6, 0x41, 0xc3, 0xcb, 0xba, 0x22, 0x67, 0xa0, 0xa7, 0x18,
0xf2, 0xff, 0xf3, 0x8d, 0xd7, 0x89, 0x6c, 0xcb, 0xcd, 0x9b, 0x73, 0x37, 0xcd, 0xb9, 0xde, 0xaa,
0x39, 0xa7, 0x42, 0xee, 0xe1, 0xdf, 0x97, 0x95, 0xc9, 0xd1, 0x16, 0xa3, 0xfc, 0x50, 0xb6, 0xb3,
0xcb, 0x92, 0x2f, 0x96, 0xb3, 0xfd, 0x1d, 0x6c, 0xff, 0x77, 0xb6, 0xff, 0x13, 0x7b, 0xda, 0xc8,
0x36, 0x39, 0x7d, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x26, 0x3e, 0xcf, 0xd2, 0xac, 0x02, 0x00, 0x00,
}

View file

@ -433,35 +433,35 @@ var _LanguageRuntime_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("language.proto", fileDescriptor_language_aca56bed509f6786) }
var fileDescriptor_language_aca56bed509f6786 = []byte{
// 477 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
0x14, 0xc6, 0x97, 0x66, 0xfd, 0x77, 0x0a, 0x1b, 0xb2, 0xb6, 0xca, 0x64, 0x5c, 0x94, 0x08, 0x44,
0xaf, 0x32, 0x69, 0x88, 0x3f, 0xe3, 0x0a, 0x04, 0xd3, 0x84, 0x04, 0x12, 0x32, 0x0f, 0x80, 0xdc,
0xe4, 0x34, 0x0a, 0x4b, 0x6d, 0xcf, 0xb1, 0x41, 0x79, 0x68, 0x24, 0x1e, 0x01, 0xd9, 0x4e, 0xbb,
0xc2, 0x8a, 0x76, 0x77, 0xbe, 0x93, 0xef, 0x24, 0xbf, 0x7c, 0x3e, 0x86, 0x83, 0x9a, 0x8b, 0xd2,
0xf2, 0x12, 0x33, 0xa5, 0xa5, 0x91, 0x64, 0xac, 0x6c, 0x6d, 0x57, 0x95, 0x56, 0x79, 0x72, 0x4f,
0xd5, 0xb6, 0xac, 0x44, 0x78, 0x90, 0x9c, 0x94, 0x52, 0x96, 0x35, 0x9e, 0x7a, 0xb5, 0xb0, 0xcb,
0x53, 0x5c, 0x29, 0xd3, 0x86, 0x87, 0x29, 0x87, 0x87, 0x97, 0x68, 0x18, 0x5e, 0xdb, 0x4a, 0x63,
0xf1, 0xc5, 0xcf, 0x35, 0x4e, 0x62, 0x63, 0x08, 0x85, 0xa1, 0xd2, 0xf2, 0x3b, 0xe6, 0x86, 0x46,
0xb3, 0x68, 0x3e, 0x66, 0x6b, 0x49, 0x1e, 0x40, 0xac, 0x7e, 0x16, 0xb4, 0xe7, 0xbb, 0xae, 0xec,
0xbc, 0xa5, 0xe6, 0x2b, 0x1a, 0x6f, 0xbc, 0x4e, 0xa6, 0x5f, 0x21, 0xd9, 0xf5, 0x89, 0x46, 0x49,
0xd1, 0x20, 0x79, 0x01, 0xc3, 0x40, 0xdb, 0xd0, 0x68, 0x16, 0xcf, 0x27, 0x67, 0x27, 0xd9, 0xe6,
0x47, 0xb2, 0x60, 0xfe, 0x80, 0x0a, 0x45, 0x81, 0x22, 0x6f, 0xd9, 0xda, 0x9b, 0xfe, 0xea, 0x01,
0x30, 0x2b, 0xee, 0x26, 0x3d, 0x82, 0x7e, 0x63, 0x78, 0x7e, 0xd5, 0xb1, 0x06, 0xb1, 0xe6, 0x8f,
0x77, 0xf2, 0xef, 0xff, 0xc5, 0x4f, 0x08, 0xec, 0x73, 0x5d, 0x36, 0xb4, 0x3f, 0x8b, 0xe7, 0x63,
0xe6, 0x6b, 0x72, 0x0e, 0x83, 0x5c, 0x8a, 0x65, 0x55, 0xd2, 0x81, 0x87, 0x7e, 0xbc, 0x05, 0x7d,
0x83, 0x95, 0xbd, 0xf7, 0x9e, 0x0b, 0x61, 0x74, 0xcb, 0xba, 0x01, 0x32, 0x85, 0x41, 0xa1, 0x5b,
0x66, 0x05, 0x1d, 0xce, 0xa2, 0xf9, 0x88, 0x75, 0x8a, 0x24, 0x30, 0x52, 0x5c, 0xf3, 0xba, 0xc6,
0x9a, 0x8e, 0x66, 0xd1, 0xbc, 0xcf, 0x36, 0x9a, 0x3c, 0x83, 0xc3, 0x95, 0x14, 0x95, 0x91, 0xfa,
0x1b, 0x2f, 0x0a, 0x8d, 0x4d, 0x43, 0xc7, 0x1e, 0xf2, 0xa0, 0x6b, 0xbf, 0x0b, 0x5d, 0xf2, 0x08,
0xc6, 0xd7, 0x16, 0x75, 0xfb, 0x59, 0x16, 0x48, 0xc1, 0xbf, 0xff, 0xa6, 0x91, 0x9c, 0xc3, 0x64,
0x8b, 0xc8, 0x85, 0x70, 0x85, 0x6d, 0x17, 0x98, 0x2b, 0x5d, 0x58, 0x3f, 0x78, 0x6d, 0x71, 0x1d,
0x96, 0x17, 0x6f, 0x7a, 0xaf, 0xa3, 0xf4, 0x15, 0x4c, 0xfc, 0x7f, 0x75, 0xa7, 0x76, 0x04, 0x7d,
0xd4, 0x5a, 0xea, 0x6e, 0x38, 0x08, 0x97, 0xd4, 0x82, 0x57, 0xb5, 0x9f, 0x1e, 0x31, 0x5f, 0x9f,
0xfd, 0x8e, 0xe0, 0xf0, 0x53, 0xb7, 0xa9, 0xcc, 0x0a, 0x53, 0xad, 0x90, 0xe4, 0x40, 0x6e, 0x6f,
0x04, 0x79, 0xb2, 0x95, 0xe1, 0x7f, 0x77, 0x32, 0x79, 0x7a, 0x87, 0x2b, 0x00, 0xa6, 0x7b, 0xe4,
0x25, 0xc4, 0x2e, 0xd6, 0xe3, 0x9d, 0x27, 0x93, 0x4c, 0xff, 0x6d, 0x6f, 0xe6, 0xde, 0xc2, 0xfd,
0x4b, 0x34, 0xe1, 0x7d, 0x1f, 0xc5, 0x52, 0x92, 0x69, 0x16, 0x2e, 0x50, 0xb6, 0xbe, 0x40, 0xd9,
0x85, 0xbb, 0x40, 0xc9, 0xf1, 0xad, 0x45, 0x75, 0xf6, 0x74, 0x6f, 0x31, 0xf0, 0xc6, 0xe7, 0x7f,
0x02, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xdb, 0x96, 0xaa, 0xa2, 0x03, 0x00, 0x00,
// 471 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0xdb, 0x6e, 0xd3, 0x40,
0x10, 0x6d, 0xe2, 0x26, 0x8d, 0x27, 0xd0, 0xa2, 0x15, 0x8d, 0x16, 0x97, 0x07, 0xb0, 0x40, 0xf4,
0xc9, 0x95, 0x8a, 0xb8, 0x94, 0x27, 0x10, 0x54, 0x08, 0x09, 0x24, 0x64, 0x3e, 0x00, 0x6d, 0xec,
0x89, 0x65, 0x6a, 0xef, 0x9a, 0xb5, 0x17, 0xe4, 0x8f, 0x46, 0xe2, 0x13, 0xd8, 0x9b, 0xd3, 0x40,
0x83, 0xf2, 0x36, 0x67, 0xf6, 0xcc, 0xcc, 0xd9, 0xb3, 0xb3, 0x70, 0x58, 0x31, 0x5e, 0x28, 0x56,
0x60, 0xd2, 0x48, 0xd1, 0x09, 0x12, 0x36, 0xaa, 0x52, 0x75, 0x29, 0x9b, 0x2c, 0xba, 0xd5, 0x54,
0xaa, 0x28, 0xb9, 0x3b, 0x88, 0x4e, 0x0a, 0x21, 0x8a, 0x0a, 0xcf, 0x2c, 0x5a, 0xaa, 0xd5, 0x19,
0xd6, 0x4d, 0xd7, 0xbb, 0xc3, 0x98, 0xc1, 0xbd, 0xf7, 0xd8, 0xa5, 0xf8, 0x5d, 0x95, 0x12, 0xf3,
0xcf, 0xb6, 0xae, 0x35, 0x10, 0xdb, 0x8e, 0x50, 0x38, 0xd0, 0xac, 0x6f, 0x98, 0x75, 0x74, 0xf4,
0x60, 0x74, 0x1a, 0xa6, 0x03, 0x24, 0x77, 0x20, 0x68, 0x7e, 0xe6, 0x74, 0x6c, 0xb3, 0x26, 0xf4,
0xdc, 0x42, 0xb2, 0x9a, 0x06, 0x6b, 0xae, 0x81, 0xf1, 0x17, 0x88, 0xb6, 0x8d, 0x68, 0x1b, 0xc1,
0x5b, 0x24, 0xcf, 0x74, 0x9d, 0x4b, 0xe9, 0x19, 0xc1, 0xe9, 0xfc, 0xfc, 0x24, 0x59, 0x5f, 0x24,
0x71, 0xe4, 0x77, 0xd8, 0x20, 0xcf, 0x91, 0x67, 0x7d, 0x3a, 0x70, 0xe3, 0x5f, 0x63, 0x80, 0x54,
0xf1, 0xdd, 0x4a, 0xef, 0xc2, 0xa4, 0xed, 0x58, 0x76, 0xe5, 0xb5, 0x3a, 0x30, 0xe8, 0x0f, 0xb6,
0xea, 0xdf, 0xff, 0x4b, 0x3f, 0x21, 0xb0, 0xcf, 0x64, 0xd1, 0xd2, 0x89, 0x96, 0x17, 0xa6, 0x36,
0x26, 0x17, 0x30, 0xcd, 0x04, 0x5f, 0x95, 0x05, 0x9d, 0x5a, 0xd1, 0x0f, 0x37, 0x44, 0x5f, 0xcb,
0x4a, 0xde, 0x5a, 0xce, 0x25, 0xef, 0x64, 0x9f, 0xfa, 0x02, 0xb2, 0x80, 0x69, 0xae, 0xa1, 0xe2,
0xf4, 0x40, 0xcf, 0x99, 0xa5, 0x1e, 0x91, 0x08, 0x66, 0x0d, 0x93, 0xac, 0xaa, 0xb0, 0xa2, 0x33,
0x7d, 0x32, 0x49, 0xd7, 0x98, 0x3c, 0x81, 0xa3, 0x5a, 0xf0, 0xb2, 0x13, 0xf2, 0x2b, 0xcb, 0x73,
0x89, 0x6d, 0x4b, 0x43, 0x2b, 0xf2, 0xd0, 0xa7, 0xdf, 0xb8, 0x2c, 0xb9, 0x0f, 0xa1, 0x9e, 0x2c,
0xfb, 0x4f, 0x22, 0x47, 0x0a, 0xb6, 0xff, 0x75, 0x22, 0xba, 0x80, 0xf9, 0x86, 0x22, 0x63, 0xc2,
0x15, 0xf6, 0xde, 0x30, 0x13, 0x1a, 0xb3, 0x7e, 0xb0, 0x4a, 0xe1, 0x60, 0x96, 0x05, 0xaf, 0xc6,
0x2f, 0x47, 0xf1, 0x0b, 0x98, 0xdb, 0x7b, 0xf9, 0x57, 0xd3, 0x44, 0x94, 0x52, 0x48, 0x5f, 0xec,
0x80, 0x71, 0x6a, 0xc9, 0xca, 0xca, 0x56, 0xcf, 0x52, 0x1b, 0x9f, 0xff, 0x1e, 0xc1, 0xd1, 0x47,
0xbf, 0xa9, 0xba, 0x43, 0x57, 0xd6, 0x48, 0x32, 0x20, 0x37, 0x37, 0x82, 0x3c, 0xda, 0xf0, 0xf0,
0xbf, 0x3b, 0x19, 0x3d, 0xde, 0xc1, 0x72, 0x02, 0xe3, 0x3d, 0xf2, 0x1c, 0x02, 0x63, 0xeb, 0xf1,
0xd6, 0x97, 0x89, 0x16, 0xff, 0xa6, 0xd7, 0x75, 0xaf, 0xe1, 0xb6, 0xee, 0xeb, 0xfa, 0x7d, 0xe0,
0x2b, 0x41, 0x16, 0x89, 0xfb, 0x40, 0xc9, 0xf0, 0x81, 0x92, 0x4b, 0xf3, 0x81, 0xa2, 0xe3, 0x1b,
0x8b, 0x6a, 0xe8, 0xf1, 0xde, 0x72, 0x6a, 0x89, 0x4f, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x4e,
0xdb, 0x96, 0xaa, 0xa2, 0x03, 0x00, 0x00,
}

View file

@ -128,7 +128,7 @@ func init() {
func init() { proto.RegisterFile("plugin.proto", fileDescriptor_plugin_672c97695d141058) }
var fileDescriptor_plugin_672c97695d141058 = []byte{
// 145 bytes of a gzipped FileDescriptorProto
// 144 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0xc8, 0x29, 0x4d,
0xcf, 0xcc, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2c, 0x28, 0xcd, 0x29, 0xcd, 0xcd,
0x2c, 0x2a, 0x48, 0x56, 0x52, 0xe3, 0xe2, 0x0a, 0x00, 0x4b, 0x79, 0xe6, 0xa5, 0xe5, 0x0b, 0x49,
@ -136,7 +136,6 @@ var fileDescriptor_plugin_672c97695d141058 = []byte{
0xc1, 0xb8, 0x4a, 0x39, 0x5c, 0x02, 0x10, 0x75, 0x2e, 0xa9, 0x05, 0xa9, 0x79, 0x29, 0xa9, 0x79,
0xc9, 0x95, 0x42, 0x42, 0x5c, 0x2c, 0x79, 0x89, 0xb9, 0xa9, 0x50, 0xa5, 0x60, 0x36, 0x48, 0x2c,
0x3b, 0x33, 0x2f, 0x45, 0x82, 0x09, 0x22, 0x06, 0x62, 0x23, 0x9b, 0xca, 0x8c, 0x62, 0xaa, 0x90,
0x18, 0x17, 0x5b, 0x71, 0x6a, 0x51, 0x59, 0x6a, 0x91, 0x04, 0x0b, 0x58, 0x02, 0xca, 0x4b, 0x62,
0x03, 0xbb, 0xd3, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x6a, 0x82, 0x41, 0xb7, 0x00, 0x00,
0x00,
0x18, 0x17, 0x5b, 0x71, 0x6a, 0x11, 0x90, 0x27, 0xc1, 0x02, 0x96, 0x80, 0xf2, 0x92, 0xd8, 0xc0,
0xee, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x6a, 0x82, 0x41, 0xb7, 0x00, 0x00, 0x00,
}

View file

@ -57,7 +57,7 @@ func (x PropertyDiff_Kind) String() string {
return proto.EnumName(PropertyDiff_Kind_name, int32(x))
}
func (PropertyDiff_Kind) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{9, 0}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{9, 0}
}
type DiffResponse_DiffChanges int32
@ -83,7 +83,7 @@ func (x DiffResponse_DiffChanges) String() string {
return proto.EnumName(DiffResponse_DiffChanges_name, int32(x))
}
func (DiffResponse_DiffChanges) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{10, 0}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{10, 0}
}
type ConfigureRequest struct {
@ -99,7 +99,7 @@ func (m *ConfigureRequest) Reset() { *m = ConfigureRequest{} }
func (m *ConfigureRequest) String() string { return proto.CompactTextString(m) }
func (*ConfigureRequest) ProtoMessage() {}
func (*ConfigureRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{0}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{0}
}
func (m *ConfigureRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfigureRequest.Unmarshal(m, b)
@ -151,7 +151,7 @@ func (m *ConfigureResponse) Reset() { *m = ConfigureResponse{} }
func (m *ConfigureResponse) String() string { return proto.CompactTextString(m) }
func (*ConfigureResponse) ProtoMessage() {}
func (*ConfigureResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{1}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{1}
}
func (m *ConfigureResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfigureResponse.Unmarshal(m, b)
@ -190,7 +190,7 @@ func (m *ConfigureErrorMissingKeys) Reset() { *m = ConfigureErrorMissing
func (m *ConfigureErrorMissingKeys) String() string { return proto.CompactTextString(m) }
func (*ConfigureErrorMissingKeys) ProtoMessage() {}
func (*ConfigureErrorMissingKeys) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{2}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{2}
}
func (m *ConfigureErrorMissingKeys) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfigureErrorMissingKeys.Unmarshal(m, b)
@ -229,7 +229,7 @@ func (m *ConfigureErrorMissingKeys_MissingKey) Reset() { *m = ConfigureE
func (m *ConfigureErrorMissingKeys_MissingKey) String() string { return proto.CompactTextString(m) }
func (*ConfigureErrorMissingKeys_MissingKey) ProtoMessage() {}
func (*ConfigureErrorMissingKeys_MissingKey) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{2, 0}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{2, 0}
}
func (m *ConfigureErrorMissingKeys_MissingKey) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfigureErrorMissingKeys_MissingKey.Unmarshal(m, b)
@ -277,7 +277,7 @@ func (m *InvokeRequest) Reset() { *m = InvokeRequest{} }
func (m *InvokeRequest) String() string { return proto.CompactTextString(m) }
func (*InvokeRequest) ProtoMessage() {}
func (*InvokeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{3}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{3}
}
func (m *InvokeRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InvokeRequest.Unmarshal(m, b)
@ -337,7 +337,7 @@ func (m *InvokeResponse) Reset() { *m = InvokeResponse{} }
func (m *InvokeResponse) String() string { return proto.CompactTextString(m) }
func (*InvokeResponse) ProtoMessage() {}
func (*InvokeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{4}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{4}
}
func (m *InvokeResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InvokeResponse.Unmarshal(m, b)
@ -384,7 +384,7 @@ func (m *CheckRequest) Reset() { *m = CheckRequest{} }
func (m *CheckRequest) String() string { return proto.CompactTextString(m) }
func (*CheckRequest) ProtoMessage() {}
func (*CheckRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{5}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{5}
}
func (m *CheckRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CheckRequest.Unmarshal(m, b)
@ -437,7 +437,7 @@ func (m *CheckResponse) Reset() { *m = CheckResponse{} }
func (m *CheckResponse) String() string { return proto.CompactTextString(m) }
func (*CheckResponse) ProtoMessage() {}
func (*CheckResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{6}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{6}
}
func (m *CheckResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CheckResponse.Unmarshal(m, b)
@ -483,7 +483,7 @@ func (m *CheckFailure) Reset() { *m = CheckFailure{} }
func (m *CheckFailure) String() string { return proto.CompactTextString(m) }
func (*CheckFailure) ProtoMessage() {}
func (*CheckFailure) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{7}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{7}
}
func (m *CheckFailure) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CheckFailure.Unmarshal(m, b)
@ -522,6 +522,7 @@ type DiffRequest struct {
Urn string `protobuf:"bytes,2,opt,name=urn" json:"urn,omitempty"`
Olds *_struct.Struct `protobuf:"bytes,3,opt,name=olds" json:"olds,omitempty"`
News *_struct.Struct `protobuf:"bytes,4,opt,name=news" json:"news,omitempty"`
IgnoreChanges []string `protobuf:"bytes,5,rep,name=ignoreChanges" json:"ignoreChanges,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -531,7 +532,7 @@ func (m *DiffRequest) Reset() { *m = DiffRequest{} }
func (m *DiffRequest) String() string { return proto.CompactTextString(m) }
func (*DiffRequest) ProtoMessage() {}
func (*DiffRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{8}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{8}
}
func (m *DiffRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DiffRequest.Unmarshal(m, b)
@ -579,6 +580,13 @@ func (m *DiffRequest) GetNews() *_struct.Struct {
return nil
}
func (m *DiffRequest) GetIgnoreChanges() []string {
if m != nil {
return m.IgnoreChanges
}
return nil
}
type PropertyDiff struct {
Kind PropertyDiff_Kind `protobuf:"varint,1,opt,name=kind,enum=pulumirpc.PropertyDiff_Kind" json:"kind,omitempty"`
InputDiff bool `protobuf:"varint,2,opt,name=inputDiff" json:"inputDiff,omitempty"`
@ -591,7 +599,7 @@ func (m *PropertyDiff) Reset() { *m = PropertyDiff{} }
func (m *PropertyDiff) String() string { return proto.CompactTextString(m) }
func (*PropertyDiff) ProtoMessage() {}
func (*PropertyDiff) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{9}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{9}
}
func (m *PropertyDiff) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PropertyDiff.Unmarshal(m, b)
@ -672,7 +680,7 @@ func (m *DiffResponse) Reset() { *m = DiffResponse{} }
func (m *DiffResponse) String() string { return proto.CompactTextString(m) }
func (*DiffResponse) ProtoMessage() {}
func (*DiffResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{10}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{10}
}
func (m *DiffResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DiffResponse.Unmarshal(m, b)
@ -754,7 +762,7 @@ func (m *CreateRequest) Reset() { *m = CreateRequest{} }
func (m *CreateRequest) String() string { return proto.CompactTextString(m) }
func (*CreateRequest) ProtoMessage() {}
func (*CreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{11}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{11}
}
func (m *CreateRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateRequest.Unmarshal(m, b)
@ -807,7 +815,7 @@ func (m *CreateResponse) Reset() { *m = CreateResponse{} }
func (m *CreateResponse) String() string { return proto.CompactTextString(m) }
func (*CreateResponse) ProtoMessage() {}
func (*CreateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{12}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{12}
}
func (m *CreateResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateResponse.Unmarshal(m, b)
@ -855,7 +863,7 @@ func (m *ReadRequest) Reset() { *m = ReadRequest{} }
func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
func (*ReadRequest) ProtoMessage() {}
func (*ReadRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{13}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{13}
}
func (m *ReadRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadRequest.Unmarshal(m, b)
@ -916,7 +924,7 @@ func (m *ReadResponse) Reset() { *m = ReadResponse{} }
func (m *ReadResponse) String() string { return proto.CompactTextString(m) }
func (*ReadResponse) ProtoMessage() {}
func (*ReadResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{14}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{14}
}
func (m *ReadResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResponse.Unmarshal(m, b)
@ -963,6 +971,7 @@ type UpdateRequest struct {
Olds *_struct.Struct `protobuf:"bytes,3,opt,name=olds" json:"olds,omitempty"`
News *_struct.Struct `protobuf:"bytes,4,opt,name=news" json:"news,omitempty"`
Timeout float64 `protobuf:"fixed64,5,opt,name=timeout" json:"timeout,omitempty"`
IgnoreChanges []string `protobuf:"bytes,6,rep,name=ignoreChanges" json:"ignoreChanges,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -972,7 +981,7 @@ func (m *UpdateRequest) Reset() { *m = UpdateRequest{} }
func (m *UpdateRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateRequest) ProtoMessage() {}
func (*UpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{15}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{15}
}
func (m *UpdateRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateRequest.Unmarshal(m, b)
@ -1027,6 +1036,13 @@ func (m *UpdateRequest) GetTimeout() float64 {
return 0
}
func (m *UpdateRequest) GetIgnoreChanges() []string {
if m != nil {
return m.IgnoreChanges
}
return nil
}
type UpdateResponse struct {
Properties *_struct.Struct `protobuf:"bytes,1,opt,name=properties" json:"properties,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -1038,7 +1054,7 @@ func (m *UpdateResponse) Reset() { *m = UpdateResponse{} }
func (m *UpdateResponse) String() string { return proto.CompactTextString(m) }
func (*UpdateResponse) ProtoMessage() {}
func (*UpdateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{16}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{16}
}
func (m *UpdateResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateResponse.Unmarshal(m, b)
@ -1079,7 +1095,7 @@ func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
func (m *DeleteRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteRequest) ProtoMessage() {}
func (*DeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{17}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{17}
}
func (m *DeleteRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteRequest.Unmarshal(m, b)
@ -1143,7 +1159,7 @@ func (m *ErrorResourceInitFailed) Reset() { *m = ErrorResourceInitFailed
func (m *ErrorResourceInitFailed) String() string { return proto.CompactTextString(m) }
func (*ErrorResourceInitFailed) ProtoMessage() {}
func (*ErrorResourceInitFailed) Descriptor() ([]byte, []int) {
return fileDescriptor_provider_a22c3696aa3684b0, []int{18}
return fileDescriptor_provider_31a5eda36dbe30f0, []int{18}
}
func (m *ErrorResourceInitFailed) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ErrorResourceInitFailed.Unmarshal(m, b)
@ -1689,82 +1705,83 @@ var _ResourceProvider_serviceDesc = grpc.ServiceDesc{
Metadata: "provider.proto",
}
func init() { proto.RegisterFile("provider.proto", fileDescriptor_provider_a22c3696aa3684b0) }
func init() { proto.RegisterFile("provider.proto", fileDescriptor_provider_31a5eda36dbe30f0) }
var fileDescriptor_provider_a22c3696aa3684b0 = []byte{
// 1184 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xc4, 0x57, 0xcb, 0x72, 0xe3, 0x44,
0x17, 0xb6, 0x6c, 0xc7, 0x89, 0x8f, 0x2f, 0xa3, 0xe9, 0xff, 0x27, 0xf1, 0x68, 0xb2, 0x48, 0x09,
0x16, 0x01, 0x0a, 0x67, 0x2a, 0xb3, 0x80, 0x99, 0x9a, 0xa9, 0x21, 0x89, 0x1d, 0x48, 0x65, 0x72,
0x41, 0x99, 0x70, 0x59, 0x0d, 0x8a, 0xd4, 0x76, 0x54, 0x56, 0x24, 0xd1, 0x6a, 0x99, 0x0a, 0x6b,
0x16, 0xb0, 0x67, 0xc3, 0x03, 0xb0, 0x64, 0xc3, 0x13, 0xf0, 0x22, 0x3c, 0x02, 0xef, 0x40, 0xf5,
0x45, 0x72, 0x77, 0xec, 0x64, 0x9c, 0xd4, 0x14, 0xec, 0x74, 0xfa, 0x9c, 0xee, 0xf3, 0x9d, 0xaf,
0x4f, 0x7f, 0xdd, 0x82, 0x76, 0x42, 0xe2, 0x71, 0xe0, 0x63, 0xd2, 0x4d, 0x48, 0x4c, 0x63, 0x54,
0x4f, 0xb2, 0x30, 0xbb, 0x08, 0x48, 0xe2, 0x59, 0xcd, 0x24, 0xcc, 0x86, 0x41, 0x24, 0x1c, 0xd6,
0xc3, 0x61, 0x1c, 0x0f, 0x43, 0xbc, 0xc1, 0xad, 0xb3, 0x6c, 0xb0, 0x81, 0x2f, 0x12, 0x7a, 0x29,
0x9d, 0xab, 0x57, 0x9d, 0x29, 0x25, 0x99, 0x47, 0x85, 0xd7, 0xfe, 0xdb, 0x00, 0x73, 0x27, 0x8e,
0x06, 0xc1, 0x30, 0x23, 0xd8, 0xc1, 0xdf, 0x65, 0x38, 0xa5, 0xe8, 0x73, 0xa8, 0x8f, 0x5d, 0x12,
0xb8, 0x67, 0x21, 0x4e, 0x3b, 0xc6, 0x5a, 0x65, 0xbd, 0xb1, 0xf9, 0x41, 0xb7, 0x48, 0xde, 0xbd,
0x1a, 0xdf, 0xfd, 0x32, 0x0f, 0xee, 0x47, 0x94, 0x5c, 0x3a, 0x93, 0xc9, 0xe8, 0x43, 0xa8, 0xba,
0x64, 0x98, 0x76, 0xca, 0x6b, 0xc6, 0x7a, 0x63, 0x73, 0xa5, 0x2b, 0xb0, 0x74, 0x73, 0x2c, 0xdd,
0x13, 0x8e, 0xc5, 0xe1, 0x41, 0xe8, 0x3d, 0x68, 0xb9, 0x9e, 0x87, 0x13, 0x7a, 0x82, 0x3d, 0x82,
0x69, 0xda, 0xa9, 0xac, 0x19, 0xeb, 0x4b, 0x8e, 0x3e, 0x68, 0x3d, 0x83, 0xb6, 0x9e, 0x0f, 0x99,
0x50, 0x19, 0xe1, 0xcb, 0x8e, 0xb1, 0x66, 0xac, 0xd7, 0x1d, 0xf6, 0x89, 0xfe, 0x0f, 0x0b, 0x63,
0x37, 0xcc, 0x30, 0xcf, 0x5b, 0x77, 0x84, 0xf1, 0xb4, 0xfc, 0x89, 0x61, 0x3f, 0x81, 0xfb, 0x0a,
0xfc, 0x34, 0x89, 0xa3, 0x14, 0x4f, 0x27, 0x36, 0x66, 0x24, 0xb6, 0xff, 0x30, 0xe0, 0x41, 0x31,
0xb7, 0x4f, 0x48, 0x4c, 0x0e, 0x82, 0x34, 0x0d, 0xa2, 0xe1, 0x3e, 0xbe, 0x4c, 0xd1, 0x17, 0xd0,
0xb8, 0x98, 0x98, 0x92, 0xb5, 0x8d, 0x59, 0xac, 0x5d, 0x9d, 0xda, 0x9d, 0x7c, 0x3b, 0xea, 0x1a,
0xd6, 0x36, 0xc0, 0xc4, 0x85, 0x10, 0x54, 0x23, 0xf7, 0x02, 0xcb, 0x32, 0xf9, 0x37, 0x5a, 0x83,
0x86, 0x8f, 0x53, 0x8f, 0x04, 0x09, 0x0d, 0xe2, 0x48, 0x56, 0xab, 0x0e, 0xd9, 0x3f, 0x1a, 0xd0,
0xda, 0x8b, 0xc6, 0xf1, 0xa8, 0xd8, 0x5c, 0x13, 0x2a, 0x34, 0x1e, 0xe5, 0x6c, 0xd1, 0x78, 0x74,
0xbb, 0x4d, 0xb2, 0x60, 0x29, 0x6f, 0x4b, 0xbe, 0x3f, 0x75, 0xa7, 0xb0, 0x51, 0x07, 0x16, 0xc7,
0x98, 0xa4, 0x0c, 0x4a, 0x95, 0xbb, 0x72, 0xd3, 0x1e, 0x43, 0x3b, 0x47, 0x21, 0x39, 0xdf, 0x80,
0x1a, 0xc1, 0x34, 0x23, 0x11, 0x47, 0x72, 0x43, 0x5a, 0x19, 0x86, 0x1e, 0xc3, 0xd2, 0xc0, 0x0d,
0xc2, 0x8c, 0x60, 0x86, 0xb4, 0xc2, 0xa7, 0x28, 0xec, 0x9e, 0x63, 0x6f, 0xb4, 0x2b, 0xfc, 0x4e,
0x11, 0x68, 0xff, 0x00, 0x4d, 0xee, 0x51, 0x8a, 0xcf, 0x53, 0xd6, 0x1d, 0xf6, 0xc9, 0x8a, 0x8f,
0x43, 0xff, 0xcd, 0xc5, 0xb3, 0x20, 0x16, 0x1c, 0xe1, 0xef, 0x45, 0x63, 0xde, 0x14, 0xcc, 0x82,
0xec, 0x0c, 0x5a, 0x32, 0xf7, 0xa4, 0xe4, 0x20, 0x4a, 0x32, 0xd9, 0x5f, 0x37, 0x95, 0x2c, 0xc2,
0xee, 0x56, 0xf2, 0xb6, 0x2c, 0x59, 0x7a, 0xe4, 0x86, 0x25, 0x98, 0xd0, 0xfc, 0x88, 0x14, 0x36,
0x5a, 0x66, 0x9b, 0xe0, 0xa6, 0x45, 0xeb, 0x48, 0xcb, 0xfe, 0xd9, 0x80, 0x46, 0x2f, 0x18, 0x0c,
0x72, 0xda, 0xda, 0x50, 0x0e, 0x7c, 0x39, 0xbb, 0x1c, 0xf8, 0x39, 0x8d, 0xe5, 0x69, 0x1a, 0x2b,
0xb7, 0xa1, 0xb1, 0x3a, 0x0f, 0x8d, 0x7f, 0x1a, 0xd0, 0x3c, 0x96, 0x80, 0x19, 0x26, 0xf4, 0x08,
0xaa, 0xa3, 0x20, 0x12, 0x70, 0xda, 0x9b, 0xab, 0x0a, 0x23, 0x6a, 0x58, 0x77, 0x3f, 0x88, 0x7c,
0x87, 0x47, 0xa2, 0x55, 0xa8, 0x73, 0x46, 0xd9, 0x38, 0x07, 0xbd, 0xe4, 0x4c, 0x06, 0xec, 0x6f,
0xa1, 0xca, 0x62, 0xd1, 0x22, 0x54, 0xb6, 0x7a, 0x3d, 0xb3, 0x84, 0xee, 0x41, 0x63, 0xab, 0xd7,
0x7b, 0xed, 0xf4, 0x8f, 0x5f, 0x6e, 0xed, 0xf4, 0x4d, 0x03, 0x01, 0xd4, 0x7a, 0xfd, 0x97, 0xfd,
0x57, 0x7d, 0xb3, 0x8c, 0x10, 0xb4, 0xc5, 0x77, 0xe1, 0xaf, 0x30, 0xff, 0xe9, 0x71, 0x6f, 0xeb,
0x55, 0xdf, 0xac, 0x32, 0xbf, 0xf8, 0x2e, 0xfc, 0x0b, 0xf6, 0x5f, 0x15, 0x68, 0x0a, 0x3a, 0x65,
0x27, 0x58, 0xb0, 0x44, 0x70, 0x12, 0xba, 0x9e, 0xd4, 0xd7, 0xba, 0x53, 0xd8, 0xec, 0x10, 0xa5,
0x54, 0x48, 0x6f, 0x99, 0xbb, 0x72, 0x13, 0x3d, 0x82, 0xff, 0xf9, 0x38, 0xc4, 0x14, 0x6f, 0xe3,
0x41, 0xcc, 0xe4, 0x8b, 0xcf, 0x90, 0x2a, 0x39, 0xcb, 0x85, 0x9e, 0xc3, 0xa2, 0x77, 0xee, 0x46,
0x43, 0x2c, 0xb8, 0x6e, 0x6f, 0xbe, 0xab, 0xb0, 0xa5, 0x22, 0xe2, 0xc6, 0x8e, 0x08, 0x75, 0xf2,
0x39, 0x4c, 0x46, 0xfd, 0x60, 0x30, 0x48, 0x3b, 0x0b, 0x1c, 0x88, 0x30, 0xd0, 0x01, 0x34, 0x7d,
0x4c, 0xdd, 0x20, 0xc4, 0x3e, 0x27, 0xb4, 0xc6, 0x3b, 0xf3, 0xfd, 0x6b, 0x57, 0x56, 0x62, 0xc5,
0xfd, 0xa0, 0x4d, 0x47, 0xeb, 0x70, 0xef, 0xdc, 0x4d, 0xd5, 0xa8, 0xce, 0x22, 0xaf, 0xe8, 0xea,
0xb0, 0xf5, 0x35, 0xdc, 0x9f, 0x5a, 0x6c, 0x86, 0xf8, 0x7f, 0xa4, 0x8a, 0xbf, 0x7e, 0x64, 0xd4,
0x06, 0x51, 0x6f, 0x85, 0xe7, 0xa2, 0xdd, 0x25, 0x01, 0xc8, 0x84, 0x66, 0x6f, 0x6f, 0x77, 0xf7,
0xf5, 0xe9, 0xe1, 0xfe, 0xe1, 0xd1, 0x57, 0x87, 0x66, 0x09, 0xb5, 0xa0, 0xce, 0x47, 0x0e, 0x8f,
0x0e, 0x59, 0x43, 0xe4, 0xe6, 0xc9, 0xd1, 0x41, 0xdf, 0x2c, 0xdb, 0x14, 0x5a, 0x3b, 0x04, 0xbb,
0x14, 0x5f, 0x2f, 0x33, 0x1f, 0x03, 0xc8, 0x53, 0x17, 0xe0, 0x37, 0x8a, 0x8d, 0x12, 0xca, 0xda,
0x81, 0x06, 0x17, 0x38, 0xce, 0x28, 0xdf, 0x68, 0xc3, 0xc9, 0x4d, 0xfb, 0x1b, 0x68, 0xe7, 0x59,
0x65, 0x5b, 0x5d, 0x3d, 0xa6, 0x77, 0x4d, 0x6a, 0xff, 0x6a, 0x40, 0xc3, 0xc1, 0xae, 0x3f, 0xff,
0xf9, 0xd7, 0x53, 0x55, 0xe6, 0xaf, 0x6f, 0x22, 0x8a, 0xd5, 0xb9, 0x44, 0xd1, 0xfe, 0xc9, 0x80,
0xa6, 0xc0, 0xf6, 0x96, 0xab, 0x56, 0xa0, 0x54, 0xe6, 0x83, 0xf2, 0x9b, 0x01, 0xad, 0xd3, 0xc4,
0x57, 0x36, 0xfe, 0x3f, 0x14, 0x4a, 0xb5, 0x53, 0x16, 0xf4, 0x4e, 0xd9, 0x83, 0x76, 0x0e, 0x53,
0x72, 0xa6, 0x73, 0x64, 0xcc, 0xdf, 0x19, 0xec, 0x3d, 0xd1, 0xe3, 0x4a, 0xf3, 0x2f, 0xf4, 0x86,
0x52, 0x51, 0x55, 0xaf, 0xe8, 0x77, 0x03, 0x56, 0xf8, 0x3b, 0xca, 0xc1, 0x69, 0x9c, 0x11, 0x0f,
0xef, 0x45, 0x01, 0xdd, 0xe5, 0xd2, 0xf0, 0xf6, 0xfa, 0xa1, 0x03, 0x8b, 0xe2, 0x3e, 0x64, 0xa0,
0xb9, 0x12, 0x4b, 0xf3, 0xd6, 0x4d, 0xbb, 0xf9, 0x4b, 0x0d, 0xcc, 0x1c, 0xea, 0x71, 0xfe, 0x5c,
0xda, 0x86, 0x06, 0xbf, 0xa9, 0xc5, 0xcb, 0x10, 0x4d, 0xdd, 0xed, 0x92, 0x61, 0xab, 0x33, 0xed,
0x10, 0xdb, 0x68, 0x97, 0xd0, 0x0b, 0x00, 0xae, 0x5c, 0x62, 0x89, 0xe5, 0x29, 0x11, 0x16, 0x2b,
0xac, 0x5c, 0x23, 0xce, 0x76, 0x89, 0xbd, 0xf5, 0x8b, 0x97, 0x29, 0x7a, 0x78, 0xc3, 0x2b, 0xdf,
0x5a, 0x9d, 0xed, 0x54, 0xa0, 0xd4, 0xc4, 0x1b, 0x0f, 0xa9, 0x80, 0xb5, 0xc7, 0xa7, 0xf5, 0x60,
0x86, 0xa7, 0x58, 0xe0, 0x19, 0x2c, 0xf0, 0xf2, 0xee, 0xc6, 0xc4, 0x13, 0xa8, 0xf2, 0xfb, 0xe4,
0x0e, 0x1c, 0xbc, 0x80, 0x9a, 0x50, 0x52, 0x0d, 0xb9, 0x26, 0xe9, 0x1a, 0x72, 0x5d, 0x76, 0x45,
0x6e, 0x26, 0x49, 0x5a, 0x6e, 0x45, 0x3f, 0xb5, 0xdc, 0xaa, 0x76, 0x89, 0xdc, 0xe2, 0x6c, 0x6a,
0xb9, 0x35, 0x55, 0xd1, 0x72, 0xeb, 0x07, 0x99, 0xb3, 0x56, 0x13, 0x07, 0x52, 0x5b, 0x40, 0x3b,
0xa3, 0xd6, 0xf2, 0x54, 0x7f, 0xf6, 0xd9, 0x1f, 0xa2, 0x5d, 0x42, 0x4f, 0xa1, 0xb6, 0xe3, 0x46,
0x1e, 0x0e, 0xd1, 0x35, 0x31, 0x37, 0xcc, 0xfd, 0x14, 0x5a, 0x9f, 0x61, 0x7a, 0xcc, 0xff, 0x44,
0xf7, 0xa2, 0x41, 0x7c, 0xed, 0x12, 0xef, 0xa8, 0x57, 0x70, 0x11, 0x6e, 0x97, 0xce, 0x6a, 0x3c,
0xf0, 0xf1, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0x2f, 0x3d, 0x77, 0xea, 0x0e, 0x00, 0x00,
var fileDescriptor_provider_31a5eda36dbe30f0 = []byte{
// 1196 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xc4, 0x57, 0xcd, 0x72, 0xe3, 0x44,
0x10, 0x5e, 0xd9, 0x8a, 0x13, 0xb7, 0x1d, 0xaf, 0x77, 0x80, 0xc4, 0xab, 0xcd, 0x21, 0x25, 0x38,
0x04, 0x28, 0x1c, 0x2a, 0x7b, 0x80, 0xdd, 0xda, 0x2d, 0x48, 0x62, 0x07, 0x52, 0xd9, 0xfc, 0xa0,
0x10, 0x7e, 0x4e, 0x8b, 0x22, 0x8d, 0x1d, 0x55, 0x14, 0x49, 0x48, 0x23, 0x53, 0xe1, 0xcc, 0x81,
0x07, 0xe0, 0xc2, 0x43, 0x50, 0x54, 0xf1, 0x04, 0xdc, 0x79, 0x06, 0x1e, 0x81, 0x77, 0x60, 0xfe,
0x24, 0xcf, 0xc4, 0x4e, 0xd6, 0x49, 0x6d, 0xc1, 0x6d, 0x5a, 0xdd, 0xd3, 0x3f, 0xdf, 0x74, 0x7f,
0x33, 0x82, 0x56, 0x92, 0xc6, 0xa3, 0xc0, 0xc7, 0x69, 0x97, 0x2e, 0x48, 0x8c, 0xea, 0x49, 0x1e,
0xe6, 0x17, 0x41, 0x9a, 0x78, 0x56, 0x33, 0x09, 0xf3, 0x61, 0x10, 0x09, 0x85, 0xf5, 0x68, 0x18,
0xc7, 0xc3, 0x10, 0xaf, 0x73, 0xe9, 0x34, 0x1f, 0xac, 0xe3, 0x8b, 0x84, 0x5c, 0x4a, 0xe5, 0xca,
0x55, 0x65, 0x46, 0xd2, 0xdc, 0x23, 0x42, 0x6b, 0xff, 0x63, 0x40, 0x7b, 0x3b, 0x8e, 0x06, 0xc1,
0x30, 0x4f, 0xb1, 0x83, 0xbf, 0xcf, 0x71, 0x46, 0xd0, 0xe7, 0x50, 0x1f, 0xb9, 0x69, 0xe0, 0x9e,
0x86, 0x38, 0xeb, 0x18, 0xab, 0xd5, 0xb5, 0xc6, 0xc6, 0x7b, 0xdd, 0x32, 0x78, 0xf7, 0xaa, 0x7d,
0xf7, 0xab, 0xc2, 0xb8, 0x1f, 0x91, 0xf4, 0xd2, 0x19, 0x6f, 0x46, 0xef, 0x83, 0xe9, 0xa6, 0xc3,
0xac, 0x53, 0x59, 0x35, 0xa8, 0x93, 0xe5, 0xae, 0xc8, 0xa5, 0x5b, 0xe4, 0xd2, 0x3d, 0xe6, 0xb9,
0x38, 0xdc, 0x08, 0xbd, 0x03, 0x8b, 0xae, 0xe7, 0xe1, 0x84, 0x1c, 0x63, 0x2f, 0xc5, 0x24, 0xeb,
0x54, 0xe9, 0xae, 0x05, 0x47, 0xff, 0x68, 0x3d, 0x83, 0x96, 0x1e, 0x0f, 0xb5, 0xa1, 0x7a, 0x8e,
0x2f, 0x69, 0xa2, 0xc6, 0x5a, 0xdd, 0x61, 0x4b, 0xf4, 0x26, 0xcc, 0x8d, 0xdc, 0x30, 0xc7, 0x3c,
0x6e, 0xdd, 0x11, 0xc2, 0xd3, 0xca, 0xc7, 0x86, 0xfd, 0x04, 0x1e, 0x28, 0xe9, 0x67, 0x49, 0x1c,
0x65, 0x78, 0x32, 0xb0, 0x31, 0x25, 0xb0, 0xfd, 0x87, 0x01, 0x0f, 0xcb, 0xbd, 0xfd, 0x34, 0x8d,
0xd3, 0xfd, 0x20, 0xcb, 0x82, 0x68, 0xb8, 0x87, 0x2f, 0x33, 0xf4, 0x05, 0x34, 0x2e, 0xc6, 0xa2,
0x44, 0x6d, 0x7d, 0x1a, 0x6a, 0x57, 0xb7, 0x76, 0xc7, 0x6b, 0x47, 0xf5, 0x61, 0x6d, 0x01, 0x8c,
0x55, 0x08, 0x81, 0x19, 0xb9, 0x17, 0x58, 0x96, 0xc9, 0xd7, 0x68, 0x15, 0x1a, 0x3e, 0xce, 0xbc,
0x34, 0x48, 0x48, 0x10, 0x47, 0xb2, 0x5a, 0xf5, 0x93, 0xfd, 0x93, 0x01, 0x8b, 0xbb, 0xd1, 0x28,
0x3e, 0x2f, 0x0f, 0x97, 0xa2, 0x45, 0xe2, 0xf3, 0x02, 0x2d, 0xba, 0xbc, 0xdd, 0x21, 0x59, 0xb0,
0x50, 0xb4, 0x25, 0x3f, 0x9f, 0xba, 0x53, 0xca, 0xa8, 0x03, 0xf3, 0x23, 0x9c, 0x66, 0x2c, 0x15,
0x93, 0xab, 0x0a, 0xd1, 0x1e, 0x41, 0xab, 0xc8, 0x42, 0x62, 0xbe, 0x0e, 0x35, 0x8a, 0x6a, 0x9e,
0x46, 0x3c, 0x93, 0x1b, 0xc2, 0x4a, 0x33, 0xf4, 0x18, 0x16, 0x06, 0x6e, 0x10, 0x52, 0x00, 0x59,
0xa6, 0x55, 0xbe, 0x45, 0x41, 0xf7, 0x0c, 0x7b, 0xe7, 0x3b, 0x42, 0xef, 0x94, 0x86, 0xf6, 0x8f,
0xd0, 0xe4, 0x1a, 0xa5, 0xf8, 0x22, 0x24, 0x2d, 0x9e, 0xb9, 0xa5, 0xc5, 0xc7, 0xa1, 0xff, 0xea,
0xe2, 0x99, 0x11, 0x33, 0x8e, 0xf0, 0x0f, 0xa2, 0x31, 0x6f, 0x32, 0x66, 0x46, 0x76, 0x0e, 0x8b,
0x32, 0xf6, 0xb8, 0xe4, 0x20, 0x4a, 0x72, 0xd9, 0x5f, 0x37, 0x95, 0x2c, 0xcc, 0xee, 0x56, 0xf2,
0x96, 0x2c, 0x59, 0x6a, 0xe4, 0x81, 0x25, 0x38, 0x25, 0xc5, 0x88, 0x94, 0x32, 0x5a, 0x62, 0x87,
0xe0, 0x66, 0x65, 0xeb, 0x48, 0xc9, 0xfe, 0xdd, 0x80, 0x46, 0x2f, 0x18, 0x0c, 0x0a, 0xd8, 0x5a,
0x50, 0x09, 0x7c, 0xb9, 0x9b, 0xae, 0x0a, 0x18, 0x2b, 0x93, 0x30, 0x56, 0x6f, 0x03, 0xa3, 0x39,
0x03, 0x8c, 0x6c, 0x38, 0x83, 0x61, 0x14, 0xa7, 0x78, 0xfb, 0xcc, 0x8d, 0x86, 0x14, 0x89, 0x39,
0x8a, 0x44, 0xdd, 0xd1, 0x3f, 0xda, 0x7f, 0x1a, 0xd0, 0x3c, 0x92, 0x65, 0xb1, 0xcc, 0xd1, 0x87,
0x60, 0x9e, 0x07, 0x91, 0x48, 0xba, 0xb5, 0xb1, 0xa2, 0xe0, 0xa6, 0x9a, 0x75, 0xf7, 0xa8, 0x8d,
0xc3, 0x2d, 0xd1, 0x0a, 0xd4, 0x39, 0xee, 0xec, 0x3b, 0x2f, 0x6d, 0xc1, 0x19, 0x7f, 0xb0, 0xbf,
0x03, 0x93, 0xd9, 0xa2, 0x79, 0xa8, 0x6e, 0xf6, 0x7a, 0xed, 0x7b, 0xe8, 0x3e, 0x34, 0xe8, 0xe2,
0xa5, 0xd3, 0x3f, 0x7a, 0xb1, 0xb9, 0xdd, 0x6f, 0x1b, 0x08, 0xa0, 0xd6, 0xeb, 0xbf, 0xe8, 0x7f,
0xd9, 0x6f, 0x57, 0xe8, 0xb0, 0xb6, 0xc4, 0xba, 0xd4, 0x57, 0x99, 0xfe, 0xe4, 0xa8, 0xb7, 0x49,
0xf5, 0x26, 0xd3, 0x8b, 0x75, 0xa9, 0x9f, 0xb3, 0xff, 0xae, 0x42, 0x53, 0x80, 0x2e, 0xfb, 0x85,
0x9e, 0x5c, 0x8a, 0x93, 0xd0, 0xf5, 0x24, 0x0b, 0xd3, 0x93, 0x2b, 0x64, 0x36, 0x6a, 0x19, 0x11,
0x04, 0x5d, 0xe1, 0xaa, 0x42, 0xa4, 0x85, 0xbf, 0xe1, 0xe3, 0x10, 0x13, 0xbc, 0x85, 0x07, 0x31,
0x23, 0x39, 0xbe, 0x43, 0x72, 0xe9, 0x34, 0x15, 0x7a, 0x0e, 0xf3, 0x9e, 0xc4, 0xd6, 0xe4, 0x68,
0xbd, 0xad, 0xa0, 0xa5, 0x66, 0xc4, 0x05, 0x89, 0xb8, 0x53, 0xec, 0x61, 0x64, 0xeb, 0xd3, 0xef,
0xc5, 0xc1, 0x08, 0x01, 0xed, 0x43, 0xd3, 0xc7, 0x84, 0xf6, 0x20, 0xf6, 0x39, 0xa0, 0x35, 0xde,
0xbf, 0xef, 0x5e, 0xeb, 0x59, 0xb1, 0x15, 0xb7, 0x88, 0xb6, 0x1d, 0xad, 0xc1, 0xfd, 0x33, 0x37,
0x53, 0xad, 0x3a, 0xf3, 0xbc, 0xa2, 0xab, 0x9f, 0xad, 0x6f, 0xe0, 0xc1, 0x84, 0xb3, 0x29, 0x57,
0xc4, 0x07, 0xea, 0x15, 0xa1, 0x0f, 0x96, 0xda, 0x20, 0xea, 0xdd, 0xf1, 0x5c, 0x0c, 0x85, 0x04,
0x80, 0xfa, 0x6c, 0xf6, 0x76, 0x77, 0x76, 0x5e, 0x9e, 0x1c, 0xec, 0x1d, 0x1c, 0x7e, 0x7d, 0x40,
0x5b, 0x62, 0x11, 0xea, 0xfc, 0xcb, 0xc1, 0xe1, 0x01, 0x6b, 0x88, 0x42, 0x3c, 0x3e, 0xdc, 0xa7,
0x3d, 0x61, 0x13, 0xca, 0x07, 0x74, 0xbe, 0x08, 0xbe, 0x9e, 0x8c, 0x3e, 0x02, 0x90, 0xb3, 0x19,
0xe0, 0x57, 0x52, 0x92, 0x62, 0xca, 0xda, 0x81, 0x04, 0x17, 0x38, 0xce, 0x09, 0x3f, 0x68, 0xc3,
0x29, 0x44, 0xfb, 0x5b, 0x68, 0x15, 0x51, 0x65, 0x5b, 0x5d, 0x1d, 0xe6, 0xbb, 0x06, 0xb5, 0x7f,
0xa5, 0x2c, 0xe1, 0x60, 0xd7, 0x9f, 0x9d, 0x25, 0xf4, 0x50, 0xd5, 0xd9, 0xeb, 0x1b, 0x53, 0xa7,
0x39, 0x13, 0x75, 0xda, 0x3f, 0x53, 0x3e, 0x10, 0xb9, 0xbd, 0xe6, 0xaa, 0x95, 0x54, 0xaa, 0xb3,
0xa5, 0xf2, 0x17, 0xbd, 0x82, 0x4f, 0x12, 0x5f, 0x39, 0xf8, 0xff, 0x93, 0x4e, 0x95, 0x4e, 0x99,
0xd3, 0x3a, 0x65, 0x92, 0x68, 0x6b, 0xd3, 0x88, 0x76, 0x97, 0x32, 0x97, 0x2c, 0x46, 0x22, 0xab,
0x23, 0x69, 0xcc, 0xde, 0x3f, 0xec, 0x6d, 0xd2, 0xe3, 0x7c, 0xf4, 0x1f, 0x74, 0x90, 0x52, 0xb7,
0xa9, 0x4f, 0xc8, 0x6f, 0x06, 0x2c, 0xf3, 0x37, 0x19, 0xad, 0x28, 0xce, 0x53, 0x0f, 0xef, 0x46,
0x01, 0xd9, 0xe1, 0x04, 0xf2, 0xfa, 0xba, 0x86, 0x86, 0x17, 0x77, 0x2b, 0x4b, 0x9a, 0xf3, 0xb5,
0x14, 0x6f, 0xdd, 0xda, 0x1b, 0xbf, 0xd4, 0xa0, 0x5d, 0xa4, 0x7a, 0x54, 0x3c, 0xbd, 0xb6, 0xa0,
0xc1, 0x6f, 0x7d, 0xf1, 0xca, 0x44, 0x13, 0xef, 0x04, 0x89, 0xb0, 0xd5, 0x99, 0x54, 0x88, 0x63,
0xb4, 0xef, 0xa1, 0x4f, 0x00, 0x38, 0xbf, 0x09, 0x17, 0x4b, 0x13, 0x54, 0x2d, 0x3c, 0x2c, 0x5f,
0x43, 0xe1, 0xd4, 0x01, 0xfd, 0x6f, 0x28, 0x5f, 0xb9, 0xe8, 0xd1, 0x0d, 0x7f, 0x0c, 0xd6, 0xca,
0x74, 0xa5, 0x92, 0x4a, 0x4d, 0xbc, 0x17, 0x91, 0x9a, 0xb0, 0xf6, 0x90, 0xb5, 0x1e, 0x4e, 0xd1,
0x94, 0x0e, 0x9e, 0xc1, 0x1c, 0x2f, 0xef, 0x6e, 0x48, 0x3c, 0x01, 0x93, 0xdf, 0x3a, 0x77, 0xc0,
0x80, 0x66, 0x2e, 0xf8, 0x56, 0xcb, 0x5c, 0x23, 0x7e, 0x2d, 0x73, 0x9d, 0x9c, 0x45, 0x6c, 0x46,
0x5c, 0x5a, 0x6c, 0x85, 0x65, 0xb5, 0xd8, 0x2a, 0xc3, 0x89, 0xd8, 0x62, 0x36, 0xb5, 0xd8, 0x1a,
0xf7, 0x68, 0xb1, 0xf5, 0x41, 0xe6, 0xa8, 0xd5, 0xc4, 0x40, 0x6a, 0x0e, 0xb4, 0x19, 0xb5, 0x96,
0x26, 0xfa, 0xb3, 0xcf, 0xfe, 0x36, 0xe9, 0xee, 0xa7, 0xb4, 0x74, 0x37, 0xf2, 0x70, 0x88, 0xae,
0xb1, 0xb9, 0x61, 0xef, 0xa7, 0xb0, 0xf8, 0x19, 0x26, 0x47, 0xfc, 0xaf, 0x76, 0x37, 0x1a, 0xc4,
0xd7, 0xba, 0x78, 0x4b, 0xbd, 0xa8, 0x4b, 0x73, 0xfb, 0xde, 0x69, 0x8d, 0x1b, 0x3e, 0xfe, 0x37,
0x00, 0x00, 0xff, 0xff, 0x37, 0xd1, 0x77, 0xc4, 0x36, 0x0f, 0x00, 0x00,
}

View file

@ -875,57 +875,57 @@ var _ResourceMonitor_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("resource.proto", fileDescriptor_resource_9e442c1601c8b0e8) }
var fileDescriptor_resource_9e442c1601c8b0e8 = []byte{
// 828 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x56, 0xdd, 0x6e, 0x1c, 0x35,
0x14, 0xee, 0xce, 0xb6, 0xb3, 0xbb, 0x27, 0xe9, 0x26, 0xb8, 0xd1, 0xc6, 0x1d, 0x50, 0x08, 0x03,
0x17, 0x0b, 0x17, 0x1b, 0x1a, 0x2e, 0x5a, 0x10, 0x12, 0x12, 0xa5, 0x48, 0xbd, 0xa8, 0x80, 0x09,
0x17, 0x80, 0x04, 0x92, 0x33, 0x73, 0xba, 0x1d, 0x32, 0x3b, 0x36, 0xb6, 0x27, 0xd2, 0xde, 0xf1,
0x26, 0xbc, 0x0a, 0xcf, 0xc1, 0x63, 0xf0, 0x04, 0xc8, 0xf6, 0x78, 0xd9, 0xf9, 0xd9, 0x24, 0x70,
0xe7, 0xf3, 0xe3, 0x63, 0xcf, 0xf7, 0x7d, 0xe7, 0x78, 0x60, 0x2a, 0x51, 0xf1, 0x4a, 0xa6, 0xb8,
0x10, 0x92, 0x6b, 0x4e, 0x26, 0xa2, 0x2a, 0xaa, 0x55, 0x2e, 0x45, 0x1a, 0xbd, 0xbd, 0xe4, 0x7c,
0x59, 0xe0, 0x99, 0x0d, 0x5c, 0x56, 0xaf, 0xcf, 0x70, 0x25, 0xf4, 0xda, 0xe5, 0x45, 0xef, 0xb4,
0x83, 0x4a, 0xcb, 0x2a, 0xd5, 0x75, 0x74, 0x2a, 0x24, 0xbf, 0xce, 0x33, 0x94, 0xce, 0x8e, 0xe7,
0x30, 0xbb, 0xa8, 0x84, 0xe0, 0x52, 0xab, 0xaf, 0x91, 0xe9, 0x4a, 0x62, 0x82, 0xbf, 0x55, 0xa8,
0x34, 0x99, 0x42, 0x90, 0x67, 0x74, 0x70, 0x3a, 0x98, 0x4f, 0x92, 0x20, 0xcf, 0xe2, 0x4f, 0xe1,
0xb8, 0x93, 0xa9, 0x04, 0x2f, 0x15, 0x92, 0x13, 0x80, 0x37, 0x4c, 0xd5, 0x51, 0xbb, 0x65, 0x9c,
0x6c, 0x79, 0xe2, 0xbf, 0x03, 0x78, 0x94, 0x20, 0xcb, 0x92, 0xfa, 0x8b, 0x76, 0x1c, 0x41, 0x08,
0xdc, 0xd7, 0x6b, 0x81, 0x34, 0xb0, 0x1e, 0xbb, 0x36, 0xbe, 0x92, 0xad, 0x90, 0x0e, 0x9d, 0xcf,
0xac, 0xc9, 0x0c, 0x42, 0xc1, 0x24, 0x96, 0x9a, 0xde, 0xb7, 0xde, 0xda, 0x22, 0x4f, 0x01, 0x84,
0xe4, 0x02, 0xa5, 0xce, 0x51, 0xd1, 0x07, 0xa7, 0x83, 0xf9, 0xde, 0xf9, 0xf1, 0xc2, 0xe1, 0xb1,
0xf0, 0x78, 0x2c, 0x2e, 0x2c, 0x1e, 0xc9, 0x56, 0x2a, 0x89, 0x61, 0x3f, 0x43, 0x81, 0x65, 0x86,
0x65, 0x6a, 0xb6, 0x86, 0xa7, 0xc3, 0xf9, 0x24, 0x69, 0xf8, 0x48, 0x04, 0x63, 0x8f, 0x1d, 0x1d,
0xd9, 0x63, 0x37, 0x36, 0xa1, 0x30, 0xba, 0x46, 0xa9, 0x72, 0x5e, 0xd2, 0xb1, 0x0d, 0x79, 0x93,
0x7c, 0x00, 0x0f, 0x59, 0x9a, 0xa2, 0xd0, 0x17, 0x98, 0x4a, 0xd4, 0x8a, 0x4e, 0x2c, 0x3a, 0x4d,
0x27, 0x79, 0x06, 0xc7, 0x2c, 0xcb, 0x72, 0x9d, 0xf3, 0x92, 0x15, 0xce, 0xf9, 0x4d, 0xa5, 0x45,
0xa5, 0x15, 0x05, 0x7b, 0x95, 0x5d, 0x61, 0x73, 0x32, 0x2b, 0x72, 0xa6, 0x50, 0xd1, 0x3d, 0x9b,
0xe9, 0xcd, 0x98, 0xc1, 0x51, 0x13, 0xf3, 0x9a, 0xac, 0x43, 0x18, 0x56, 0xb2, 0xac, 0x51, 0x37,
0xcb, 0x16, 0x6c, 0xc1, 0x9d, 0x61, 0x8b, 0xff, 0x1a, 0xc1, 0x71, 0x82, 0xcb, 0x5c, 0x69, 0x94,
0x6d, 0x6e, 0x3d, 0x97, 0x83, 0x1e, 0x2e, 0x83, 0x5e, 0x2e, 0x87, 0x0d, 0x2e, 0x67, 0x10, 0xa6,
0x95, 0xd2, 0x7c, 0x65, 0x39, 0x1e, 0x27, 0xb5, 0x45, 0xce, 0x20, 0xe4, 0x97, 0xbf, 0x62, 0xaa,
0x6f, 0xe3, 0xb7, 0x4e, 0x33, 0x08, 0x99, 0x90, 0xd9, 0x11, 0xda, 0x4a, 0xde, 0xec, 0xb0, 0x3e,
0xba, 0x85, 0xf5, 0x71, 0x8b, 0x75, 0x01, 0x47, 0x35, 0x18, 0xeb, 0xaf, 0xb6, 0xeb, 0x4c, 0x4e,
0x87, 0xf3, 0xbd, 0xf3, 0xcf, 0x17, 0x9b, 0x86, 0x5d, 0xec, 0x00, 0x69, 0xf1, 0x6d, 0xcf, 0xf6,
0x17, 0xa5, 0x96, 0xeb, 0xa4, 0xb7, 0x32, 0xf9, 0x18, 0x1e, 0x65, 0x58, 0xa0, 0xc6, 0x2f, 0xf1,
0x35, 0x37, 0x0d, 0x28, 0x0a, 0x96, 0x22, 0x05, 0xfb, 0x5d, 0x7d, 0xa1, 0x6d, 0x65, 0xee, 0x75,
0x94, 0x99, 0x2f, 0x4b, 0x2e, 0xf1, 0xf9, 0x1b, 0x56, 0x2e, 0x51, 0xd1, 0x7d, 0xfb, 0xf9, 0x4d,
0x67, 0x57, 0xbf, 0x0f, 0xff, 0xa3, 0x7e, 0xa7, 0x77, 0xd6, 0xef, 0x41, 0x43, 0xbf, 0x06, 0xf9,
0x7c, 0x65, 0xc6, 0xc7, 0xcb, 0x8c, 0x1e, 0x3a, 0xe4, 0xbd, 0x4d, 0x7e, 0x84, 0xa9, 0x93, 0xc3,
0xf7, 0xf9, 0x0a, 0xb9, 0x39, 0xe6, 0x2d, 0x2b, 0x86, 0x27, 0x77, 0xc0, 0xfc, 0x79, 0x63, 0x63,
0xd2, 0x2a, 0x14, 0x7d, 0x04, 0x47, 0x7d, 0xac, 0x18, 0xed, 0x56, 0xb2, 0x54, 0x74, 0x60, 0x6f,
0x69, 0xd7, 0xd1, 0x0f, 0x30, 0x6d, 0x56, 0xb3, 0xaa, 0x95, 0xc8, 0xb4, 0xd7, 0x7d, 0x6d, 0x19,
0x7f, 0x25, 0x32, 0xe3, 0x77, 0xda, 0xaf, 0x2d, 0xe3, 0x77, 0xac, 0x79, 0xf5, 0x3b, 0x2b, 0xfa,
0x7d, 0x00, 0x8f, 0x77, 0x8a, 0xc3, 0xb4, 0xf0, 0x15, 0xae, 0x7d, 0x0b, 0x5f, 0xe1, 0x9a, 0xbc,
0x82, 0x07, 0xd7, 0xac, 0xa8, 0xb0, 0xee, 0xde, 0xa7, 0xff, 0x53, 0x7b, 0x89, 0xab, 0xf2, 0x59,
0xf0, 0x6c, 0x10, 0xff, 0x31, 0x00, 0xda, 0xdd, 0xbb, 0x73, 0x88, 0xb8, 0x59, 0x1e, 0x6c, 0x66,
0xf9, 0xbf, 0x7d, 0x3a, 0xbc, 0x5b, 0x9f, 0xce, 0x20, 0x54, 0x9a, 0x5d, 0x16, 0xe8, 0x1b, 0xde,
0x59, 0x46, 0x21, 0x6e, 0x65, 0x26, 0xba, 0x55, 0x48, 0x6d, 0xc6, 0x08, 0x27, 0xed, 0x0b, 0xd6,
0xb2, 0xf2, 0x43, 0xa8, 0x7b, 0xcd, 0x27, 0x30, 0xe2, 0xb5, 0x32, 0x6f, 0x19, 0x74, 0x3e, 0xef,
0xfc, 0xcf, 0x21, 0x1c, 0xf8, 0xfa, 0xaf, 0x78, 0x99, 0x6b, 0x2e, 0xc9, 0x4f, 0x70, 0xd0, 0x7a,
0x0c, 0xc9, 0x7b, 0x5b, 0x98, 0xf7, 0x3f, 0xa9, 0x51, 0x7c, 0x53, 0x8a, 0x43, 0x36, 0xbe, 0x47,
0xbe, 0x80, 0xf0, 0x65, 0x79, 0xcd, 0xaf, 0x90, 0xd0, 0xad, 0x7c, 0xe7, 0xf2, 0x95, 0x1e, 0xf7,
0x44, 0x36, 0x05, 0xbe, 0x83, 0xfd, 0xed, 0xc9, 0x4f, 0x4e, 0x1a, 0x6a, 0xe8, 0x3c, 0xc3, 0xd1,
0xbb, 0x3b, 0xe3, 0x9b, 0x92, 0x3f, 0xc3, 0x61, 0x1b, 0x6a, 0x12, 0xdf, 0x2e, 0xb2, 0xe8, 0xfd,
0x1b, 0x73, 0x36, 0xe5, 0x7f, 0xe9, 0xbe, 0x23, 0x7e, 0x40, 0x7c, 0x78, 0x43, 0x85, 0x26, 0xdb,
0xd1, 0xac, 0x43, 0xe5, 0x0b, 0xf3, 0x5f, 0x14, 0xdf, 0xbb, 0x0c, 0xad, 0xe7, 0x93, 0x7f, 0x02,
0x00, 0x00, 0xff, 0xff, 0x37, 0xd0, 0x44, 0x0d, 0x54, 0x09, 0x00, 0x00,
// 826 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0xeb, 0x44,
0x14, 0xbe, 0x49, 0xee, 0xcd, 0xcf, 0x49, 0x6f, 0x5a, 0xe6, 0x56, 0x8d, 0xaf, 0x41, 0xe5, 0x62,
0x58, 0x14, 0x16, 0x29, 0x2d, 0x8b, 0x16, 0x84, 0x84, 0x44, 0x29, 0x52, 0x17, 0x15, 0xe0, 0xb2,
0x00, 0x24, 0x90, 0x1c, 0xfb, 0x34, 0x35, 0x75, 0x3c, 0xc3, 0x78, 0x1c, 0x29, 0x3b, 0xde, 0x84,
0x57, 0xe1, 0x39, 0x78, 0x0c, 0x9e, 0x80, 0xf9, 0xf1, 0x84, 0xf8, 0x27, 0x4d, 0x60, 0x95, 0x39,
0x3f, 0x73, 0x3c, 0xf3, 0x7d, 0xdf, 0x39, 0x13, 0x18, 0x71, 0xcc, 0x68, 0xce, 0x43, 0x9c, 0x30,
0x4e, 0x05, 0x25, 0x03, 0x96, 0x27, 0xf9, 0x3c, 0xe6, 0x2c, 0x74, 0xdf, 0x9e, 0x51, 0x3a, 0x4b,
0xf0, 0x54, 0x07, 0xa6, 0xf9, 0xfd, 0x29, 0xce, 0x99, 0x58, 0x9a, 0x3c, 0xf7, 0x9d, 0x6a, 0x30,
0x13, 0x3c, 0x0f, 0x45, 0x11, 0x1d, 0xc9, 0x9f, 0x45, 0x1c, 0x21, 0x37, 0xb6, 0x77, 0x02, 0x47,
0x77, 0x39, 0x63, 0x94, 0x8b, 0xec, 0x6b, 0x0c, 0x44, 0xce, 0xd1, 0xc7, 0xdf, 0x72, 0xcc, 0x04,
0x19, 0x41, 0x3b, 0x8e, 0x9c, 0xd6, 0x9b, 0xd6, 0xc9, 0xc0, 0x97, 0x2b, 0xef, 0x53, 0x18, 0xd7,
0x32, 0x33, 0x46, 0xd3, 0x0c, 0xc9, 0x31, 0xc0, 0x43, 0x90, 0x15, 0x51, 0xbd, 0xa5, 0xef, 0xaf,
0x79, 0xbc, 0xbf, 0xdb, 0xf0, 0xca, 0xc7, 0x20, 0xf2, 0x8b, 0x1b, 0x6d, 0xf8, 0x04, 0x21, 0xf0,
0x5c, 0x2c, 0x19, 0x3a, 0x6d, 0xed, 0xd1, 0x6b, 0xe5, 0x4b, 0x83, 0x39, 0x3a, 0x1d, 0xe3, 0x53,
0x6b, 0x72, 0x04, 0x5d, 0x16, 0x70, 0x4c, 0x85, 0xf3, 0x5c, 0x7b, 0x0b, 0x8b, 0x5c, 0x00, 0xc8,
0x5b, 0x31, 0xe4, 0x22, 0xc6, 0xcc, 0x79, 0x21, 0x63, 0xc3, 0xf3, 0xf1, 0xc4, 0xe0, 0x31, 0xb1,
0x78, 0x4c, 0xee, 0x34, 0x1e, 0xfe, 0x5a, 0x2a, 0xf1, 0x60, 0x2f, 0x42, 0x86, 0x69, 0x84, 0x69,
0xa8, 0xb6, 0x76, 0xdf, 0x74, 0x64, 0xd9, 0x92, 0x8f, 0xb8, 0xd0, 0xb7, 0xd8, 0x39, 0x3d, 0xfd,
0xd9, 0x95, 0x4d, 0x1c, 0xe8, 0x2d, 0x90, 0x67, 0x31, 0x4d, 0x9d, 0xbe, 0x0e, 0x59, 0x93, 0x7c,
0x00, 0x2f, 0x83, 0x30, 0x44, 0x26, 0xee, 0x30, 0xe4, 0x28, 0x32, 0x67, 0xa0, 0xd1, 0x29, 0x3b,
0xc9, 0x25, 0x8c, 0x83, 0x28, 0x8a, 0x85, 0xdc, 0x11, 0x24, 0xc6, 0xf9, 0x4d, 0x2e, 0x58, 0x2e,
0xf3, 0x41, 0x1f, 0x65, 0x53, 0x58, 0x7d, 0x39, 0x48, 0xe2, 0x20, 0x93, 0x87, 0x1e, 0xea, 0x4c,
0x6b, 0x7a, 0x01, 0x1c, 0x96, 0x31, 0x2f, 0xc8, 0x3a, 0x80, 0x4e, 0xce, 0xd3, 0x02, 0x75, 0xb5,
0xac, 0xc0, 0xd6, 0xde, 0x19, 0x36, 0xef, 0xaf, 0x1e, 0x8c, 0x7d, 0x9c, 0xc5, 0x99, 0x40, 0x5e,
0xe5, 0xd6, 0x72, 0xd9, 0x6a, 0xe0, 0xb2, 0xdd, 0xc8, 0x65, 0xa7, 0xc4, 0xa5, 0xf4, 0x87, 0x79,
0x26, 0xe8, 0x5c, 0x73, 0xdc, 0xf7, 0x0b, 0x8b, 0x9c, 0x42, 0x97, 0x4e, 0x7f, 0xc5, 0x50, 0x6c,
0xe3, 0xb7, 0x48, 0x53, 0x08, 0xa9, 0x90, 0xda, 0xd1, 0xd5, 0x95, 0xac, 0x59, 0x63, 0xbd, 0xb7,
0x85, 0xf5, 0x7e, 0x85, 0x75, 0x06, 0x87, 0x05, 0x18, 0xcb, 0xaf, 0xd6, 0xeb, 0x0c, 0x64, 0x9d,
0xe1, 0xf9, 0xe7, 0x93, 0x55, 0xc3, 0x4e, 0x36, 0x80, 0x34, 0xf9, 0xb6, 0x61, 0xfb, 0x75, 0x2a,
0xf8, 0xd2, 0x6f, 0xac, 0x4c, 0x3e, 0x86, 0x57, 0x11, 0x26, 0x28, 0xf0, 0x4b, 0xbc, 0xa7, 0xaa,
0x01, 0x59, 0x12, 0x84, 0x28, 0x35, 0xa2, 0xee, 0xd5, 0x14, 0x5a, 0x57, 0xe6, 0xb0, 0xa6, 0xcc,
0x78, 0x96, 0xca, 0xd4, 0xab, 0x87, 0x20, 0x9d, 0xc9, 0x63, 0xef, 0xe9, 0xeb, 0x97, 0x9d, 0x75,
0xfd, 0xbe, 0xfc, 0x8f, 0xfa, 0x1d, 0xed, 0xac, 0xdf, 0xfd, 0x92, 0x7e, 0x15, 0xf2, 0xf1, 0x5c,
0x8d, 0x8f, 0x9b, 0xc8, 0x39, 0x30, 0xc8, 0x5b, 0x9b, 0xfc, 0x08, 0x23, 0x23, 0x87, 0xef, 0xe3,
0x39, 0x52, 0xf5, 0x99, 0xb7, 0xb4, 0x18, 0xce, 0x76, 0xc0, 0xfc, 0xaa, 0xb4, 0xd1, 0xaf, 0x14,
0x72, 0x3f, 0x82, 0xc3, 0x26, 0x56, 0x94, 0x76, 0x65, 0xaf, 0x64, 0x52, 0xcf, 0xea, 0x94, 0x7a,
0xed, 0xfe, 0x00, 0xa3, 0x72, 0x35, 0xad, 0x5a, 0x2e, 0xa7, 0xa3, 0xd5, 0x7d, 0x61, 0x29, 0x7f,
0xce, 0x22, 0xe5, 0x37, 0xda, 0x2f, 0x2c, 0xe5, 0x37, 0xac, 0x59, 0xf5, 0x1b, 0xcb, 0xfd, 0xbd,
0x05, 0xaf, 0x37, 0x8a, 0x43, 0xb5, 0xf0, 0x23, 0x2e, 0x6d, 0x0b, 0xcb, 0x25, 0xb9, 0x85, 0x17,
0x8b, 0x20, 0xc9, 0xb1, 0xe8, 0xde, 0x8b, 0xff, 0xa9, 0x3d, 0xdf, 0x54, 0xf9, 0xac, 0x7d, 0xd9,
0xf2, 0xfe, 0x68, 0x81, 0x53, 0xdf, 0xbb, 0x71, 0x88, 0x98, 0x59, 0xde, 0x5e, 0xcd, 0xf2, 0x7f,
0xfb, 0xb4, 0xb3, 0x5b, 0x9f, 0x4a, 0x28, 0x32, 0x11, 0x4c, 0x13, 0xb4, 0x0d, 0x6f, 0x2c, 0xa5,
0x10, 0xb3, 0x52, 0x13, 0x5d, 0x2b, 0xa4, 0x30, 0x3d, 0x84, 0xe3, 0xea, 0x01, 0x0b, 0x59, 0xd9,
0x21, 0x54, 0x3f, 0xe6, 0x19, 0xf4, 0x68, 0xa1, 0xcc, 0x2d, 0x83, 0xce, 0xe6, 0x9d, 0xff, 0xd9,
0x81, 0x7d, 0x5b, 0xff, 0x96, 0xa6, 0xb1, 0xa0, 0x9c, 0xfc, 0x04, 0xfb, 0x95, 0xc7, 0x90, 0xbc,
0xb7, 0x86, 0x79, 0xf3, 0x93, 0xea, 0x7a, 0x4f, 0xa5, 0x18, 0x64, 0xbd, 0x67, 0xe4, 0x0b, 0xe8,
0xde, 0xa4, 0x0b, 0xfa, 0x28, 0xaf, 0xbe, 0x96, 0x6f, 0x5c, 0xb6, 0xd2, 0xeb, 0x86, 0xc8, 0xaa,
0xc0, 0x77, 0xb0, 0xb7, 0x3e, 0xf9, 0xc9, 0x71, 0x49, 0x0d, 0xb5, 0x67, 0xd8, 0x7d, 0x77, 0x63,
0x7c, 0x55, 0xf2, 0x67, 0x38, 0xa8, 0x42, 0x4d, 0xbc, 0xed, 0x22, 0x73, 0xdf, 0x7f, 0x32, 0x67,
0x55, 0xfe, 0x97, 0xfa, 0x3b, 0x62, 0x07, 0xc4, 0x87, 0x4f, 0x54, 0x28, 0xb3, 0xed, 0x1e, 0xd5,
0xa8, 0xbc, 0x56, 0xff, 0x8b, 0xbc, 0x67, 0xd3, 0xae, 0xf6, 0x7c, 0xf2, 0x4f, 0x00, 0x00, 0x00,
0xff, 0xff, 0x37, 0xd0, 0x44, 0x0d, 0x54, 0x09, 0x00, 0x00,
}

View file

@ -107,10 +107,11 @@ message CheckFailure {
}
message DiffRequest {
string id = 1; // the ID of the resource to diff.
string urn = 2; // the Pulumi URN for this resource.
google.protobuf.Struct olds = 3; // the old values of provider inputs to diff.
google.protobuf.Struct news = 4; // the new values of provider inputs to diff.
string id = 1; // the ID of the resource to diff.
string urn = 2; // the Pulumi URN for this resource.
google.protobuf.Struct olds = 3; // the old values of provider inputs to diff.
google.protobuf.Struct news = 4; // the new values of provider inputs to diff.
repeated string ignoreChanges = 5; // a set of property paths that should be treated as unchanged.
}
message PropertyDiff {
@ -203,11 +204,12 @@ message ReadResponse {
message UpdateRequest {
// NOTE: The partial-update-error equivalent of this message is `ErrorResourceInitFailed`.
string id = 1; // the ID of the resource to update.
string urn = 2; // the Pulumi URN for this resource.
google.protobuf.Struct olds = 3; // the old values of provider inputs for the resource to update.
google.protobuf.Struct news = 4; // the new values of provider inputs for the resource to update.
double timeout = 5; // the update request timeout represented in seconds.
string id = 1; // the ID of the resource to update.
string urn = 2; // the Pulumi URN for this resource.
google.protobuf.Struct olds = 3; // the old values of provider inputs for the resource to update.
google.protobuf.Struct news = 4; // the new values of provider inputs for the resource to update.
double timeout = 5; // the update request timeout represented in seconds.
repeated string ignoreChanges = 6; // a set of property paths that should be treated as unchanged.
}
message UpdateResponse {

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: analyzer.proto

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: engine.proto

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: errors.proto

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: language.proto

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: plugin.proto

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: resource.proto

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: status.proto