From d10dbf9e6b67477d4b20c5b12ce84992bd9dcb9f Mon Sep 17 00:00:00 2001 From: Luiz Carvalho Date: Mon, 18 Sep 2023 13:52:39 -0400 Subject: [PATCH] Add config per policy source https://issues.redhat.com/browse/HACBS-2428 Signed-off-by: Luiz Carvalho --- ...redhat.com_enterprisecontractpolicies.yaml | 16 ++++++++++ .../enterprisecontractpolicy_types.go | 22 +++++++++++++- api/v1alpha1/zz_generated.deepcopy.go | 30 +++++++++++++++++++ ...redhat.com_enterprisecontractpolicies.yaml | 16 ++++++++++ docs/modules/ROOT/pages/reference.adoc | 19 +++++++++++- 5 files changed, 101 insertions(+), 2 deletions(-) diff --git a/api/config/appstudio.redhat.com_enterprisecontractpolicies.yaml b/api/config/appstudio.redhat.com_enterprisecontractpolicies.yaml index e243b43..c41b1b7 100644 --- a/api/config/appstudio.redhat.com_enterprisecontractpolicies.yaml +++ b/api/config/appstudio.redhat.com_enterprisecontractpolicies.yaml @@ -85,6 +85,22 @@ spec: items: description: Source defines policies and data that are evaluated together properties: + config: + description: Config specifies which policy rules are included, or excluded, from the provided policy source urls. + properties: + exclude: + description: Exclude is a set of policy exclusions that, in case of failure, do not block the success of the outcome. + items: + type: string + type: array + x-kubernetes-list-type: set + include: + description: Include is a set of policy inclusions that are added to the policy evaluation. These take precedence over policy exclusions. + items: + type: string + type: array + x-kubernetes-list-type: set + type: object data: description: List of go-getter style policy data source urls items: diff --git a/api/v1alpha1/enterprisecontractpolicy_types.go b/api/v1alpha1/enterprisecontractpolicy_types.go index 38d44b6..1641806 100644 --- a/api/v1alpha1/enterprisecontractpolicy_types.go +++ b/api/v1alpha1/enterprisecontractpolicy_types.go @@ -61,9 +61,29 @@ type Source struct { // +optional // +kubebuilder:validation:Type:=object RuleData *extv1.JSON `json:"ruleData,omitempty"` + // Config specifies which policy rules are included, or excluded, from the + // provided policy source urls. + // +optional + // +kubebuilder:validation:Type:=object + Config *SourceConfig `json:"config,omitempty"` +} + +// SourceConfig specifies config options for a policy source. +type SourceConfig struct { + // Exclude is a set of policy exclusions that, in case of failure, do not block + // the success of the outcome. + // +optional + // +listType:=set + Exclude []string `json:"exclude,omitempty"` + // Include is a set of policy inclusions that are added to the policy evaluation. + // These take precedence over policy exclusions. + // +optional + // +listType:=set + Include []string `json:"include,omitempty"` } -// EnterpriseContractPolicyConfiguration configuration of modifications to policy evaluation +// EnterpriseContractPolicyConfiguration configuration of modifications to policy evaluation. +// DEPRECATED: Use the config for a policy source instead. type EnterpriseContractPolicyConfiguration struct { // Exclude set of policy exclusions that, in case of failure, do not block // the success of the outcome. diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index cd7cd4d..e9afd48 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -194,6 +194,11 @@ func (in *Source) DeepCopyInto(out *Source) { *out = new(v1.JSON) (*in).DeepCopyInto(*out) } + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(SourceConfig) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Source. @@ -205,3 +210,28 @@ func (in *Source) DeepCopy() *Source { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceConfig) DeepCopyInto(out *SourceConfig) { + *out = *in + if in.Exclude != nil { + in, out := &in.Exclude, &out.Exclude + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Include != nil { + in, out := &in.Include, &out.Include + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceConfig. +func (in *SourceConfig) DeepCopy() *SourceConfig { + if in == nil { + return nil + } + out := new(SourceConfig) + in.DeepCopyInto(out) + return out +} diff --git a/config/crd/bases/appstudio.redhat.com_enterprisecontractpolicies.yaml b/config/crd/bases/appstudio.redhat.com_enterprisecontractpolicies.yaml index e243b43..c41b1b7 100644 --- a/config/crd/bases/appstudio.redhat.com_enterprisecontractpolicies.yaml +++ b/config/crd/bases/appstudio.redhat.com_enterprisecontractpolicies.yaml @@ -85,6 +85,22 @@ spec: items: description: Source defines policies and data that are evaluated together properties: + config: + description: Config specifies which policy rules are included, or excluded, from the provided policy source urls. + properties: + exclude: + description: Exclude is a set of policy exclusions that, in case of failure, do not block the success of the outcome. + items: + type: string + type: array + x-kubernetes-list-type: set + include: + description: Include is a set of policy inclusions that are added to the policy evaluation. These take precedence over policy exclusions. + items: + type: string + type: array + x-kubernetes-list-type: set + type: object data: description: List of go-getter style policy data source urls items: diff --git a/docs/modules/ROOT/pages/reference.adoc b/docs/modules/ROOT/pages/reference.adoc index f582091..73e37b8 100644 --- a/docs/modules/ROOT/pages/reference.adoc +++ b/docs/modules/ROOT/pages/reference.adoc @@ -44,7 +44,7 @@ Appears In: xref:{anchor_prefix}-github-com-enterprise-contract-enterprise-contr [id="{anchor_prefix}-github-com-enterprise-contract-enterprise-contract-controller-api-v1alpha1-enterprisecontractpolicyconfiguration"] === EnterpriseContractPolicyConfiguration -EnterpriseContractPolicyConfiguration configuration of modifications to policy evaluation +EnterpriseContractPolicyConfiguration configuration of modifications to policy evaluation. DEPRECATED: Use the config for a policy source instead. [quote] Appears In: xref:{anchor_prefix}-github-com-enterprise-contract-enterprise-contract-controller-api-v1alpha1-enterprisecontractpolicyspec[$$EnterpriseContractPolicySpec$$] @@ -133,6 +133,23 @@ Appears In: xref:{anchor_prefix}-github-com-enterprise-contract-enterprise-contr | *`policy`* __string array__ | List of go-getter style policy source urls | *`data`* __string array__ | List of go-getter style policy data source urls | *`ruleData`* __JSON__ | Arbitrary rule data that will be visible to policy rules +| *`config`* __xref:{anchor_prefix}-github-com-enterprise-contract-enterprise-contract-controller-api-v1alpha1-sourceconfig[$$SourceConfig$$]__ | Config specifies which policy rules are included, or excluded, from the provided policy source urls. +|=== + + +[id="{anchor_prefix}-github-com-enterprise-contract-enterprise-contract-controller-api-v1alpha1-sourceconfig"] +=== SourceConfig + +SourceConfig specifies config options for a policy source. + +[quote] +Appears In: xref:{anchor_prefix}-github-com-enterprise-contract-enterprise-contract-controller-api-v1alpha1-source[$$Source$$] + +[cols="25a,75a", options="header"] +|=== +| Field | Description +| *`exclude`* __string array__ | Exclude is a set of policy exclusions that, in case of failure, do not block the success of the outcome. +| *`include`* __string array__ | Include is a set of policy inclusions that are added to the policy evaluation. These take precedence over policy exclusions. |===