mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-27 09:21:14 -06:00
7ffa66d1a5
We've been moving away from config fields expecting file paths that Terraform will load, instead prefering fields that expect file contents, leaning on `file()` to do loading from a path. This helps with consistency and also flexibility - since this makes it easier to shift sensitive files into environment variables. Here we add a little helper package to manage the transitional period for these fields where we support both behaviors. Also included is the first of several fields being shifted over - SSH private keys in provisioner connection config. We're moving to new field names so the behavior is more intuitive, so instead of `key_file` it's `private_key` now. Additional field shifts will be included in follow up PRs so they can be reviewed and discussed individually.
41 lines
874 B
Go
41 lines
874 B
Go
// Helpers for dealing with file paths and their contents
|
|
package pathorcontents
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/mitchellh/go-homedir"
|
|
)
|
|
|
|
// If the argument is a path, Read loads it and returns the contents,
|
|
// otherwise the argument is assumed to be the desired contents and is simply
|
|
// returned.
|
|
//
|
|
// The boolean second return value can be called `wasPath` - it indicates if a
|
|
// path was detected and a file loaded.
|
|
func Read(poc string) (string, bool, error) {
|
|
if len(poc) == 0 {
|
|
return poc, false, nil
|
|
}
|
|
|
|
path := poc
|
|
if path[0] == '~' {
|
|
var err error
|
|
path, err = homedir.Expand(path)
|
|
if err != nil {
|
|
return path, true, err
|
|
}
|
|
}
|
|
|
|
if _, err := os.Stat(path); err == nil {
|
|
contents, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
return string(contents), true, err
|
|
}
|
|
return string(contents), true, nil
|
|
}
|
|
|
|
return poc, false, nil
|
|
}
|