Skip to content

Commit 10bf7bd

Browse files
committed
Move shared types to a separate package
This will enable the expanders in a future commit to be able to leverage these types. Signed-off-by: mprahl <[email protected]>
1 parent d4d82c3 commit 10bf7bd

File tree

6 files changed

+114
-104
lines changed

6 files changed

+114
-104
lines changed

internal/plugin.go

Lines changed: 10 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"sort"
1010
"strings"
1111

12+
"github.com/open-cluster-management/policy-generator-plugin/internal/types"
1213
"gopkg.in/yaml.v3"
1314
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1415
)
@@ -23,53 +24,6 @@ const (
2324
placementRuleKind = "PlacementRule"
2425
)
2526

26-
type manifest struct {
27-
Patches []map[string]interface{} `json:"patches,omitempty" yaml:"patches,omitempty"`
28-
Path string `json:"path,omitempty" yaml:"path,omitempty"`
29-
}
30-
31-
type namespaceSelector struct {
32-
Exclude []string `json:"exclude,omitempty" yaml:"exclude,omitempty"`
33-
Include []string `json:"include,omitempty" yaml:"include,omitempty"`
34-
}
35-
36-
type placementConfig struct {
37-
ClusterSelectors map[string]string `json:"clusterSelectors,omitempty" yaml:"clusterSelectors,omitempty"`
38-
Name string `json:"name,omitempty" yaml:"name,omitempty"`
39-
PlacementRulePath string `json:"placementRulePath,omitempty" yaml:"placementRulePath,omitempty"`
40-
}
41-
42-
// policyConfig represents a policy entry in the PolicyGenerator configuration.
43-
type policyConfig struct {
44-
Categories []string `json:"categories,omitempty" yaml:"categories,omitempty"`
45-
ComplianceType string `json:"complianceType,omitempty" yaml:"complianceType,omitempty"`
46-
Controls []string `json:"controls,omitempty" yaml:"controls,omitempty"`
47-
Disabled bool `json:"disabled,omitempty" yaml:"disabled,omitempty"`
48-
// Make this a slice of structs in the event we want additional configuration related to
49-
// a manifest such as accepting patches.
50-
Manifests []manifest `json:"manifests,omitempty" yaml:"manifests,omitempty"`
51-
Name string `json:"name,omitempty" yaml:"name,omitempty"`
52-
NamespaceSelector namespaceSelector `json:"namespaceSelector,omitempty" yaml:"namespaceSelector,omitempty"`
53-
// This is named Placement so that eventually PlacementRules and Placements will be supported
54-
Placement placementConfig `json:"placement,omitempty" yaml:"placement,omitempty"`
55-
RemediationAction string `json:"remediationAction,omitempty" yaml:"remediationAction,omitempty"`
56-
Severity string `json:"severity,omitempty" yaml:"severity,omitempty"`
57-
Standards []string `json:"standards,omitempty" yaml:"standards,omitempty"`
58-
}
59-
60-
type policyDefaults struct {
61-
Categories []string `json:"categories,omitempty" yaml:"categories,omitempty"`
62-
ComplianceType string `json:"complianceType,omitempty" yaml:"complianceType,omitempty"`
63-
Controls []string `json:"controls,omitempty" yaml:"controls,omitempty"`
64-
Namespace string `json:"namespace,omitempty" yaml:"namespace,omitempty"`
65-
NamespaceSelector namespaceSelector `json:"namespaceSelector,omitempty" yaml:"namespaceSelector,omitempty"`
66-
// This is named Placement so that eventually PlacementRules and Placements will be supported
67-
Placement placementConfig `json:"placement,omitempty" yaml:"placement,omitempty"`
68-
RemediationAction string `json:"remediationAction,omitempty" yaml:"remediationAction,omitempty"`
69-
Severity string `json:"severity,omitempty" yaml:"severity,omitempty"`
70-
Standards []string `json:"standards,omitempty" yaml:"standards,omitempty"`
71-
}
72-
7327
// Plugin is used to store the PolicyGenerator configuration and the methods to generate the
7428
// desired policies.
7529
type Plugin struct {
@@ -79,8 +33,8 @@ type Plugin struct {
7933
PlacementBindingDefaults struct {
8034
Name string `json:"name,omitempty" yaml:"name,omitempty"`
8135
} `json:"placementBindingDefaults,omitempty" yaml:"placementBindingDefaults,omitempty"`
82-
PolicyDefaults policyDefaults `json:"policyDefaults,omitempty" yaml:"policyDefaults,omitempty"`
83-
Policies []policyConfig `json:"policies" yaml:"policies"`
36+
PolicyDefaults types.PolicyDefaults `json:"policyDefaults,omitempty" yaml:"policyDefaults,omitempty"`
37+
Policies []types.PolicyConfig `json:"policies" yaml:"policies"`
8438
// A set of all placement rule names that have been processed or generated
8539
allPlrs map[string]bool
8640
// This is a mapping of cluster selectors formatted as the return value of getCsKey to placement
@@ -92,7 +46,7 @@ type Plugin struct {
9246
processedPlrs map[string]bool
9347
}
9448

95-
var defaults = policyDefaults{
49+
var defaults = types.PolicyDefaults{
9650
Categories: []string{"CM Configuration Management"},
9751
ComplianceType: "musthave",
9852
Controls: []string{"CM-2 Baseline Configuration"},
@@ -153,7 +107,7 @@ func (p *Plugin) Generate() ([]byte, error) {
153107
plcBindingCount := 0
154108
for _, plrName := range plrNames {
155109
// Determine which policies to be included in the placement binding.
156-
policyConfs := []*policyConfig{}
110+
policyConfs := []*types.PolicyConfig{}
157111
for _, i := range plrNameToPolicyIdxs[plrName] {
158112
policyConfs = append(policyConfs, &p.Policies[i])
159113
}
@@ -333,7 +287,7 @@ func (p *Plugin) assertValidConfig() error {
333287
// createPolicy will generate the root policy based on the PolicyGenerator configuration.
334288
// The generated policy is written to the plugin's output buffer. An error is returned if the
335289
// manifests specified in the configuration are invalid or can't be read.
336-
func (p *Plugin) createPolicy(policyConf *policyConfig) error {
290+
func (p *Plugin) createPolicy(policyConf *types.PolicyConfig) error {
337291
policyTemplate, err := getPolicyTemplate(policyConf)
338292
if err != nil {
339293
return err
@@ -426,13 +380,13 @@ func (p *Plugin) getPlrFromPath(plrPath string) (string, map[string]interface{},
426380
}
427381

428382
// getCsKey generates the key for the policy's cluster selectors to be used in Policies.csToPlr.
429-
func getCsKey(policyConf *policyConfig) string {
383+
func getCsKey(policyConf *types.PolicyConfig) string {
430384
return fmt.Sprintf("%#v", policyConf.Placement.ClusterSelectors)
431385
}
432386

433387
// getPlrName will generate a placement rule name for the policy. If the placement rule has
434388
// previously been generated, skip will be true.
435-
func (p *Plugin) getPlrName(policyConf *policyConfig) (name string, skip bool) {
389+
func (p *Plugin) getPlrName(policyConf *types.PolicyConfig) (name string, skip bool) {
436390
if policyConf.Placement.Name != "" {
437391
// If the policy explicitly specifies a placement rule name, use it
438392
return policyConf.Placement.Name, false
@@ -462,7 +416,7 @@ func (p *Plugin) getPlrName(policyConf *policyConfig) (name string, skip bool) {
462416
// the policy generator's output buffer. The name of the placement rule or an error is returned.
463417
// If the placement rule has already been generated, it will be reused and not added to the
464418
// policy generator's output buffer. An error is returned if the placement rule cannot be created.
465-
func (p *Plugin) createPlacementRule(policyConf *policyConfig) (
419+
func (p *Plugin) createPlacementRule(policyConf *types.PolicyConfig) (
466420
name string, err error,
467421
) {
468422
plrPath := policyConf.Placement.PlacementRulePath
@@ -552,7 +506,7 @@ func (p *Plugin) createPlacementRule(policyConf *policyConfig) (
552506
// writing it to the policy generator's output buffer. An error is returned if the placement binding
553507
// cannot be created.
554508
func (p *Plugin) createPlacementBinding(
555-
bindingName, plrName string, policyConfs []*policyConfig,
509+
bindingName, plrName string, policyConfs []*types.PolicyConfig,
556510
) error {
557511
subjects := make([]map[string]string, 0, len(policyConfs))
558512
for _, policyConf := range policyConfs {

internal/plugin_config_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"io/ioutil"
77
"path"
88
"testing"
9+
10+
"github.com/open-cluster-management/policy-generator-plugin/internal/types"
911
)
1012

1113
func createConfigMap(t *testing.T, tmpDir, filename string) {
@@ -87,7 +89,7 @@ policies:
8789
assertEqual(t, p.PolicyDefaults.ComplianceType, "musthave")
8890
assertReflectEqual(t, p.PolicyDefaults.Controls, []string{"PR.DS-1 Data-at-rest"})
8991
assertEqual(t, p.PolicyDefaults.Namespace, "my-policies")
90-
expectedNsSelector := namespaceSelector{
92+
expectedNsSelector := types.NamespaceSelector{
9193
Exclude: []string{"my-protected-ns"}, Include: []string{"default"},
9294
}
9395
assertReflectEqual(t, p.PolicyDefaults.NamespaceSelector, expectedNsSelector)
@@ -110,7 +112,7 @@ policies:
110112
assertEqual(t, len(policy1.Manifests), 1)
111113
assertEqual(t, policy1.Manifests[0].Path, configMapPath)
112114
assertEqual(t, policy1.Name, "policy-app-config")
113-
p1ExpectedNsSelector := namespaceSelector{
115+
p1ExpectedNsSelector := types.NamespaceSelector{
114116
Exclude: nil, Include: []string{"app-ns"},
115117
}
116118
assertReflectEqual(t, policy1.NamespaceSelector, p1ExpectedNsSelector)
@@ -174,7 +176,7 @@ policies:
174176
assertEqual(t, p.PolicyDefaults.ComplianceType, "musthave")
175177
assertReflectEqual(t, p.PolicyDefaults.Controls, []string{"CM-2 Baseline Configuration"})
176178
assertEqual(t, p.PolicyDefaults.Namespace, "my-policies")
177-
expectedNsSelector := namespaceSelector{Exclude: nil, Include: nil}
179+
expectedNsSelector := types.NamespaceSelector{Exclude: nil, Include: nil}
178180
assertReflectEqual(t, p.PolicyDefaults.NamespaceSelector, expectedNsSelector)
179181
assertEqual(t, p.PolicyDefaults.Placement.PlacementRulePath, "")
180182
assertEqual(t, len(p.PolicyDefaults.Placement.ClusterSelectors), 0)

internal/plugin_test.go

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"path"
88
"strings"
99
"testing"
10+
11+
"github.com/open-cluster-management/policy-generator-plugin/internal/types"
1012
)
1113

1214
func TestGenerate(t *testing.T) {
@@ -24,18 +26,18 @@ func TestGenerate(t *testing.T) {
2426
},
2527
},
2628
}
27-
policyConf := policyConfig{
29+
policyConf := types.PolicyConfig{
2830
Name: "policy-app-config",
29-
Manifests: []manifest{
31+
Manifests: []types.Manifest{
3032
{
3133
Path: path.Join(tmpDir, "configmap.yaml"),
3234
Patches: []map[string]interface{}{patch},
3335
},
3436
},
3537
}
36-
policyConf2 := policyConfig{
38+
policyConf2 := types.PolicyConfig{
3739
Name: "policy-app-config2",
38-
Manifests: []manifest{
40+
Manifests: []types.Manifest{
3941
{Path: path.Join(tmpDir, "configmap.yaml")},
4042
},
4143
}
@@ -155,15 +157,15 @@ func TestGenerateSeparateBindings(t *testing.T) {
155157
createConfigMap(t, tmpDir, "configmap.yaml")
156158
p := Plugin{}
157159
p.PolicyDefaults.Namespace = "my-policies"
158-
policyConf := policyConfig{
160+
policyConf := types.PolicyConfig{
159161
Name: "policy-app-config",
160-
Manifests: []manifest{
162+
Manifests: []types.Manifest{
161163
{Path: path.Join(tmpDir, "configmap.yaml")},
162164
},
163165
}
164-
policyConf2 := policyConfig{
166+
policyConf2 := types.PolicyConfig{
165167
Name: "policy-app-config2",
166-
Manifests: []manifest{
168+
Manifests: []types.Manifest{
167169
{Path: path.Join(tmpDir, "configmap.yaml")},
168170
},
169171
}
@@ -306,15 +308,15 @@ func TestGenerateMissingBindingName(t *testing.T) {
306308
p.PlacementBindingDefaults.Name = ""
307309
p.PolicyDefaults.Placement.Name = "my-placement-rule"
308310
p.PolicyDefaults.Namespace = "my-policies"
309-
policyConf := policyConfig{
311+
policyConf := types.PolicyConfig{
310312
Name: "policy-app-config",
311-
Manifests: []manifest{
313+
Manifests: []types.Manifest{
312314
{Path: path.Join(tmpDir, "configmap.yaml")},
313315
},
314316
}
315-
policyConf2 := policyConfig{
317+
policyConf2 := types.PolicyConfig{
316318
Name: "policy-app-config2",
317-
Manifests: []manifest{
319+
Manifests: []types.Manifest{
318320
{Path: path.Join(tmpDir, "configmap.yaml")},
319321
},
320322
}
@@ -343,9 +345,9 @@ func TestCreatePolicy(t *testing.T) {
343345
createConfigMap(t, tmpDir, "configmap.yaml")
344346
p := Plugin{}
345347
p.PolicyDefaults.Namespace = "my-policies"
346-
policyConf := policyConfig{
348+
policyConf := types.PolicyConfig{
347349
Name: "policy-app-config",
348-
Manifests: []manifest{
350+
Manifests: []types.Manifest{
349351
{Path: path.Join(tmpDir, "configmap.yaml")},
350352
},
351353
}
@@ -402,10 +404,10 @@ func TestCreatePolicyDir(t *testing.T) {
402404
createConfigMap(t, tmpDir, "configmap2.yaml")
403405
p := Plugin{}
404406
p.PolicyDefaults.Namespace = "my-policies"
405-
policyConf := policyConfig{
407+
policyConf := types.PolicyConfig{
406408
Name: "policy-app-config",
407-
Manifests: []manifest{{Path: tmpDir}},
408-
NamespaceSelector: namespaceSelector{Include: []string{"default"}},
409+
Manifests: []types.Manifest{{Path: tmpDir}},
410+
NamespaceSelector: types.NamespaceSelector{Include: []string{"default"}},
409411
}
410412
p.Policies = append(p.Policies, policyConf)
411413
p.applyDefaults()
@@ -474,9 +476,9 @@ func TestCreatePolicyInvalidYAML(t *testing.T) {
474476
}
475477
p := Plugin{}
476478
p.PolicyDefaults.Namespace = "my-policies"
477-
policyConf := policyConfig{
479+
policyConf := types.PolicyConfig{
478480
Name: "policy-app-config",
479-
Manifests: []manifest{{Path: manifestPath}},
481+
Manifests: []types.Manifest{{Path: manifestPath}},
480482
}
481483
p.Policies = append(p.Policies, policyConf)
482484
p.applyDefaults()
@@ -499,7 +501,7 @@ func TestCreatePlacementRuleDefault(t *testing.T) {
499501
p.allPlrs = map[string]bool{}
500502
p.csToPlr = map[string]string{}
501503
p.PolicyDefaults.Namespace = "my-policies"
502-
policyConf := policyConfig{Name: "policy-app-config"}
504+
policyConf := types.PolicyConfig{Name: "policy-app-config"}
503505

504506
name, err := p.createPlacementRule(&policyConf)
505507
if err != nil {
@@ -533,7 +535,7 @@ func TestCreatePlacementRuleSinglePlr(t *testing.T) {
533535
p.csToPlr = map[string]string{}
534536
p.PolicyDefaults.Namespace = "my-policies"
535537
p.PolicyDefaults.Placement.Name = "my-placement-rule"
536-
policyConf := policyConfig{Name: "policy-app-config"}
538+
policyConf := types.PolicyConfig{Name: "policy-app-config"}
537539

538540
name, err := p.createPlacementRule(&policyConf)
539541
if err != nil {
@@ -573,7 +575,7 @@ func TestCreatePlacementRuleClusterSelectors(t *testing.T) {
573575
p.allPlrs = map[string]bool{}
574576
p.csToPlr = map[string]string{}
575577
p.PolicyDefaults.Namespace = "my-policies"
576-
policyConf := policyConfig{Name: "policy-app-config"}
578+
policyConf := types.PolicyConfig{Name: "policy-app-config"}
577579
policyConf.Placement.ClusterSelectors = map[string]string{
578580
"cloud": "red hat",
579581
"game": "pacman",
@@ -618,15 +620,15 @@ func TestCreatePlacementRuleDuplicateName(t *testing.T) {
618620
p.allPlrs = map[string]bool{}
619621
p.csToPlr = map[string]string{}
620622
p.PolicyDefaults.Namespace = "my-policies"
621-
policyConf := policyConfig{
623+
policyConf := types.PolicyConfig{
622624
Name: "policy-app-config",
623-
Placement: placementConfig{
625+
Placement: types.PlacementConfig{
624626
Name: "my-placement",
625627
},
626628
}
627-
policyConf2 := policyConfig{
629+
policyConf2 := types.PolicyConfig{
628630
Name: "policy-app-config2",
629-
Placement: placementConfig{
631+
Placement: types.PlacementConfig{
630632
ClusterSelectors: map[string]string{"my": "app"},
631633
Name: "my-placement",
632634
},
@@ -659,7 +661,7 @@ func plrPathHelper(t *testing.T, plrYAML string) (*Plugin, string) {
659661
p.allPlrs = map[string]bool{}
660662
p.processedPlrs = map[string]bool{}
661663
p.PolicyDefaults.Namespace = "my-policies"
662-
policyConf := policyConfig{Name: "policy-app-config"}
664+
policyConf := types.PolicyConfig{Name: "policy-app-config"}
663665
policyConf.Placement.PlacementRulePath = plrPath
664666
p.Policies = append(p.Policies, policyConf)
665667

@@ -832,14 +834,14 @@ func TestCreatePlacementBinding(t *testing.T) {
832834
t.Parallel()
833835
p := Plugin{}
834836
p.PolicyDefaults.Namespace = "my-policies"
835-
policyConf := policyConfig{Name: "policy-app-config"}
837+
policyConf := types.PolicyConfig{Name: "policy-app-config"}
836838
p.Policies = append(p.Policies, policyConf)
837-
policyConf2 := policyConfig{Name: "policy-app-config2"}
839+
policyConf2 := types.PolicyConfig{Name: "policy-app-config2"}
838840
p.Policies = append(p.Policies, policyConf2)
839841

840842
bindingName := "my-placement-binding"
841843
plrName := "my-placement-rule"
842-
policyConfs := []*policyConfig{}
844+
policyConfs := []*types.PolicyConfig{}
843845
policyConfs = append(policyConfs, &p.Policies[0], &p.Policies[1])
844846

845847
err := p.createPlacementBinding(bindingName, plrName, policyConfs)

0 commit comments

Comments
 (0)