grafana/pkg/services/ngalert/api/hcl/hcl.go
Yuri Tseretyan dce492642a
Alerting: Export of alert rules in HCL format (#73166)
* import hashicopr/hcl/v2
* add hcl package and export to HCL
* annotate export structs
---------

Co-authored-by: Konrad Lalik <konrad.lalik@grafana.com>
2023-09-11 11:48:23 -04:00

31 lines
660 B
Go

package hcl
import (
"fmt"
"github.com/hashicorp/hcl/v2/gohcl"
"github.com/hashicorp/hcl/v2/hclwrite"
)
type Resource struct {
Type string `hcl:"type,label"`
Name string `hcl:"name,label"`
Body interface{} `hcl:",block"`
}
func Encode(resources ...Resource) (data []byte, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("failed to encode struct to HCL: %v", r)
}
}()
f := hclwrite.NewEmptyFile()
for _, resource := range resources {
blk := gohcl.EncodeAsBlock(resource.Body, "resource")
blk.SetLabels([]string{resource.Type, resource.Name})
f.Body().AppendBlock(blk)
}
return f.Bytes(), nil
}