// createIDFile will generate a new ID for this agent and store it on disk // the location depends on the operating system func createIDFile(ctx Context) (id []byte, err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf("createIDFile() -> %v", e) } }() // generate an ID sid := mig.GenB32ID() // check that the storage DIR exist, and that it's a dir tdir, err := os.Open(ctx.Agent.RunDir) defer tdir.Close() if err != nil { // dir doesn't exist, create it ctx.Channels.Log <- mig.Log{Desc: fmt.Sprintf("agent rundir is missing from '%s'. creating it", ctx.Agent.RunDir)}.Debug() err = os.MkdirAll(ctx.Agent.RunDir, 0755) if err != nil { panic(err) } } else { // open worked, verify that it's a dir tdirMode, err := tdir.Stat() if err != nil { panic(err) } if !tdirMode.Mode().IsDir() { ctx.Channels.Log <- mig.Log{Desc: fmt.Sprintf("'%s' is not a directory. removing it", ctx.Agent.RunDir)}.Debug() // not a valid dir. destroy whatever it is, and recreate err = os.Remove(ctx.Agent.RunDir) if err != nil { panic(err) } err = os.MkdirAll(ctx.Agent.RunDir, 0755) if err != nil { panic(err) } } } idFile := ctx.Agent.RunDir + ".migagtid" // something exists at the location of the id file, just plain remove it _ = os.Remove(idFile) // write the ID file err = ioutil.WriteFile(idFile, []byte(sid), 0400) if err != nil { panic(err) } // read ID from disk id, err = ioutil.ReadFile(idFile) if err != nil { panic(err) } ctx.Channels.Log <- mig.Log{Desc: fmt.Sprintf("agent id created in '%s'", idFile)}.Debug() return }
// createIDFile will generate a new ID for this agent and store it on disk // the location depends on the operating system func createIDFile(ctx Context) (id []byte, err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf("createIDFile() -> %v", e) } }() // generate an ID sid := mig.GenB32ID() // check that the storage DIR exist, and that it's a dir tdir, err := os.Open(ctx.Agent.RunDir) defer tdir.Close() if err != nil { // dir doesn't exist, create it err = os.MkdirAll(ctx.Agent.RunDir, 0755) if err != nil { panic(err) } } else { // open worked, verify that it's a dir tdirMode, err := tdir.Stat() if err != nil { panic(err) } if !tdirMode.Mode().IsDir() { // not a valid dir. destroy whatever it is, and recreate err = os.Remove(ctx.Agent.RunDir) if err != nil { panic(err) } err = os.MkdirAll(ctx.Agent.RunDir, 0755) if err != nil { panic(err) } } } idFile := ctx.Agent.RunDir + ".migagtid" // something exists at the location of the id file, just plain remove it _ = os.Remove(idFile) // write the ID file err = ioutil.WriteFile(idFile, []byte(sid), 0644) if err != nil { panic(err) } // read ID from disk id, err = ioutil.ReadFile(idFile) if err != nil { panic(err) } return }
// createIDFile will generate a new ID for this agent and store it on disk // the location depends on the operating system func createIDFile(loc string) (id []byte, err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf("createIDFile() -> %v", e) } }() // generate an ID sid := mig.GenB32ID() // check that the storage DIR exist, or create it tdir, err := os.Open(loc) if err != nil { err = os.MkdirAll(loc, 0x400) if err != nil { panic(err) } } else { tdirMode, err := tdir.Stat() if err != nil { panic(err) } if !tdirMode.Mode().IsDir() { panic("Not a valid directory") } } tdir.Close() // write the ID err = ioutil.WriteFile(loc+".migagtid", []byte(sid), 400) if err != nil { panic(err) } // read ID from disk id, err = ioutil.ReadFile(loc + ".migagtid") if err != nil { panic(err) } return }