]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/options/validate-options.py
import ceph quincy 17.2.1
[ceph.git] / ceph / src / common / options / validate-options.py
CommitLineData
20effc67
TL
1#!/usr/bin/env python3
2
3import argparse
4import fileinput
5import sys
6import yaml
7from typing import Any, Dict
8
9
10class ValidationError(Exception):
11 pass
12
13
14OptionType = Dict[str, Any]
15
16
17def validate_see_also(opt: OptionType, opts: Dict[str, OptionType]) -> None:
18 see_also = opt.get('see_also')
19 if see_also is None:
20 return
21 for ref in see_also:
22 if ref not in opts:
23 msg = f'see_also contains "{ref}". But it is not found.'
24 raise ValidationError(msg)
25
26
27def main() -> None:
28 parser = argparse.ArgumentParser(
29 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
30 parser.add_argument('yamls', nargs='*')
31 opts = parser.parse_args()
32 options = {}
33 for yaml_file in opts.yamls:
34 with open(yaml_file) as f:
35 yml = yaml.load(f, yaml.SafeLoader)
36 options.update({opt['name']: opt for opt in yml['options']})
37 for name, opt in options.items():
38 try:
39 validate_see_also(opt, options)
40 except ValidationError as e:
41 raise Exception(f'failed to validate "{name}": {e}')
42
43
44if __name__ == '__main__':
45 try:
46 main()
47 except Exception as e:
48 print(e, file=sys.stderr)
49 sys.exit(1)