Commit 4386e8cc authored by Clayton Coleman's avatar Clayton Coleman

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.
parent 4d127dc9
...@@ -29,9 +29,10 @@ import ( ...@@ -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) { ...@@ -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) { ...@@ -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 {
return nil, policyLoadError{path, i, b, err} if !(runtime.IsMissingVersion(err) || runtime.IsMissingKind(err) || runtime.IsNotRegisteredError(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)
if !ok {
return nil, policyLoadError{path, i, b, fmt.Errorf("unrecognized object: %#v", decodedObj)}
}
p = decodedPolicy
} }
pl = append(pl, p) decodedPolicy, ok := decodedObj.(*api.Policy)
if !ok {
return nil, policyLoadError{path, i, b, fmt.Errorf("unrecognized object: %#v", decodedObj)}
}
pl = append(pl, decodedPolicy)
} }
if unversionedLines > 0 { if unversionedLines > 0 {
......
...@@ -21,7 +21,7 @@ import ( ...@@ -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"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment