Data sources¶
A data source reads external data and exposes outputs to expressions. It does not manage the external object.
It is implemented as an instance of the runtime.TypedDataSource[Out, Config any] interface.
The following is a runtime.TypedDataSource[*ReadFileOutput, runtime.NoConfig]:
type ReadFile struct {
Path string
}
type ReadFileOutput struct {
Path string
Content string
Size int64
}
func (r *ReadFile) Read(ctx context.Context, cfg runtime.NoConfig) (*ReadFileOutput, error) {
return readFile(r.Path)
}
Register it:
DataSources: map[string]runtime.DataSourceRegistration{
"read-file": runtime.MakeDataSource[ReadFile, *ReadFileOutput, runtime.NoConfig](),
}
A factory uses it under data-sources::
data-sources: {
source: files.read-file { path: input.path }
}
outputs: {
content: { value: data-source.source.content }
}
Data sources can run during planning when their inputs are known. Their outputs can feed resources, actions, locals, constraints, and outputs.