2019-12-17 05:25:56 -05:00
|
|
|
package hcl2template
|
|
|
|
|
2020-01-06 10:05:30 -05:00
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/hashicorp/hcl/v2"
|
|
|
|
)
|
2019-12-17 05:25:56 -05:00
|
|
|
|
|
|
|
func warningErrorsToDiags(block *hcl.Block, warnings []string, err error) hcl.Diagnostics {
|
|
|
|
var diags hcl.Diagnostics
|
|
|
|
|
|
|
|
for _, warning := range warnings {
|
|
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
|
|
Summary: warning,
|
|
|
|
Subject: &block.DefRange,
|
|
|
|
Severity: hcl.DiagWarning,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
|
|
Summary: err.Error(),
|
|
|
|
Subject: &block.DefRange,
|
|
|
|
Severity: hcl.DiagError,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return diags
|
|
|
|
}
|
2020-01-06 10:05:30 -05:00
|
|
|
|
|
|
|
func isDir(name string) (bool, error) {
|
|
|
|
s, err := os.Stat(name)
|
|
|
|
if err != nil {
|
|
|
|
return false, err
|
|
|
|
}
|
|
|
|
return s.IsDir(), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetHCL2Files(filename string) (hclFiles, jsonFiles []string, diags hcl.Diagnostics) {
|
|
|
|
isDir, err := isDir(filename)
|
|
|
|
if err != nil {
|
|
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
|
|
Severity: hcl.DiagError,
|
|
|
|
Summary: "Cannot tell wether " + filename + " is a directory",
|
|
|
|
Detail: err.Error(),
|
|
|
|
})
|
|
|
|
return nil, nil, diags
|
|
|
|
}
|
|
|
|
if !isDir {
|
|
|
|
if strings.HasSuffix(filename, hcl2JsonFileExt) {
|
|
|
|
return nil, []string{filename}, diags
|
|
|
|
}
|
|
|
|
if strings.HasSuffix(filename, hcl2FileExt) {
|
|
|
|
return []string{filename}, nil, diags
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fileInfos, err := ioutil.ReadDir(filename)
|
|
|
|
if err != nil {
|
|
|
|
diag := &hcl.Diagnostic{
|
|
|
|
Severity: hcl.DiagError,
|
|
|
|
Summary: "Cannot read hcl directory",
|
|
|
|
Detail: err.Error(),
|
|
|
|
}
|
|
|
|
diags = append(diags, diag)
|
|
|
|
return nil, nil, diags
|
|
|
|
}
|
|
|
|
for _, fileInfo := range fileInfos {
|
|
|
|
if fileInfo.IsDir() {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
filename := filepath.Join(filename, fileInfo.Name())
|
|
|
|
if strings.HasSuffix(filename, hcl2FileExt) {
|
|
|
|
hclFiles = append(hclFiles, filename)
|
|
|
|
} else if strings.HasSuffix(filename, hcl2JsonFileExt) {
|
|
|
|
jsonFiles = append(jsonFiles, filename)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if len(hclFiles)+len(jsonFiles) == 0 {
|
|
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
|
|
Severity: hcl.DiagError,
|
|
|
|
Summary: "Could not find any config file in " + filename,
|
|
|
|
Detail: "A config file must be suffixed with `.pkr.hcl` or " +
|
|
|
|
"`.pkr.json`. A folder can be referenced.",
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
return hclFiles, jsonFiles, diags
|
|
|
|
}
|