mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 12:14:08 -06:00
dce492642a
* import hashicopr/hcl/v2 * add hcl package and export to HCL * annotate export structs --------- Co-authored-by: Konrad Lalik <konrad.lalik@grafana.com>
31 lines
660 B
Go
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
|
|
}
|