in pkg/webhook/register.go [71:200]
func GetCommonWebhookConfigs() ([]Config, error) {
smLoader, err := servicemappingloader.New()
if err != nil {
return nil, fmt.Errorf("error getting new service mapping loader: %w", err)
}
dclSchemaLoader, err := dclschemaloader.New()
if err != nil {
return nil, fmt.Errorf("error getting new dcl schema loader: %w", err)
}
serviceMetadataLoader := metadata.New()
allGVKs, err := supportedgvks.All(smLoader, serviceMetadataLoader)
if err != nil {
return nil, fmt.Errorf("error loading all supported GVKs: %w", err)
}
allResourcesRules := getRulesFromResources(allGVKs)
dynamicResourcesRules := getRulesFromResources(supportedgvks.AllDynamicTypes(smLoader, serviceMetadataLoader))
handwrittenIamResourcesRules := getRulesFromResources(supportedgvks.BasedOnHandwrittenIAMTypes())
resourcesWithOverridesRules := getRulesForResourcesWithCustomValidation(allGVKs)
whCfgs := []Config{
{
Name: "deny-immutable-field-updates.cnrm.cloud.google.com",
Path: "/deny-immutable-field-updates",
Type: Validating,
HandlerFunc: NewRequestLoggingHandler(NewImmutableFieldsValidatorHandler(smLoader, dclSchemaLoader, serviceMetadataLoader), "immutable fields validation"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(
allResourcesRules,
admissionregistration.Update,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "deny-unknown-fields.cnrm.cloud.google.com",
Path: "/deny-unknown-fields",
Type: Validating,
HandlerFunc: NewRequestLoggingHandler(NewNoUnknownFieldsValidatorHandler(smLoader), "unknown fields validation"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(
allResourcesRules,
admissionregistration.Create,
admissionregistration.Update,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "iam-validation.cnrm.cloud.google.com",
Path: "/iam-validation",
Type: Validating,
HandlerFunc: NewRequestLoggingHandler(NewIAMValidatorHandler(smLoader, serviceMetadataLoader, dclSchemaLoader), "iam validation"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(handwrittenIamResourcesRules,
admissionregistration.Create,
admissionregistration.Update,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "iam-defaulter.cnrm.cloud.google.com",
Path: "/iam-defaulter",
Type: Mutating,
HandlerFunc: NewRequestLoggingHandler(NewIAMDefaulter(smLoader, serviceMetadataLoader), "iam defaulter"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(handwrittenIamResourcesRules,
admissionregistration.Create,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "container-annotation-handler.cnrm.cloud.google.com",
Path: "/container-annotation-handler",
Type: Mutating,
HandlerFunc: NewRequestLoggingHandler(NewContainerAnnotationHandler(smLoader, dclSchemaLoader, serviceMetadataLoader), "container annotation handler"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(
dynamicResourcesRules,
admissionregistration.Create,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "management-conflict-annotation-defaulter.cnrm.cloud.google.com",
Path: "/management-conflict-annotation-defaulter",
Type: Mutating,
HandlerFunc: NewRequestLoggingHandler(NewManagementConflictAnnotationDefaulter(smLoader, dclSchemaLoader, serviceMetadataLoader), "management conflict annotation defaulter"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(
dynamicResourcesRules,
admissionregistration.Create,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "generic-defaulter.cnrm.cloud.google.com",
Path: "/generic-defaulter",
Type: Mutating,
HandlerFunc: NewRequestLoggingHandler(NewGenericDefaulter(), "generic defaulter"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(
dynamicResourcesRules,
admissionregistration.Create,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "resource-validation.cnrm.cloud.google.com",
Path: "/resource-validation",
Type: Validating,
HandlerFunc: NewRequestLoggingHandler(NewResourceValidatorHandler(), "resource validation"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(resourcesWithOverridesRules,
admissionregistration.Create,
admissionregistration.Update,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
{
Name: "state-into-spec-validation.cnrm.cloud.google.com",
Path: "/state-into-spec-validation",
Type: Validating,
HandlerFunc: NewRequestLoggingHandler(NewStateIntoSpecAnnotationValidatorHandler(), "state-into-spec validation"),
FailurePolicy: admissionregistration.Fail,
Rules: getRulesForOperationTypes(allResourcesRules,
admissionregistration.Create,
admissionregistration.Update,
),
SideEffects: admissionregistration.SideEffectClassNone,
},
}
return whCfgs, nil
}