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.
This commit is contained in:
Justin Van Patten 2020-03-30 12:52:05 -07:00 committed by GitHub
parent 77af9e0eac
commit e6be38e285
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 384 additions and 129 deletions

View file

@ -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)
}

View file

@ -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
}

View file

@ -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)

View file

@ -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.

View file

@ -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
}

View file

@ -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<string, PolicyConfig> initialConfig = 6;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,!proto.pulumirpc.PolicyConfig>}
*/
proto.pulumirpc.AnalyzerInfo.prototype.getInitialconfigMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,!proto.pulumirpc.PolicyConfig>} */ (
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;};

View file

@ -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<string, PolicyConfig> initialConfig = 6; // Map of policy name to config.
}
// PolicyInfo provides metadata about a policy within a Policy Pack.

View file

@ -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.

View file

@ -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',