1
0
mirror of https://github.com/rancher/os.git synced 2025-08-02 07:24:28 +00:00

Fix validation for list of maps

This commit is contained in:
Josh Curl 2016-11-26 23:27:42 -08:00
parent 47a447cb67
commit f6ba07bf8b
No known key found for this signature in database
GPG Key ID: 82B504B9BCCFA677
2 changed files with 18 additions and 7 deletions

View File

@ -6,23 +6,23 @@ import (
)
// TODO: use this function from libcompose
func convertKeysToStrings(item interface{}) interface{} {
func ConvertKeysToStrings(item interface{}) interface{} {
switch typedDatas := item.(type) {
case map[string]interface{}:
for key, value := range typedDatas {
typedDatas[key] = convertKeysToStrings(value)
typedDatas[key] = ConvertKeysToStrings(value)
}
return typedDatas
case map[interface{}]interface{}:
newMap := make(map[string]interface{})
for key, value := range typedDatas {
stringKey := key.(string)
newMap[stringKey] = convertKeysToStrings(value)
newMap[stringKey] = ConvertKeysToStrings(value)
}
return newMap
case []interface{}:
for i, value := range typedDatas {
typedDatas[i] = append(typedDatas, convertKeysToStrings(value))
typedDatas[i] = ConvertKeysToStrings(value)
}
return typedDatas
default:
@ -35,7 +35,7 @@ func Validate(bytes []byte) (*gojsonschema.Result, error) {
if err := yaml.Unmarshal([]byte(bytes), &rawCfg); err != nil {
return nil, err
}
rawCfg = convertKeysToStrings(rawCfg).(map[string]interface{})
rawCfg = ConvertKeysToStrings(rawCfg).(map[string]interface{})
loader := gojsonschema.NewGoLoader(rawCfg)
schemaLoader := gojsonschema.NewStringLoader(schema)
return gojsonschema.Validate(schemaLoader, loader)

View File

@ -25,8 +25,19 @@ func testValidate(t *testing.T, cfg []byte, contains string) {
func TestValidate(t *testing.T) {
testValidate(t, []byte("{}"), "")
testValidate(t, []byte(`rancher:
log: true
`), "")
log: true`), "")
testValidate(t, []byte(`write_files:
- container: console
path: /etc/rc.local
permissions: "0755"
owner: root
content: |
#!/bin/bash
wait-for-docker`), "")
testValidate(t, []byte(`rancher:
docker:
extra_args: ['--insecure-registry', 'my.registry.com']`), "")
testValidate(t, []byte("bad_key: {}"), "Additional property bad_key is not allowed")
testValidate(t, []byte("rancher: []"), "rancher: Invalid type. Expected: object, given: array")