|
1 | 1 | package daemonset
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "bytes" |
4 | 5 | "context"
|
5 | 6 | "errors"
|
6 | 7 | "fmt"
|
7 | 8 | "strings"
|
| 9 | + "text/template" |
8 | 10 |
|
9 | 11 | "github.com/go-openapi/swag"
|
10 | 12 | kmmv1beta1 "github.com/kubernetes-sigs/kernel-module-management/api/v1beta1"
|
@@ -179,9 +181,14 @@ func (dc *daemonSetGenerator) SetDriverContainerAsDesired(
|
179 | 181 | }
|
180 | 182 |
|
181 | 183 | var modulesOrderAnnotations map[string]string
|
182 |
| - if mld.Modprobe.ModulesLoadingOrder != nil { |
| 184 | + if len(mld.Modprobe.ModulesLoadingOrder) >= 2 { |
| 185 | + modulesOrderConf, err := getModulesOrderAnnotationValue(mld) |
| 186 | + if err != nil { |
| 187 | + return fmt.Errorf("could not generate the softdep configuration: %v", err) |
| 188 | + } |
| 189 | + |
183 | 190 | modulesOrderAnnotations = map[string]string{
|
184 |
| - "modules-order": getModulesOrderAnnotationValue(mld), |
| 191 | + "modules-order": modulesOrderConf, |
185 | 192 | }
|
186 | 193 | softdepVolume := v1.Volume{
|
187 | 194 | Name: "modules-order",
|
@@ -494,19 +501,18 @@ func makeUnloadCommand(spec kmmv1beta1.ModprobeSpec, modName string) []string {
|
494 | 501 | return append(unloadCommandShell, unloadCommand.String())
|
495 | 502 | }
|
496 | 503 |
|
497 |
| -func getModulesOrderAnnotationValue(mld *api.ModuleLoaderData) string { |
498 |
| - modulesNames := mld.Modprobe.ModulesLoadingOrder |
499 |
| - softDepData := "" |
500 |
| - for i := 0; i < len(modulesNames); i++ { |
501 |
| - if i == len(modulesNames)-1 { |
502 |
| - break |
503 |
| - } |
504 |
| - line := prepareSoftDepLine(modulesNames[i], modulesNames[i+1]) |
505 |
| - softDepData = softDepData + line |
506 |
| - } |
507 |
| - return softDepData |
508 |
| -} |
| 504 | +var softdepTemplate = template.Must( |
| 505 | + template.New("softdep").Parse( |
| 506 | + `{{ range $index, $mod := slice $ 1 -}} |
| 507 | +softdep {{ index $ $index }} pre: {{ $mod }} |
| 508 | +{{ end -}} |
| 509 | +`), |
| 510 | +) |
| 511 | + |
| 512 | +func getModulesOrderAnnotationValue(mld *api.ModuleLoaderData) (string, error) { |
| 513 | + var buf bytes.Buffer |
| 514 | + |
| 515 | + err := softdepTemplate.Execute(&buf, mld.Modprobe.ModulesLoadingOrder) |
509 | 516 |
|
510 |
| -func prepareSoftDepLine(dependendModuleName, moduleName string) string { |
511 |
| - return fmt.Sprintf("softdep %s pre: %s\n", dependendModuleName, moduleName) |
| 517 | + return buf.String(), err |
512 | 518 | }
|
0 commit comments