Class: Inspec::Schema
- Inherits:
-
Object
- Object
- Inspec::Schema
- Defined in:
- lib/inspec/schema.rb
Constant Summary collapse
- STATISTICS =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'duration' => { 'type' => 'number' }, 'controls' => { 'type' => 'object', 'optional' => true, 'properties' => { 'total' => { 'type' => 'number' }, 'passed' => { 'type' => 'object', 'properties' => { 'total' => { 'type' => 'number' }, }, }, 'skipped' => { 'type' => 'object', 'properties' => { 'total' => { 'type' => 'number' }, }, }, 'failed' => { 'type' => 'object', 'properties' => { 'total' => { 'type' => 'number' }, }, }, }, }, }, }.freeze
- PLATFORM =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'name' => { 'type' => 'string' }, 'release' => { 'type' => 'string' }, 'target_id' => { 'type' => 'string', 'optional' => true }, }, }.freeze
- TAGS =
Tags are open right, with simple key-value associations and not restrictions
{ 'type' => 'object' }.freeze
- RESULT =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'status' => { 'type' => 'string' }, 'code_desc' => { 'type' => 'string' }, 'run_time' => { 'type' => 'number' }, 'start_time' => { 'type' => 'string' }, 'skip_message' => { 'type' => 'string', 'optional' => true }, 'resource' => { 'type' => 'string', 'optional' => true }, 'message' => { 'type' => 'string', 'optional' => true }, 'exception' => { 'type' => 'string', 'optional' => true }, 'backtrace' => { 'type' => 'object', 'optional' => true }, }, }.freeze
- REF =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'ref' => { 'type' => 'string' }, # TODO: One of these needs to be deprecated 'uri' => { 'type' => 'string', 'optional' => true }, 'url' => { 'type' => 'string', 'optional' => true }, }, }.freeze
- REFS =
{ 'type' => 'array', 'items' => REF }.freeze
- CONTROL =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'id' => { 'type' => 'string' }, 'title' => { 'type' => %w{string null} }, 'desc' => { 'type' => %w{string null} }, 'descriptions' => { 'type' => %w{array} }, 'impact' => { 'type' => 'number' }, 'refs' => REFS, 'tags' => TAGS, 'code' => { 'type' => 'string' }, 'source_location' => { 'type' => 'object', 'properties' => { 'ref' => { 'type' => 'string' }, 'line' => { 'type' => 'number' }, }, }, 'results' => { 'type' => 'array', 'items' => RESULT }, }, }.freeze
- SUPPORTS =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'platform-family' => { 'type' => 'string', 'optional' => true }, 'platform-name' => { 'type' => 'string', 'optional' => true }, 'platform' => { 'type' => 'string', 'optional' => true }, # os-* supports are being deprecated 'os-family' => { 'type' => 'string', 'optional' => true }, 'os-name' => { 'type' => 'string', 'optional' => true }, }, }.freeze
- CONTROL_GROUP =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'id' => { 'type' => 'string' }, 'title' => { 'type' => 'string', 'optional' => true }, 'controls' => { 'type' => 'array', 'items' => { 'type' => 'string' } }, }, }.freeze
- PROFILE =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'name' => { 'type' => 'string' }, 'version' => { 'type' => 'string', 'optional' => true }, 'sha256' => { 'type' => 'string', 'optional' => false }, 'title' => { 'type' => 'string', 'optional' => true }, 'maintainer' => { 'type' => 'string', 'optional' => true }, 'copyright' => { 'type' => 'string', 'optional' => true }, 'copyright_email' => { 'type' => 'string', 'optional' => true }, 'license' => { 'type' => 'string', 'optional' => true }, 'summary' => { 'type' => 'string', 'optional' => true }, 'status' => { 'type' => 'string', 'optional' => false }, 'skip_message' => { 'type' => 'string', 'optional' => true }, 'supports' => { 'type' => 'array', 'items' => SUPPORTS, 'optional' => true, }, 'controls' => { 'type' => 'array', 'items' => CONTROL, }, 'groups' => { 'type' => 'array', 'items' => CONTROL_GROUP, }, 'attributes' => { 'type' => 'array', # TODO: more detailed specification needed }, }, }.freeze
- EXEC_JSON =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'platform' => PLATFORM, 'profiles' => { 'type' => 'array', 'items' => PROFILE, }, 'statistics' => STATISTICS, 'version' => { 'type' => 'string' }, }, }.freeze
- MIN_CONTROL =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'id' => { 'type' => 'string' }, 'profile_id' => { 'type' => %w{string null} }, 'profile_sha256' => { 'type' => 'string' }, 'status' => { 'type' => 'string' }, 'code_desc' => { 'type' => 'string' }, 'skip_message' => { 'type' => 'string', 'optional' => true }, 'resource' => { 'type' => 'string', 'optional' => true }, 'message' => { 'type' => 'string', 'optional' => true }, 'exception' => { 'type' => 'string', 'optional' => true }, 'backtrace' => { 'type' => 'object', 'optional' => true }, }, }.freeze
- EXEC_JSONMIN =
{ 'type' => 'object', 'additionalProperties' => false, 'properties' => { 'statistics' => STATISTICS, 'version' => { 'type' => 'string' }, 'controls' => { 'type' => 'array', 'items' => MIN_CONTROL, }, }, }.freeze
- PLATFORMS =
using a proc here so we can lazy load it when we need
lambda do require 'train' Train.create('mock').connection Train::Platforms.export end
- LIST =
{ 'exec-json' => EXEC_JSON, 'exec-jsonmin' => EXEC_JSONMIN, 'platforms' => PLATFORMS, }.freeze
Class Method Summary collapse
Class Method Details
.json(name) ⇒ Object
224 225 226 227 228 229 230 231 232 233 |
# File 'lib/inspec/schema.rb', line 224 def self.json(name) if !LIST.key?(name) raise("Cannot find schema #{name.inspect}.") elsif LIST[name].is_a?(Proc) v = LIST[name].call else v = LIST[name] end JSON.dump(v) end |
.names ⇒ Object
220 221 222 |
# File 'lib/inspec/schema.rb', line 220 def self.names LIST.keys end |