mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 19:47:56 +00:00
Kubectl convert - warn users with NotRegisteredError and Fail on all other errors (#117002)
* Convert file but warn user with impossible conversions * Only continuing for NotRegisteredErrors. Using iostreams for warning user instead of stdError * Formatting, correct tests to use valid DNS-1035.
This commit is contained in:
parent
95d3492eb8
commit
5da386745a
@ -180,7 +180,7 @@ func (o *ConvertOptions) RunConvert() error {
|
|||||||
|
|
||||||
internalEncoder := scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...)
|
internalEncoder := scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...)
|
||||||
internalVersionJSONEncoder := unstructured.NewJSONFallbackEncoder(internalEncoder)
|
internalVersionJSONEncoder := unstructured.NewJSONFallbackEncoder(internalEncoder)
|
||||||
objects, err := asVersionedObject(infos, !singleItemImplied, specifiedOutputVersion, internalVersionJSONEncoder)
|
objects, err := asVersionedObject(infos, !singleItemImplied, specifiedOutputVersion, internalVersionJSONEncoder, o.IOStreams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -192,8 +192,8 @@ func (o *ConvertOptions) RunConvert() error {
|
|||||||
// the objects as children, or if only a single Object is present, as that object. The provided
|
// the objects as children, or if only a single Object is present, as that object. The provided
|
||||||
// version will be preferred as the conversion target, but the Object's mapping version will be
|
// version will be preferred as the conversion target, but the Object's mapping version will be
|
||||||
// used if that version is not present.
|
// used if that version is not present.
|
||||||
func asVersionedObject(infos []*resource.Info, forceList bool, specifiedOutputVersion schema.GroupVersion, encoder runtime.Encoder) (runtime.Object, error) {
|
func asVersionedObject(infos []*resource.Info, forceList bool, specifiedOutputVersion schema.GroupVersion, encoder runtime.Encoder, iostream genericclioptions.IOStreams) (runtime.Object, error) {
|
||||||
objects, err := asVersionedObjects(infos, specifiedOutputVersion, encoder)
|
objects, err := asVersionedObjects(infos, specifiedOutputVersion, encoder, iostream)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -230,7 +230,7 @@ func asVersionedObject(infos []*resource.Info, forceList bool, specifiedOutputVe
|
|||||||
// asVersionedObjects converts a list of infos into versioned objects. The provided
|
// asVersionedObjects converts a list of infos into versioned objects. The provided
|
||||||
// version will be preferred as the conversion target, but the Object's mapping version will be
|
// version will be preferred as the conversion target, but the Object's mapping version will be
|
||||||
// used if that version is not present.
|
// used if that version is not present.
|
||||||
func asVersionedObjects(infos []*resource.Info, specifiedOutputVersion schema.GroupVersion, encoder runtime.Encoder) ([]runtime.Object, error) {
|
func asVersionedObjects(infos []*resource.Info, specifiedOutputVersion schema.GroupVersion, encoder runtime.Encoder, iostream genericclioptions.IOStreams) ([]runtime.Object, error) {
|
||||||
objects := []runtime.Object{}
|
objects := []runtime.Object{}
|
||||||
for _, info := range infos {
|
for _, info := range infos {
|
||||||
if info.Object == nil {
|
if info.Object == nil {
|
||||||
@ -263,6 +263,14 @@ func asVersionedObjects(infos []*resource.Info, specifiedOutputVersion schema.Gr
|
|||||||
|
|
||||||
converted, err := tryConvert(scheme.Scheme, info.Object, targetVersions...)
|
converted, err := tryConvert(scheme.Scheme, info.Object, targetVersions...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// Dont fail on not registered error converting objects.
|
||||||
|
// Simply warn the user with the error returned from api-machinery and continue with the rest of the file
|
||||||
|
// fail on all other errors
|
||||||
|
if runtime.IsNotRegisteredError(err) {
|
||||||
|
fmt.Fprintln(iostream.ErrOut, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
objects = append(objects, converted)
|
objects = append(objects, converted)
|
||||||
|
@ -100,6 +100,16 @@ func TestConvertObject(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "converting multiple including service to neworking.k8s.io/v1",
|
||||||
|
file: "../../../../test/fixtures/pkg/kubectl/cmd/convert/serviceandingress.yaml",
|
||||||
|
outputVersion: "networking.k8s.io/v1",
|
||||||
|
fields: []checkField{
|
||||||
|
{
|
||||||
|
expected: "apiVersion: networking.k8s.io/v1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testcases {
|
for _, tc := range testcases {
|
||||||
|
34
test/fixtures/pkg/kubectl/cmd/convert/serviceandingress.yaml
vendored
Normal file
34
test/fixtures/pkg/kubectl/cmd/convert/serviceandingress.yaml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: test-cluster-ip
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: port
|
||||||
|
port: 80
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 80
|
||||||
|
selector:
|
||||||
|
app: test-cluster-ip
|
||||||
|
type: ClusterIP
|
||||||
|
---
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: test-ingress
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: test.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
serviceName: test1
|
||||||
|
servicePort: 80
|
||||||
|
path: /test1
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
- backend:
|
||||||
|
serviceName: webapi
|
||||||
|
servicePort: 80
|
||||||
|
path: /test2
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
|
Loading…
Reference in New Issue
Block a user