Cue: валидация конфигурации

#yaml #cue #tips

Как devops мне много приходиться работать с yaml-файлами для описания конфигурации различных приложений. И до сих пор валидация конфигурации заключалась в ее беглом просмотре глазами и попытке использовать в програмах. Было бы неплохо иметь возможность валидации yaml/json-конфигурации.

В очередной раз обратил внимание на cuelang и его возможность валидации json/yaml-конфигурации с помощью описания схем . Решил попробовать описать схему для prometheus-алертов.

Достаточно быстро набросал следующую схему (файл rules.cue):

#rule: {
	alert: string
	expr: string
	for?: string
	labels: {
		severity: =~"info|warning|high|disaster"
		service?: string
	}
	annotations?: {
		summary: string
	}
}

groups: [{
	name: string
	rules: [...#rule]
}]

Использовать схему можно простым запуском:

cue vet -c -E -s alerts.yaml rules.cue

Проверял путем явного создания ошибок, например дублировал символы, вместо summary прописывал summarry, в результате чего получал следующую ошибку:

groups.0.rules.15.annotations: field not allowed: summarry:
    ./prod/all/rules-all.cue:14:16
    ./prod/all/rules-all.cue:21:13
    ./prod/all/rules-all.yml:150:87

Схемы описываются довольно просто, что позволяет использовать валидацию и в ci/cd процессах.