hammer_cli_katello 1.5.2 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 205cdd68504c1fc4b0111f38b2dde15896040933
4
- data.tar.gz: bf97773c38919f14834c35e32906c19d3cd1b606
2
+ SHA256:
3
+ metadata.gz: 3d5ff0a9eec365ed64127733829a53befcdef1dc9a6bdeff5d98f986c988170c
4
+ data.tar.gz: 150fa12bf6481c901ba50f1b1548a1999d05204bd2049a454eb6e8962a2b5692
5
5
  SHA512:
6
- metadata.gz: 59f72d7ce8ac083a712dfa10fa9038b636b57bb48b3dbfdbfa691dace6ff7b501495d9b56fb3d8b97e97d90645efa7396f4384afad83eee634270ceaa77274f9
7
- data.tar.gz: 295e9ea4da56c338d39eb6b3bfb5e3bbab96661fd5d40770a033590e787339f4bb0353a3e49f906a918c253bb63b4c77c9fba1e826074ee84ec12dd50f6c5475
6
+ metadata.gz: 03f7a6238d527555bd4e228eb8779823f3040a3bfcae3302a614e1f4c574a27365f785992f9f92f1117932d3c25b4f68de8181fff7f2e2179379328363f87d64
7
+ data.tar.gz: 17fea0c7d58536e7ae2785acb79b04e381d6346ec710c3672315df214388f31e2f43a1005a8e67cc6335253f73910dd0dee15361825d82bf7d65b45b4434804a
@@ -44,6 +44,45 @@ module HammerCLIKatello
44
44
  end
45
45
  end
46
46
 
47
+ class GenerateListingCommand < HammerCLIKatello::Command
48
+ desc _("Generates listing file on each directory of a syncable export. This command "\
49
+ + "only needs to be used if the export was performed asynchronously or "\
50
+ + "if the listing files were lost. "\
51
+ + "Assumes the syncable export directory is accessible on disk")
52
+
53
+ command_name 'generate-listing'
54
+
55
+ include ContentExportHelper
56
+
57
+ option "--task-id", "TASK_ID",
58
+ _("Generate listing files for a syncable export task"),
59
+ :attribute_name => :option_task_id,
60
+ :required => false
61
+
62
+ option "--id", "ID",
63
+ _("Generate listing files based on specified export history"),
64
+ :attribute_name => :option_export_id,
65
+ :required => false
66
+
67
+ def execute
68
+ export_history = if option_task_id
69
+ export_task = reload_task(option_task_id)
70
+ fetch_export_history_from_task(export_task)
71
+ else
72
+ fetch_export_history(option_export_id)
73
+ end
74
+
75
+ unless export_history
76
+ raise _("No export history was found. Verify the value given for "\
77
+ + "--task-id or --id")
78
+ end
79
+
80
+ make_listing_files(export_history)
81
+
82
+ HammerCLI::EX_OK
83
+ end
84
+ end
85
+
47
86
  class ListCommand < HammerCLIKatello::ListCommand
48
87
  desc "View content view export histories"
49
88
  output do
@@ -1,23 +1,23 @@
1
1
  require 'hammer_cli_katello/repository'
2
-
2
+ require 'find'
3
3
  # rubocop:disable ModuleLength
4
4
  module HammerCLIKatello
5
5
  module ContentExportHelper
6
6
  include ApipieHelper
7
-
8
7
  def execute
9
8
  warn_unexportable_repositories
10
9
  response = super
11
10
  if option_async?
12
- output.print_message _("Once the task completes the export metadata must be generated "\
13
- + "with the command:")
14
- output.print_message(" hammer content-export generate-metadata --task-id #{@task['id']}")
11
+ emit_async_info
15
12
  HammerCLI::EX_OK
16
13
  elsif response != HammerCLI::EX_OK
17
14
  response
18
15
  else
19
16
  export_history = fetch_export_history_from_task(reload_task(@task))
20
- if export_history
17
+ if syncable?
18
+ make_listing_files(export_history)
19
+ HammerCLI::EX_OK
20
+ elsif export_history
21
21
  generate_metadata_json(export_history)
22
22
  HammerCLI::EX_OK
23
23
  else
@@ -27,6 +27,22 @@ module HammerCLIKatello
27
27
  end
28
28
  end
29
29
 
30
+ def emit_async_info
31
+ if syncable?
32
+ output.print_message _("Once the task completes the listing files may be generated "\
33
+ + "with the command:")
34
+ output.print_message(" hammer content-export generate-listing --task-id #{@task['id']}")
35
+ else
36
+ output.print_message _("Once the task completes the export metadata must be generated "\
37
+ + "with the command:")
38
+ output.print_message(" hammer content-export generate-metadata --task-id #{@task['id']}")
39
+ end
40
+ end
41
+
42
+ def syncable?
43
+ options.key?("option_format") && option_format == 'syncable'
44
+ end
45
+
30
46
  def send_request
31
47
  @task = super
32
48
  end
@@ -54,6 +70,48 @@ module HammerCLIKatello
54
70
  fetch_export_history(export_history_id)
55
71
  end
56
72
 
73
+ def check_export_history_syncable!(export_history)
74
+ unless export_history["metadata"]["format"] == "syncable"
75
+ raise _("Cannot generate listing files for this export since "\
76
+ + "it is not syncable. It was not generated with --format=syncable.")
77
+ end
78
+
79
+ raise _("Export History does not have the path specified."\
80
+ + " The task may have errored out.") unless export_history["path"]
81
+ end
82
+
83
+ def make_listing_files(export_history)
84
+ check_export_history_syncable!(export_history)
85
+ output.print_message _("Generated #{export_history['path']}")
86
+
87
+ return unless Dir.exist?("#{export_history['path']}/content")
88
+
89
+ begin
90
+ # export history path may look like
91
+ # "/var/lib/pulp/exports/export-12803/apple/3.0//2022-06-30T17-23-06-00-00"
92
+ # Generate listing files for all sub directories of
93
+ # /var/lib/pulp/exports/export-12803/apple/3.0/$date/$org/Library/
94
+ ignorables = Dir.glob("#{export_history['path']}/content/**/repodata").map do |path|
95
+ File.dirname(path)
96
+ end
97
+
98
+ paths = Find.find("#{export_history['path']}/content").select do |path|
99
+ File.directory?(path) &&
100
+ ignorables.none? { |ignorable| path.start_with?(ignorable) }
101
+ end
102
+
103
+ paths.each do |dir|
104
+ directories = Dir.chdir(dir) { Dir['*'] }
105
+ File.write("#{dir}/listing", directories.join("\n"))
106
+ end
107
+ rescue SystemCallError
108
+ output.print_message _("Unable to access/write listing files"\
109
+ + " to '#{export_history['path']}'." \
110
+ + " To generate listing files run the command below as a root user ")
111
+ output.print_message(" hammer content-export generate-listing --id #{export_history['id']}")
112
+ end
113
+ end
114
+
57
115
  def generate_metadata_json(export_history)
58
116
  metadata_json = export_history["metadata"].to_json
59
117
  begin
@@ -1,5 +1,5 @@
1
1
  module HammerCLIKatello
2
2
  def self.version
3
- @version ||= Gem::Version.new('1.5.2')
3
+ @version ||= Gem::Version.new('1.5.3')
4
4
  end
5
5
  end