machinery-tool 1.16.4 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.git_revision +1 -1
  3. data/NEWS +10 -0
  4. data/filters/default_filters.json +21 -20
  5. data/html/assets/machinery-base.js +4 -0
  6. data/html/index.html.haml +1 -1
  7. data/html/partials/changed_managed_files.html.haml +2 -2
  8. data/html/partials/compare/changed_managed_file_list.html.haml +2 -2
  9. data/html/partials/compare/changed_managed_files.html.haml +3 -3
  10. data/html/partials/compare/config_file_list.html.haml +2 -2
  11. data/html/partials/compare/config_files.html.haml +3 -3
  12. data/html/partials/compare/packages.html.haml +21 -4
  13. data/html/partials/compare/repositories.html.haml +10 -7
  14. data/html/partials/compare/repository_list_apt.html.haml +15 -0
  15. data/html/partials/compare/repository_list_yum.html.haml +35 -0
  16. data/html/partials/compare/{repository_list.html.haml → repository_list_zypp.html.haml} +0 -0
  17. data/html/partials/compare/service_list.html.haml +1 -1
  18. data/html/partials/compare/services.html.haml +3 -3
  19. data/html/partials/compare/unmanaged_file_list.html.haml +2 -2
  20. data/html/partials/compare/unmanaged_files.html.haml +1 -1
  21. data/html/partials/config_files.html.haml +39 -41
  22. data/html/partials/repositories.html.haml +1 -23
  23. data/html/partials/repositories_apt.html.haml +15 -0
  24. data/html/partials/repositories_yum.html.haml +30 -0
  25. data/html/partials/repositories_zypp.html.haml +24 -0
  26. data/html/partials/services.html.haml +2 -2
  27. data/html/partials/unmanaged_files.html.haml +2 -2
  28. data/inspect_helpers/dpkg_unmanaged_files.sh +47 -0
  29. data/inspect_helpers/yum_repositories.py +3 -5
  30. data/lib/analyze_config_file_diffs_task.rb +11 -1
  31. data/lib/array.rb +97 -35
  32. data/lib/autoyast.rb +13 -2
  33. data/lib/cli.rb +10 -2
  34. data/lib/config.rb +4 -4
  35. data/lib/dpkg_database.rb +68 -0
  36. data/lib/element_filter.rb +2 -0
  37. data/lib/file_diff.rb +2 -2
  38. data/lib/file_scope.rb +10 -49
  39. data/lib/file_validator.rb +10 -4
  40. data/lib/filter.rb +6 -6
  41. data/lib/filter_option_parser.rb +1 -1
  42. data/lib/kiwi_config.rb +13 -10
  43. data/lib/machinery.rb +2 -0
  44. data/lib/machinery_helper.rb +1 -1
  45. data/lib/managed_files_database.rb +200 -0
  46. data/lib/object.rb +5 -3
  47. data/lib/remote_system.rb +43 -10
  48. data/lib/renderer.rb +3 -4
  49. data/lib/rpm_database.rb +7 -183
  50. data/lib/scope_file_access_archive.rb +3 -3
  51. data/lib/scope_file_access_flat.rb +1 -1
  52. data/lib/server.rb +7 -2
  53. data/lib/system.rb +50 -22
  54. data/lib/system_description.rb +3 -3
  55. data/lib/version.rb +1 -1
  56. data/lib/workload_mapper.rb +2 -2
  57. data/machinery-helper/machinery_helper.go +252 -178
  58. data/machinery-helper/machinery_helper_test.go +121 -121
  59. data/machinery-helper/mountpoints.go +28 -28
  60. data/machinery-helper/tar.go +105 -104
  61. data/machinery-helper/version.go +1 -1
  62. data/man/generated/machinery.1.gz +0 -0
  63. data/man/generated/machinery.1.html +19 -8
  64. data/plugins/changed_managed_files/changed_managed_files_inspector.rb +3 -3
  65. data/plugins/changed_managed_files/changed_managed_files_model.rb +3 -1
  66. data/plugins/changed_managed_files/changed_managed_files_renderer.rb +2 -2
  67. data/plugins/changed_managed_files/schema/system-description-changed-managed-files.schema-v6.json +168 -0
  68. data/plugins/config_files/config_files_inspector.rb +4 -4
  69. data/plugins/config_files/config_files_model.rb +3 -1
  70. data/plugins/config_files/config_files_renderer.rb +2 -2
  71. data/plugins/config_files/schema/system-description-config-files.schema-v6.json +160 -0
  72. data/plugins/environment/schema/system-description-environment.schema-v6.json +17 -0
  73. data/plugins/groups/schema/system-description-groups.schema-v6.json +49 -0
  74. data/plugins/os/schema/system-description-os.schema-v6.json +21 -0
  75. data/plugins/packages/packages_inspector.rb +76 -6
  76. data/plugins/packages/packages_model.rb +31 -12
  77. data/plugins/packages/packages_renderer.rb +5 -2
  78. data/plugins/packages/schema/system-description-packages.schema-v6.json +115 -0
  79. data/plugins/patterns/patterns_inspector.rb +26 -2
  80. data/plugins/patterns/schema/system-description-patterns.schema-v6.json +58 -0
  81. data/plugins/repositories/repositories_inspector.rb +41 -14
  82. data/plugins/repositories/repositories_model.rb +55 -12
  83. data/plugins/repositories/repositories_renderer.rb +23 -7
  84. data/plugins/repositories/schema/system-description-repositories.schema-v6.json +165 -0
  85. data/plugins/services/schema/system-description-services.schema-v6.json +93 -0
  86. data/plugins/services/services_inspector.rb +88 -22
  87. data/plugins/services/services_model.rb +9 -15
  88. data/plugins/services/services_renderer.rb +2 -2
  89. data/plugins/unmanaged_files/schema/system-description-unmanaged-files.schema-v6.json +162 -0
  90. data/plugins/unmanaged_files/unmanaged_files_inspector.rb +80 -30
  91. data/plugins/unmanaged_files/unmanaged_files_model.rb +22 -18
  92. data/plugins/unmanaged_files/unmanaged_files_renderer.rb +3 -3
  93. data/plugins/users/schema/system-description-users.schema-v6.json +86 -0
  94. data/schema/migrations/migrate5to6.rb +101 -0
  95. data/schema/system-description-global.schema-v6.json +43 -0
  96. metadata +24 -4
  97. data/html/assets/landing_page/landing_page.js +0 -10
@@ -2,4 +2,4 @@
2
2
 
3
3
  package main
4
4
 
5
- const VERSION = "493384074f90a69256c6fa174a1e1e05ae5ce219"
5
+ const VERSION = "8bfc2e6ccf6d9ff87a018bd15002a20182fd6709"
Binary file
@@ -855,6 +855,10 @@ See the <a href="#Scopes" data-bare-link="true">Scope section</a> for more infor
855
855
  This user needs to be allowed to run certain commands using sudo (see
856
856
  PREREQUISITES for more information).
857
857
  To change the default-user use <code>machinery config remote-user=USER</code></p></dd>
858
+ <dt><code>-p SSH-PORT</code>, <code>--ssh-port SSH-PORT</code> (optional)</dt><dd><p>Specifies the SSH port of the remote SSH server.</p></dd>
859
+ <dt><code>-i SSH-IDENTITY-FILE</code>, <code>--ssh-identity-file SSH-IDENTITY-FILE</code> (optional)</dt><dd><p>Specifies the SSH private key what should be used to authenticate with the
860
+ remote SSH server. Keys with a passphrase are not allowed here. Use the ssh-agent
861
+ instead.</p></dd>
858
862
  <dt><code>-x</code>, <code>--extract-files</code> (optional)</dt><dd><p>Extract changed configuration and unmanaged files from the inspected system.
859
863
  Shortcut for the combination of <code>--extract-changed-config-files</code>,
860
864
  <code>--extract-unmanaged-files</code>, and <code>--extract-changed-managed-files</code></p></dd>
@@ -889,10 +893,10 @@ via <code>ssh-copy-id</code> to the inspected host, e.g.: <code>ssh-copy-id root
889
893
  <li><p>The system to be inspected needs to have the following commands:</p>
890
894
 
891
895
  <ul>
892
- <li><code>rpm</code></li>
893
- <li><code>zypper</code> or <code>yum</code></li>
896
+ <li><code>rpm</code> or <code>dpkg</code></li>
897
+ <li><code>zypper</code>, <code>yum</code> or <code>apt-cache</code></li>
894
898
  <li><code>rsync</code></li>
895
- <li><code>chkconfig</code></li>
899
+ <li><code>chkconfig</code>, <code>initctl</code> or <code>systemctl</code></li>
896
900
  <li><code>cat</code></li>
897
901
  <li><code>sed</code></li>
898
902
  <li><code>find</code></li>
@@ -900,9 +904,17 @@ via <code>ssh-copy-id</code> to the inspected host, e.g.: <code>ssh-copy-id root
900
904
  </ul>
901
905
  </li>
902
906
  <li><p>When inspecting as non-root the user has to have the following command
903
- whitelist given in the sudoers file:</p>
907
+ whitelist given in the sudoers file.</p>
904
908
 
905
- <p>machinery ALL=(ALL) NOPASSWD: /usr/bin/find,/usr/bin/cat,/bin/cat,/usr/bin/rsync,/bin/rpm -Va *,/bin/tar --create *,/usr/bin/stat</p></li>
909
+ <dl>
910
+ <dt>On rpm based systems, like SUSE or Red Hat:</dt><dd><p></p>
911
+
912
+ <p>machinery ALL=(ALL) NOPASSWD: /usr/bin/find,/usr/bin/cat,/bin/cat,/usr/bin/rsync,/bin/rpm -Va *,/bin/tar --create *,/usr/bin/stat</p></dd>
913
+ <dt>On dpkg based systems, like Debian or Ubuntu:</dt><dd><p></p>
914
+
915
+ <p>machinery ALL=(ALL) NOPASSWD: /usr/bin/find,/usr/bin/cat,/bin/cat,/usr/bin/rsync,/bin/tar --create *,/usr/bin/stat,/usr/bin/dpkg,/bin/readlink</p></dd>
916
+ </dl>
917
+ </li>
906
918
  <li><p>To add a remote <code>machinery</code> user run as root:</p>
907
919
 
908
920
  <h1><code>useradd -m machinery -c "remote user for machinery"</code></h1>
@@ -1006,10 +1018,9 @@ by adding an '@' before the path, e.g.</p>
1006
1018
  <li><p>The image to be inspected needs to have the following commands:</p>
1007
1019
 
1008
1020
  <ul>
1009
- <li><code>rpm</code></li>
1010
- <li><code>zypper</code> or <code>yum</code></li>
1021
+ <li><code>rpm</code> or <code>dpkg</code></li>
1022
+ <li><code>zypper</code>, <code>yum</code> or <code>apt-cache</code></li>
1011
1023
  <li><code>rsync</code></li>
1012
- <li><code>chkconfig</code></li>
1013
1024
  <li><code>cat</code></li>
1014
1025
  <li><code>sed</code></li>
1015
1026
  <li><code>find</code></li>
@@ -55,21 +55,21 @@ class ChangedManagedFilesInspector < Inspector
55
55
  end
56
56
 
57
57
  scope.extracted = !!options[:extract_changed_managed_files]
58
- scope.files = ChangedManagedFileList.new(result.sort_by(&:name))
58
+ scope += result.sort_by(&:name)
59
59
 
60
60
  @description["changed_managed_files"] = scope
61
61
  end
62
62
 
63
63
  def summary
64
64
  "#{@description.changed_managed_files.extracted ? "Extracted" : "Found"} " +
65
- "#{@description.changed_managed_files.files.count} changed files."
65
+ "#{@description.changed_managed_files.count} changed files."
66
66
  end
67
67
 
68
68
  private
69
69
 
70
70
  def changed_files
71
71
  count = 0
72
- files = @system.rpm_database.changed_files do |chunk|
72
+ files = @system.managed_files_database.changed_files do |chunk|
73
73
  count += chunk.lines.reject { |l| l.chomp.end_with?(":") || l.split(" ")[1] == "c" }.count
74
74
  Machinery::Ui.progress(" -> Found #{count} changed #{Machinery::pluralize(count, "file")}...")
75
75
  end
@@ -39,5 +39,7 @@ end
39
39
  class ChangedManagedFilesScope < FileScope
40
40
  include Machinery::Scope
41
41
  include ScopeFileAccessFlat
42
- has_property :files, class: ChangedManagedFileList
42
+
43
+ has_attributes :extracted
44
+ has_elements class: ChangedManagedFile
43
45
  end
@@ -19,8 +19,8 @@ class ChangedManagedFilesRenderer < Renderer
19
19
  def content(description)
20
20
  return unless description["changed_managed_files"]
21
21
 
22
- if description["changed_managed_files"].files
23
- files, errors = description["changed_managed_files"].files.partition do |file|
22
+ if description["changed_managed_files"]
23
+ files, errors = description["changed_managed_files"].partition do |file|
24
24
  file.status != "error"
25
25
  end
26
26
  end
@@ -0,0 +1,168 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+
4
+ "type": "object",
5
+ "required": [
6
+ "_elements"
7
+ ],
8
+ "properties": {
9
+ "_attributes": {
10
+ "type": "object",
11
+ "required": [
12
+ "extracted"
13
+ ],
14
+ "properties": {
15
+ "extracted": {
16
+ "type": "boolean"
17
+ }
18
+ }
19
+ },
20
+ "_elements": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "required": [
25
+ "name",
26
+ "package_name",
27
+ "package_version"
28
+ ],
29
+ "properties": {
30
+ "name": {
31
+ "type": "string"
32
+ },
33
+ "package_name": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ },
37
+ "package_version": {
38
+ "type": "string",
39
+ "minLength": 1
40
+ }
41
+ },
42
+ "oneOf": [
43
+ {
44
+ "$ref": "#/definitions/file_changed"
45
+ },
46
+ {
47
+ "$ref": "#/definitions/file_error"
48
+ }
49
+ ]
50
+ }
51
+ }
52
+ },
53
+ "definitions": {
54
+ "file_changed": {
55
+ "required": ["status"],
56
+ "properties": {
57
+ "status": {
58
+ "enum": ["changed"]
59
+ }
60
+ },
61
+ "oneOf": [
62
+ { "$ref": "#/definitions/file_changed_modified" },
63
+ { "$ref": "#/definitions/link_changed_modified" },
64
+ { "$ref": "#/definitions/file_changed_deleted" }
65
+ ]
66
+ },
67
+ "file_changed_modified": {
68
+ "required": ["changes", "mode", "user", "group", "type"],
69
+ "properties": {
70
+ "changes": {
71
+ "type": "array",
72
+ "items": {
73
+ "enum": [
74
+ "size",
75
+ "mode",
76
+ "md5",
77
+ "device_number",
78
+ "link_path",
79
+ "user",
80
+ "group",
81
+ "time",
82
+ "capabilities",
83
+ "replaced",
84
+ "other_rpm_changes"
85
+ ]
86
+ },
87
+ "minItems": 1
88
+ },
89
+ "mode": {
90
+ "type": "string",
91
+ "pattern": "^[0-7]{3,4}$"
92
+ },
93
+ "user": {
94
+ "type": "string",
95
+ "minLength": 1
96
+ },
97
+ "group": {
98
+ "type": "string",
99
+ "minLength": 1
100
+ },
101
+ "type": {
102
+ "enum": ["file", "dir"]
103
+ }
104
+ }
105
+ },
106
+ "link_changed_modified": {
107
+ "required": ["target", "changes", "mode", "user", "group", "type"],
108
+ "properties": {
109
+ "changes": {
110
+ "type": "array",
111
+ "items": {
112
+ "enum": [
113
+ "size",
114
+ "mode",
115
+ "md5",
116
+ "device_number",
117
+ "link_path",
118
+ "user",
119
+ "group",
120
+ "time",
121
+ "capabilities",
122
+ "replaced",
123
+ "other_rpm_changes"
124
+ ]
125
+ },
126
+ "minItems": 1
127
+ },
128
+ "mode": {
129
+ "type": "string",
130
+ "pattern": "^[0-7]{3,4}$"
131
+ },
132
+ "user": {
133
+ "type": "string",
134
+ "minLength": 1
135
+ },
136
+ "group": {
137
+ "type": "string",
138
+ "minLength": 1
139
+ },
140
+ "type": {
141
+ "enum": ["link"]
142
+ },
143
+ "target": {
144
+ "type": "string"
145
+ }
146
+ }
147
+ },
148
+ "file_changed_deleted": {
149
+ "required": ["changes"],
150
+ "properties": {
151
+ "changes": {
152
+ "enum": [["deleted"]]
153
+ }
154
+ }
155
+ },
156
+ "file_error": {
157
+ "required": ["status", "error_message"],
158
+ "properties": {
159
+ "status": {
160
+ "enum": ["error"]
161
+ },
162
+ "error_message": {
163
+ "type": "string"
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
@@ -41,7 +41,7 @@ class ConfigFilesInspector < Inspector
41
41
  system.check_retrieve_files_dependencies if do_extract
42
42
 
43
43
  count = 0
44
- files = @system.rpm_database.changed_files do |chunk|
44
+ files = @system.managed_files_database.changed_files do |chunk|
45
45
  count += chunk.lines.count { |l| !l.chomp.end_with?(":") && l.split(" ")[1] == "c" }
46
46
  Machinery::Ui.progress(" -> Found #{count} config #{Machinery::pluralize(count, "file")}...")
47
47
  end
@@ -62,20 +62,20 @@ class ConfigFilesInspector < Inspector
62
62
  if do_extract
63
63
  file_store.create
64
64
  extracted_paths = result.reject do |file|
65
- file.changes == Machinery::Array.new(["deleted"]) ||
65
+ file.changes == ["deleted"] ||
66
66
  file.link? || file.directory?
67
67
  end.map(&:name)
68
68
  scope.retrieve_files_from_system(@system, extracted_paths)
69
69
  end
70
70
 
71
71
  scope.extracted = !!do_extract
72
- scope.files = ConfigFileList.new(result.sort_by(&:name))
72
+ scope += result.sort_by(&:name)
73
73
 
74
74
  @description["config_files"] = scope
75
75
  end
76
76
 
77
77
  def summary
78
78
  "#{@description.config_files.extracted ? "Extracted" : "Found"} " +
79
- "#{@description.config_files.files.count} changed configuration files."
79
+ "#{@description.config_files.count} changed configuration files."
80
80
  end
81
81
  end
@@ -39,5 +39,7 @@ end
39
39
  class ConfigFilesScope < FileScope
40
40
  include Machinery::Scope
41
41
  include ScopeFileAccessFlat
42
- has_property :files, class: ConfigFileList
42
+
43
+ has_attributes :extracted
44
+ has_elements class: ConfigFile
43
45
  end
@@ -31,9 +31,9 @@ class ConfigFilesRenderer < Renderer
31
31
 
32
32
  list do
33
33
  file_status = description["config_files"].extracted
34
- files = description["config_files"].files
34
+ files = description["config_files"]
35
35
 
36
- if files.empty?
36
+ if files.elements.empty?
37
37
  puts "There are no config files."
38
38
  elsif !file_status.nil?
39
39
  puts "Files extracted: #{file_status ? "yes" : "no"}"
@@ -0,0 +1,160 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+
4
+ "type": "object",
5
+ "required": [
6
+ "_elements"
7
+ ],
8
+ "properties": {
9
+ "_attributes": {
10
+ "type": "object",
11
+ "required": [
12
+ "extracted"
13
+ ],
14
+ "properties": {
15
+ "extracted": {
16
+ "type": "boolean"
17
+ }
18
+ }
19
+ },
20
+ "_elements": {
21
+ "type": "array",
22
+ "items" : {
23
+ "type": "object",
24
+ "required": ["name", "package_name", "package_version"],
25
+ "properties": {
26
+ "name": {
27
+ "type": "string"
28
+ },
29
+ "package_name": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "package_version": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ }
37
+ },
38
+ "oneOf": [
39
+ { "$ref": "#/definitions/file_changed" },
40
+ { "$ref": "#/definitions/file_error" }
41
+ ]
42
+ }
43
+ }
44
+ },
45
+ "definitions": {
46
+ "file_changed": {
47
+ "required": ["status"],
48
+ "properties": {
49
+ "status": {
50
+ "enum": ["changed"]
51
+ }
52
+ },
53
+ "oneOf": [
54
+ { "$ref": "#/definitions/file_changed_modified" },
55
+ { "$ref": "#/definitions/link_changed_modified" },
56
+ { "$ref": "#/definitions/file_changed_deleted" }
57
+ ]
58
+ },
59
+ "file_changed_modified": {
60
+ "required": ["changes", "mode", "user", "group", "type"],
61
+ "properties": {
62
+ "changes": {
63
+ "type": "array",
64
+ "items": {
65
+ "enum": [
66
+ "size",
67
+ "mode",
68
+ "md5",
69
+ "device_number",
70
+ "link_path",
71
+ "user",
72
+ "group",
73
+ "time",
74
+ "capabilities",
75
+ "replaced",
76
+ "other_rpm_changes"
77
+ ]
78
+ },
79
+ "minItems": 1
80
+ },
81
+ "mode": {
82
+ "type": "string",
83
+ "pattern": "^[0-7]{3,4}$"
84
+ },
85
+ "user": {
86
+ "type": "string",
87
+ "minLength": 1
88
+ },
89
+ "group": {
90
+ "type": "string",
91
+ "minLength": 1
92
+ },
93
+ "type": {
94
+ "enum": ["file", "dir"]
95
+ }
96
+ }
97
+ },
98
+ "link_changed_modified": {
99
+ "required": ["target", "changes", "mode", "user", "group", "type"],
100
+ "properties": {
101
+ "changes": {
102
+ "type": "array",
103
+ "items": {
104
+ "enum": [
105
+ "size",
106
+ "mode",
107
+ "md5",
108
+ "device_number",
109
+ "link_path",
110
+ "user",
111
+ "group",
112
+ "time",
113
+ "capabilities",
114
+ "replaced",
115
+ "other_rpm_changes"
116
+ ]
117
+ },
118
+ "minItems": 1
119
+ },
120
+ "mode": {
121
+ "type": "string",
122
+ "pattern": "^[0-7]{3,4}$"
123
+ },
124
+ "user": {
125
+ "type": "string",
126
+ "minLength": 1
127
+ },
128
+ "group": {
129
+ "type": "string",
130
+ "minLength": 1
131
+ },
132
+ "type": {
133
+ "enum": ["link"]
134
+ },
135
+ "target": {
136
+ "type": "string"
137
+ }
138
+ }
139
+ },
140
+ "file_changed_deleted": {
141
+ "required": ["changes"],
142
+ "properties": {
143
+ "changes": {
144
+ "enum": [["deleted"]]
145
+ }
146
+ }
147
+ },
148
+ "file_error": {
149
+ "required": ["status", "error_message"],
150
+ "properties": {
151
+ "status": {
152
+ "enum": ["error"]
153
+ },
154
+ "error_message": {
155
+ "type": "string"
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }