@@ -825,14 +825,25 @@ func (am *MultitenantAlertmanager) setConfig(cfg alertspb.AlertConfigDesc) error
825
825
var userAmConfig * amconfig.Config
826
826
var err error
827
827
var hasTemplateChanges bool
828
+ var userTemplateDir = filepath .Join (am .getTenantDirectory (cfg .User ), templatesDir )
829
+ var pathsToRemove = make (map [string ]struct {})
830
+
831
+ // List existing files to keep track the ones to be removed
832
+ if oldTemplateFiles , err := ioutil .ReadDir (userTemplateDir ); err == nil {
833
+ for _ , file := range oldTemplateFiles {
834
+ pathsToRemove [filepath .Join (userTemplateDir , file .Name ())] = struct {}{}
835
+ }
836
+ }
828
837
829
838
for _ , tmpl := range cfg .Templates {
830
- templateFilepath , err := safeTemplateFilepath (filepath . Join ( am . getTenantDirectory ( cfg . User ), templatesDir ) , tmpl .Filename )
839
+ templateFilePath , err := safeTemplateFilepath (userTemplateDir , tmpl .Filename )
831
840
if err != nil {
832
841
return err
833
842
}
834
843
835
- hasChanged , err := storeTemplateFile (templateFilepath , tmpl .Body )
844
+ // Removing from pathsToRemove map the files that still exists in the config
845
+ delete (pathsToRemove , templateFilePath )
846
+ hasChanged , err := storeTemplateFile (templateFilePath , tmpl .Body )
836
847
if err != nil {
837
848
return err
838
849
}
@@ -842,6 +853,14 @@ func (am *MultitenantAlertmanager) setConfig(cfg alertspb.AlertConfigDesc) error
842
853
}
843
854
}
844
855
856
+ for pathToRemove := range pathsToRemove {
857
+ err := os .Remove (pathToRemove )
858
+ if err != nil {
859
+ level .Warn (am .logger ).Log ("msg" , "failed to remove file" , "file" , pathToRemove , "err" , err )
860
+ }
861
+ hasTemplateChanges = true
862
+ }
863
+
845
864
level .Debug (am .logger ).Log ("msg" , "setting config" , "user" , cfg .User )
846
865
847
866
am .alertmanagersMtx .Lock ()
0 commit comments