From e6be38e28521304e789a5b5d90b5d6a3abc1bec1 Mon Sep 17 00:00:00 2001 From: Justin Van Patten Date: Mon, 30 Mar 2020 12:52:05 -0700 Subject: [PATCH] PaC: Add initial config support for policy packs (#4233) The initial config represents any config that was specified programmatically to the Policy Pack, for Policy Packs that support programmatic configuration like AWSGuard. --- pkg/engine/update.go | 6 +- pkg/resource/analyzer/config.go | 60 ++++--- pkg/resource/analyzer/config_test.go | 130 +++++++++++++- sdk/go/common/resource/plugin/analyzer.go | 1 + .../common/resource/plugin/analyzer_plugin.go | 13 ++ sdk/nodejs/proto/analyzer_pb.js | 35 +++- sdk/proto/analyzer.proto | 11 +- sdk/proto/go/analyzer.pb.go | 167 ++++++++++-------- .../lib/pulumi/runtime/proto/analyzer_pb2.py | 90 ++++++++-- 9 files changed, 384 insertions(+), 129 deletions(-) diff --git a/pkg/engine/update.go b/pkg/engine/update.go index bf085162e..3e8493375 100644 --- a/pkg/engine/update.go +++ b/pkg/engine/update.go @@ -275,7 +275,8 @@ func installAndLoadPolicyPlugins(plugctx *plugin.Context, d diag.Sink, policies if err != nil { return err } - config, validationErrors, err := resourceanalyzer.ReconcilePolicyPackConfig(analyzerInfo.Policies, configFromAPI) + config, validationErrors, err := resourceanalyzer.ReconcilePolicyPackConfig( + analyzerInfo.Policies, analyzerInfo.InitialConfig, configFromAPI) if err != nil { return errors.Wrapf(err, "reconciling config for %q", analyzerInfo.Name) } @@ -320,7 +321,8 @@ func installAndLoadPolicyPlugins(plugctx *plugin.Context, d diag.Sink, policies return err } } - config, validationErrors, err := resourceanalyzer.ReconcilePolicyPackConfig(analyzerInfo.Policies, configFromFile) + config, validationErrors, err := resourceanalyzer.ReconcilePolicyPackConfig( + analyzerInfo.Policies, analyzerInfo.InitialConfig, configFromFile) if err != nil { return errors.Wrapf(err, "reconciling policy config for %q at %q", analyzerInfo.Name, pack.Path) } diff --git a/pkg/resource/analyzer/config.go b/pkg/resource/analyzer/config.go index 212d48727..bece4c20a 100644 --- a/pkg/resource/analyzer/config.go +++ b/pkg/resource/analyzer/config.go @@ -268,27 +268,49 @@ func createConfigWithDefaults(policies []plugin.AnalyzerPolicyInfo) map[string]p // ReconcilePolicyPackConfig takes metadata about each policy containing default values and config schema, and // reconciles this with the given config to produce a new config that has all default values filled-in and then sets // configured values. -func ReconcilePolicyPackConfig(policies []plugin.AnalyzerPolicyInfo, - config map[string]plugin.AnalyzerPolicyConfig) (map[string]plugin.AnalyzerPolicyConfig, []string, error) { +func ReconcilePolicyPackConfig( + policies []plugin.AnalyzerPolicyInfo, + initialConfig map[string]plugin.AnalyzerPolicyConfig, + config map[string]plugin.AnalyzerPolicyConfig, +) (map[string]plugin.AnalyzerPolicyConfig, []string, error) { // Prepare the resulting config with all defaults from the policy metadata. result := createConfigWithDefaults(policies) contract.Assertf(result != nil, "result != nil") - // Next, if the given config has "all" and an enforcement level, set it for all - // policies. + // Apply initial config supplied programmatically. + if initialConfig != nil { + result = applyConfig(result, initialConfig) + } + + // Apply additional config from API or CLI. if config != nil { - if all, hasAll := config["all"]; hasAll && all.EnforcementLevel.IsValid() { - for k, v := range result { - result[k] = plugin.AnalyzerPolicyConfig{ - EnforcementLevel: all.EnforcementLevel, - Properties: v.Properties, - } + result = applyConfig(result, config) + } + + // Validate the resulting config. + validationErrors, err := validatePolicyPackConfig(policies, result) + if err != nil { + return nil, nil, err + } + if len(validationErrors) > 0 { + return nil, validationErrors, nil + } + return result, nil, nil +} + +func applyConfig(result map[string]plugin.AnalyzerPolicyConfig, + configToApply map[string]plugin.AnalyzerPolicyConfig) map[string]plugin.AnalyzerPolicyConfig { + // Apply anything that applies to "all" policies. + if all, hasAll := configToApply["all"]; hasAll && all.EnforcementLevel.IsValid() { + for k, v := range result { + result[k] = plugin.AnalyzerPolicyConfig{ + EnforcementLevel: all.EnforcementLevel, + Properties: v.Properties, } } } - - // Next, loop through the given config, and set values. - for policy, givenConfig := range config { + // Apply policy level config. + for policy, givenConfig := range configToApply { var enforcementLevel apitype.EnforcementLevel var properties map[string]interface{} @@ -311,15 +333,5 @@ func ReconcilePolicyPackConfig(policies []plugin.AnalyzerPolicyInfo, Properties: properties, } } - - // Validate the resulting config. - validationErrors, err := validatePolicyPackConfig(policies, result) - if err != nil { - return nil, nil, err - } - if len(validationErrors) > 0 { - return nil, validationErrors, nil - } - - return result, nil, nil + return result } diff --git a/pkg/resource/analyzer/config_test.go b/pkg/resource/analyzer/config_test.go index 7721f138e..c8b3c5e22 100644 --- a/pkg/resource/analyzer/config_test.go +++ b/pkg/resource/analyzer/config_test.go @@ -820,7 +820,133 @@ func TestReconcilePolicyPackConfigSuccess(t *testing.T) { for _, test := range tests { t.Run(test.Test, func(t *testing.T) { - result, validationErrors, err := ReconcilePolicyPackConfig(test.Policies, test.Config) + result, validationErrors, err := ReconcilePolicyPackConfig(test.Policies, nil, test.Config) + assert.NoError(t, err) + assert.Empty(t, validationErrors) + assert.Equal(t, test.Expected, result) + }) + } +} + +func TestReconcilePolicyPackConfigWithInitialConfig(t *testing.T) { + tests := []struct { + Test string + Policies []plugin.AnalyzerPolicyInfo + Config map[string]plugin.AnalyzerPolicyConfig + InitialConfig map[string]plugin.AnalyzerPolicyConfig + Expected map[string]plugin.AnalyzerPolicyConfig + }{ + { + Test: "Initial config applied", + Policies: []plugin.AnalyzerPolicyInfo{ + { + Name: "policy", + }, + }, + InitialConfig: map[string]plugin.AnalyzerPolicyConfig{ + "policy": { + EnforcementLevel: "advisory", + }, + }, + Expected: map[string]plugin.AnalyzerPolicyConfig{ + "policy": { + EnforcementLevel: "advisory", + }, + }, + }, + { + Test: "Initial config replaced by config", + Policies: []plugin.AnalyzerPolicyInfo{ + { + Name: "policy", + }, + }, + InitialConfig: map[string]plugin.AnalyzerPolicyConfig{ + "policy": { + EnforcementLevel: "mandatory", + }, + }, + Config: map[string]plugin.AnalyzerPolicyConfig{ + "policy": { + EnforcementLevel: "advisory", + }, + }, + Expected: map[string]plugin.AnalyzerPolicyConfig{ + "policy": { + EnforcementLevel: "advisory", + }, + }, + }, + { + Test: "Initial config 'all' used, then replaced for one policy by config", + Policies: []plugin.AnalyzerPolicyInfo{ + { + Name: "policy-one", + }, + { + Name: "policy-two", + }, + { + Name: "policy-three", + }, + }, + InitialConfig: map[string]plugin.AnalyzerPolicyConfig{ + "all": { + EnforcementLevel: "mandatory", + }, + }, + Config: map[string]plugin.AnalyzerPolicyConfig{ + "policy-three": { + EnforcementLevel: "advisory", + }, + }, + Expected: map[string]plugin.AnalyzerPolicyConfig{ + "all": { + EnforcementLevel: "mandatory", + }, + "policy-one": { + EnforcementLevel: "mandatory", + }, + "policy-two": { + EnforcementLevel: "mandatory", + }, + "policy-three": { + EnforcementLevel: "advisory", + }, + }, + }, + { + Test: "Initial config 'all' used with multiple policies", + Policies: []plugin.AnalyzerPolicyInfo{ + { + Name: "policy-one", + }, + { + Name: "policy-two", + }, + }, + InitialConfig: map[string]plugin.AnalyzerPolicyConfig{ + "all": { + EnforcementLevel: "disabled", + }, + }, + Expected: map[string]plugin.AnalyzerPolicyConfig{ + "all": { + EnforcementLevel: "disabled", + }, + "policy-one": { + EnforcementLevel: "disabled", + }, + "policy-two": { + EnforcementLevel: "disabled", + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.Test, func(t *testing.T) { + result, validationErrors, err := ReconcilePolicyPackConfig(test.Policies, test.InitialConfig, test.Config) assert.NoError(t, err) assert.Empty(t, validationErrors) assert.Equal(t, test.Expected, result) @@ -1057,7 +1183,7 @@ func TestReconcilePolicyPackConfigValidationErrors(t *testing.T) { for _, test := range tests { t.Run(test.Test, func(t *testing.T) { - result, validationErrors, err := ReconcilePolicyPackConfig(test.Policies, test.Config) + result, validationErrors, err := ReconcilePolicyPackConfig(test.Policies, nil, test.Config) assert.NoError(t, err) assert.Nil(t, result) assert.ElementsMatch(t, test.ExpectedValidationErrors, validationErrors) diff --git a/sdk/go/common/resource/plugin/analyzer.go b/sdk/go/common/resource/plugin/analyzer.go index 111f68765..4f901d316 100644 --- a/sdk/go/common/resource/plugin/analyzer.go +++ b/sdk/go/common/resource/plugin/analyzer.go @@ -101,6 +101,7 @@ type AnalyzerInfo struct { Version string SupportsConfig bool Policies []AnalyzerPolicyInfo + InitialConfig map[string]AnalyzerPolicyConfig } // AnalyzerPolicyInfo defines the metadata for an individual Policy within a Policy Pack. diff --git a/sdk/go/common/resource/plugin/analyzer_plugin.go b/sdk/go/common/resource/plugin/analyzer_plugin.go index 8fc79e62b..3ff423d46 100644 --- a/sdk/go/common/resource/plugin/analyzer_plugin.go +++ b/sdk/go/common/resource/plugin/analyzer_plugin.go @@ -313,12 +313,25 @@ func (a *analyzer) GetAnalyzerInfo() (AnalyzerInfo, error) { return policies[i].Name < policies[j].Name }) + initialConfig := make(map[string]AnalyzerPolicyConfig) + for k, v := range resp.GetInitialConfig() { + enforcementLevel, err := convertEnforcementLevel(v.GetEnforcementLevel()) + if err != nil { + return AnalyzerInfo{}, err + } + initialConfig[k] = AnalyzerPolicyConfig{ + EnforcementLevel: enforcementLevel, + Properties: unmarshalMap(v.GetProperties()), + } + } + return AnalyzerInfo{ Name: resp.GetName(), DisplayName: resp.GetDisplayName(), Version: resp.GetVersion(), SupportsConfig: resp.GetSupportsConfig(), Policies: policies, + InitialConfig: initialConfig, }, nil } diff --git a/sdk/nodejs/proto/analyzer_pb.js b/sdk/nodejs/proto/analyzer_pb.js index c2764b77a..b0c25e369 100644 --- a/sdk/nodejs/proto/analyzer_pb.js +++ b/sdk/nodejs/proto/analyzer_pb.js @@ -2844,7 +2844,8 @@ proto.pulumirpc.AnalyzerInfo.toObject = function(includeInstance, msg) { policiesList: jspb.Message.toObjectList(msg.getPoliciesList(), proto.pulumirpc.PolicyInfo.toObject, includeInstance), version: jspb.Message.getFieldWithDefault(msg, 4, ""), - supportsconfig: jspb.Message.getBooleanFieldWithDefault(msg, 5, false) + supportsconfig: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), + initialconfigMap: (f = msg.getInitialconfigMap()) ? f.toObject(includeInstance, proto.pulumirpc.PolicyConfig.toObject) : [] }; if (includeInstance) { @@ -2902,6 +2903,12 @@ proto.pulumirpc.AnalyzerInfo.deserializeBinaryFromReader = function(msg, reader) var value = /** @type {boolean} */ (reader.readBool()); msg.setSupportsconfig(value); break; + case 6: + var value = msg.getInitialconfigMap(); + reader.readMessage(value, function(message, reader) { + jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.pulumirpc.PolicyConfig.deserializeBinaryFromReader, "", new proto.pulumirpc.PolicyConfig()); + }); + break; default: reader.skipField(); break; @@ -2967,6 +2974,10 @@ proto.pulumirpc.AnalyzerInfo.serializeBinaryToWriter = function(message, writer) f ); } + f = message.getInitialconfigMap(true); + if (f && f.getLength() > 0) { + f.serializeBinary(6, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.pulumirpc.PolicyConfig.serializeBinaryToWriter); + } }; @@ -3080,6 +3091,28 @@ proto.pulumirpc.AnalyzerInfo.prototype.setSupportsconfig = function(value) { }; +/** + * map initialConfig = 6; + * @param {boolean=} opt_noLazyCreate Do not create the map if + * empty, instead returning `undefined` + * @return {!jspb.Map} + */ +proto.pulumirpc.AnalyzerInfo.prototype.getInitialconfigMap = function(opt_noLazyCreate) { + return /** @type {!jspb.Map} */ ( + jspb.Message.getMapField(this, 6, opt_noLazyCreate, + proto.pulumirpc.PolicyConfig)); +}; + + +/** + * Clears values from the map. The map will be non-null. + * @return {!proto.pulumirpc.AnalyzerInfo} returns this + */ +proto.pulumirpc.AnalyzerInfo.prototype.clearInitialconfigMap = function() { + this.getInitialconfigMap().clear(); + return this;}; + + diff --git a/sdk/proto/analyzer.proto b/sdk/proto/analyzer.proto index 642045ca1..dba7e863b 100644 --- a/sdk/proto/analyzer.proto +++ b/sdk/proto/analyzer.proto @@ -123,11 +123,12 @@ message AnalyzeDiagnostic { // AnalyzerInfo provides metadata about a PolicyPack inside an analyzer. message AnalyzerInfo { - string name = 1; // Name of the PolicyPack. - string displayName = 2; // Pretty name for the PolicyPack. - repeated PolicyInfo policies = 3; // Metadata about policies contained in PolicyPack. - string version = 4; // Version of the Policy Pack. - bool supportsConfig = 5; // Whether the Policy Pack supports config. + string name = 1; // Name of the PolicyPack. + string displayName = 2; // Pretty name for the PolicyPack. + repeated PolicyInfo policies = 3; // Metadata about policies contained in PolicyPack. + string version = 4; // Version of the Policy Pack. + bool supportsConfig = 5; // Whether the Policy Pack supports config. + map initialConfig = 6; // Map of policy name to config. } // PolicyInfo provides metadata about a policy within a Policy Pack. diff --git a/sdk/proto/go/analyzer.pb.go b/sdk/proto/go/analyzer.pb.go index 804ccbae0..1896dcabb 100644 --- a/sdk/proto/go/analyzer.pb.go +++ b/sdk/proto/go/analyzer.pb.go @@ -665,14 +665,15 @@ func (m *AnalyzeDiagnostic) GetUrn() string { // AnalyzerInfo provides metadata about a PolicyPack inside an analyzer. type AnalyzerInfo struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - DisplayName string `protobuf:"bytes,2,opt,name=displayName,proto3" json:"displayName,omitempty"` - Policies []*PolicyInfo `protobuf:"bytes,3,rep,name=policies,proto3" json:"policies,omitempty"` - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` - SupportsConfig bool `protobuf:"varint,5,opt,name=supportsConfig,proto3" json:"supportsConfig,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=displayName,proto3" json:"displayName,omitempty"` + Policies []*PolicyInfo `protobuf:"bytes,3,rep,name=policies,proto3" json:"policies,omitempty"` + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + SupportsConfig bool `protobuf:"varint,5,opt,name=supportsConfig,proto3" json:"supportsConfig,omitempty"` + InitialConfig map[string]*PolicyConfig `protobuf:"bytes,6,rep,name=initialConfig,proto3" json:"initialConfig,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AnalyzerInfo) Reset() { *m = AnalyzerInfo{} } @@ -735,6 +736,13 @@ func (m *AnalyzerInfo) GetSupportsConfig() bool { return false } +func (m *AnalyzerInfo) GetInitialConfig() map[string]*PolicyConfig { + if m != nil { + return m.InitialConfig + } + return nil +} + // PolicyInfo provides metadata about a policy within a Policy Pack. type PolicyInfo struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -964,6 +972,7 @@ func init() { proto.RegisterType((*AnalyzeResponse)(nil), "pulumirpc.AnalyzeResponse") proto.RegisterType((*AnalyzeDiagnostic)(nil), "pulumirpc.AnalyzeDiagnostic") proto.RegisterType((*AnalyzerInfo)(nil), "pulumirpc.AnalyzerInfo") + proto.RegisterMapType((map[string]*PolicyConfig)(nil), "pulumirpc.AnalyzerInfo.InitialConfigEntry") proto.RegisterType((*PolicyInfo)(nil), "pulumirpc.PolicyInfo") proto.RegisterType((*PolicyConfigSchema)(nil), "pulumirpc.PolicyConfigSchema") proto.RegisterType((*PolicyConfig)(nil), "pulumirpc.PolicyConfig") @@ -974,76 +983,78 @@ func init() { func init() { proto.RegisterFile("analyzer.proto", fileDescriptor_fadbb7eccb91f143) } var fileDescriptor_fadbb7eccb91f143 = []byte{ - // 1099 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0xdd, 0x6e, 0x1b, 0x45, - 0x14, 0xce, 0xda, 0xf9, 0xb1, 0x8f, 0x1d, 0xd7, 0x99, 0x42, 0xb3, 0xdd, 0x86, 0x2a, 0xda, 0x22, - 0x88, 0x10, 0xb8, 0xd4, 0x08, 0x51, 0x10, 0x05, 0x9c, 0x38, 0x8a, 0x82, 0x42, 0x63, 0xc6, 0x55, - 0xd5, 0x5c, 0x6e, 0x77, 0x8f, 0xdd, 0x55, 0xd6, 0xbb, 0xd3, 0xd9, 0xd9, 0x48, 0xe6, 0x92, 0x4b, - 0x24, 0x24, 0x5e, 0x80, 0xb7, 0xe0, 0x86, 0xa7, 0xe0, 0x86, 0x07, 0xe1, 0x11, 0xd0, 0xcc, 0xfe, - 0x64, 0xd7, 0xbb, 0x76, 0xab, 0xdc, 0x70, 0xc1, 0xdd, 0x9c, 0x33, 0xdf, 0x39, 0x3b, 0xe7, 0x3b, - 0x9f, 0xcf, 0x8c, 0xa1, 0x63, 0xf9, 0x96, 0x37, 0xff, 0x09, 0x79, 0x8f, 0xf1, 0x40, 0x04, 0xa4, - 0xc9, 0x22, 0x2f, 0x9a, 0xb9, 0x9c, 0xd9, 0x46, 0x9b, 0x79, 0xd1, 0xd4, 0xf5, 0xe3, 0x0d, 0xe3, - 0xde, 0x34, 0x08, 0xa6, 0x1e, 0x3e, 0x54, 0xd6, 0xcb, 0x68, 0xf2, 0x10, 0x67, 0x4c, 0xcc, 0x93, - 0xcd, 0xbd, 0xc5, 0xcd, 0x50, 0xf0, 0xc8, 0x16, 0xf1, 0xae, 0xf9, 0x73, 0x0d, 0x3a, 0x83, 0xf8, - 0x33, 0x14, 0x5f, 0x47, 0x18, 0x0a, 0x42, 0x60, 0x5d, 0xcc, 0x19, 0xea, 0xda, 0xbe, 0x76, 0xd0, - 0xa4, 0x6a, 0x4d, 0xbe, 0x00, 0x60, 0x3c, 0x60, 0xc8, 0x85, 0x8b, 0xa1, 0x5e, 0xdb, 0xd7, 0x0e, - 0x5a, 0xfd, 0xdd, 0x5e, 0x9c, 0xb9, 0x97, 0x66, 0xee, 0x8d, 0x55, 0x66, 0x9a, 0x83, 0x92, 0x2e, - 0xd4, 0x23, 0xee, 0xeb, 0x75, 0x95, 0x4b, 0x2e, 0x65, 0x7a, 0xdf, 0x9a, 0xa1, 0xbe, 0x1e, 0xa7, - 0x97, 0x6b, 0xf2, 0x35, 0x6c, 0x05, 0x4c, 0xb8, 0x81, 0x1f, 0xea, 0x1b, 0x2a, 0xb7, 0xd9, 0xcb, - 0x6a, 0xed, 0x25, 0xc7, 0xe3, 0x14, 0xc3, 0x20, 0xe2, 0x36, 0x9e, 0xc7, 0x48, 0x9a, 0x86, 0x90, - 0x6f, 0xa1, 0xc1, 0x78, 0x70, 0xe5, 0x3a, 0xc8, 0xf5, 0x4d, 0x15, 0xfe, 0xa0, 0x22, 0x7c, 0x94, - 0x40, 0xd2, 0x34, 0x34, 0x0b, 0x32, 0x7f, 0x5f, 0x87, 0xee, 0xe2, 0x57, 0xfe, 0x7f, 0x34, 0x90, - 0x3b, 0xb0, 0xc9, 0x2c, 0x8e, 0xbe, 0xd0, 0xb7, 0xd4, 0xa1, 0x12, 0x8b, 0x98, 0xd0, 0x76, 0x90, - 0xa1, 0xef, 0xa0, 0x6f, 0xcb, 0xba, 0x1b, 0xfb, 0xf5, 0x83, 0x26, 0x2d, 0xf8, 0x88, 0x0b, 0xef, - 0x24, 0xe5, 0xce, 0x87, 0x79, 0x6c, 0x73, 0xbf, 0x7e, 0xd0, 0xea, 0x7f, 0xbe, 0xa2, 0x8e, 0xde, - 0xa8, 0x22, 0xee, 0xd8, 0x17, 0x7c, 0x4e, 0x2b, 0x53, 0x1a, 0x0c, 0xee, 0x2e, 0x0d, 0x91, 0x44, - 0x5f, 0xe2, 0x3c, 0x69, 0x9a, 0x5c, 0x92, 0x27, 0xb0, 0x71, 0x65, 0x79, 0x11, 0x26, 0xed, 0xfa, - 0xb0, 0x9a, 0x93, 0x52, 0x3a, 0x1a, 0x47, 0x7d, 0x55, 0x7b, 0xac, 0x99, 0x7f, 0xd7, 0x61, 0x77, - 0x09, 0xfd, 0x44, 0x87, 0x2d, 0xd9, 0x78, 0xb4, 0x85, 0xfa, 0x68, 0x83, 0xa6, 0x26, 0x79, 0x1f, - 0xb6, 0xdd, 0xa9, 0x1f, 0x70, 0x3c, 0x7a, 0x65, 0xf9, 0x53, 0xa5, 0x17, 0xc9, 0x5b, 0xd1, 0x49, - 0x3e, 0x85, 0xdb, 0x0e, 0x7a, 0x28, 0xf0, 0x10, 0x27, 0x01, 0x47, 0x8a, 0xcc, 0xb3, 0x6c, 0x54, - 0x4a, 0x69, 0xd0, 0xaa, 0x2d, 0xf2, 0x0d, 0x18, 0x15, 0xee, 0x21, 0x4e, 0x5c, 0x1f, 0x1d, 0xa5, - 0xa7, 0x06, 0x5d, 0x81, 0x20, 0x8f, 0x61, 0xd7, 0x72, 0x1c, 0x57, 0x1e, 0xdf, 0xf2, 0xc6, 0x68, - 0x73, 0x14, 0xe7, 0x91, 0x60, 0x91, 0x90, 0xaa, 0x93, 0x27, 0x5c, 0xb6, 0x2d, 0x6b, 0xb5, 0x3c, - 0xd7, 0x0a, 0x31, 0xd4, 0x37, 0x15, 0x32, 0x35, 0xc9, 0x05, 0x74, 0xec, 0x28, 0x14, 0xc1, 0xec, - 0x99, 0x3b, 0xc3, 0x40, 0xa6, 0xda, 0x52, 0x6c, 0x3f, 0x7a, 0xb3, 0x80, 0x7b, 0x47, 0x85, 0x40, - 0xba, 0x90, 0xc8, 0x78, 0x01, 0x9d, 0x22, 0x42, 0xea, 0xd4, 0xe6, 0x68, 0x89, 0xf8, 0xb7, 0xa9, - 0xd1, 0xc4, 0x92, 0xfe, 0x88, 0x39, 0xd2, 0x5f, 0x8b, 0xfd, 0xb1, 0x25, 0xfd, 0x31, 0x1d, 0x8a, - 0x55, 0x8d, 0x26, 0x96, 0xf9, 0xab, 0x06, 0xfa, 0xb2, 0x9f, 0xc5, 0x7f, 0xf0, 0xf3, 0x37, 0xfb, - 0xb0, 0xb7, 0x4a, 0x91, 0x32, 0x26, 0xe2, 0x7e, 0xa8, 0x6b, 0x8a, 0x7b, 0xb5, 0x36, 0x47, 0x70, - 0x3b, 0x89, 0x19, 0x0b, 0xcb, 0xbe, 0x4c, 0x67, 0xf8, 0x97, 0xd0, 0xe4, 0x49, 0x25, 0x31, 0xbe, - 0xd5, 0xbf, 0xb7, 0xa2, 0x15, 0xf4, 0x1a, 0x6d, 0xfe, 0x08, 0xb7, 0xb2, 0x0b, 0x21, 0x64, 0x81, - 0x1f, 0x4a, 0xc5, 0xb5, 0x1c, 0xd7, 0x9a, 0xfa, 0x41, 0x28, 0x5c, 0x3b, 0xd6, 0x71, 0xab, 0xbf, - 0x57, 0xce, 0x37, 0xcc, 0x40, 0x34, 0x1f, 0x60, 0xfe, 0x51, 0x83, 0x9d, 0x12, 0x84, 0xdc, 0x07, - 0x60, 0x81, 0xe7, 0xda, 0xf3, 0xa7, 0x92, 0x88, 0x98, 0xe7, 0x9c, 0x87, 0x7c, 0x00, 0x9d, 0xd8, - 0x1a, 0x59, 0xf6, 0xa5, 0xc2, 0xd4, 0x14, 0x66, 0xc1, 0x4b, 0x3e, 0x86, 0x9d, 0x6b, 0xcf, 0x73, - 0xe4, 0xa1, 0x1b, 0xa4, 0x54, 0x97, 0x37, 0xc8, 0x3e, 0xb4, 0x1c, 0x0c, 0x6d, 0xee, 0x2a, 0xf5, - 0x25, 0xfc, 0xe7, 0x5d, 0x52, 0xe5, 0x33, 0x0c, 0x43, 0x6b, 0x8a, 0x6a, 0x0a, 0x37, 0x69, 0x6a, - 0x2a, 0x4d, 0x58, 0xd3, 0x54, 0xfc, 0x6a, 0x4d, 0x4e, 0xa0, 0x8b, 0xfe, 0x24, 0xe0, 0x36, 0xce, - 0xd0, 0x17, 0x67, 0x78, 0x85, 0x9e, 0xd2, 0x7e, 0xa7, 0x40, 0xf8, 0xf1, 0x02, 0x84, 0x96, 0x82, - 0x52, 0x8d, 0x34, 0x32, 0x8d, 0x98, 0x7f, 0x6a, 0xd0, 0x4e, 0x3b, 0x75, 0xea, 0x4f, 0x82, 0x4c, - 0x34, 0x5a, 0xee, 0xce, 0x90, 0xf5, 0xb8, 0x21, 0xf3, 0xac, 0x79, 0x8e, 0xa2, 0xbc, 0x8b, 0x3c, - 0x82, 0x86, 0xa2, 0x41, 0x6a, 0xb6, 0xae, 0x5a, 0xf7, 0x6e, 0xee, 0x64, 0x23, 0xc5, 0x90, 0x4c, - 0x4f, 0x33, 0x98, 0xa4, 0xe0, 0x2a, 0x21, 0x32, 0x26, 0x28, 0x35, 0x65, 0x53, 0xc2, 0x88, 0xb1, - 0x80, 0x8b, 0xf0, 0x28, 0xf0, 0x27, 0xee, 0x54, 0x71, 0xd4, 0xa0, 0x0b, 0x5e, 0xf3, 0x97, 0x1a, - 0xc0, 0x75, 0xea, 0x1b, 0x9e, 0x7c, 0xa1, 0x57, 0xf5, 0x95, 0xbd, 0x5a, 0x2f, 0xf6, 0xaa, 0xaa, - 0x2f, 0x1b, 0x37, 0xe9, 0xcb, 0x00, 0xda, 0xb6, 0xaa, 0x69, 0x6c, 0xbf, 0xc2, 0x99, 0x95, 0x5c, - 0xad, 0xef, 0x95, 0x28, 0x3c, 0xca, 0x81, 0x68, 0x21, 0xc4, 0x74, 0x81, 0x94, 0x31, 0x0b, 0xd3, - 0x44, 0x7b, 0xfb, 0x69, 0x62, 0x40, 0x83, 0xe3, 0xeb, 0xc8, 0xe5, 0xe8, 0x24, 0x77, 0x4a, 0x66, - 0x9b, 0xbf, 0x69, 0xd0, 0xce, 0x7f, 0xab, 0x92, 0x07, 0xed, 0x26, 0x3c, 0xdc, 0x74, 0xf8, 0x99, - 0x7f, 0x69, 0xa0, 0xc7, 0x87, 0x89, 0x38, 0x5e, 0x4f, 0x9e, 0x78, 0x50, 0x5d, 0x40, 0x9b, 0xe5, - 0x8e, 0x9b, 0xcc, 0xaa, 0xfc, 0x7b, 0x61, 0x59, 0x68, 0x81, 0xf6, 0xf8, 0xbd, 0x50, 0x48, 0x65, - 0xbc, 0x80, 0x9d, 0x12, 0xa4, 0xe2, 0x7d, 0xf0, 0x49, 0xf1, 0x7d, 0xb0, 0xbb, 0xa4, 0xb1, 0xb9, - 0xf7, 0xc0, 0x47, 0x4f, 0xa0, 0xbb, 0x48, 0x18, 0x69, 0x43, 0x63, 0x30, 0x7c, 0x7e, 0x3a, 0x3e, - 0xa7, 0x17, 0xdd, 0x35, 0xb2, 0x0d, 0xcd, 0x1f, 0x06, 0x4f, 0x87, 0x83, 0x67, 0xd2, 0xd4, 0xe4, - 0xe6, 0xf0, 0x74, 0x3c, 0x38, 0x3c, 0x3b, 0x1e, 0x76, 0x6b, 0xfd, 0x7f, 0x6a, 0xd0, 0x48, 0x8b, - 0x21, 0x87, 0xb0, 0x95, 0xac, 0xc9, 0xdd, 0xf2, 0x44, 0x4d, 0x6a, 0x35, 0x8c, 0xaa, 0xad, 0x78, - 0x3a, 0x9b, 0x6b, 0xe4, 0x2c, 0x9b, 0x13, 0xea, 0x12, 0x20, 0xf7, 0xcb, 0xe8, 0xfc, 0xed, 0xf0, - 0x86, 0x6c, 0x43, 0xb8, 0x75, 0x82, 0xa2, 0x30, 0x78, 0xee, 0x94, 0xfa, 0x7c, 0x2c, 0xff, 0x61, - 0x18, 0xbb, 0x15, 0x77, 0x8a, 0x0c, 0x30, 0xd7, 0xc8, 0x77, 0xb0, 0x7d, 0x82, 0x62, 0xa4, 0xfe, - 0xa6, 0xac, 0xcc, 0x51, 0x18, 0x46, 0x19, 0xdc, 0x5c, 0x23, 0xdf, 0x43, 0x33, 0xeb, 0x3d, 0x79, - 0xf0, 0x16, 0x8a, 0x30, 0x96, 0x7c, 0xc2, 0x5c, 0x7b, 0xb9, 0xa9, 0x3c, 0x9f, 0xfd, 0x1b, 0x00, - 0x00, 0xff, 0xff, 0xee, 0xfd, 0x35, 0x0d, 0x53, 0x0d, 0x00, 0x00, + // 1130 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0x51, 0x6f, 0x1b, 0x45, + 0x10, 0xce, 0xd9, 0x69, 0x62, 0x8f, 0x1d, 0xd7, 0xd9, 0x42, 0x73, 0xbd, 0x86, 0x2a, 0xba, 0x22, + 0x88, 0x2a, 0x70, 0xa9, 0x11, 0xa2, 0x20, 0x0a, 0x38, 0x71, 0x14, 0x05, 0x85, 0xc6, 0xac, 0xab, + 0xaa, 0x79, 0xbc, 0x9e, 0xc7, 0xee, 0x2a, 0xe7, 0xbb, 0xeb, 0xde, 0x5e, 0x24, 0xf3, 0xc8, 0x23, + 0x12, 0x12, 0x7f, 0x80, 0x7f, 0xc1, 0xff, 0xe0, 0x85, 0xdf, 0xc0, 0x33, 0x3f, 0x01, 0xed, 0xee, + 0x9d, 0x73, 0xe7, 0x3b, 0xbb, 0x55, 0x84, 0xc4, 0x03, 0x6f, 0x3b, 0xb3, 0xdf, 0xcc, 0xee, 0x7c, + 0xf3, 0xdd, 0xac, 0x0d, 0x2d, 0xc7, 0x77, 0xbc, 0xd9, 0x8f, 0xc8, 0x3b, 0x21, 0x0f, 0x44, 0x40, + 0xea, 0x61, 0xec, 0xc5, 0x53, 0xc6, 0x43, 0xd7, 0x6a, 0x86, 0x5e, 0x3c, 0x61, 0xbe, 0xde, 0xb0, + 0xee, 0x4e, 0x82, 0x60, 0xe2, 0xe1, 0x43, 0x65, 0xbd, 0x8c, 0xc7, 0x0f, 0x71, 0x1a, 0x8a, 0x59, + 0xb2, 0xb9, 0xbb, 0xb8, 0x19, 0x09, 0x1e, 0xbb, 0x42, 0xef, 0xda, 0x3f, 0x55, 0xa0, 0xd5, 0xd3, + 0xc7, 0x50, 0x7c, 0x1d, 0x63, 0x24, 0x08, 0x81, 0x75, 0x31, 0x0b, 0xd1, 0x34, 0xf6, 0x8c, 0xfd, + 0x3a, 0x55, 0x6b, 0xf2, 0x39, 0x40, 0xc8, 0x83, 0x10, 0xb9, 0x60, 0x18, 0x99, 0x95, 0x3d, 0x63, + 0xbf, 0xd1, 0xdd, 0xe9, 0xe8, 0xcc, 0x9d, 0x34, 0x73, 0x67, 0xa8, 0x32, 0xd3, 0x0c, 0x94, 0xb4, + 0xa1, 0x1a, 0x73, 0xdf, 0xac, 0xaa, 0x5c, 0x72, 0x29, 0xd3, 0xfb, 0xce, 0x14, 0xcd, 0x75, 0x9d, + 0x5e, 0xae, 0xc9, 0x57, 0xb0, 0x19, 0x84, 0x82, 0x05, 0x7e, 0x64, 0xde, 0x50, 0xb9, 0xed, 0xce, + 0xbc, 0xd6, 0x4e, 0x72, 0x3d, 0x4e, 0x31, 0x0a, 0x62, 0xee, 0xe2, 0x99, 0x46, 0xd2, 0x34, 0x84, + 0x7c, 0x03, 0xb5, 0x90, 0x07, 0x97, 0x6c, 0x84, 0xdc, 0xdc, 0x50, 0xe1, 0xf7, 0x4b, 0xc2, 0x07, + 0x09, 0x24, 0x4d, 0x43, 0xe7, 0x41, 0xf6, 0x6f, 0xeb, 0xd0, 0x5e, 0x3c, 0xe5, 0xff, 0x47, 0x03, + 0xb9, 0x0d, 0x1b, 0xa1, 0xc3, 0xd1, 0x17, 0xe6, 0xa6, 0xba, 0x54, 0x62, 0x11, 0x1b, 0x9a, 0x23, + 0x0c, 0xd1, 0x1f, 0xa1, 0xef, 0xca, 0xba, 0x6b, 0x7b, 0xd5, 0xfd, 0x3a, 0xcd, 0xf9, 0x08, 0x83, + 0x77, 0x92, 0x72, 0x67, 0xfd, 0x2c, 0xb6, 0xbe, 0x57, 0xdd, 0x6f, 0x74, 0x3f, 0x5b, 0x51, 0x47, + 0x67, 0x50, 0x12, 0x77, 0xe4, 0x0b, 0x3e, 0xa3, 0xa5, 0x29, 0xad, 0x10, 0xee, 0x2c, 0x0d, 0x91, + 0x44, 0x5f, 0xe0, 0x2c, 0x69, 0x9a, 0x5c, 0x92, 0x27, 0x70, 0xe3, 0xd2, 0xf1, 0x62, 0x4c, 0xda, + 0xf5, 0x61, 0x39, 0x27, 0x85, 0x74, 0x54, 0x47, 0x7d, 0x59, 0x79, 0x6c, 0xd8, 0x7f, 0x56, 0x61, + 0x67, 0x09, 0xfd, 0xc4, 0x84, 0x4d, 0xd9, 0x78, 0x74, 0x85, 0x3a, 0xb4, 0x46, 0x53, 0x93, 0xbc, + 0x0f, 0x5b, 0x6c, 0xe2, 0x07, 0x1c, 0x0f, 0x5f, 0x39, 0xfe, 0x44, 0xe9, 0x45, 0xf2, 0x96, 0x77, + 0x92, 0x4f, 0xe0, 0xd6, 0x08, 0x3d, 0x14, 0x78, 0x80, 0xe3, 0x80, 0x23, 0xc5, 0xd0, 0x73, 0x5c, + 0x54, 0x4a, 0xa9, 0xd1, 0xb2, 0x2d, 0xf2, 0x35, 0x58, 0x25, 0xee, 0x3e, 0x8e, 0x99, 0x8f, 0x23, + 0xa5, 0xa7, 0x1a, 0x5d, 0x81, 0x20, 0x8f, 0x61, 0xc7, 0x19, 0x8d, 0x98, 0xbc, 0xbe, 0xe3, 0x0d, + 0xd1, 0xe5, 0x28, 0xce, 0x62, 0x11, 0xc6, 0x42, 0xaa, 0x4e, 0xde, 0x70, 0xd9, 0xb6, 0xac, 0xd5, + 0xf1, 0x98, 0x13, 0x61, 0x64, 0x6e, 0x28, 0x64, 0x6a, 0x92, 0x73, 0x68, 0xb9, 0x71, 0x24, 0x82, + 0xe9, 0x33, 0x36, 0xc5, 0x40, 0xa6, 0xda, 0x54, 0x6c, 0x3f, 0x7a, 0xb3, 0x80, 0x3b, 0x87, 0xb9, + 0x40, 0xba, 0x90, 0xc8, 0x7a, 0x01, 0xad, 0x3c, 0x42, 0xea, 0xd4, 0xe5, 0xe8, 0x08, 0xfd, 0x6d, + 0x1a, 0x34, 0xb1, 0xa4, 0x3f, 0x0e, 0x47, 0xd2, 0x5f, 0xd1, 0x7e, 0x6d, 0x49, 0xbf, 0xa6, 0x43, + 0xb1, 0x6a, 0xd0, 0xc4, 0xb2, 0x7f, 0x31, 0xc0, 0x5c, 0xf6, 0x59, 0xfc, 0x07, 0x9f, 0xbf, 0xdd, + 0x85, 0xdd, 0x55, 0x8a, 0x94, 0x31, 0x31, 0xf7, 0x23, 0xd3, 0x50, 0xdc, 0xab, 0xb5, 0x3d, 0x80, + 0x5b, 0x49, 0xcc, 0x50, 0x38, 0xee, 0x45, 0x3a, 0xc3, 0xbf, 0x80, 0x3a, 0x4f, 0x2a, 0xd1, 0xf8, + 0x46, 0xf7, 0xee, 0x8a, 0x56, 0xd0, 0x2b, 0xb4, 0xfd, 0x03, 0xdc, 0x9c, 0x3f, 0x08, 0x51, 0x18, + 0xf8, 0x91, 0x54, 0x5c, 0x63, 0xc4, 0x9c, 0x89, 0x1f, 0x44, 0x82, 0xb9, 0x5a, 0xc7, 0x8d, 0xee, + 0x6e, 0x31, 0x5f, 0x7f, 0x0e, 0xa2, 0xd9, 0x00, 0xfb, 0xf7, 0x0a, 0x6c, 0x17, 0x20, 0xe4, 0x1e, + 0x40, 0x18, 0x78, 0xcc, 0x9d, 0x3d, 0x95, 0x44, 0x68, 0x9e, 0x33, 0x1e, 0xf2, 0x01, 0xb4, 0xb4, + 0x35, 0x70, 0xdc, 0x0b, 0x85, 0xa9, 0x28, 0xcc, 0x82, 0x97, 0x7c, 0x04, 0xdb, 0x57, 0x9e, 0xe7, + 0xc8, 0x23, 0x16, 0xa4, 0x54, 0x17, 0x37, 0xc8, 0x1e, 0x34, 0x46, 0x18, 0xb9, 0x9c, 0x29, 0xf5, + 0x25, 0xfc, 0x67, 0x5d, 0x52, 0xe5, 0x53, 0x8c, 0x22, 0x67, 0x82, 0x6a, 0x0a, 0xd7, 0x69, 0x6a, + 0x2a, 0x4d, 0x38, 0x93, 0x54, 0xfc, 0x6a, 0x4d, 0x8e, 0xa1, 0x8d, 0xfe, 0x38, 0xe0, 0x2e, 0x4e, + 0xd1, 0x17, 0xa7, 0x78, 0x89, 0x9e, 0xd2, 0x7e, 0x2b, 0x47, 0xf8, 0xd1, 0x02, 0x84, 0x16, 0x82, + 0x52, 0x8d, 0xd4, 0xe6, 0x1a, 0xb1, 0xff, 0xaa, 0x40, 0x33, 0xed, 0xd4, 0x89, 0x3f, 0x0e, 0xe6, + 0xa2, 0x31, 0x32, 0x6f, 0x86, 0xac, 0x87, 0x45, 0xa1, 0xe7, 0xcc, 0x32, 0x14, 0x65, 0x5d, 0xe4, + 0x11, 0xd4, 0x14, 0x0d, 0x52, 0xb3, 0x55, 0xd5, 0xba, 0x77, 0x33, 0x37, 0x1b, 0x28, 0x86, 0x64, + 0x7a, 0x3a, 0x87, 0x49, 0x0a, 0x2e, 0x13, 0x22, 0x35, 0x41, 0xa9, 0x29, 0x9b, 0x12, 0xc5, 0x61, + 0x18, 0x70, 0x11, 0x1d, 0x06, 0xfe, 0x98, 0x4d, 0x14, 0x47, 0x35, 0xba, 0xe0, 0x25, 0x03, 0xd8, + 0x62, 0x3e, 0x13, 0xcc, 0xf1, 0x12, 0xd8, 0x86, 0x3a, 0xf9, 0x41, 0x89, 0x08, 0xe5, 0xd9, 0x9d, + 0x93, 0x2c, 0x58, 0x4f, 0xff, 0x7c, 0x02, 0xeb, 0x1c, 0x48, 0x11, 0x54, 0x32, 0xef, 0x3f, 0xce, + 0xcf, 0xfb, 0x9d, 0x42, 0xad, 0x3a, 0x3c, 0x3b, 0xdf, 0x7f, 0xae, 0x00, 0x5c, 0xf1, 0x70, 0x4d, + 0x9a, 0x17, 0x84, 0x55, 0x5d, 0x29, 0xac, 0xf5, 0xbc, 0xb0, 0xca, 0x44, 0x74, 0xe3, 0x3a, 0x22, + 0xea, 0x41, 0xd3, 0x55, 0xe5, 0x0d, 0xdd, 0x57, 0x38, 0x75, 0x92, 0xdf, 0x01, 0xef, 0x2d, 0xe1, + 0x40, 0x83, 0x68, 0x2e, 0xc4, 0x66, 0x40, 0x8a, 0x98, 0x85, 0xd1, 0x67, 0xbc, 0xfd, 0xe8, 0xb3, + 0xa0, 0xc6, 0xf1, 0x75, 0xcc, 0x38, 0x8e, 0x92, 0x07, 0x70, 0x6e, 0xdb, 0xbf, 0x1a, 0xd0, 0xcc, + 0x9e, 0x55, 0xca, 0x83, 0x71, 0x1d, 0x1e, 0xae, 0x3b, 0xa9, 0xed, 0x3f, 0x0c, 0x30, 0xf5, 0x65, + 0x62, 0x8e, 0x57, 0x63, 0x52, 0x4f, 0xd5, 0x73, 0x68, 0x86, 0x99, 0xeb, 0x26, 0x83, 0x35, 0xfb, + 0xe3, 0x66, 0x59, 0x68, 0x8e, 0x76, 0x2d, 0xef, 0x5c, 0x2a, 0xeb, 0x05, 0x6c, 0x17, 0x20, 0xff, + 0x8a, 0xb8, 0x1f, 0x3c, 0x81, 0xf6, 0x22, 0x61, 0xa4, 0x09, 0xb5, 0x5e, 0xff, 0xf9, 0xc9, 0xf0, + 0x8c, 0x9e, 0xb7, 0xd7, 0xc8, 0x16, 0xd4, 0xbf, 0xef, 0x3d, 0xed, 0xf7, 0x9e, 0x49, 0xd3, 0x90, + 0x9b, 0xfd, 0x93, 0x61, 0xef, 0xe0, 0xf4, 0xa8, 0xdf, 0xae, 0x74, 0xff, 0xae, 0x40, 0x2d, 0x2d, + 0x86, 0x1c, 0xc0, 0x66, 0xb2, 0x26, 0x77, 0x8a, 0x5f, 0x72, 0x52, 0xab, 0x65, 0x95, 0x6d, 0xe9, + 0xa7, 0xc4, 0x5e, 0x23, 0xa7, 0xf3, 0xa1, 0xa6, 0x5e, 0x2c, 0x72, 0xaf, 0x88, 0xce, 0x3e, 0x65, + 0x6f, 0xc8, 0xd6, 0x87, 0x9b, 0xc7, 0x28, 0x72, 0x53, 0xf2, 0x76, 0xa1, 0xcf, 0x47, 0xf2, 0xef, + 0x90, 0xb5, 0xb3, 0x64, 0xf6, 0xd8, 0x6b, 0xe4, 0x5b, 0xd8, 0x3a, 0x46, 0x31, 0x50, 0xff, 0xa9, + 0x56, 0xe6, 0xc8, 0x4d, 0xce, 0x39, 0xdc, 0x5e, 0x23, 0xdf, 0x41, 0x7d, 0xde, 0x7b, 0x72, 0xff, + 0x2d, 0x14, 0x61, 0x2d, 0x39, 0xc2, 0x5e, 0x7b, 0xb9, 0xa1, 0x3c, 0x9f, 0xfe, 0x13, 0x00, 0x00, + 0xff, 0xff, 0x13, 0xd0, 0x20, 0xeb, 0x00, 0x0e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/sdk/python/lib/pulumi/runtime/proto/analyzer_pb2.py b/sdk/python/lib/pulumi/runtime/proto/analyzer_pb2.py index 7fcc85d88..477d063bc 100644 --- a/sdk/python/lib/pulumi/runtime/proto/analyzer_pb2.py +++ b/sdk/python/lib/pulumi/runtime/proto/analyzer_pb2.py @@ -22,7 +22,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( package='pulumirpc', syntax='proto3', serialized_options=None, - serialized_pb=b'\n\x0e\x61nalyzer.proto\x12\tpulumirpc\x1a\x0cplugin.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd2\x01\n\x0e\x41nalyzeRequest\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x33\n\x07options\x18\x05 \x01(\x0b\x32\".pulumirpc.AnalyzerResourceOptions\x12\x35\n\x08provider\x18\x06 \x01(\x0b\x32#.pulumirpc.AnalyzerProviderResource\"\xb5\x03\n\x10\x41nalyzerResource\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x33\n\x07options\x18\x05 \x01(\x0b\x32\".pulumirpc.AnalyzerResourceOptions\x12\x35\n\x08provider\x18\x06 \x01(\x0b\x32#.pulumirpc.AnalyzerProviderResource\x12\x0e\n\x06parent\x18\x07 \x01(\t\x12\x14\n\x0c\x64\x65pendencies\x18\x08 \x03(\t\x12S\n\x14propertyDependencies\x18\t \x03(\x0b\x32\x35.pulumirpc.AnalyzerResource.PropertyDependenciesEntry\x1a\x64\n\x19PropertyDependenciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.pulumirpc.AnalyzerPropertyDependencies:\x02\x38\x01\"\xc1\x02\n\x17\x41nalyzerResourceOptions\x12\x0f\n\x07protect\x18\x01 \x01(\x08\x12\x15\n\rignoreChanges\x18\x02 \x03(\t\x12\x1b\n\x13\x64\x65leteBeforeReplace\x18\x03 \x01(\x08\x12\"\n\x1a\x64\x65leteBeforeReplaceDefined\x18\x04 \x01(\x08\x12\x1f\n\x17\x61\x64\x64itionalSecretOutputs\x18\x05 \x03(\t\x12\x0f\n\x07\x61liases\x18\x06 \x03(\t\x12I\n\x0e\x63ustomTimeouts\x18\x07 \x01(\x0b\x32\x31.pulumirpc.AnalyzerResourceOptions.CustomTimeouts\x1a@\n\x0e\x43ustomTimeouts\x12\x0e\n\x06\x63reate\x18\x01 \x01(\x01\x12\x0e\n\x06update\x18\x02 \x01(\x01\x12\x0e\n\x06\x64\x65lete\x18\x03 \x01(\x01\"p\n\x18\x41nalyzerProviderResource\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\",\n\x1c\x41nalyzerPropertyDependencies\x12\x0c\n\x04urns\x18\x01 \x03(\t\"E\n\x13\x41nalyzeStackRequest\x12.\n\tresources\x18\x01 \x03(\x0b\x32\x1b.pulumirpc.AnalyzerResource\"D\n\x0f\x41nalyzeResponse\x12\x31\n\x0b\x64iagnostics\x18\x02 \x03(\x0b\x32\x1c.pulumirpc.AnalyzeDiagnostic\"\xd2\x01\n\x11\x41nalyzeDiagnostic\x12\x12\n\npolicyName\x18\x01 \x01(\t\x12\x16\n\x0epolicyPackName\x18\x02 \x01(\t\x12\x19\n\x11policyPackVersion\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x0f\n\x07message\x18\x05 \x01(\t\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x35\n\x10\x65nforcementLevel\x18\x07 \x01(\x0e\x32\x1b.pulumirpc.EnforcementLevel\x12\x0b\n\x03urn\x18\x08 \x01(\t\"\x83\x01\n\x0c\x41nalyzerInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64isplayName\x18\x02 \x01(\t\x12\'\n\x08policies\x18\x03 \x03(\x0b\x32\x15.pulumirpc.PolicyInfo\x12\x0f\n\x07version\x18\x04 \x01(\t\x12\x16\n\x0esupportsConfig\x18\x05 \x01(\x08\"\xc1\x01\n\nPolicyInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64isplayName\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x35\n\x10\x65nforcementLevel\x18\x05 \x01(\x0e\x32\x1b.pulumirpc.EnforcementLevel\x12\x33\n\x0c\x63onfigSchema\x18\x06 \x01(\x0b\x32\x1d.pulumirpc.PolicyConfigSchema\"S\n\x12PolicyConfigSchema\x12+\n\nproperties\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x10\n\x08required\x18\x02 \x03(\t\"r\n\x0cPolicyConfig\x12\x35\n\x10\x65nforcementLevel\x18\x01 \x01(\x0e\x32\x1b.pulumirpc.EnforcementLevel\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xb5\x01\n\x18\x43onfigureAnalyzerRequest\x12K\n\x0cpolicyConfig\x18\x01 \x03(\x0b\x32\x35.pulumirpc.ConfigureAnalyzerRequest.PolicyConfigEntry\x1aL\n\x11PolicyConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.pulumirpc.PolicyConfig:\x02\x38\x01*=\n\x10\x45nforcementLevel\x12\x0c\n\x08\x41\x44VISORY\x10\x00\x12\r\n\tMANDATORY\x10\x01\x12\x0c\n\x08\x44ISABLED\x10\x02\x32\xf0\x02\n\x08\x41nalyzer\x12\x42\n\x07\x41nalyze\x12\x19.pulumirpc.AnalyzeRequest\x1a\x1a.pulumirpc.AnalyzeResponse\"\x00\x12L\n\x0c\x41nalyzeStack\x12\x1e.pulumirpc.AnalyzeStackRequest\x1a\x1a.pulumirpc.AnalyzeResponse\"\x00\x12\x44\n\x0fGetAnalyzerInfo\x12\x16.google.protobuf.Empty\x1a\x17.pulumirpc.AnalyzerInfo\"\x00\x12@\n\rGetPluginInfo\x12\x16.google.protobuf.Empty\x1a\x15.pulumirpc.PluginInfo\"\x00\x12J\n\tConfigure\x12#.pulumirpc.ConfigureAnalyzerRequest\x1a\x16.google.protobuf.Empty\"\x00\x62\x06proto3' + serialized_pb=b'\n\x0e\x61nalyzer.proto\x12\tpulumirpc\x1a\x0cplugin.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd2\x01\n\x0e\x41nalyzeRequest\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x33\n\x07options\x18\x05 \x01(\x0b\x32\".pulumirpc.AnalyzerResourceOptions\x12\x35\n\x08provider\x18\x06 \x01(\x0b\x32#.pulumirpc.AnalyzerProviderResource\"\xb5\x03\n\x10\x41nalyzerResource\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x33\n\x07options\x18\x05 \x01(\x0b\x32\".pulumirpc.AnalyzerResourceOptions\x12\x35\n\x08provider\x18\x06 \x01(\x0b\x32#.pulumirpc.AnalyzerProviderResource\x12\x0e\n\x06parent\x18\x07 \x01(\t\x12\x14\n\x0c\x64\x65pendencies\x18\x08 \x03(\t\x12S\n\x14propertyDependencies\x18\t \x03(\x0b\x32\x35.pulumirpc.AnalyzerResource.PropertyDependenciesEntry\x1a\x64\n\x19PropertyDependenciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.pulumirpc.AnalyzerPropertyDependencies:\x02\x38\x01\"\xc1\x02\n\x17\x41nalyzerResourceOptions\x12\x0f\n\x07protect\x18\x01 \x01(\x08\x12\x15\n\rignoreChanges\x18\x02 \x03(\t\x12\x1b\n\x13\x64\x65leteBeforeReplace\x18\x03 \x01(\x08\x12\"\n\x1a\x64\x65leteBeforeReplaceDefined\x18\x04 \x01(\x08\x12\x1f\n\x17\x61\x64\x64itionalSecretOutputs\x18\x05 \x03(\t\x12\x0f\n\x07\x61liases\x18\x06 \x03(\t\x12I\n\x0e\x63ustomTimeouts\x18\x07 \x01(\x0b\x32\x31.pulumirpc.AnalyzerResourceOptions.CustomTimeouts\x1a@\n\x0e\x43ustomTimeouts\x12\x0e\n\x06\x63reate\x18\x01 \x01(\x01\x12\x0e\n\x06update\x18\x02 \x01(\x01\x12\x0e\n\x06\x64\x65lete\x18\x03 \x01(\x01\"p\n\x18\x41nalyzerProviderResource\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0b\n\x03urn\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\",\n\x1c\x41nalyzerPropertyDependencies\x12\x0c\n\x04urns\x18\x01 \x03(\t\"E\n\x13\x41nalyzeStackRequest\x12.\n\tresources\x18\x01 \x03(\x0b\x32\x1b.pulumirpc.AnalyzerResource\"D\n\x0f\x41nalyzeResponse\x12\x31\n\x0b\x64iagnostics\x18\x02 \x03(\x0b\x32\x1c.pulumirpc.AnalyzeDiagnostic\"\xd2\x01\n\x11\x41nalyzeDiagnostic\x12\x12\n\npolicyName\x18\x01 \x01(\t\x12\x16\n\x0epolicyPackName\x18\x02 \x01(\t\x12\x19\n\x11policyPackVersion\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x0f\n\x07message\x18\x05 \x01(\t\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x35\n\x10\x65nforcementLevel\x18\x07 \x01(\x0e\x32\x1b.pulumirpc.EnforcementLevel\x12\x0b\n\x03urn\x18\x08 \x01(\t\"\x95\x02\n\x0c\x41nalyzerInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64isplayName\x18\x02 \x01(\t\x12\'\n\x08policies\x18\x03 \x03(\x0b\x32\x15.pulumirpc.PolicyInfo\x12\x0f\n\x07version\x18\x04 \x01(\t\x12\x16\n\x0esupportsConfig\x18\x05 \x01(\x08\x12\x41\n\rinitialConfig\x18\x06 \x03(\x0b\x32*.pulumirpc.AnalyzerInfo.InitialConfigEntry\x1aM\n\x12InitialConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.pulumirpc.PolicyConfig:\x02\x38\x01\"\xc1\x01\n\nPolicyInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64isplayName\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x35\n\x10\x65nforcementLevel\x18\x05 \x01(\x0e\x32\x1b.pulumirpc.EnforcementLevel\x12\x33\n\x0c\x63onfigSchema\x18\x06 \x01(\x0b\x32\x1d.pulumirpc.PolicyConfigSchema\"S\n\x12PolicyConfigSchema\x12+\n\nproperties\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x10\n\x08required\x18\x02 \x03(\t\"r\n\x0cPolicyConfig\x12\x35\n\x10\x65nforcementLevel\x18\x01 \x01(\x0e\x32\x1b.pulumirpc.EnforcementLevel\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xb5\x01\n\x18\x43onfigureAnalyzerRequest\x12K\n\x0cpolicyConfig\x18\x01 \x03(\x0b\x32\x35.pulumirpc.ConfigureAnalyzerRequest.PolicyConfigEntry\x1aL\n\x11PolicyConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.pulumirpc.PolicyConfig:\x02\x38\x01*=\n\x10\x45nforcementLevel\x12\x0c\n\x08\x41\x44VISORY\x10\x00\x12\r\n\tMANDATORY\x10\x01\x12\x0c\n\x08\x44ISABLED\x10\x02\x32\xf0\x02\n\x08\x41nalyzer\x12\x42\n\x07\x41nalyze\x12\x19.pulumirpc.AnalyzeRequest\x1a\x1a.pulumirpc.AnalyzeResponse\"\x00\x12L\n\x0c\x41nalyzeStack\x12\x1e.pulumirpc.AnalyzeStackRequest\x1a\x1a.pulumirpc.AnalyzeResponse\"\x00\x12\x44\n\x0fGetAnalyzerInfo\x12\x16.google.protobuf.Empty\x1a\x17.pulumirpc.AnalyzerInfo\"\x00\x12@\n\rGetPluginInfo\x12\x16.google.protobuf.Empty\x1a\x15.pulumirpc.PluginInfo\"\x00\x12J\n\tConfigure\x12#.pulumirpc.ConfigureAnalyzerRequest\x1a\x16.google.protobuf.Empty\"\x00\x62\x06proto3' , dependencies=[plugin__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,]) @@ -47,8 +47,8 @@ _ENFORCEMENTLEVEL = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=2308, - serialized_end=2369, + serialized_start=2454, + serialized_end=2515, ) _sym_db.RegisterEnumDescriptor(_ENFORCEMENTLEVEL) @@ -591,6 +591,43 @@ _ANALYZEDIAGNOSTIC = _descriptor.Descriptor( ) +_ANALYZERINFO_INITIALCONFIGENTRY = _descriptor.Descriptor( + name='InitialConfigEntry', + full_name='pulumirpc.AnalyzerInfo.InitialConfigEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='pulumirpc.AnalyzerInfo.InitialConfigEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='pulumirpc.AnalyzerInfo.InitialConfigEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1794, + serialized_end=1871, +) + _ANALYZERINFO = _descriptor.Descriptor( name='AnalyzerInfo', full_name='pulumirpc.AnalyzerInfo', @@ -633,10 +670,17 @@ _ANALYZERINFO = _descriptor.Descriptor( message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='initialConfig', full_name='pulumirpc.AnalyzerInfo.initialConfig', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], - nested_types=[], + nested_types=[_ANALYZERINFO_INITIALCONFIGENTRY, ], enum_types=[ ], serialized_options=None, @@ -646,7 +690,7 @@ _ANALYZERINFO = _descriptor.Descriptor( oneofs=[ ], serialized_start=1594, - serialized_end=1725, + serialized_end=1871, ) @@ -711,8 +755,8 @@ _POLICYINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1728, - serialized_end=1921, + serialized_start=1874, + serialized_end=2067, ) @@ -749,8 +793,8 @@ _POLICYCONFIGSCHEMA = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1923, - serialized_end=2006, + serialized_start=2069, + serialized_end=2152, ) @@ -787,8 +831,8 @@ _POLICYCONFIG = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2008, - serialized_end=2122, + serialized_start=2154, + serialized_end=2268, ) @@ -825,8 +869,8 @@ _CONFIGUREANALYZERREQUEST_POLICYCONFIGENTRY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2230, - serialized_end=2306, + serialized_start=2376, + serialized_end=2452, ) _CONFIGUREANALYZERREQUEST = _descriptor.Descriptor( @@ -855,8 +899,8 @@ _CONFIGUREANALYZERREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2125, - serialized_end=2306, + serialized_start=2271, + serialized_end=2452, ) _ANALYZEREQUEST.fields_by_name['properties'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT @@ -874,7 +918,10 @@ _ANALYZERPROVIDERRESOURCE.fields_by_name['properties'].message_type = google_dot _ANALYZESTACKREQUEST.fields_by_name['resources'].message_type = _ANALYZERRESOURCE _ANALYZERESPONSE.fields_by_name['diagnostics'].message_type = _ANALYZEDIAGNOSTIC _ANALYZEDIAGNOSTIC.fields_by_name['enforcementLevel'].enum_type = _ENFORCEMENTLEVEL +_ANALYZERINFO_INITIALCONFIGENTRY.fields_by_name['value'].message_type = _POLICYCONFIG +_ANALYZERINFO_INITIALCONFIGENTRY.containing_type = _ANALYZERINFO _ANALYZERINFO.fields_by_name['policies'].message_type = _POLICYINFO +_ANALYZERINFO.fields_by_name['initialConfig'].message_type = _ANALYZERINFO_INITIALCONFIGENTRY _POLICYINFO.fields_by_name['enforcementLevel'].enum_type = _ENFORCEMENTLEVEL _POLICYINFO.fields_by_name['configSchema'].message_type = _POLICYCONFIGSCHEMA _POLICYCONFIGSCHEMA.fields_by_name['properties'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT @@ -972,11 +1019,19 @@ AnalyzeDiagnostic = _reflection.GeneratedProtocolMessageType('AnalyzeDiagnostic' _sym_db.RegisterMessage(AnalyzeDiagnostic) AnalyzerInfo = _reflection.GeneratedProtocolMessageType('AnalyzerInfo', (_message.Message,), { + + 'InitialConfigEntry' : _reflection.GeneratedProtocolMessageType('InitialConfigEntry', (_message.Message,), { + 'DESCRIPTOR' : _ANALYZERINFO_INITIALCONFIGENTRY, + '__module__' : 'analyzer_pb2' + # @@protoc_insertion_point(class_scope:pulumirpc.AnalyzerInfo.InitialConfigEntry) + }) + , 'DESCRIPTOR' : _ANALYZERINFO, '__module__' : 'analyzer_pb2' # @@protoc_insertion_point(class_scope:pulumirpc.AnalyzerInfo) }) _sym_db.RegisterMessage(AnalyzerInfo) +_sym_db.RegisterMessage(AnalyzerInfo.InitialConfigEntry) PolicyInfo = _reflection.GeneratedProtocolMessageType('PolicyInfo', (_message.Message,), { 'DESCRIPTOR' : _POLICYINFO, @@ -1016,6 +1071,7 @@ _sym_db.RegisterMessage(ConfigureAnalyzerRequest.PolicyConfigEntry) _ANALYZERRESOURCE_PROPERTYDEPENDENCIESENTRY._options = None +_ANALYZERINFO_INITIALCONFIGENTRY._options = None _CONFIGUREANALYZERREQUEST_POLICYCONFIGENTRY._options = None _ANALYZER = _descriptor.ServiceDescriptor( @@ -1024,8 +1080,8 @@ _ANALYZER = _descriptor.ServiceDescriptor( file=DESCRIPTOR, index=0, serialized_options=None, - serialized_start=2372, - serialized_end=2740, + serialized_start=2518, + serialized_end=2886, methods=[ _descriptor.MethodDescriptor( name='Analyze',