machinery-tool 1.7.0 → 1.8.0

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
2
  SHA1:
3
- metadata.gz: 2b519eb26d68cec4dd8a162614749acf7eded220
4
- data.tar.gz: ecf34acb835a431aa8387f0d03b707cca3fd9856
3
+ metadata.gz: 40dd521992a7106bb58e670c885ec727c16b69a9
4
+ data.tar.gz: 1cce8ff538aa83a299d9034167562b3feec0fbbe
5
5
  SHA512:
6
- metadata.gz: 2c5e176c9745a3311200eb299d30cf085071513db825258b7eebe9743f690d8e1fcc3aeb95ec2f09d25d89707ad42e53645f1dc5f65dd8cd15b912b159d0c538
7
- data.tar.gz: ae9e56cb3cc0259f4d71789be5307a9f1c77f1dd3fc0e45b8f55d712bc1f1e3ecfeb54e79a9860660ec7dd70108e790da08f01d89c319f1a236dabe95666b420
6
+ metadata.gz: 15fded8c72d2b8380cb8064fe6dcc92753a93861cea791f1050cf333e53e4a255bbf959ed1874f101157319be1c9ec641263b5475428e1e1e985c6341cc21a48
7
+ data.tar.gz: 1c0397494c6eb3dbab3b4829201d06171442b0bb18de2a1bfd47c9778d66e2c7ef183ded8f54361e249283f7f90dd2f9413028184edb80555f018871d93c7a82
data/NEWS CHANGED
@@ -1,6 +1,10 @@
1
1
  # Machinery Release Notes
2
2
 
3
3
 
4
+ ## Version 1.8.0 - Tue May 19 12:33:27 CEST 2015 - mamorales@suse.de
5
+
6
+ * Improve error handling when user lacks sudo privileges
7
+
4
8
  ## Version 1.7.0 - Mon May 04 15:36:50 CEST 2015 - aduffeck@suse.de
5
9
 
6
10
  * Add experimental option to show comparison of two system descriptions as
@@ -16,6 +16,8 @@
16
16
  # To contact SUSE about this file by physical or electronic mail,
17
17
  # you may find current contact information at www.suse.com
18
18
 
19
+ # Exit immediately if a command exits with a non-zero status.
20
+ set -e
19
21
 
20
22
  # Print a list of each package with changed managed files followed by a list of
21
23
  # the changed files, e.g.
@@ -26,12 +28,19 @@
26
28
  # S.5...... c /etc/ntp.conf
27
29
 
28
30
  if [ $UID -ne "0" ]; then
29
- SUDOPREFIX="sudo"
31
+ SUDOPREFIX="sudo -n"
30
32
  fi
31
33
 
32
34
  for package in `rpm -qa --queryformat "%{NAME}-%{VERSION}\\n"`; do
33
- CHANGES=`$SUDOPREFIX rpm -V --nodeps --nodigest --nosignature --nomtime --nolinkto $package`;
34
- if [ -n "$CHANGES" ]; then
35
- echo -e "$package:\\n$CHANGES";
35
+ # rpm returns 1 as exit code when modified config files are detected
36
+ # that's why we explicitly detect if sudo failed
37
+ OUTPUT=`$SUDOPREFIX rpm -V --nodeps --nodigest --nosignature --nomtime --nolinkto $package 2>&1 || true`;
38
+ if [ -n "$OUTPUT" ]; then
39
+ REGEX="^sudo:.*password is required"
40
+ if [[ "$OUTPUT" =~ $REGEX ]]; then
41
+ echo "$OUTPUT" >&2
42
+ exit 1
43
+ fi
44
+ echo -e "$package:\\n$OUTPUT";
36
45
  fi;
37
46
  done
@@ -0,0 +1,52 @@
1
+ # Copyright (c) 2013-2015 SUSE LLC
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of version 3 of the GNU General Public License as
5
+ # published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ # GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License
13
+ # along with this program; if not, contact SUSE LLC.
14
+ #
15
+ # To contact SUSE about this file by physical or electronic mail,
16
+ # you may find current contact information at www.suse.com
17
+
18
+
19
+ # This script creates reference data for integration tests
20
+ # by inspecting existing machines.
21
+ # Therefor it generates files with information of each scope.
22
+
23
+ # Usage: rake inspector_files[ip-adress,distribution]
24
+
25
+ require "fileutils"
26
+ require "cheetah"
27
+
28
+ class ReferenceTestData
29
+ def initialize
30
+ @machinery = File.expand_path("../bin/machinery", File.dirname(__FILE__))
31
+ @test_data_path = File.expand_path("../spec/data/", File.dirname(__FILE__))
32
+ end
33
+
34
+ def inspect(ip_adress)
35
+ Cheetah.run(@machinery, "inspect", ip_adress, "-n", "referencetestdata", stdout: :capture)
36
+ end
37
+
38
+ def write(destination)
39
+ Inspector.all_scopes.each do |inspector|
40
+ output = Cheetah.run(
41
+ @machinery, "show", destination, "-s", inspector.gsub("_", "-"),
42
+ "referencetestdata", stdout: :capture
43
+ )
44
+ File.write(file_path(inspector, destination), output)
45
+ end
46
+ end
47
+
48
+ def file_path(inspector, destination)
49
+ FileUtils.mkdir_p("#{@test_data_path}/#{inspector}")
50
+ File.join(@test_data_path, inspector, destination)
51
+ end
52
+ end
data/lib/cli.rb CHANGED
@@ -40,7 +40,7 @@ class Cli
40
40
  end
41
41
 
42
42
  post do |global_options,command,options,args|
43
- if command.is_a?(GLI::Commands::Help) && !global_options[:version]
43
+ if command.is_a?(GLI::Commands::Help) && !global_options[:version] && ARGV == ["help"]
44
44
 
45
45
  Machinery::Ui.puts "\nMachinery can show hints which guide through a typical workflow."
46
46
  if @config.hints
@@ -67,6 +67,8 @@ class Cli
67
67
  end
68
68
 
69
69
  def self.handle_error(e)
70
+ Machinery::Ui.kill_pager
71
+
70
72
  case e
71
73
  when GLI::UnknownCommandArgument, GLI::UnknownGlobalArgument,
72
74
  GLI::UnknownCommand, GLI::BadCommandLine, OptionParser::MissingArgument
@@ -128,7 +130,8 @@ class Cli
128
130
 
129
131
  def self.show_filter_note(scopes, filter)
130
132
  if scopes.any? { |scope| !filter.element_filters_for_scope(scope).empty? }
131
- Machinery::Ui.puts "\nFilters are applied during inspection.\n\n"
133
+ Machinery::Ui.puts "\nNote: There are filters being applied during inspection. " \
134
+ "(Use `--verbose` option to show the filters)\n\n"
132
135
  end
133
136
  end
134
137
 
data/lib/exceptions.rb CHANGED
@@ -99,6 +99,17 @@ module Machinery
99
99
  end
100
100
  end
101
101
 
102
+ class InsufficientPrivileges < MachineryError
103
+ def initialize(remote_user, host)
104
+ @remote_user = remote_user
105
+ @host = host
106
+ end
107
+
108
+ def to_s
109
+ "The remote user '#{@remote_user}' is not allowed to run 'sudo' on host '#{@host}'."
110
+ end
111
+ end
112
+
102
113
  class MigrationError < MachineryError; end
103
114
 
104
115
  class InvalidFilter < MachineryError; end
@@ -20,5 +20,6 @@ class GenerateHtmlTask
20
20
  output = Html.generate(description)
21
21
  Machinery::Ui.puts "The generated HTML file is stored in: \n" +
22
22
  "#{output}"
23
+ Hint.print(:share_html_contents, directory: output)
23
24
  end
24
25
  end
data/lib/helper.rb CHANGED
@@ -31,6 +31,14 @@ module Machinery
31
31
  # See also: http://stackoverflow.com/a/21315619
32
32
  s.dup.force_encoding("UTF-8").encode("UTF-16", invalid: :replace).encode("UTF-8")
33
33
  end
34
+
35
+ def self.pluralize(text, number)
36
+ if number > 1 || number == 0
37
+ text + "s"
38
+ else
39
+ text
40
+ end
41
+ end
34
42
  end
35
43
 
36
44
  def with_c_locale(&block)
data/lib/hint.rb CHANGED
@@ -58,5 +58,12 @@ class Hint
58
58
  "To upgrade all system descriptions run:\n" \
59
59
  "#{$0} upgrade-format --all"
60
60
  end
61
+
62
+ def share_html_contents(options)
63
+ dir = options[:directory] || ""
64
+ index_file = File.join(dir, "index.html")
65
+ assets_dir = File.join(dir, "assets/")
66
+ "Share the file: '#{index_file}' and the directory: '#{assets_dir}' as needed."
67
+ end
61
68
  end
62
69
  end
data/lib/list_task.rb CHANGED
@@ -28,19 +28,19 @@ class ListTask
28
28
  show_error("#{name}: incompatible format version. Can not be upgraded.\n", options)
29
29
  elsif e.format_version < SystemDescription::CURRENT_FORMAT_VERSION
30
30
  show_error("#{name}: format version #{e.format_version}, " \
31
- "needs to be upgraded.\n", options)
31
+ "needs to be upgraded.", options)
32
32
  has_incompatible_version = true
33
33
  else
34
34
  show_error("#{name}: format version #{e.format_version}. " \
35
- "Please upgrade Machinery to the latest version.\n", options)
35
+ "Please upgrade Machinery to the latest version.", options)
36
36
  end
37
37
  next
38
38
  rescue Machinery::Errors::SystemDescriptionValidationFailed
39
39
  show_error("#{name}: This description is broken. Use " \
40
- "`#{$0} validate #{name}` to see the error message.\n", options)
40
+ "`#{$0} validate #{name}` to see the error message.", options)
41
41
  next
42
42
  rescue Machinery::Errors::SystemDescriptionError
43
- show_error("#{name}: This description is broken.\n", options)
43
+ show_error("#{name}: This description is broken.", options)
44
44
  next
45
45
  end
46
46
 
@@ -76,7 +76,7 @@ class ListTask
76
76
  scopes << entry
77
77
  end
78
78
 
79
- Machinery::Ui.puts " #{name}:\n * " + scopes .join("\n * ") + "\n\n"
79
+ Machinery::Ui.puts " #{name}:\n * " + scopes .join("\n * ") + "\n"
80
80
  end
81
81
  end
82
82
 
data/lib/migration.rb CHANGED
@@ -88,8 +88,7 @@ class Migration
88
88
  end
89
89
 
90
90
  if current_version == SystemDescription::CURRENT_FORMAT_VERSION
91
- Machinery::Ui.puts "System description \"#{description_name}\" is up to " \
92
- "date, no upgrade necessary."
91
+ Machinery::Ui.puts "No upgrade necessary."
93
92
  return false
94
93
  end
95
94
 
data/lib/remote_system.rb CHANGED
@@ -72,9 +72,15 @@ class RemoteSystem < System
72
72
  cheetah_class = LoggedCheetah
73
73
  end
74
74
 
75
- sudo = "sudo" if options[:privileged] && remote_user != "root"
76
- cmds = ["ssh", "#{remote_user}@#{host}", sudo, "LC_ALL=C", *piped_args, options].compact
75
+ sudo = ["sudo", "-n"] if options[:privileged] && remote_user != "root"
76
+ cmds = ["ssh", "#{remote_user}@#{host}", sudo, "LC_ALL=C", *piped_args, options].compact.flatten
77
77
  cheetah_class.run(*cmds)
78
+ rescue Cheetah::ExecutionFailed => e
79
+ if e.stderr.include?("password is required")
80
+ raise Machinery::Errors::InsufficientPrivileges.new(remote_user, host)
81
+ else
82
+ raise e
83
+ end
78
84
  end
79
85
 
80
86
  # Tries to connect to the remote system as root (without a password or passphrase)
@@ -97,7 +103,7 @@ class RemoteSystem < System
97
103
  def retrieve_files(filelist, destination)
98
104
  source = "#{remote_user}@#{host}:/"
99
105
  if remote_user != "root"
100
- rsync_path = "sudo rsync"
106
+ rsync_path = "sudo -n rsync"
101
107
  else
102
108
  rsync_path = "rsync"
103
109
  end
data/lib/system.rb CHANGED
@@ -37,14 +37,18 @@ class System
37
37
  end
38
38
 
39
39
  # checks if the required command can be executed on the target system
40
- def check_requirement(command, *args)
41
- begin
42
- run_command(command, *args)
43
- rescue Cheetah::ExecutionFailed
44
- raise Machinery::Errors::MissingRequirement.new(
45
- "Need binary '#{command}' to be available on the inspected system."
46
- )
40
+ def check_requirement(commands, *args)
41
+ commands = Array(commands)
42
+ commands.each do |command|
43
+ begin
44
+ run_command(command, *args)
45
+ return command
46
+ rescue Cheetah::ExecutionFailed
47
+ end
47
48
  end
49
+ raise Machinery::Errors::MissingRequirement.new(
50
+ "Need binary '#{commands.join("' or '")}' to be available on the inspected system."
51
+ )
48
52
  end
49
53
 
50
54
  # Retrieves files specified in filelist from the remote system and create an archive.
data/lib/ui.rb CHANGED
@@ -28,6 +28,11 @@ module Machinery
28
28
  def write_output_to_pager(output)
29
29
  @pager ||= IO.popen("$PAGER", "w")
30
30
 
31
+ # cache the pid because it can no longer be retrieved when the
32
+ # stream is closed (and we sometimes have to kill the process after
33
+ # it was closed)
34
+ @pager_pid = @pager.pid
35
+
31
36
  begin
32
37
  @pager.puts output
33
38
  rescue Errno::EPIPE
@@ -39,10 +44,14 @@ module Machinery
39
44
  @pager.close if @pager
40
45
  end
41
46
 
42
- def puts(output)
47
+ def kill_pager
48
+ Process.kill("TERM", @pager_pid) if @pager_pid
49
+ end
50
+
51
+ def print(output)
43
52
  if !use_pager || !$stdout.tty?
44
53
  begin
45
- STDOUT.puts output
54
+ STDOUT.print output
46
55
  rescue Errno::EPIPE
47
56
  # We just ignore broken pipes.
48
57
  end
@@ -54,7 +63,7 @@ module Machinery
54
63
  LocalSystem.validate_existence_of_package("less")
55
64
  write_output_to_pager(output)
56
65
  rescue Machinery::Errors::MissingRequirement
57
- STDOUT.puts output
66
+ STDOUT.print output
58
67
  end
59
68
  else
60
69
  IO.popen("$PAGER &>/dev/null", "w") { |f| f.close }
@@ -70,6 +79,10 @@ module Machinery
70
79
  end
71
80
  end
72
81
 
82
+ def puts(output)
83
+ print output + "\n"
84
+ end
85
+
73
86
  def warn(s)
74
87
  STDERR.puts s
75
88
  end
@@ -34,10 +34,16 @@ class UpgradeFormatTask
34
34
 
35
35
  descriptions.each do |description|
36
36
  begin
37
+ hash = Manifest.load(description, store.manifest_path(description)).to_hash
37
38
  Machinery.logger.info "Upgrading description \"#{description}\""
38
- Machinery::Ui.puts "Upgrading description \"#{description}\""
39
+ Machinery::Ui.print "Reading \"#{description}\" ... "
39
40
  migrated = Migration.migrate_description(store, description, force: options[:force])
40
- migrations_done += 1 if migrated
41
+
42
+ if migrated
43
+ migrations_done += 1
44
+ Machinery::Ui.puts "Successfully upgraded from version" \
45
+ " #{hash["meta"]["format_version"]} to #{SystemDescription::CURRENT_FORMAT_VERSION}."
46
+ end
41
47
  rescue StandardError => e
42
48
  errors.push("Upgrading description \"#{description}\" failed:\n#{e}")
43
49
  end
@@ -52,12 +58,13 @@ class UpgradeFormatTask
52
58
 
53
59
  if options[:all]
54
60
  if migrations_done > 0
55
- Machinery::Ui.puts "Upgraded #{migrations_done} system descriptions successfully."
61
+ Machinery::Ui.puts(
62
+ "Upgraded #{migrations_done} " \
63
+ "#{Machinery::pluralize("system description", migrations_done)}."
64
+ )
56
65
  else
57
66
  Machinery::Ui.puts "No system descriptions were upgraded."
58
67
  end
59
- elsif migrations_done > 0
60
- Machinery::Ui.puts "System description \"#{name}\" successfully upgraded."
61
68
  end
62
69
  end
63
70
  end
data/lib/version.rb CHANGED
@@ -17,6 +17,6 @@
17
17
 
18
18
  module Machinery
19
19
 
20
- VERSION = "1.7.0"
20
+ VERSION = "1.8.0"
21
21
 
22
22
  end
Binary file
@@ -892,7 +892,7 @@ via <code>ssh-copy-id</code> to the inspected host, e.g.: <code>ssh-copy-id root
892
892
  <li><p>When inspecting as non-root the user has to have the following command
893
893
  whitelist given in the sudoers file:</p>
894
894
 
895
- <p>machinery ALL=(ALL) NOPASSWD: /usr/bin/find,/usr/bin/cat,/usr/bin/rsync,/bin/rpm -V *,/bin/tar --create *</p></li>
895
+ <p>machinery ALL=(ALL) NOPASSWD: /usr/bin/find,/usr/bin/cat,/bin/cat,/usr/bin/rsync,/bin/rpm -V *,/bin/tar --create *</p></li>
896
896
  </ul>
897
897
 
898
898
 
@@ -73,7 +73,7 @@ class ServicesInspector < Inspector
73
73
  # an error, on Red Hat it doesn't.
74
74
  #
75
75
  begin
76
- @system.run_command("chkconfig", "--version")
76
+ @system.run_command("/sbin/chkconfig", "--version")
77
77
  services = parse_redhat_chkconfig
78
78
  rescue
79
79
  services = parse_suse_chkconfig
@@ -83,9 +83,11 @@ class ServicesInspector < Inspector
83
83
  end
84
84
 
85
85
  def parse_suse_chkconfig
86
- @system.check_requirement("chkconfig", "--help")
86
+ # check if chkconfig is available otherwise use /sbin/chkconfig
87
+ # this fixes issue on sles11sp3 where chkconfig isn't in /usr/bin
88
+ chkconfig = @system.check_requirement(["chkconfig", "/sbin/chkconfig"], "--help")
87
89
  output = @system.run_command(
88
- "chkconfig",
90
+ chkconfig,
89
91
  "--allservices",
90
92
  :stdout => :capture
91
93
  )
@@ -97,15 +99,14 @@ class ServicesInspector < Inspector
97
99
  end
98
100
 
99
101
  def parse_redhat_chkconfig
100
- @system.check_requirement("chkconfig", "--version")
101
- @system.check_requirement("runlevel")
102
+ @system.check_requirement("/sbin/runlevel")
102
103
  _, runlevel = @system.run_command(
103
- "runlevel",
104
+ "/sbin/runlevel",
104
105
  stdout: :capture
105
106
  ).split(" ")
106
107
 
107
108
  output = @system.run_command(
108
- "chkconfig", "--list",
109
+ "/sbin/chkconfig", "--list",
109
110
  stdout: :capture
110
111
  )
111
112
 
@@ -145,7 +145,7 @@ class UnmanagedFilesInspector < Inspector
145
145
  excluded_files = []
146
146
 
147
147
  # compute command line
148
- cmd = ["find", dir, "-xdev", "-maxdepth", "1", "-maxdepth", depth]
148
+ cmd = ["find", dir, "-xdev", "-maxdepth", "1", "-maxdepth", depth.to_s]
149
149
  cmd += ["-printf", '%y\0%P\0%l\0']
150
150
 
151
151
  out = ""
metadata CHANGED
@@ -1,181 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: machinery-tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SUSE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-04 00:00:00.000000000 Z
11
+ date: 2015-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cheetah
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.8.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.8.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: abstract_method
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.2.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.2.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.6.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.6.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: gli
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.11.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 2.11.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: json-schema
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 2.2.4
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 2.2.4
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: haml
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: 4.0.5
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 4.0.5
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: kramdown
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 1.3.3
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.3.3
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: tilt
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '2.0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '2.0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: ronn
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: 0.7.3
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.7.3
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rake
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: packaging_rake_tasks
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '>='
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - '>='
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  description: Machinery is a systems management toolkit for Linux. It supports configuration
@@ -188,11 +188,65 @@ executables:
188
188
  extensions: []
189
189
  extra_rdoc_files: []
190
190
  files:
191
+ - COPYING
192
+ - NEWS
193
+ - bin/machinery
194
+ - export_helpers/autoyast_export_readme.md
195
+ - export_helpers/kiwi_export_readme.md
196
+ - export_helpers/merge_users_and_groups.pl.erb
197
+ - export_helpers/unmanaged_files_autoyast_excludes
198
+ - export_helpers/unmanaged_files_kiwi_excludes
199
+ - helpers/changed_managed_files.sh
200
+ - helpers/default_filters.json
201
+ - helpers/filter-packages-for-build.yaml
202
+ - helpers/inspector_files.rb
203
+ - helpers/yum_repositories.py
204
+ - html/assets/angular-sanitize.min.js
205
+ - html/assets/angular.min.js
206
+ - html/assets/arrow_down.png
207
+ - html/assets/arrow_up.png
208
+ - html/assets/bootstrap-popover.js
209
+ - html/assets/bootstrap-tooltip.js
210
+ - html/assets/bootstrap.min.css
211
+ - html/assets/collapse.js
212
+ - html/assets/compare/machinery-compare.js
213
+ - html/assets/compare/machinery.js
214
+ - html/assets/jquery-2.1.1.min.js
215
+ - html/assets/logo-changed-managed-files-small.png
216
+ - html/assets/logo-changed-managed-files.png
217
+ - html/assets/logo-config-files-small.png
218
+ - html/assets/logo-config-files.png
219
+ - html/assets/logo-groups-small.png
220
+ - html/assets/logo-groups.png
221
+ - html/assets/logo-os-small.png
222
+ - html/assets/logo-os.png
223
+ - html/assets/logo-packages-small.png
224
+ - html/assets/logo-packages.png
225
+ - html/assets/logo-patterns-small.png
226
+ - html/assets/logo-patterns.png
227
+ - html/assets/logo-repositories-small.png
228
+ - html/assets/logo-repositories.png
229
+ - html/assets/logo-services-small.png
230
+ - html/assets/logo-services.png
231
+ - html/assets/logo-unmanaged-files-small.png
232
+ - html/assets/logo-unmanaged-files.png
233
+ - html/assets/logo-users-small.png
234
+ - html/assets/logo-users.png
235
+ - html/assets/machinery-base.css
236
+ - html/assets/machinery.css
237
+ - html/assets/reset.png
238
+ - html/assets/show/machinery-show.js
239
+ - html/assets/show/machinery.js
240
+ - html/assets/transition.js
241
+ - html/assets/wheels_horizontal.png
242
+ - html/comparison.html.haml
243
+ - html/index.html.haml
191
244
  - lib/analyze_config_file_diffs_task.rb
192
245
  - lib/array.rb
193
246
  - lib/autoyast.rb
194
247
  - lib/build_task.rb
195
248
  - lib/changed_rpm_files_helper.rb
249
+ - lib/cli.rb
196
250
  - lib/compare_task.rb
197
251
  - lib/config.rb
198
252
  - lib/config_base.rb
@@ -243,9 +297,10 @@ files:
243
297
  - lib/ui.rb
244
298
  - lib/upgrade_format_task.rb
245
299
  - lib/validate_task.rb
246
- - lib/zypper.rb
247
- - lib/cli.rb
248
300
  - lib/version.rb
301
+ - lib/zypper.rb
302
+ - man/generated/machinery.1.gz
303
+ - man/generated/machinery.1.html
249
304
  - plugins/changed_managed_files/changed_managed_files.md
250
305
  - plugins/changed_managed_files/changed_managed_files_inspector.rb
251
306
  - plugins/changed_managed_files/changed_managed_files_model.rb
@@ -316,65 +371,11 @@ files:
316
371
  - plugins/users/users_inspector.rb
317
372
  - plugins/users/users_model.rb
318
373
  - plugins/users/users_renderer.rb
319
- - bin/machinery
320
- - man/generated/machinery.1.gz
321
- - man/generated/machinery.1.html
322
- - NEWS
323
- - COPYING
324
- - helpers/changed_managed_files.sh
325
- - helpers/default_filters.json
326
- - helpers/filter-packages-for-build.yaml
327
- - helpers/yum_repositories.py
328
- - export_helpers/autoyast_export_readme.md
329
- - export_helpers/kiwi_export_readme.md
330
- - export_helpers/merge_users_and_groups.pl.erb
331
- - export_helpers/unmanaged_files_autoyast_excludes
332
- - export_helpers/unmanaged_files_kiwi_excludes
333
374
  - schema/migrations/migrate1to2.rb
334
375
  - schema/migrations/migrate2to3.rb
335
376
  - schema/system-description-global.schema-v1.json
336
377
  - schema/system-description-global.schema-v2.json
337
378
  - schema/system-description-global.schema-v3.json
338
- - html/assets/angular-sanitize.min.js
339
- - html/assets/angular.min.js
340
- - html/assets/arrow_down.png
341
- - html/assets/arrow_up.png
342
- - html/assets/bootstrap-popover.js
343
- - html/assets/bootstrap-tooltip.js
344
- - html/assets/bootstrap.min.css
345
- - html/assets/collapse.js
346
- - html/assets/compare/machinery-compare.js
347
- - html/assets/compare/machinery.js
348
- - html/assets/jquery-2.1.1.min.js
349
- - html/assets/logo-changed-managed-files-small.png
350
- - html/assets/logo-changed-managed-files.png
351
- - html/assets/logo-config-files-small.png
352
- - html/assets/logo-config-files.png
353
- - html/assets/logo-groups-small.png
354
- - html/assets/logo-groups.png
355
- - html/assets/logo-os-small.png
356
- - html/assets/logo-os.png
357
- - html/assets/logo-packages-small.png
358
- - html/assets/logo-packages.png
359
- - html/assets/logo-patterns-small.png
360
- - html/assets/logo-patterns.png
361
- - html/assets/logo-repositories-small.png
362
- - html/assets/logo-repositories.png
363
- - html/assets/logo-services-small.png
364
- - html/assets/logo-services.png
365
- - html/assets/logo-unmanaged-files-small.png
366
- - html/assets/logo-unmanaged-files.png
367
- - html/assets/logo-users-small.png
368
- - html/assets/logo-users.png
369
- - html/assets/machinery-base.css
370
- - html/assets/machinery.css
371
- - html/assets/reset.png
372
- - html/assets/show/machinery-show.js
373
- - html/assets/show/machinery.js
374
- - html/assets/transition.js
375
- - html/assets/wheels_horizontal.png
376
- - html/comparison.html.haml
377
- - html/index.html.haml
378
379
  homepage: http://machinery-project.org
379
380
  licenses:
380
381
  - GPL-3.0
@@ -385,17 +386,17 @@ require_paths:
385
386
  - lib
386
387
  required_ruby_version: !ruby/object:Gem::Requirement
387
388
  requirements:
388
- - - '>='
389
+ - - ">="
389
390
  - !ruby/object:Gem::Version
390
391
  version: 1.9.2
391
392
  required_rubygems_version: !ruby/object:Gem::Requirement
392
393
  requirements:
393
- - - '>='
394
+ - - ">="
394
395
  - !ruby/object:Gem::Version
395
396
  version: 1.3.6
396
397
  requirements: []
397
398
  rubyforge_project:
398
- rubygems_version: 2.0.3
399
+ rubygems_version: 2.2.2
399
400
  signing_key:
400
401
  specification_version: 4
401
402
  summary: Systems management toolkit