Skip to content

[FEATURE] basic schema and data validation [cuelang] #232

Description

@noelmcloughlin

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

  1. install cuelang from https://cuelang.org/docs/install/

  2. goto a directory with YAML files

         $ git clone https://github.com/saltstack-formulas/template-formula
         $ cd template-formula/TEMPLATE/parameters/
    
  3. 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
    
  4. Make a change to some YAML file to introduce a bad value.

  5. 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
    
  6. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions