inspec/lib/resources/cpan.rb
Markus Grobelin c626dfdbd9 cpan resource: check for Perl module installation (#2254)
* Added CPAN resource to check Perl modules

control 'cpan-1' do
  impact 1.0
  desc '
    Ensure Perl modules DBI and DBD::Pg are installed.
  '

  describe cpan('DBI') do
    it { should be_installed }
  end

  describe cpan('DBD::Pg') do
    it { should be_installed }
    its('version') { should cmp >= '3.0' }
  end
end

Signed-off-by: Markus Grobelin <grobi@koppzu.de>

* cpan resource: fixed unit test for non-installed module

Signed-off-by: Markus Grobelin <grobi@koppzu.de>
2017-10-25 16:01:26 +02:00

60 lines
1.6 KiB
Ruby

# encoding: utf-8
# author: Christoph Hartmann
# author: Dominik Richter
# author: Markus Grobelin
# Usage:
# describe cpan('DBD::Pg') do
# it { should be_installed }
# end
#
module Inspec::Resources
class CpanPackage < Inspec.resource(1)
name 'cpan'
desc 'Use the `cpan` InSpec audit resource to test Perl modules that are installed by system packages or the CPAN installer.'
example "
describe cpan('DBD::Pg') do
it { should be_installed }
end
"
def initialize(package_name, perl_lib_path = nil)
@package_name = package_name
@perl_lib_path = perl_lib_path
@perl_cmd = 'perl'
# this resource is not supported on Windows
return skip_resource 'The `cpan` resource is not supported on your OS yet.' if inspec.os.windows?
return skip_resource 'perl not found' unless inspec.command(@perl_cmd).exist?
end
def info
return @info if defined?(@info)
@info = {}
@info[:type] = 'cpan'
@info[:name] = @package_name
# set PERL5LIB environment variable if a custom lib path is given
lib_path = @perl_lib_path.nil? ? '' : "PERL5LIB=#{@perl_lib_path} "
cmd = inspec.command("#{lib_path+@perl_cmd} -le 'eval \"require $ARGV[0]\" and print $ARGV[0]->VERSION or exit 1' #{@package_name}")
@info[:installed] = cmd.exit_status.zero?
return @info unless cmd.exit_status.zero?
@info[:version] = cmd.stdout.strip
@info
end
def installed?
info[:installed] == true
end
def version
info[:version]
end
def to_s
"Perl Module #{@package_name}"
end
end
end