// createStageFile stages the src configuration file by processing the src // template and setting the desired owner, group, and mode. It also sets the // StageFile for the template resource. // It returns an error if any. func (t *TemplateResource) createStageFile() error { t.Src = filepath.Join(config.TemplateDir(), t.Src) log.Debug("Using source template " + t.Src) if !isFileExist(t.Src) { return errors.New("Missing template: " + t.Src) } // create TempFile in Dest directory to avoid cross-filesystem issues temp, err := ioutil.TempFile(filepath.Dir(t.Dest), "."+filepath.Base(t.Dest)) if err != nil { os.Remove(temp.Name()) return err } defer temp.Close() log.Debug("Compiling source template " + t.Src) tplFuncMap := make(template.FuncMap) tplFuncMap["Base"] = path.Base tplFuncMap["GetDir"] = t.Dirs.Get tmpl := template.Must(template.New(path.Base(t.Src)).Funcs(tplFuncMap).ParseFiles(t.Src)) if err = tmpl.Execute(temp, t.Vars); err != nil { return err } // Set the owner, group, and mode on the stage file now to make it easier to // compare against the destination configuration file later. os.Chmod(temp.Name(), t.FileMode) os.Chown(temp.Name(), t.Uid, t.Gid) t.StageFile = temp return nil }
// createStageFile stages the src configuration file by processing the src // template and setting the desired owner, group, and mode. It also sets the // StageFile for the template resource. // It returns an error if any. func (t *TemplateResource) createStageFile() error { t.Src = filepath.Join(config.TemplateDir(), t.Src) log.Debug("Using source template " + t.Src) if !isFileExist(t.Src) { return errors.New("Missing template: " + t.Src) } temp, err := ioutil.TempFile("", "") if err != nil { os.Remove(temp.Name()) return err } log.Debug("Compiling source template " + t.Src) tmpl := template.Must(template.ParseFiles(t.Src)) if err = tmpl.Execute(temp, t.Vars); err != nil { return err } // Set the owner, group, and mode on the stage file now to make it easier to // compare against the destination configuration file later. os.Chmod(temp.Name(), t.FileMode) os.Chown(temp.Name(), t.Uid, t.Gid) t.StageFile = temp return nil }