Я использую jsonschema для проверки файла конфигурации. В настоящее время у меня возникают проблемы с проверкой комбинаций значений вложенных свойств.
Я изначально реализовал if / then / else, но не увидел желаемого поведения после нескольких проходов. То же самое было сделано для переключения, зависимостей и, наконец, использования импликации.
Это моя схема:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"account_group": {
"type": "string"
},
"region": {
"type": "string",
"pattern": "^(us(-gov)?|ap|ca|cn|eu|sa)-(central|(north|south)?(east|west)?)-\\d$"
},
"appid": {
"type": "string"
},
"services": {
"type": "object",
"minProperties": 1,
"patternProperties": {
"^[A-Za-z_]*$": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"port": {
"type": "number"
},
"cpu": {
"type": "number",
"enum": [256, 512, 1024, 2048, 4096]
},
"memory": {
"type": "number",
"enum": [0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30]
}
},
"required": [
"source",
"port",
"cpu",
"memory"
],
}
},
"additionalProperties": false
},
"stages": {
"type": "object",
"minProperties": 1
},
"workingDirectory": {
"type": "string"
}
},
"required": [
"name",
"account_group",
"appid",
"services"
]
}
Примечание: я удалил свой последний блок allOf, чтобы избежать представления некорректного кода Я уже протестировал против
То, что я пытаюсь выполнить, sh - проверка правильности комбинации значений процессора / памяти в файле конфигурации, который анализируется и сравнивается со схемой.
Комбинации:
256/[0.5, 1, 2]
512/[1-4]
1024/[2-8]
2048/[2-16]
4096/[2-30]
Кто-нибудь любезно предложит соответствующий дизайн схемы для проверки этих комбинаций?
По существу мне нужна проверка для сбоя, если процессор равен 256, и значение память - это что угодно, но не 0,5, 1, 2 - сбой, если процессор равен 512, а значение памяти не равно 1 - 4 и т. д. c.
Я получил наиболее близкое значение с помощью импликации, но я ' Мы видели много комбинаций, использующих зависимости, которые еще больше запутали меня. Лично я чувствовал, что / тогда / еще будет наиболее логичным подходом, но он не дал ожидаемого поведения.