machinery-tool 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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