Coverage for cfg_checker/modules/packages/__init__.py : 53%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from cfg_checker.helpers import args_utils
2from cfg_checker.modules.packages.repos import RepoManager
4from . import checker
6command_help = "Package versions check (Candidate vs Installed)"
9def init_parser(_parser):
10 # packages subparser
11 pkg_subparsers = _parser.add_subparsers(dest='type')
13 pkg_report_parser = pkg_subparsers.add_parser(
14 'report',
15 help="Report package versions to HTML file"
16 )
17 pkg_report_parser.add_argument(
18 '--full',
19 action="store_true", default=False,
20 help="HTML report will have all of the packages, not just errors"
21 )
22 pkg_report_parser.add_argument(
23 '--html',
24 metavar='packages_html_filename',
25 help="HTML filename to save report"
26 )
27 pkg_report_parser.add_argument(
28 '--csv',
29 metavar='packages_csv_filename',
30 help="CSV filename to save report"
31 )
32 pkg_report_parser.add_argument(
33 '--force-tag',
34 metavar='force_tag', default=None,
35 help="Tag to do a forced search of release versions in. "
36 "If nothing is found, 'mcp_version' tag will be used"
37 )
38 pkg_report_parser.add_argument(
39 '--exclude-keywords',
40 metavar='exclude_repos_keywords', default="nightly extra",
41 help="Keywords to exclude repos from searching "
42 "release versions. Space delimited: 'nightly extra'"
43 )
44 pkg_repos = pkg_subparsers.add_parser(
45 'versions',
46 help="Parse versions at given URL and create local map"
47 )
48 pkg_repos.add_argument(
49 '--list-tags',
50 action="store_true", default=False,
51 help="Just list tags available in mirror"
52 )
53 pkg_repos.add_argument(
54 '--url',
55 metavar='repo_url', default="http://mirror.mirantis.com",
56 help="URL for repos, default: http://mirror.mirantis.com"
57 )
58 pkg_repos.add_argument(
59 '--tag',
60 metavar='repo_tag', default=None,
61 help="Repository tag to process packages from. Default: "
62 "All url's root folder tags"
63 )
64 pkg_repos.add_argument(
65 '--build-repos',
66 action="store_true", default=False,
67 help="Conduct build stage before working with tags"
68 )
69 pkg_repos.add_argument(
70 '--gen-desc',
71 action="store_true", default=False,
72 help="Save pkg descriptions while parsing"
73 )
74 pkg_repos.add_argument(
75 '--gen-apps',
76 action="store_true", default=False,
77 help="Save pkg descriptions while parsing"
78 )
79 pkg_show = pkg_subparsers.add_parser(
80 'show',
81 help="Show package history from the map"
82 )
83 pkg_show.add_argument(
84 'args',
85 nargs='+',
86 help="Package names separated by space"
87 )
88 pkg_app = pkg_subparsers.add_parser(
89 'show-app',
90 help="Show packages for single app"
91 )
92 pkg_app.add_argument(
93 'args',
94 nargs='+',
95 help="List of app's packages (or 'source' in package description)"
96 )
98 return _parser
101def do_report(args):
102 """Create package versions report, HTML
104 :args: - parser arguments
105 :return: - no return value
106 """
107 _type, _filename = args_utils.get_package_report_type_and_filename(args)
109 if ' ' in args.exclude_keywords:
110 _kw = args.exclude_keywords.split(' ')
111 else:
112 _kw = [args.exclude_keywords]
114 # init connection to salt and collect minion data
115 pChecker = checker.CloudPackageChecker(
116 force_tag=args.force_tag,
117 exclude_keywords=_kw
118 )
119 # collect data on installed packages
120 pChecker.collect_installed_packages()
121 # diff installed and candidates
122 pChecker.collect_packages()
123 # report it
124 pChecker.create_report(_filename, rtype=_type, full=args.full)
127def do_versions(args):
128 """Builds tagged repo structure and parses Packages.gz files
130 :args: - parser arguments
131 :return: - no return value
132 """
133 # Get the list of tags for the url
134 r = RepoManager()
135 if args.list_tags:
136 r.action_for_tag(args.url, args.tag, action="list")
137 return
138 if args.build_repos:
139 # if tag is supplied, use it
140 if args.tag:
141 r.action_for_tag(args.url, args.tag, action="build")
142 else:
143 r.build_repos(args.url)
145 if args.tag:
146 # Process only this tag
147 r.action_for_tag(
148 args.url,
149 args.tag,
150 action="fetch",
151 descriptions=args.gen_desc,
152 apps=args.gen_apps
153 )
154 else:
155 # All of them
156 r.parse_repos()
159def do_show(args):
160 """Shows package (or multiple) history across parsed tags
161 """
162 # Init manager
163 r = RepoManager()
164 # show packages
165 for p in args.args:
166 r.show_package(p)
169def do_show_app(args):
170 """Shows packages for app
171 """
172 # Init manager
173 r = RepoManager()
174 # show packages
175 for a in args.args:
176 r.show_app(a)