mirror of https://github.com/k3s-io/k3s
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
parent
4d127dc969
commit
4386e8cc38
|
@ -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 {
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue