mirror of
https://github.com/inspec/inspec
synced 2024-11-27 07:00:39 +00:00
c626dfdbd9
* 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>
60 lines
1.6 KiB
Ruby
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
|