mirror of
https://github.com/inspec/inspec
synced 2024-12-24 20:13:16 +00:00
34bc6a387c
Signed-off-by: Dominik Richter <dominik@vulcanosec.com>
68 lines
1.8 KiB
Ruby
68 lines
1.8 KiB
Ruby
# Copyright 2015 Dominik Richter. All rights reserved.
|
|
require 'vulcano/log'
|
|
|
|
module Vulcano
|
|
# Extract vmetadata.rb information
|
|
class Metadata
|
|
attr_reader :dict
|
|
def initialize log = nil
|
|
@log = log || Log.new
|
|
@dict = {}
|
|
end
|
|
|
|
%w{
|
|
name
|
|
title
|
|
maintainer
|
|
maintainer_email
|
|
copyright
|
|
copyright_email
|
|
license
|
|
summary
|
|
description
|
|
version
|
|
}.each do |name|
|
|
define_method name do |arg|
|
|
@dict[name] = arg
|
|
end
|
|
end
|
|
|
|
def supports sth, version = nil
|
|
@dict['supports'] ||= []
|
|
@dict['supports'].push({
|
|
'os' => sth,
|
|
'version' => version
|
|
})
|
|
end
|
|
|
|
def valid?
|
|
is_valid = true
|
|
err = lambda{|msg| @log.error msg; is_valid = false }
|
|
warn = lambda{|msg| @log.warn msg; is_valid = false }
|
|
err.("Missing profile name in vmetadata.rb") if @dict['name'].nil?
|
|
err.("Missing profile title in vmetadata.rb") if @dict['title'].nil?
|
|
err.("Missing profile version in vmetadata.rb") if @dict['version'].nil?
|
|
err.("Missing summary in vmetadata.rb") if @dict['summary'].nil?
|
|
warn.("Missing maintainer in vmetadata.rb") if @dict['maintainer'].nil?
|
|
warn.("Missing copyright in vmetadata.rb") if @dict['copyright'].nil?
|
|
is_valid
|
|
end
|
|
|
|
def method_missing sth, *args
|
|
@log.warn "vmetadata.rb doesn't support: #{sth} #{args}"
|
|
end
|
|
|
|
def self.for_path path, profile_id, log = nil
|
|
log ||= Log.new
|
|
dpath = File::join(path, 'vmetadata.rb')
|
|
if !File::file?(dpath)
|
|
log.error "Missing vmetadata.rb in #{path}"
|
|
return nil
|
|
end
|
|
res = Metadata.new(log)
|
|
res.instance_eval(File::read(dpath), dpath, 1)
|
|
res.dict['name'] = profile_id unless profile_id.nil? or profile_id.empty?
|
|
return res
|
|
end
|
|
end
|
|
end
|