blob: 8a0577176010289b101058c1998883dd1eac7cc1 [file] [log] [blame]
Alex Savatieiev5118de02019-02-20 15:50:42 -06001import argparse
2import os
3import sys
Alex Savatieiev799bee32019-02-20 17:19:26 -06004from logging import INFO, DEBUG
Alex Savatieiev5118de02019-02-20 15:50:42 -06005
6import reporter
7from cfg_checker.common import utils, const
8from cfg_checker.common import config, logger, logger_cli, pkg_dir
9from cfg_checker.clients import salt
10
11from cfg_checker.pkg_check import CloudPackageChecker
Alex Savatieiev9b2f6512019-02-20 18:05:00 -060012from cfg_checker.network_checks import NetworkChecker
Alex Savatieiev5118de02019-02-20 15:50:42 -060013
14pkg_dir = os.path.dirname(__file__)
15pkg_dir = os.path.normpath(pkg_dir)
16
17
18class MyParser(argparse.ArgumentParser):
19 def error(self, message):
20 sys.stderr.write('Error: {0}\n\n'.format(message))
21 self.print_help()
22
23
Alex Savatieiev5118de02019-02-20 15:50:42 -060024def help_message():
25 print"""
26 Please, use following examples to generate info reports:\n
27 cfg_checker packages report\n
28 cfg_checker network check\n
29 cfg_checker network report\n
30 """
31 return
32
33def pkg_check(args):
34 # create package versions report
Alex Savatieieve47f7f42019-02-20 16:41:23 -060035 if args.file:
36 _filename = args.file
37 else:
38 logger_cli.error("ERROR: no report filename supplied")
39 return
Alex Savatieiev5118de02019-02-20 15:50:42 -060040 # init connection to salt and collect minion data
41 pChecker = CloudPackageChecker()
42 # collect data on installed packages
43 pChecker.collect_installed_packages()
44 # diff installed and candidates
45 # pChecker.collect_packages()
46 # report it
47 pChecker.create_html_report(_filename)
48
49
50def net_check(args):
Alex Savatieiev9b2f6512019-02-20 18:05:00 -060051 netChecker = NetworkChecker()
52 netChecker.collect_network_info()
53 netChecker.print_network_report()
Alex Savatieiev5118de02019-02-20 15:50:42 -060054
55 return
56
57
58def net_report(args):
Alex Savatieiev9b2f6512019-02-20 18:05:00 -060059 netChecker = NetworkChecker()
60 netChecker.collect_network_info()
61 netChecker.create_html_report()
Alex Savatieiev5118de02019-02-20 15:50:42 -060062
63 return
64
65
66def config_check_entrypoint():
67 # Main entrypointр
68 parser = MyParser(prog="Cloud configuration checker")
Alex Savatieiev799bee32019-02-20 17:19:26 -060069 parser.add_argument(
70 "-d",
71 "--debug",
72 action="store_true", default=False,
73 help="Set CLI logging level to DEBUG"
74 )
Alex Savatieiev5118de02019-02-20 15:50:42 -060075 subparsers = parser.add_subparsers(dest='command')
76 # packages
77 pkg_parser = subparsers.add_parser(
78 'packages',
79 help="Package versions check (Candidate vs Installed)"
80 )
81 pkg_subparsers = pkg_parser.add_subparsers(dest='type')
82
83 pkg_report_parser = pkg_subparsers.add_parser(
84 'report',
85 help="Report package versions to HTML file"
86 )
87 pkg_report_parser.add_argument(
88 '-f',
89 '--file',
90 help="HTML filename to save report"
91 )
Alex Savatieieve47f7f42019-02-20 16:41:23 -060092 pkg_report_parser.set_defaults(func=pkg_check)
Alex Savatieiev5118de02019-02-20 15:50:42 -060093
94 # networking
95 net_parser = subparsers.add_parser(
96 'network',
97 help="Network infrastructure checks"
98 )
99 net_subparsers = net_parser.add_subparsers(dest='type')
100
101 net_check_parser = net_subparsers.add_parser(
102 'check',
103 help="Do network check and print the result"
104 )
105 net_check_parser.set_defaults(func=net_check)
106
107 net_report_parser = net_subparsers.add_parser(
108 'report',
109 help="Generate network check report"
110 )
111 net_report_parser.add_argument(
112 '-f',
113 '--file',
114 help="HTML filename to save report"
115 )
116 net_report_parser.set_defaults(func=net_report)
117
118 #parse arguments
119 args = parser.parse_args()
120
Alex Savatieiev799bee32019-02-20 17:19:26 -0600121 # Handle options
122 if args.debug:
123 logger_cli.setLevel(DEBUG)
124 else:
125 logger_cli.setLevel(INFO)
126
Alex Savatieiev5118de02019-02-20 15:50:42 -0600127 # Execute the command
128 result = args.func(args)
129
130 logger.debug(result)
131 return
132
133if __name__ == '__main__':
Alex Savatieieve47f7f42019-02-20 16:41:23 -0600134 try:
135 config_check_entrypoint()
136 except Exception as e:
137 logger_cli.error("ERROR: {}".format(e.message))