Upgrade deployment/daemonset to apps/v1 (#1207)

This commit is contained in:
Hang Yan
2019-12-26 16:36:11 +08:00
committed by GitHub
parent 73ec0abab2
commit bc28ffc675
101 changed files with 4186 additions and 2966 deletions
+62 -7
View File
@@ -225,14 +225,28 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
return err
}
val := reflect.ValueOf(v).Elem()
// Use reflect to access TypeMeta struct inside runtime.Object.
// cast it to correct type - unversioned.TypeMeta
typeMeta := val.FieldByName("TypeMeta").Interface().(unversioned.TypeMeta)
var typeMeta unversioned.TypeMeta
var objectMeta api.ObjectMeta
// Use reflect to access ObjectMeta struct inside runtime.Object.
// cast it to correct type - api.ObjectMeta
objectMeta := val.FieldByName("ObjectMeta").Interface().(api.ObjectMeta)
if us, ok := v.(*runtime.Unstructured); ok {
typeMeta = unversioned.TypeMeta{
Kind: us.GetKind(),
APIVersion: us.GetAPIVersion(),
}
objectMeta = api.ObjectMeta{
Name: us.GetName(),
}
} else {
val := reflect.ValueOf(v).Elem()
// Use reflect to access TypeMeta struct inside runtime.Object.
// cast it to correct type - unversioned.TypeMeta
typeMeta = val.FieldByName("TypeMeta").Interface().(unversioned.TypeMeta)
// Use reflect to access ObjectMeta struct inside runtime.Object.
// cast it to correct type - api.ObjectMeta
objectMeta = val.FieldByName("ObjectMeta").Interface().(api.ObjectMeta)
}
file, err = transformer.Print(objectMeta.Name, finalDirName, strings.ToLower(typeMeta.Kind), data, opt.ToStdout, opt.GenerateJSON, f, opt.Provider)
if err != nil {
@@ -269,6 +283,11 @@ func marshal(obj runtime.Object, jsonFormat bool) (data []byte, err error) {
// if groupVersion is empty (unversioned.GroupVersion{}), use version from original object (obj)
func convertToVersion(obj runtime.Object, groupVersion unversioned.GroupVersion) (runtime.Object, error) {
// ignore unstruct object
if _, ok := obj.(*runtime.Unstructured); ok {
return obj, nil
}
var version unversioned.GroupVersion
if groupVersion.Empty() {
@@ -605,6 +624,42 @@ func (k *Kubernetes) RemoveDupObjects(objs *[]runtime.Object) {
*objs = result
}
func resetWorkloadApiVersion(d runtime.Object) runtime.Object {
data, err := json.Marshal(d)
if err == nil {
var us runtime.Unstructured
if err := json.Unmarshal(data, &us); err == nil {
us.SetGroupVersionKind(unversioned.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: d.GetObjectKind().GroupVersionKind().Kind,
})
return &us
} else {
return d
}
} else {
return d
}
}
// FixWorkloadVersion force reset deployment/daemonset's apiversion to apps/v1
func (k *Kubernetes) FixWorkloadVersion(objs *[]runtime.Object) {
var result []runtime.Object
for _, obj := range *objs {
if d, ok := obj.(*extensions.Deployment); ok {
nd := resetWorkloadApiVersion(d)
result = append(result, nd)
} else if d, ok := obj.(*extensions.DaemonSet); ok {
nd := resetWorkloadApiVersion(d)
result = append(result, nd)
} else {
result = append(result, obj)
}
}
*objs = result
}
// SortedKeys Ensure the kubernetes objects are in a consistent order
func SortedKeys(komposeObject kobject.KomposeObject) []string {
var sortedKeys []string
+4 -1
View File
@@ -311,7 +311,9 @@ func (k *Kubernetes) InitD(name string, service kobject.ServiceConfig, replicas
},
Spec: extensions.DeploymentSpec{
Replicas: int32(replicas),
Selector: &unversioned.LabelSelector{
MatchLabels: transformer.ConfigLabels(name),
},
Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{
//Labels: transformer.ConfigLabels(name),
@@ -1098,6 +1100,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
// sort all object so Services are first
k.SortServicesFirst(&allobjects)
k.RemoveDupObjects(&allobjects)
k.FixWorkloadVersion(&allobjects)
return allobjects, nil
}
@@ -17,7 +17,10 @@ limitations under the License.
package kubernetes
import (
"encoding/json"
"fmt"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/runtime"
"reflect"
"testing"
@@ -343,6 +346,43 @@ func TestKomposeConvert(t *testing.T) {
}
foundD = true
}
if u, ok := obj.(*runtime.Unstructured); ok {
if u.GetKind() == "Deployment" {
u.SetGroupVersionKind(unversioned.GroupVersionKind{
Group: "extensions",
Version: "v1beta1",
Kind: "Deployment",
})
data, err := json.Marshal(u)
if err != nil {
t.Errorf("%v", err)
}
var d extensions.Deployment
if err := json.Unmarshal(data, &d); err == nil {
if err := checkPodTemplate(config, d.Spec.Template, labelsWithNetwork); err != nil {
t.Errorf("%v", err)
}
if err := checkMeta(config, d.ObjectMeta, name, true); err != nil {
t.Errorf("%v", err)
}
if test.opt.IsReplicaSetFlag {
if (int)(d.Spec.Replicas) != replicas {
t.Errorf("Expected %d replicas, got %d", replicas, d.Spec.Replicas)
}
} else {
if (int)(d.Spec.Replicas) != newServiceConfig().Replicas {
t.Errorf("Expected %d replicas, got %d", newServiceConfig().Replicas, d.Spec.Replicas)
}
}
foundD = true
}
}
}
}
if test.opt.CreateDS {
if ds, ok := obj.(*extensions.DaemonSet); ok {
@@ -357,6 +397,33 @@ func TestKomposeConvert(t *testing.T) {
}
foundDS = true
}
if u, ok := obj.(*runtime.Unstructured); ok {
if u.GetKind() == "DaemonSet" {
u.SetGroupVersionKind(unversioned.GroupVersionKind{
Group: "extensions",
Version: "v1beta1",
Kind: "DaemonSet",
})
data, err := json.Marshal(u)
if err != nil {
t.Errorf("%v", err)
}
var ds extensions.DaemonSet
if err := json.Unmarshal(data, &ds); err == nil {
if err := checkPodTemplate(config, ds.Spec.Template, labelsWithNetwork); err != nil {
t.Errorf("%v", err)
}
if err := checkMeta(config, ds.ObjectMeta, name, true); err != nil {
t.Errorf("%v", err)
}
foundDS = true
}
}
}
}
if test.opt.CreateRC {
if rc, ok := obj.(*api.ReplicationController); ok {
+1
View File
@@ -428,6 +428,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
// sort all object so Services are first
o.SortServicesFirst(&allobjects)
o.RemoveDupObjects(&allobjects)
o.FixWorkloadVersion(&allobjects)
return allobjects, nil
}