diff --git a/common/helper.go b/common/helper.go index a3284f3d..dc3d7f4a 100644 --- a/common/helper.go +++ b/common/helper.go @@ -80,17 +80,7 @@ func GetCollectorId(collectorId string) string { id := collectorId if strings.HasPrefix(collectorId, "file:") { filePath := strings.SplitAfterN(collectorId, ":", 2)[1] - err := FileExists(filePath) - if err != nil { - log.Info("node-id file doesn't exist, generating a new one") - CreatePathToFile(filePath) - ioutil.WriteFile(filePath, []byte(RandomUuid()), 0644) - } - file, err := ioutil.ReadFile(filePath) - if err != nil { - log.Fatal("Can not read node-id file: ", err) - } - id = strings.Trim(string(file), " \n") + id = idFromFile(filePath) } if id != "" && !cfgfile.ValidateConfig() { @@ -99,6 +89,25 @@ func GetCollectorId(collectorId string) string { return id } +func idFromFile(filePath string) string { + err := FileExists(filePath) + if err != nil { + log.Info("node-id file doesn't exist, generating a new one") + err = CreatePathToFile(filePath) + if err == nil { + err = ioutil.WriteFile(filePath, []byte(RandomUuid()), 0644) + log.Error("Can not write node-id file: ", err) + } + } + + file, err := ioutil.ReadFile(filePath) + if err != nil { + log.Error("Can not read node-id file: ", err) + return "" + } + return strings.Trim(string(file), " \n") +} + func RandomUuid() string { return uuid.NewRandom().String() } diff --git a/common/helper_test.go b/common/helper_test.go index b0032c7f..fd172838 100644 --- a/common/helper_test.go +++ b/common/helper_test.go @@ -64,6 +64,27 @@ func TestGetCollectorIdFromNonExistingFile(t *testing.T) { } } +func TestCollectorIdFileNotWritable(t *testing.T) { + dir, err := ioutil.TempDir("", "test-node-id") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + nodeIdDir := filepath.Join(dir, "non-writable") + + err = os.MkdirAll(nodeIdDir, 0500) + if err != nil { + t.Fatal(err) + } + + tmpfile := filepath.Join(nodeIdDir, "node-id") + result := GetCollectorId("file:/" + tmpfile) + if result != "" { + t.Fatalf("Unwritable node-id file should result in empty node-id") + } +} + func TestEncloseWithWithoutAction(t *testing.T) { content := "/some regex/" result := EncloseWith(content, "/")