mirror of
https://github.com/yannh/kubeconform.git
synced 2026-04-22 11:39:52 +00:00
refactor
This commit is contained in:
parent
939b44e3ca
commit
1bc9283240
15 changed files with 241 additions and 458 deletions
|
|
@ -4,12 +4,21 @@ import (
|
|||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
|
||||
type Resource struct {
|
||||
Path string
|
||||
Bytes []byte
|
||||
sig *Signature
|
||||
}
|
||||
|
||||
type Signature struct {
|
||||
Kind, Version, Namespace, Name string
|
||||
}
|
||||
|
||||
// SignatureFromBytes returns key identifying elements from a []byte representing the resource
|
||||
func SignatureFromBytes(res []byte) (Signature, error) {
|
||||
func (res *Resource) Signature() (*Signature, error) {
|
||||
if res.sig != nil {
|
||||
return res.sig, nil
|
||||
}
|
||||
|
||||
resource := struct {
|
||||
APIVersion string `yaml:"apiVersion"`
|
||||
Kind string `yaml:"kind"`
|
||||
|
|
@ -19,12 +28,14 @@ func SignatureFromBytes(res []byte) (Signature, error) {
|
|||
GenerateName string `yaml:"generateName"`
|
||||
} `yaml:"Metadata"`
|
||||
}{}
|
||||
err := yaml.Unmarshal(res, &resource)
|
||||
err := yaml.Unmarshal(res.Bytes, &resource)
|
||||
|
||||
name := resource.Metadata.Name
|
||||
if resource.Metadata.GenerateName != "" {
|
||||
name = resource.Metadata.GenerateName + "{{ generateName }}"
|
||||
}
|
||||
|
||||
return Signature{Kind: resource.Kind, Version: resource.APIVersion, Namespace: resource.Metadata.Namespace, Name: name}, err
|
||||
// We cache the result to not unmarshall every time we want to access the signature
|
||||
res.sig = &Signature{Kind: resource.Kind, Version: resource.APIVersion, Namespace: resource.Metadata.Namespace, Name: name}
|
||||
return res.sig, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ spec:
|
|||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
sig, err := resource.SignatureFromBytes(testCase.have)
|
||||
res := resource.Resource{Bytes: testCase.have}
|
||||
sig, err := res.Signature()
|
||||
if err != nil && err.Error() != testCase.err.Error() {
|
||||
t.Errorf("test \"%s\" - received error: %s", testCase.name, err)
|
||||
}
|
||||
|
|
@ -44,6 +45,5 @@ spec:
|
|||
sig.Namespace != testCase.want.Namespace {
|
||||
t.Errorf("test \"%s\": received %+v, expected %+v", testCase.name, sig, testCase.want)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
22
pkg/resource/stream.go
Normal file
22
pkg/resource/stream.go
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
package resource
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
func FromStream(path string, r io.Reader) ([]Resource, error) {
|
||||
data, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return []Resource{}, err
|
||||
}
|
||||
|
||||
resources := []Resource{}
|
||||
rawResources := bytes.Split(data, []byte("---\n"))
|
||||
for _, rawResource := range rawResources {
|
||||
resources = append(resources, Resource{Path: path, Bytes: rawResource})
|
||||
}
|
||||
|
||||
return resources, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue