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:
parent
7bdd590586
commit
67ec74bdc5
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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{}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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())
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
115
pkg/resource/deploy/step_generator_test.go
Normal file
115
pkg/resource/deploy/step_generator_test.go
Normal 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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
194
pkg/resource/properties_path.go
Normal file
194
pkg/resource/properties_path.go
Normal 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
|
||||
|
||||
}
|
164
pkg/resource/properties_path_test.go
Normal file
164
pkg/resource/properties_path_test.go
Normal 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())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: analyzer.proto
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: engine.proto
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: errors.proto
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: language.proto
|
||||
|
||||
|
|
|
@ -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
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: resource.proto
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: status.proto
|
||||
|
||||
|
|
Loading…
Reference in a new issue