in internal/pkg/cli/deploy.go [315:379]
func (o *deployOpts) getDeploymentOrder() ([][]string, error) {
// Get a map from workload name to deployment priority
if err := o.parseDeploymentOrderTags(o.workloadNames); err != nil {
return nil, err
}
// Iterate over priority map to invert it and get groups of workloads with the same priority.
groupsMap := make(map[int][]string)
for k, v := range o.deploymentOrderMap {
groupsMap[v] = append(groupsMap[v], k)
}
// If --all is specified, we need to add the remainder of workloads with math.MaxInt priority according to whether or not --init-wkld is specified.
if o.deployAllWorkloads {
specifiedWorkloadList := make([]string, 0, len(o.deploymentOrderMap))
for k := range o.deploymentOrderMap {
specifiedWorkloadList = append(specifiedWorkloadList, k)
}
if o.yesInitWkld {
// Add all unspecified local workloads to the list of workloads to be deployed.
localWorkloads, err := o.listLocalWorkloads()
if err != nil {
return nil, err
}
workloadsToAppend := slices.DeleteFunc(slices.Clone(localWorkloads), func(s string) bool { return slices.Contains(specifiedWorkloadList, s) })
if len(workloadsToAppend) != 0 {
groupsMap[math.MaxInt] = append(groupsMap[math.MaxInt], workloadsToAppend...)
}
} else {
// Otherwise (--init-wkld is false): get only get initialized local workloads.
initializedWorkloads, err := o.listInitializedLocalWorkloads()
if err != nil {
return nil, err
}
workloadsToAppend := slices.DeleteFunc(slices.Clone(initializedWorkloads), func(s string) bool { return slices.Contains(specifiedWorkloadList, s) })
if len(workloadsToAppend) != 0 {
groupsMap[math.MaxInt] = append(groupsMap[math.MaxInt], workloadsToAppend...)
}
}
}
if len(groupsMap) == 0 {
log.Infoln("No workloads to deploy. Did you mean to specify --init-wkld with --all?")
return nil, errors.New("generate deployment groups: no workloads were specified")
}
deploymentGroups := queue.NewPriorityQueue[workloadPriority]()
for k, v := range groupsMap {
deploymentGroups.Push(workloadPriority{
priority: k,
workloads: v,
})
}
res := make([][]string, 0, deploymentGroups.Len())
for deploymentGroups.Len() > 0 {
v, ok := deploymentGroups.Pop()
if !ok || v == nil {
continue
}
res = append(res, v.workloads)
}
return res, nil
}