diff --git a/pkg/policy/policy.go b/pkg/policy/policy.go index f45ecf7..bb6a963 100644 --- a/pkg/policy/policy.go +++ b/pkg/policy/policy.go @@ -20,10 +20,6 @@ const ( PolicyMappingFileName = "mapping.yaml" ) -var ( - PolicyFileNames = []string{"data.yaml", "policy.rego"} -) - type PolicyMappings struct { Version string `json:"version"` Kind string `json:"kind"` @@ -32,10 +28,14 @@ type PolicyMappings struct { } type PolicyMapping struct { - Name string `json:"namespace"` - Location string `json:"location"` - Description string `json:"description"` - Origin PolicyOrigin `json:"origin"` + Name string `json:"namespace"` + Description string `json:"description"` + Origin PolicyOrigin `json:"origin"` + Files []PolicyMappingFile `json:"files"` +} + +type PolicyMappingFile struct { + Path string `json:"path"` } type PolicyMirror struct { @@ -75,9 +75,10 @@ func resolveLocalPolicy(opts *PolicyOptions, mapping *PolicyMapping) ([]*PolicyF if opts.LocalPolicyDir == "" { return nil, fmt.Errorf("local policy dir not set") } - files := make([]*PolicyFile, 0, len(PolicyFileNames)) - for _, filename := range PolicyFileNames { - filePath := path.Join(opts.LocalPolicyDir, mapping.Location, filename) + files := make([]*PolicyFile, 0, len(mapping.Files)) + for _, f := range mapping.Files { + filename := f.Path + filePath := path.Join(opts.LocalPolicyDir, filename) fileContents, err := os.ReadFile(filePath) if err != nil { return nil, fmt.Errorf("failed to read policy file %s: %w", filename, err) @@ -108,10 +109,10 @@ func loadLocalMappings(opts *PolicyOptions) (*PolicyMappings, error) { } func resolveTufPolicy(opts *PolicyOptions, mapping *PolicyMapping) ([]*PolicyFile, error) { - files := make([]*PolicyFile, 0, len(PolicyFileNames)) - for _, filename := range PolicyFileNames { - filePath := path.Join(mapping.Location, filename) - _, fileContents, err := opts.TufClient.DownloadTarget(filePath, filepath.Join(opts.LocalTargetsDir, filePath)) + files := make([]*PolicyFile, 0, len(mapping.Files)) + for _, f := range mapping.Files { + filename := f.Path + _, fileContents, err := opts.TufClient.DownloadTarget(filename, filepath.Join(opts.LocalTargetsDir, filename)) if err != nil { return nil, fmt.Errorf("failed to download policy file %s: %w", filename, err) } diff --git a/pkg/policy/testdata/mock-tuf-allow/doi/data.yaml b/pkg/policy/testdata/mock-tuf-allow/doi/data.yaml deleted file mode 100644 index 1e2812b..0000000 --- a/pkg/policy/testdata/mock-tuf-allow/doi/data.yaml +++ /dev/null @@ -1 +0,0 @@ -config: diff --git a/pkg/policy/testdata/mock-tuf-allow/mapping.yaml b/pkg/policy/testdata/mock-tuf-allow/mapping.yaml index e637a9c..794a132 100644 --- a/pkg/policy/testdata/mock-tuf-allow/mapping.yaml +++ b/pkg/policy/testdata/mock-tuf-allow/mapping.yaml @@ -7,4 +7,5 @@ policies: prefix: library/ name: docker-official-images description: Docker Official Images - location: doi + files: + - path: doi/policy.rego diff --git a/pkg/policy/testdata/mock-tuf-deny/doi/data.yaml b/pkg/policy/testdata/mock-tuf-deny/doi/data.yaml deleted file mode 100644 index 1e2812b..0000000 --- a/pkg/policy/testdata/mock-tuf-deny/doi/data.yaml +++ /dev/null @@ -1 +0,0 @@ -config: diff --git a/pkg/policy/testdata/mock-tuf-deny/mapping.yaml b/pkg/policy/testdata/mock-tuf-deny/mapping.yaml index e637a9c..794a132 100644 --- a/pkg/policy/testdata/mock-tuf-deny/mapping.yaml +++ b/pkg/policy/testdata/mock-tuf-deny/mapping.yaml @@ -7,4 +7,5 @@ policies: prefix: library/ name: docker-official-images description: Docker Official Images - location: doi + files: + - path: doi/policy.rego diff --git a/pkg/policy/testdata/mock-tuf-verify-sig/doi/data.yaml b/pkg/policy/testdata/mock-tuf-verify-sig/doi/data.yaml deleted file mode 100644 index 1e2812b..0000000 --- a/pkg/policy/testdata/mock-tuf-verify-sig/doi/data.yaml +++ /dev/null @@ -1 +0,0 @@ -config: diff --git a/pkg/policy/testdata/mock-tuf-verify-sig/mapping.yaml b/pkg/policy/testdata/mock-tuf-verify-sig/mapping.yaml index e637a9c..794a132 100644 --- a/pkg/policy/testdata/mock-tuf-verify-sig/mapping.yaml +++ b/pkg/policy/testdata/mock-tuf-verify-sig/mapping.yaml @@ -7,4 +7,5 @@ policies: prefix: library/ name: docker-official-images description: Docker Official Images - location: doi + files: + - path: doi/policy.rego diff --git a/pkg/policy/testdata/mock-tuf-wrong-key/doi/data.yaml b/pkg/policy/testdata/mock-tuf-wrong-key/doi/data.yaml deleted file mode 100644 index 1e2812b..0000000 --- a/pkg/policy/testdata/mock-tuf-wrong-key/doi/data.yaml +++ /dev/null @@ -1 +0,0 @@ -config: diff --git a/pkg/policy/testdata/mock-tuf-wrong-key/mapping.yaml b/pkg/policy/testdata/mock-tuf-wrong-key/mapping.yaml index e637a9c..794a132 100644 --- a/pkg/policy/testdata/mock-tuf-wrong-key/mapping.yaml +++ b/pkg/policy/testdata/mock-tuf-wrong-key/mapping.yaml @@ -7,4 +7,5 @@ policies: prefix: library/ name: docker-official-images description: Docker Official Images - location: doi + files: + - path: doi/policy.rego diff --git a/test/testdata/local-policy/mapping.yaml b/test/testdata/local-policy/mapping.yaml index 9db0edf..8a928d7 100644 --- a/test/testdata/local-policy/mapping.yaml +++ b/test/testdata/local-policy/mapping.yaml @@ -7,7 +7,9 @@ policies: prefix: library/ name: test-images description: Local test images - location: doi + files: + - path: doi/data.yaml + - path: doi/policy.rego mirrors: - name: test-images