Hide keyboard shortcuts

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 

3 

4from . import checker 

5 

6command_help = "Package versions check (Candidate vs Installed)" 

7 

8 

9def init_parser(_parser): 

10 # packages subparser 

11 pkg_subparsers = _parser.add_subparsers(dest='type') 

12 

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 ) 

97 

98 return _parser 

99 

100 

101def do_report(args): 

102 """Create package versions report, HTML 

103 

104 :args: - parser arguments 

105 :return: - no return value 

106 """ 

107 _type, _filename = args_utils.get_package_report_type_and_filename(args) 

108 

109 if ' ' in args.exclude_keywords: 

110 _kw = args.exclude_keywords.split(' ') 

111 else: 

112 _kw = [args.exclude_keywords] 

113 

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) 

125 

126 

127def do_versions(args): 

128 """Builds tagged repo structure and parses Packages.gz files 

129 

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) 

144 

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() 

157 

158 

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) 

167 

168 

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)