Validating Grails Configurations

When externalizing grails app configurations for multiple environments I want to ensure values are provided for all the required/expected properties.  So I wrote a plugin to help.

Validating Expected and Required Properties

Simply add something like this to Config.groovy

validate  {
    required = [ "a", "b", "c" ]
    expected = [ "p":123, "d":"foobar", "q":"/dev/null" ]
}

Then (usually in BootStrap.groovy ) to set defaults for missing expected properties call

grailsApplication.config.validateExpectedProperties()

To check for required properties call

grailsApplication.config.validateRequiredProperties()

A ConfigurationException will be thrown when required properties are missing.

The validate.expected and validate.required data can be specified at lower levels too…

grails {
    mongo {
        validate {
            required = [
                "grails.mongo.host",
                "grails.mongo.databaseName"
            ]
            expected = [
                "grails.mongo.port": 27017,
                "grails.mongo.bucket": "project"
            ]
        }
    }
}

This way you can validate portions of the config by calling

grailsApplication.config.grails.mongo.validateExpectedProperties()

and so on.

Validating Existence of External Files

The ConfigUtils.validateExternalFiles method will check that a list of files does exist.  Use it like this in Config.groovy.

grails.config.locations << "file:${userHome}/.emacs"
grails.config.locations < "file:${userHome}/.grails/${appName}-config.groovy"
ConfigUtils.validateExternalFiles(grails.config.locations)

A `ConfigurationException` will be thrown when any of the files does not exist.

Resources

 

About the Author

Object Partners profile.

One thought on “Validating Grails Configurations

  1. amiller says:

    danmcharness pointed out that the sample app is not backward compatible with 2.1.4 or 2.0.4. So I created a couple new samples. Now github has example apps for 2.0.4, 2.1.4, and 2.2.1.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Blog Posts
Android Development for iOS Developers
Android development has greatly improved since the early days. Maybe you tried it out when Android development was done in Eclipse, emulators were slow and buggy, and Java was the required language. Things have changed […]
Add a custom object to your Liquibase diff
Adding a custom object to your liquibase diff is a pretty simple two step process. Create an implementation of DatabaseObject Create an implementation of SnapshotGenerator In my case I wanted to add tracking of Stored […]
Keeping Secrets Out of Terraform State
There are many instances where you will want to create resources via Terraform with secrets that you just don’t want anyone to see. These could be IAM credentials, certificates, RDS DB credentials, etc. One problem […]
Validating Terraform Plans using Open Policy Agent
When developing infrastructure as code using terraform, it can be difficult to test and validate changes without executing the code against a real environment. The feedback loop between writing a line of code and understanding […]