machinery-tool 1.22.0 → 1.22.1
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 +4 -4
- data/.git_revision +1 -1
- data/NEWS +6 -0
- data/lib/docker_system.rb +1 -1
- data/lib/exceptions.rb +12 -1
- data/lib/local_system.rb +1 -1
- data/lib/remote_system.rb +49 -28
- data/lib/version.rb +1 -1
- data/machinery-helper/version.go +1 -1
- data/man/generated/machinery.1.gz +0 -0
- data/manual/site/sitemap.xml +24 -24
- data/plugins/users/users_inspector.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dacdd7ed294b3fa071ce5c205cff0c9bc4888c33
|
|
4
|
+
data.tar.gz: e5679c290377bd246cbde4d82c3bab5ad64c2ef7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b66684bde79b39bb03551a8249a600b1c9c1811df5582ae4d48559c240a4dfc46a975e6bbb8425747216a576599297cb43b2419385cb15be5d36c5dd94569572
|
|
7
|
+
data.tar.gz: aba642cb4e81b629a4cf1aa6a0090c97507b2995ba36097387eaed96a0a7f7f107ce976f3af602655b042f4c557ba4d2425655557ce884614d29df4133d3e86b
|
data/.git_revision
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
c9cc765d7146920c59d05dd9e483a82eb5f836df
|
data/NEWS
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# Machinery Release Notes
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## Version 1.22.1 - Fri Oct 14 16:13:50 CEST 2016 - thardeck@suse.de
|
|
5
|
+
|
|
6
|
+
* Only use sudo for reading files when necessary (gh#SUSE/machinery#2077)
|
|
7
|
+
* Gracefully handle RequireTTY enabled sudo configs (gh#SUSE/machinery#2135)
|
|
8
|
+
* Add rsync requirement check for remote system (gh#SUSE/machinery#2165)
|
|
9
|
+
|
|
4
10
|
## Version 1.22.0 - Thu Oct 06 17:03:33 CEST 2016 - thardeck@suse.de
|
|
5
11
|
|
|
6
12
|
* Add remaining systemd service states in Kiwi export (gh#SUSE/machinery#2122)
|
data/lib/docker_system.rb
CHANGED
|
@@ -54,7 +54,7 @@ class DockerSystem < System
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Reads a file from the System. Returns nil if it does not exist.
|
|
57
|
-
def read_file(file)
|
|
57
|
+
def read_file(file, _options = {})
|
|
58
58
|
run_command("cat", file, stdout: :capture)
|
|
59
59
|
rescue Cheetah::ExecutionFailed => e
|
|
60
60
|
if e.status.exitstatus == 1
|
data/lib/exceptions.rb
CHANGED
|
@@ -118,12 +118,23 @@ module Machinery
|
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
def to_s
|
|
121
|
-
"sudo isn't configured on the inspected host '#{@host}' for user '#{@remote_user}' to " \
|
|
121
|
+
"'sudo' isn't configured on the inspected host '#{@host}' for user '#{@remote_user}' to " \
|
|
122
122
|
"give all required commands enough privileges. See 'PREREQUISITES' section in the " \
|
|
123
123
|
"machinery documentation for a description on how to configure sudo on the inspected host."
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
126
|
|
|
127
|
+
class SudoMissingTTY < MachineryError
|
|
128
|
+
def initialize(host)
|
|
129
|
+
@host = host
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def to_s
|
|
133
|
+
"'sudo' isn't configured on the inspected host '#{@host}'." \
|
|
134
|
+
" Remove the RequireTTY settings from sudoers.conf."
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
127
138
|
class MigrationError < MachineryError; end
|
|
128
139
|
|
|
129
140
|
class InvalidFilter < MachineryError; end
|
data/lib/local_system.rb
CHANGED
|
@@ -138,7 +138,7 @@ You can install it by running `zypper install #{package}`.
|
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
# Reads a file from the System. Returns nil if it does not exist.
|
|
141
|
-
def read_file(file)
|
|
141
|
+
def read_file(file, _options = {})
|
|
142
142
|
File.read(file)
|
|
143
143
|
rescue Errno::ENOENT
|
|
144
144
|
# File not found, return nil
|
data/lib/remote_system.rb
CHANGED
|
@@ -41,6 +41,11 @@ class RemoteSystem < System
|
|
|
41
41
|
false
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
def connect
|
|
45
|
+
check_connection
|
|
46
|
+
check_sudo if sudo_required?
|
|
47
|
+
end
|
|
48
|
+
|
|
44
49
|
def run_command(*args)
|
|
45
50
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
46
51
|
|
|
@@ -83,45 +88,24 @@ class RemoteSystem < System
|
|
|
83
88
|
cheetah_class = LoggedCheetah
|
|
84
89
|
end
|
|
85
90
|
|
|
86
|
-
sudo = ["sudo", "-n"] if options[:privileged] &&
|
|
91
|
+
sudo = ["sudo", "-n"] if options[:privileged] && sudo_required?
|
|
87
92
|
cmds = [
|
|
88
93
|
*build_command(:ssh), "#{remote_user}@#{host}", "-o", \
|
|
89
94
|
"LogLevel=ERROR", sudo, "LANGUAGE=", "LC_ALL=#{locale}", *piped_args, options
|
|
90
95
|
].compact.flatten
|
|
91
96
|
|
|
92
97
|
cheetah_class.run(*cmds)
|
|
93
|
-
rescue Cheetah::ExecutionFailed => e
|
|
94
|
-
if e.stderr && e.stderr.include?("password is required")
|
|
95
|
-
raise Machinery::Errors::InsufficientPrivileges.new(remote_user, host)
|
|
96
|
-
else
|
|
97
|
-
raise e
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Tries to run the noop-command(:) on the remote system as root (without a password or passphrase)
|
|
102
|
-
# and raises an Machinery::Errors::SshConnectionFailed exception when it's not successful.
|
|
103
|
-
def connect
|
|
104
|
-
LoggedCheetah.run(*build_command(:ssh), "-q", "-o", "BatchMode=yes",
|
|
105
|
-
"#{remote_user}@#{host}", ":")
|
|
106
|
-
rescue Cheetah::ExecutionFailed
|
|
107
|
-
raise Machinery::Errors::SshConnectionFailed.new(
|
|
108
|
-
"Could not establish SSH connection to host '#{host}'. Please make sure that " \
|
|
109
|
-
"you can connect non-interactively as #{remote_user}, e.g. using ssh-agent.\n\n" \
|
|
110
|
-
"To copy your default ssh key to the machine run:\n" \
|
|
111
|
-
"ssh-copy-id #{remote_user}@#{host}"
|
|
112
|
-
)
|
|
113
98
|
end
|
|
114
99
|
|
|
115
|
-
|
|
116
100
|
# Retrieves files specified in filelist from the remote system and raises an
|
|
117
101
|
# Machinery::Errors::RsyncFailed exception when it's not successful. Destination is
|
|
118
102
|
# the directory where to put the files.
|
|
119
103
|
def retrieve_files(filelist, destination)
|
|
120
104
|
source = "#{remote_user}@#{host}:/"
|
|
121
|
-
|
|
122
|
-
|
|
105
|
+
rsync_path = if sudo_required?
|
|
106
|
+
"sudo -n rsync"
|
|
123
107
|
else
|
|
124
|
-
|
|
108
|
+
"rsync"
|
|
125
109
|
end
|
|
126
110
|
|
|
127
111
|
cmd = [
|
|
@@ -146,12 +130,17 @@ class RemoteSystem < System
|
|
|
146
130
|
end
|
|
147
131
|
|
|
148
132
|
def check_retrieve_files_dependencies
|
|
149
|
-
LocalSystem.
|
|
133
|
+
LocalSystem.validate_existence_of_command("rsync", "rsync")
|
|
134
|
+
check_requirement("rsync", "--version")
|
|
150
135
|
end
|
|
151
136
|
|
|
152
137
|
# Reads a file from the System. Returns nil if it does not exist.
|
|
153
|
-
def read_file(file)
|
|
154
|
-
|
|
138
|
+
def read_file(file, options = {})
|
|
139
|
+
command_options = {
|
|
140
|
+
stdout: :capture,
|
|
141
|
+
privileged: options.fetch(:privileged, false)
|
|
142
|
+
}
|
|
143
|
+
run_command("cat", file, command_options)
|
|
155
144
|
rescue Cheetah::ExecutionFailed => e
|
|
156
145
|
if e.status.exitstatus == 1
|
|
157
146
|
# File not found, return nil
|
|
@@ -191,6 +180,38 @@ class RemoteSystem < System
|
|
|
191
180
|
|
|
192
181
|
private
|
|
193
182
|
|
|
183
|
+
def sudo_required?
|
|
184
|
+
remote_user != "root"
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Tries to run the noop-command(:) on the remote system as root (without a password or passphrase)
|
|
188
|
+
# and raises an Machinery::Errors::SshConnectionFailed exception when it's not successful.
|
|
189
|
+
def check_connection
|
|
190
|
+
LoggedCheetah.run(*build_command(:ssh), "-q", "-o", "BatchMode=yes",
|
|
191
|
+
"#{remote_user}@#{host}", ":")
|
|
192
|
+
rescue Cheetah::ExecutionFailed
|
|
193
|
+
raise Machinery::Errors::SshConnectionFailed.new(
|
|
194
|
+
"Could not establish SSH connection to host '#{host}'. Please make sure that " \
|
|
195
|
+
"you can connect non-interactively as #{remote_user}, e.g. using ssh-agent.\n\n" \
|
|
196
|
+
"To copy your default ssh key to the machine run:\n" \
|
|
197
|
+
"ssh-copy-id #{remote_user}@#{host}"
|
|
198
|
+
)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def check_sudo
|
|
202
|
+
check_requirement("sudo", "-h")
|
|
203
|
+
LoggedCheetah.run(*build_command(:ssh), "-q", "-o", "BatchMode=yes",
|
|
204
|
+
"#{remote_user}@#{host}", "sudo", "id")
|
|
205
|
+
rescue Cheetah::ExecutionFailed => e
|
|
206
|
+
if e.stderr && e.stderr.include?("password is required")
|
|
207
|
+
raise Machinery::Errors::InsufficientPrivileges.new(remote_user, host)
|
|
208
|
+
elsif e.stderr && e.stderr.include?("you must have a tty to run sudo")
|
|
209
|
+
raise Machinery::Errors::SudoMissingTTY.new(host)
|
|
210
|
+
else
|
|
211
|
+
raise e
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
194
215
|
def build_command(name)
|
|
195
216
|
raise Machinery::Errors::MachineryError.new("You must set one of these flags in " \
|
|
196
217
|
"build_command: :ssh or :scp") unless [:ssh, :scp].include?(name)
|
data/lib/version.rb
CHANGED
data/machinery-helper/version.go
CHANGED
|
Binary file
|
data/manual/site/sitemap.xml
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<url>
|
|
6
6
|
<loc>None/docs/</loc>
|
|
7
|
-
<lastmod>2016-10-
|
|
7
|
+
<lastmod>2016-10-14</lastmod>
|
|
8
8
|
<changefreq>daily</changefreq>
|
|
9
9
|
</url>
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
<url>
|
|
14
14
|
<loc>None/machinery_main_general.1/</loc>
|
|
15
|
-
<lastmod>2016-10-
|
|
15
|
+
<lastmod>2016-10-14</lastmod>
|
|
16
16
|
<changefreq>daily</changefreq>
|
|
17
17
|
</url>
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
<url>
|
|
22
22
|
<loc>None/machinery_main_scopes.1/</loc>
|
|
23
|
-
<lastmod>2016-10-
|
|
23
|
+
<lastmod>2016-10-14</lastmod>
|
|
24
24
|
<changefreq>daily</changefreq>
|
|
25
25
|
</url>
|
|
26
26
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
<url>
|
|
30
30
|
<loc>None/machinery_main_usecases.1/</loc>
|
|
31
|
-
<lastmod>2016-10-
|
|
31
|
+
<lastmod>2016-10-14</lastmod>
|
|
32
32
|
<changefreq>daily</changefreq>
|
|
33
33
|
</url>
|
|
34
34
|
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
|
|
37
37
|
<url>
|
|
38
38
|
<loc>None/machinery_main_security_implications.1/</loc>
|
|
39
|
-
<lastmod>2016-10-
|
|
39
|
+
<lastmod>2016-10-14</lastmod>
|
|
40
40
|
<changefreq>daily</changefreq>
|
|
41
41
|
</url>
|
|
42
42
|
|
|
@@ -45,115 +45,115 @@
|
|
|
45
45
|
|
|
46
46
|
<url>
|
|
47
47
|
<loc>None/machinery-analyze.1/</loc>
|
|
48
|
-
<lastmod>2016-10-
|
|
48
|
+
<lastmod>2016-10-14</lastmod>
|
|
49
49
|
<changefreq>daily</changefreq>
|
|
50
50
|
</url>
|
|
51
51
|
|
|
52
52
|
<url>
|
|
53
53
|
<loc>None/machinery-build.1/</loc>
|
|
54
|
-
<lastmod>2016-10-
|
|
54
|
+
<lastmod>2016-10-14</lastmod>
|
|
55
55
|
<changefreq>daily</changefreq>
|
|
56
56
|
</url>
|
|
57
57
|
|
|
58
58
|
<url>
|
|
59
59
|
<loc>None/machinery-compare.1/</loc>
|
|
60
|
-
<lastmod>2016-10-
|
|
60
|
+
<lastmod>2016-10-14</lastmod>
|
|
61
61
|
<changefreq>daily</changefreq>
|
|
62
62
|
</url>
|
|
63
63
|
|
|
64
64
|
<url>
|
|
65
65
|
<loc>None/machinery-config.1/</loc>
|
|
66
|
-
<lastmod>2016-10-
|
|
66
|
+
<lastmod>2016-10-14</lastmod>
|
|
67
67
|
<changefreq>daily</changefreq>
|
|
68
68
|
</url>
|
|
69
69
|
|
|
70
70
|
<url>
|
|
71
71
|
<loc>None/machinery-copy.1/</loc>
|
|
72
|
-
<lastmod>2016-10-
|
|
72
|
+
<lastmod>2016-10-14</lastmod>
|
|
73
73
|
<changefreq>daily</changefreq>
|
|
74
74
|
</url>
|
|
75
75
|
|
|
76
76
|
<url>
|
|
77
77
|
<loc>None/machinery-deploy.1/</loc>
|
|
78
|
-
<lastmod>2016-10-
|
|
78
|
+
<lastmod>2016-10-14</lastmod>
|
|
79
79
|
<changefreq>daily</changefreq>
|
|
80
80
|
</url>
|
|
81
81
|
|
|
82
82
|
<url>
|
|
83
83
|
<loc>None/machinery-export-autoyast.1/</loc>
|
|
84
|
-
<lastmod>2016-10-
|
|
84
|
+
<lastmod>2016-10-14</lastmod>
|
|
85
85
|
<changefreq>daily</changefreq>
|
|
86
86
|
</url>
|
|
87
87
|
|
|
88
88
|
<url>
|
|
89
89
|
<loc>None/machinery-export-kiwi.1/</loc>
|
|
90
|
-
<lastmod>2016-10-
|
|
90
|
+
<lastmod>2016-10-14</lastmod>
|
|
91
91
|
<changefreq>daily</changefreq>
|
|
92
92
|
</url>
|
|
93
93
|
|
|
94
94
|
<url>
|
|
95
95
|
<loc>None/machinery-export-html.1/</loc>
|
|
96
|
-
<lastmod>2016-10-
|
|
96
|
+
<lastmod>2016-10-14</lastmod>
|
|
97
97
|
<changefreq>daily</changefreq>
|
|
98
98
|
</url>
|
|
99
99
|
|
|
100
100
|
<url>
|
|
101
101
|
<loc>None/machinery-inspect.1/</loc>
|
|
102
|
-
<lastmod>2016-10-
|
|
102
|
+
<lastmod>2016-10-14</lastmod>
|
|
103
103
|
<changefreq>daily</changefreq>
|
|
104
104
|
</url>
|
|
105
105
|
|
|
106
106
|
<url>
|
|
107
107
|
<loc>None/machinery-inspect-container.1/</loc>
|
|
108
|
-
<lastmod>2016-10-
|
|
108
|
+
<lastmod>2016-10-14</lastmod>
|
|
109
109
|
<changefreq>daily</changefreq>
|
|
110
110
|
</url>
|
|
111
111
|
|
|
112
112
|
<url>
|
|
113
113
|
<loc>None/machinery-list.1/</loc>
|
|
114
|
-
<lastmod>2016-10-
|
|
114
|
+
<lastmod>2016-10-14</lastmod>
|
|
115
115
|
<changefreq>daily</changefreq>
|
|
116
116
|
</url>
|
|
117
117
|
|
|
118
118
|
<url>
|
|
119
119
|
<loc>None/machinery-man.1/</loc>
|
|
120
|
-
<lastmod>2016-10-
|
|
120
|
+
<lastmod>2016-10-14</lastmod>
|
|
121
121
|
<changefreq>daily</changefreq>
|
|
122
122
|
</url>
|
|
123
123
|
|
|
124
124
|
<url>
|
|
125
125
|
<loc>None/machinery-move.1/</loc>
|
|
126
|
-
<lastmod>2016-10-
|
|
126
|
+
<lastmod>2016-10-14</lastmod>
|
|
127
127
|
<changefreq>daily</changefreq>
|
|
128
128
|
</url>
|
|
129
129
|
|
|
130
130
|
<url>
|
|
131
131
|
<loc>None/machinery-remove.1/</loc>
|
|
132
|
-
<lastmod>2016-10-
|
|
132
|
+
<lastmod>2016-10-14</lastmod>
|
|
133
133
|
<changefreq>daily</changefreq>
|
|
134
134
|
</url>
|
|
135
135
|
|
|
136
136
|
<url>
|
|
137
137
|
<loc>None/machinery-serve.1/</loc>
|
|
138
|
-
<lastmod>2016-10-
|
|
138
|
+
<lastmod>2016-10-14</lastmod>
|
|
139
139
|
<changefreq>daily</changefreq>
|
|
140
140
|
</url>
|
|
141
141
|
|
|
142
142
|
<url>
|
|
143
143
|
<loc>None/machinery-show.1/</loc>
|
|
144
|
-
<lastmod>2016-10-
|
|
144
|
+
<lastmod>2016-10-14</lastmod>
|
|
145
145
|
<changefreq>daily</changefreq>
|
|
146
146
|
</url>
|
|
147
147
|
|
|
148
148
|
<url>
|
|
149
149
|
<loc>None/machinery-upgrade-format.1/</loc>
|
|
150
|
-
<lastmod>2016-10-
|
|
150
|
+
<lastmod>2016-10-14</lastmod>
|
|
151
151
|
<changefreq>daily</changefreq>
|
|
152
152
|
</url>
|
|
153
153
|
|
|
154
154
|
<url>
|
|
155
155
|
<loc>None/machinery-validate.1/</loc>
|
|
156
|
-
<lastmod>2016-10-
|
|
156
|
+
<lastmod>2016-10-14</lastmod>
|
|
157
157
|
<changefreq>daily</changefreq>
|
|
158
158
|
</url>
|
|
159
159
|
|
|
@@ -25,7 +25,7 @@ class UsersInspector < Inspector
|
|
|
25
25
|
|
|
26
26
|
def inspect(_filter, _options = {})
|
|
27
27
|
passwd = @system.read_file("/etc/passwd")
|
|
28
|
-
shadow = @system.read_file("/etc/shadow")
|
|
28
|
+
shadow = @system.read_file("/etc/shadow", privileged: true)
|
|
29
29
|
|
|
30
30
|
users = passwd ? parse_users(passwd, shadow) : []
|
|
31
31
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: machinery-tool
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.22.
|
|
4
|
+
version: 1.22.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- SUSE
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-10-
|
|
11
|
+
date: 2016-10-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: cheetah
|