In the recent past, the metadata.json file has replaced the Modulefile as the place where metadata about a Puppet module is kept. The Modulefile has a simple syntax and the Puppet module tool would generate the metadata.json from it.
Now, we must write our own metadata.json files. This leads to errors because json is a data format and humans suck at writing and reading it.
Tooling to work with this is in flight. Currently geppetto has some tooling in it to do something with metadata.json, but that probably means some weird jar or something and ew. I’ve contributed the easy part, which is a linting tool to sanity-check your metadata.json. Metadata-json-lint will verify that your metadata.json is valid json and will ensure a number of required fields are there. It will also verify that the two fields that have been deprecated are no longer in your metadata.json file.
Install
Command line:
gem install metadata-json-lint
Gemfile
group :development, :test do
gem 'rake', '10.1.1', :require => false
# ...
gem 'metadata-json-lint', :require => false
# ...
end
Usage
Command line(success):
metadata-json-lint metadata.json
Command line(failure):
$: metadata-json-lint metadata.json
Error: Unable to parse json. There is a syntax error somewhere.
$: echo $?
1
Command line(failure):
$: metadata-json-lint metadata.json
Error: Required field 'summary' not found in metadata.json.
Errors found in metadata.json
$: echo $?
1
Rake:
desc "Lint metadata.json file"
task :metadata do
sh "metadata-json-lint metadata.json"
end
Source code
Available at https://github.com/nibalizer/metadata-json-lint
Adoption
Meatadata-json-lint is currently being used in puppet-module-puppetboard and in garethr’s puppet-module-skeleton. It has been proposed for inclusion in the openstack puppet modules. If you are using it, hit up @nibalizer on twitter and we’ll add it here.