Change legacy ABAC decode to use new Decoder

The new Decode() method is able to deserialize an unknown type when an
explicit Into is provided.
pull/6/head
Clayton Coleman 2015-12-21 00:28:55 -05:00
parent 4d127dc969
commit 4386e8cc38
2 changed files with 17 additions and 19 deletions

View File

@ -29,9 +29,10 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
api "k8s.io/kubernetes/pkg/apis/abac" api "k8s.io/kubernetes/pkg/apis/abac"
_ "k8s.io/kubernetes/pkg/apis/abac/latest"
"k8s.io/kubernetes/pkg/apis/abac/v0" "k8s.io/kubernetes/pkg/apis/abac/v0"
_ "k8s.io/kubernetes/pkg/apis/abac/v1beta1"
"k8s.io/kubernetes/pkg/auth/authorizer" "k8s.io/kubernetes/pkg/auth/authorizer"
"k8s.io/kubernetes/pkg/runtime"
) )
type policyLoadError struct { type policyLoadError struct {
@ -63,6 +64,8 @@ func NewFromFile(path string) (policyList, error) {
scanner := bufio.NewScanner(file) scanner := bufio.NewScanner(file)
pl := make(policyList, 0) pl := make(policyList, 0)
decoder := api.Codecs.UniversalDecoder()
i := 0 i := 0
unversionedLines := 0 unversionedLines := 0
for scanner.Scan() { for scanner.Scan() {
@ -76,34 +79,29 @@ func NewFromFile(path string) (policyList, error) {
continue continue
} }
dataKind, err := api.Scheme.DataKind(b) decodedObj, _, err := decoder.Decode(b, nil, nil)
if err != nil { if err != nil {
if !(runtime.IsMissingVersion(err) || runtime.IsMissingKind(err) || runtime.IsNotRegisteredError(err)) {
return nil, policyLoadError{path, i, b, err} return nil, policyLoadError{path, i, b, err}
} }
if dataKind.IsEmpty() {
unversionedLines++ unversionedLines++
// Migrate unversioned policy object // Migrate unversioned policy object
oldPolicy := &v0.Policy{} oldPolicy := &v0.Policy{}
if err := latest.Codec.DecodeInto(b, oldPolicy); err != nil { if err := runtime.DecodeInto(decoder, b, oldPolicy); err != nil {
return nil, policyLoadError{path, i, b, err} return nil, policyLoadError{path, i, b, err}
} }
if err := api.Scheme.Convert(oldPolicy, p); err != nil { if err := api.Scheme.Convert(oldPolicy, p); err != nil {
return nil, policyLoadError{path, i, b, err} return nil, policyLoadError{path, i, b, err}
} }
} else { pl = append(pl, p)
decodedObj, err := latest.Codec.Decode(b) continue
if err != nil {
return nil, policyLoadError{path, i, b, err}
} }
decodedPolicy, ok := decodedObj.(*api.Policy) decodedPolicy, ok := decodedObj.(*api.Policy)
if !ok { if !ok {
return nil, policyLoadError{path, i, b, fmt.Errorf("unrecognized object: %#v", decodedObj)} return nil, policyLoadError{path, i, b, fmt.Errorf("unrecognized object: %#v", decodedObj)}
} }
p = decodedPolicy pl = append(pl, decodedPolicy)
}
pl = append(pl, p)
} }
if unversionedLines > 0 { if unversionedLines > 0 {

View File

@ -21,7 +21,7 @@ import (
"os" "os"
"testing" "testing"
"k8s.io/kubernetes/pkg/apis/abac" api "k8s.io/kubernetes/pkg/apis/abac"
"k8s.io/kubernetes/pkg/apis/abac/v0" "k8s.io/kubernetes/pkg/apis/abac/v0"
"k8s.io/kubernetes/pkg/apis/abac/v1beta1" "k8s.io/kubernetes/pkg/apis/abac/v1beta1"
"k8s.io/kubernetes/pkg/auth/authorizer" "k8s.io/kubernetes/pkg/auth/authorizer"