forked from LaconicNetwork/kompose
Merge pull request #1744 from AhmedGrati/fix-e2e-determinstic-output
fix: make transforming more deterministic
This commit is contained in:
commit
b3a3656c73
@ -686,14 +686,16 @@ func getServiceGroupID(service kobject.ServiceConfig, mode string) string {
|
||||
// A warn/info message should be printed to let the user know.
|
||||
func KomposeObjectToServiceConfigGroupMapping(komposeObject *kobject.KomposeObject, opt kobject.ConvertOptions) map[string]kobject.ServiceConfigGroup {
|
||||
serviceConfigGroup := make(map[string]kobject.ServiceConfigGroup)
|
||||
sortedServiceConfigs := SortedKeys(komposeObject.ServiceConfigs)
|
||||
|
||||
for name, service := range komposeObject.ServiceConfigs {
|
||||
groupID := getServiceGroupID(service, opt.ServiceGroupMode)
|
||||
for _, service := range sortedServiceConfigs {
|
||||
serviceConfig := komposeObject.ServiceConfigs[service]
|
||||
groupID := getServiceGroupID(serviceConfig, opt.ServiceGroupMode)
|
||||
if groupID != "" {
|
||||
service.Name = name
|
||||
service.InGroup = true
|
||||
serviceConfigGroup[groupID] = append(serviceConfigGroup[groupID], service)
|
||||
komposeObject.ServiceConfigs[name] = service
|
||||
serviceConfig.Name = service
|
||||
serviceConfig.InGroup = true
|
||||
serviceConfigGroup[groupID] = append(serviceConfigGroup[groupID], serviceConfig)
|
||||
komposeObject.ServiceConfigs[service] = serviceConfig
|
||||
}
|
||||
}
|
||||
|
||||
@ -806,9 +808,9 @@ func (k *Kubernetes) RemoveDupObjects(objs *[]runtime.Object) {
|
||||
}
|
||||
|
||||
// SortedKeys Ensure the kubernetes objects are in a consistent order
|
||||
func SortedKeys(komposeObject kobject.KomposeObject) []string {
|
||||
func SortedKeys[V kobject.ServiceConfig | kobject.ServiceConfigGroup](serviceConfig map[string]V) []string {
|
||||
var sortedKeys []string
|
||||
for name := range komposeObject.ServiceConfigs {
|
||||
for name := range serviceConfig {
|
||||
sortedKeys = append(sortedKeys, name)
|
||||
}
|
||||
sort.Strings(sortedKeys)
|
||||
|
||||
@ -511,7 +511,7 @@ func TestSortedKeys(t *testing.T) {
|
||||
komposeObject := kobject.KomposeObject{
|
||||
ServiceConfigs: map[string]kobject.ServiceConfig{"b": service, "a": service1},
|
||||
}
|
||||
a := SortedKeys(komposeObject)
|
||||
a := SortedKeys(komposeObject.ServiceConfigs)
|
||||
if !reflect.DeepEqual(a, c) {
|
||||
t.Logf("Test Fail output should be %s", c)
|
||||
}
|
||||
|
||||
@ -1455,28 +1455,33 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
if opt.ServiceGroupMode != "" {
|
||||
log.Debugf("Service group mode is: %s", opt.ServiceGroupMode)
|
||||
komposeObjectToServiceConfigGroupMapping := KomposeObjectToServiceConfigGroupMapping(&komposeObject, opt)
|
||||
for name, group := range komposeObjectToServiceConfigGroupMapping {
|
||||
sortedGroupMappingKeys := SortedKeys(komposeObjectToServiceConfigGroupMapping)
|
||||
for _, group := range sortedGroupMappingKeys {
|
||||
groupMapping := komposeObjectToServiceConfigGroupMapping[group]
|
||||
var objects []runtime.Object
|
||||
podSpec := PodSpec{}
|
||||
|
||||
var groupName string
|
||||
// if using volume group, the name here will be a volume config string. reset to the first service name
|
||||
if opt.ServiceGroupMode == "volume" {
|
||||
if opt.ServiceGroupName != "" {
|
||||
name = opt.ServiceGroupName
|
||||
groupName = opt.ServiceGroupName
|
||||
} else {
|
||||
var names []string
|
||||
for _, svc := range group {
|
||||
for _, svc := range groupMapping {
|
||||
names = append(names, svc.Name)
|
||||
}
|
||||
name = strings.Join(names, "-")
|
||||
groupName = strings.Join(names, "-")
|
||||
}
|
||||
} else {
|
||||
groupName = group
|
||||
}
|
||||
|
||||
// added a container
|
||||
// ports conflict check between services
|
||||
portsUses := map[string]bool{}
|
||||
|
||||
for _, service := range group {
|
||||
for _, service := range groupMapping {
|
||||
// first do ports check
|
||||
ports := ConfigPorts(service)
|
||||
for _, port := range ports {
|
||||
@ -1487,7 +1492,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
portsUses[key] = true
|
||||
}
|
||||
|
||||
log.Infof("Group Service %s to [%s]", service.Name, name)
|
||||
log.Infof("Group Service %s to [%s]", service.Name, groupName)
|
||||
service.WithKomposeAnnotation = opt.WithKomposeAnnotation
|
||||
podSpec.Append(AddContainer(service, opt))
|
||||
|
||||
@ -1495,17 +1500,17 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
return nil, err
|
||||
}
|
||||
// override..
|
||||
objects = append(objects, k.CreateWorkloadAndConfigMapObjects(name, service, opt)...)
|
||||
k.configKubeServiceAndIngressForService(service, name, &objects)
|
||||
objects = append(objects, k.CreateWorkloadAndConfigMapObjects(groupName, service, opt)...)
|
||||
k.configKubeServiceAndIngressForService(service, groupName, &objects)
|
||||
|
||||
// Configure the container volumes.
|
||||
volumesMount, volumes, pvc, cms, err := k.ConfigVolumes(name, service)
|
||||
volumesMount, volumes, pvc, cms, err := k.ConfigVolumes(groupName, service)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "k.ConfigVolumes failed")
|
||||
}
|
||||
// Configure Tmpfs
|
||||
if len(service.TmpFs) > 0 {
|
||||
TmpVolumesMount, TmpVolumes := k.ConfigTmpfs(name, service)
|
||||
TmpVolumesMount, TmpVolumes := k.ConfigTmpfs(groupName, service)
|
||||
volumes = append(volumes, TmpVolumes...)
|
||||
volumesMount = append(volumesMount, TmpVolumesMount...)
|
||||
}
|
||||
@ -1527,14 +1532,14 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
|
||||
podSpec.Append(
|
||||
SetPorts(service),
|
||||
ImagePullPolicy(name, service),
|
||||
RestartPolicy(name, service),
|
||||
SecurityContext(name, service),
|
||||
ImagePullPolicy(groupName, service),
|
||||
RestartPolicy(groupName, service),
|
||||
SecurityContext(groupName, service),
|
||||
HostName(service),
|
||||
DomainName(service),
|
||||
ResourcesLimits(service),
|
||||
ResourcesRequests(service),
|
||||
TerminationGracePeriodSeconds(name, service),
|
||||
TerminationGracePeriodSeconds(groupName, service),
|
||||
TopologySpreadConstraints(service),
|
||||
)
|
||||
|
||||
@ -1542,7 +1547,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
podSpec.Append(ServiceAccountName(serviceAccountName))
|
||||
}
|
||||
|
||||
err = k.UpdateKubernetesObjectsMultipleContainers(name, service, &objects, podSpec)
|
||||
err = k.UpdateKubernetesObjectsMultipleContainers(groupName, service, &objects, podSpec)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "Error transforming Kubernetes objects")
|
||||
}
|
||||
@ -1557,7 +1562,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
allobjects = append(allobjects, objects...)
|
||||
}
|
||||
}
|
||||
sortedKeys := SortedKeys(komposeObject)
|
||||
sortedKeys := SortedKeys(komposeObject.ServiceConfigs)
|
||||
for _, name := range sortedKeys {
|
||||
service := komposeObject.ServiceConfigs[name]
|
||||
|
||||
|
||||
@ -280,7 +280,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
||||
}
|
||||
}
|
||||
|
||||
sortedKeys := kubernetes.SortedKeys(komposeObject)
|
||||
sortedKeys := kubernetes.SortedKeys(komposeObject.ServiceConfigs)
|
||||
for _, name := range sortedKeys {
|
||||
service := komposeObject.ServiceConfigs[name]
|
||||
var objects []runtime.Object
|
||||
|
||||
@ -39,6 +39,14 @@ spec:
|
||||
io.kompose.service: librenms-dispatcher
|
||||
spec:
|
||||
containers:
|
||||
- env:
|
||||
- name: TZ
|
||||
image: librenms/dispatcher:latest
|
||||
name: dispatcher
|
||||
resources: {}
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: librenms-dispatcher-claim0
|
||||
- env:
|
||||
- name: TZ
|
||||
image: librenms/librenms:latest
|
||||
@ -51,15 +59,7 @@ spec:
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: librenms-dispatcher-claim0
|
||||
- env:
|
||||
- name: TZ
|
||||
image: librenms/dispatcher:latest
|
||||
name: dispatcher
|
||||
resources: {}
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: librenms-dispatcher-claim0
|
||||
hostname: dispatcher
|
||||
hostname: librenms
|
||||
restartPolicy: Always
|
||||
volumes:
|
||||
- name: librenms-dispatcher-claim0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user