Inputs
ytt supports different input sources:
Files & Directories
Those are provided via the
-f/--fileflagytt uses the file’s name for its internal representation
If you have a tree like
$ tree . . ├── dir1 │ └── some.yaml └── dir2 └── sub ├── another.yaml └── someother.yaml 4 directories, 3 filesand you call
ytt --file dir1/some.yaml --file dir2/ ...then ytt loadsdir1/some.yamlassome.yamldir2/sub/another.yamlassub/another.yamldir2/sub/someother.yamlassub/someother.yaml
ytt uses a file’s extension to determine its type, e.g. a extension like
yamlflags that file as “yaml-template”; you can read more about that in File MarksYou can change a file’s name, location, and also “type” by explicitly setting the file’s name to be used by ytt, e.g.
ytt --file a/different/file.foo=dir1/some.yaml, which would mean that ytt- loads that file as
a/different/file.foo - would not consider it as “yaml-template”/“yaml-plain”, but as “data”, because of its extension
Note: this only works for files, not for directories
- loads that file as
Explicitly setting file’s names can be especially useful when consuming files where you have no control over their name, like process substitutions:
Running
ytt --file <(echo 'some: yaml')(on Linux) would have the shell produce a file like/dev/fd/63and pass that on to ytt. This file, based on it’s name “63”, would not be considered yaml and thus interpreted as “data”. To change that, you need to runytt --file subst.yaml=<(echo 'some: yaml')to have ytt treat it as yaml.ytt can also consume stdin by using
-, like:ytt --file -Note: When using
-, ytt automatically treats data on stdin as yaml, as it will use stdin asstdin.yaml, thus having an extension which flags it as “yaml-template”. If you use some other means to consume stdin, e.g.ytt --file /dev/stdin, this does not happen and ytt treats stdin as a filestdinand thus as “data”, because it has no extension marking it differently. You can still set a different file name explicitly, e.g. withytt --file my-stdin.yaml=/dev/stdin.ytt can also consume files via http/s, e.g.
ytt --file https://raw.githubusercontent.com/carvel-dev/ytt/develop/.golangci.ymlytt can also consume symlinks, however if a symlink’s target is not a file you have already included into the set of files ytt should consider (
--file ...), ytt will not allow that and print an error. You can explicitly allow additional symlink targets via the--allow-symlink-destination ...flag.To debug / inspect which files ytt considers and how it handles those, the flags
--files-inspect&--debugcan be helpful
Data Values & Data Values Schemas
You can read about how to define data-values schemas and how to consume and set Data Values and Schemas here:
Generally you can provide Data Values
- as strings
- on the command line via the flags
--data-value/-v - from the environment via the flag
--data-values-env - from files via the flag
--data-value-file
- on the command line via the flags
- as structured data / yaml
- on the command line via the flag
--data-value-yaml - from the environment via the flag
--data-values-env-yaml - from files via the flag
--data-values-file
- on the command line via the flag
- as strings
(Help improve our docs: edit this page on GitHub)
#carvel in Kubernetes Slack