Skip to content

Commit 13a3cdf

Browse files
author
Krisztian Horvath
committed
do not override existing grains config
1 parent a371244 commit 13a3cdf

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
BINARY=salt-bootstrap
22

3-
VERSION=0.11.1
3+
VERSION=0.11.2
44
BUILD_TIME=$(shell date +%FT%T)
55
LDFLAGS=-ldflags "-X github.com/hortonworks/salt-bootstrap/saltboot.Version=${VERSION} -X github.com/hortonworks/salt-bootstrap/saltboot.BuildTime=${BUILD_TIME}"
66
GOFILES = $(shell find . -type f -name '*.go')

saltboot/salt.go

+33-13
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,6 @@ func SaltMinionRunRequestHandler(w http.ResponseWriter, req *http.Request) {
136136
log.Printf("[SaltMinionRunRequestHandler] [ERROR] while hostfile update: %s", err)
137137
}
138138

139-
grainConfig := GrainConfig{Roles: saltMinion.Roles, HostGroup: saltMinion.HostGroup}
140-
grainYaml, err := yaml.Marshal(grainConfig)
141-
if err != nil {
142-
resp = model.Response{ErrorText: err.Error(), StatusCode: http.StatusInternalServerError}
143-
resp.WriteHttp(w)
144-
return
145-
}
146-
147139
baseDir := req.Header.Get("salt-minion-base-dir")
148140

149141
err = os.MkdirAll(baseDir+"/etc/salt/minion.d", 0755)
@@ -173,11 +165,21 @@ func SaltMinionRunRequestHandler(w http.ResponseWriter, req *http.Request) {
173165
return
174166
}
175167

176-
err = ioutil.WriteFile(baseDir+"/etc/salt/grains", grainYaml, 0644)
177-
if err != nil {
178-
resp = model.Response{ErrorText: err.Error(), StatusCode: http.StatusInternalServerError}
179-
resp.WriteHttp(w)
180-
return
168+
grainConfigPath := baseDir + "/etc/salt/grains"
169+
if isGrainsConfigNeeded(grainConfigPath) {
170+
grainConfig := GrainConfig{Roles: saltMinion.Roles, HostGroup: saltMinion.HostGroup}
171+
grainYaml, err := yaml.Marshal(grainConfig)
172+
if err != nil {
173+
resp = model.Response{ErrorText: err.Error(), StatusCode: http.StatusInternalServerError}
174+
resp.WriteHttp(w)
175+
return
176+
}
177+
err = ioutil.WriteFile(grainConfigPath, grainYaml, 0644)
178+
if err != nil {
179+
resp = model.Response{ErrorText: err.Error(), StatusCode: http.StatusInternalServerError}
180+
resp.WriteHttp(w)
181+
return
182+
}
181183
}
182184

183185
log.Println("[SaltMinionRunRequestHandler] execute salt-minion run request")
@@ -381,6 +383,24 @@ func distributePillarImpl(distributeActionRequest func([]string, string, string,
381383
return result
382384
}
383385

386+
func isGrainsConfigNeeded(grainConfigLocation string) bool {
387+
log.Println("[isGrainsConfigNeeded] check whether salt grains are empty, config file: " + grainConfigLocation)
388+
b, err := ioutil.ReadFile(grainConfigLocation)
389+
if err == nil && len(b) > 0 {
390+
var grains GrainConfig = GrainConfig{}
391+
if err := yaml.Unmarshal(b, &grains); err != nil {
392+
log.Printf("[isGrainsConfigNeeded] failed to unmarshal grain config file: %s", err.Error())
393+
return true
394+
}
395+
if grains.Roles != nil && len(grains.Roles) > 0 {
396+
log.Printf("[isGrainsConfigNeeded] there are roles already defined: %s, no need to create new config", grains.Roles)
397+
return false
398+
}
399+
}
400+
log.Println("[isGrainsConfigNeeded] there is no grain config present at the moment, config is required")
401+
return true
402+
}
403+
384404
func isSaltMinionRestartNeeded(servers []string) bool {
385405
log.Println("[isSaltMinionRestartNeeded] check whether salt-minion requires restart")
386406
masterConfFile := "/etc/salt/minion.d/master.conf"

0 commit comments

Comments
 (0)