Description
Overview
There is no Data Constraints languages used in Saltstack formulas. If these were used, as part of CI/CD, then it would help formula developers, and provide example of how users could add/introduce data validation themselves. A related issue, is that no saltstack formula has a published schema, except what is available in README, pillar.example, etc.
To start a discussion I would suggest using Cuelang (https://cuelang.org/docs/install) to address three concerns:
- introduce Schema for formula (without forcing it)
- Check formula against Schema during CI/CD (without forcing it) # needs gitlab-ci updates
- Improve quality assurance as a feature
DEMO
-
install cuelang from https://cuelang.org/docs/install/
-
goto a directory with YAML files
$ git clone https://github.com/saltstack-formulas/template-formula $ cd template-formula/TEMPLATE/parameters/
-
create a Schema file named
schema.cue
in this directory.#template: { pkg?: name?: string rootgroup?: string hide_output?: bool dir_mode?: =~"^0?[124567]{3}$" // any mode of length 3, with 0 prefix optional mode?: =~"^0?[124567]{3}$" // any mode of length 3, with 0 prefix optional config?: string service?: name?: string subcomponent?: config: string // legacy pip_pkg?: string pkgs_add?: [...] pips?: [...] // Just here for testing added_in_defaults?: string winner?: string ... } values?: {...#template} // probable yaml namespace
-
Make a change to some YAML file to introduce a bad value.
-
Validate against schema data-constraints (
cue vet FILE.yaml schema.cue
)$ for f in $( find . | grep yaml$); do cue vet $f schema.cue; done values.pkg.name: conflicting values 111 and string (mismatched types int and string): .\os\Fedora.yaml:16:12 .\schema.cue:10:18 .\schema.cue:29:14
-
Fix the error in your YAML and try again.
$ for f in $( find . | grep yaml$); do cue vet $f schema.cue; done $ echo $? 0
Related issues
Salt project: saltstack/salt#54193