diff --git a/acceptance/tests/modules/list.rb b/acceptance/tests/modules/list.rb index 3cc20730d..28b9cef3b 100644 --- a/acceptance/tests/modules/list.rb +++ b/acceptance/tests/modules/list.rb @@ -1,26 +1,26 @@ test_name "puppet module list test output and dependency error checking" step "Run puppet module list" expected_stdout = <<-HEREDOC /opt/puppet-git-repos/puppet/acceptance/tests/modules/fake_modulepath - mysql (0.0.0) apache (0.0.3) bacula (0.0.2) + mysql (0.0.0) sqlite (0.0.1.1) HEREDOC expected_stderr = <<-HEREDOC Missing dependency `create_resources`: `mysql` (0.0.0) requires `bodepd/create_resources` (>= 0.0.1) Missing dependency `stdlib`: `bacula` (0.0.2) requires `puppetlabs/stdlib` (>= 2.2.0) Version dependency mismatch `mysql` (0.0.0): `bacula` (0.0.2) requires `puppetlabs/mysql` (>= 0.0.1) Non semantic version dependency `sqlite` (0.0.1.1): `bacula` (0.0.2) requires `puppetlabs/sqlite` (>= 0.0.1) HEREDOC on master, "puppet module list --modulepath /opt/puppet-git-repos/puppet/acceptance/tests/modules/fake_modulepath" do assert_match(expected_stdout, stdout, "puppet module list did not output expected stdout") assert_match(expected_stderr, stderr, "puppet module list did not output expected stderr") end diff --git a/lib/puppet/face/module/list.rb b/lib/puppet/face/module/list.rb index fae406079..e05d17022 100644 --- a/lib/puppet/face/module/list.rb +++ b/lib/puppet/face/module/list.rb @@ -1,79 +1,79 @@ Puppet::Face.define(:module, '1.0.0') do action(:list) do summary "List installed modules" description <<-HEREDOC List puppet modules from a specific environment, specified modulepath or default to listing modules in the default modulepath: #{Puppet.settings[:modulepath]} HEREDOC returns "hash of paths to module objects" option "--env ENVIRONMENT" do summary "Which environments' modules to list" end option "--modulepath MODULEPATH" do summary "Which directories to look for modules in" end examples <<-EOT List installed modules: $ puppet module list /etc/puppet/modules bacula (0.0.2) /usr/share/puppet/modules apache (0.0.3) bacula (0.0.1) List installed modules from a specified environment: $ puppet module list --env 'test' /tmp/puppet/modules rrd (0.0.2) List installed modules from a specified modulepath: $ puppet module list --modulepath /tmp/facts1:/tmp/facts2 /tmp/facts1 stdlib /tmp/facts2 nginx (1.0.0) EOT when_invoked do |options| Puppet[:modulepath] = options[:modulepath] if options[:modulepath] environment = Puppet::Node::Environment.new(options[:env]) environment.modules_by_path end when_rendering :console do |modules_by_path, options| output = '' Puppet[:modulepath] = options[:modulepath] if options[:modulepath] environment = Puppet::Node::Environment.new(options[:env]) dependency_errors = false environment.modules.each do |mod| mod.unsatisfied_dependencies.each do |dep_issue| dependency_errors = true $stderr.puts dep_issue.to_s end end output << "\n" if dependency_errors modules_by_path.each do |path, modules| output << "#{path}\n" - modules.each do |mod| + modules.sort_by {|mod| mod.name }.each do |mod| version_string = mod.version ? "(#{mod.version})" : '' output << " #{mod.name} #{version_string}\n" end end output end end end