forked from LaconicNetwork/kompose
Upgrade deployment/daemonset to apps/v1 (#1207)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user