|
1 | 1 | package saltboot
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "bufio" |
4 | 5 | "encoding/json"
|
5 | 6 | "errors"
|
6 | 7 | "fmt"
|
@@ -193,7 +194,26 @@ func SaltMinionRunRequestHandler(w http.ResponseWriter, req *http.Request) {
|
193 | 194 | }
|
194 | 195 |
|
195 | 196 | grainConfigPath := baseDir + "/etc/salt/grains"
|
| 197 | + prewarmedRolesPath := baseDir + "/etc/salt/prewarmed_roles" |
196 | 198 | if isGrainsConfigNeeded(grainConfigPath) {
|
| 199 | + // Check if prewarmed roles exist, and add them to the roles before generating the file |
| 200 | + if shouldAppendPrewarmedRoles(prewarmedRolesPath) { |
| 201 | + file, err := os.Open(prewarmedRolesPath) |
| 202 | + if err != nil { |
| 203 | + resp = model.Response{ErrorText: err.Error(), StatusCode: http.StatusInternalServerError} |
| 204 | + resp.WriteHttp(w) |
| 205 | + return |
| 206 | + } |
| 207 | + defer file.Close() |
| 208 | + scanner := bufio.NewScanner(file) |
| 209 | + for scanner.Scan() { |
| 210 | + s := strings.TrimSpace(scanner.Text()) |
| 211 | + if len(s) > 0 { |
| 212 | + saltMinion.Roles = append(saltMinion.Roles, s) |
| 213 | + } |
| 214 | + } |
| 215 | + } |
| 216 | + |
197 | 217 | grainConfig := GrainConfig{Roles: saltMinion.Roles, HostGroup: saltMinion.HostGroup}
|
198 | 218 | grainYaml, err := yaml.Marshal(grainConfig)
|
199 | 219 | if err != nil {
|
@@ -476,6 +496,16 @@ func isGrainsConfigNeeded(grainConfigLocation string) bool {
|
476 | 496 | return true
|
477 | 497 | }
|
478 | 498 |
|
| 499 | +func shouldAppendPrewarmedRoles(prewarmRoleLocation string) bool { |
| 500 | + // Essentially a file exists check. |
| 501 | + log.Println("[shouldAppendPrewarmedRoles] check whether prewarm roles exist, file location: " + prewarmRoleLocation) |
| 502 | + _, err := os.Stat(prewarmRoleLocation) |
| 503 | + if os.IsNotExist(err) { |
| 504 | + return false |
| 505 | + } |
| 506 | + return true |
| 507 | +} |
| 508 | + |
479 | 509 | func isSaltMinionRestartNeeded(servers []string) bool {
|
480 | 510 | log.Println("[isSaltMinionRestartNeeded] check whether salt-minion requires restart")
|
481 | 511 | masterConfFile := "/etc/salt/minion.d/master.conf"
|
|
0 commit comments