Module: Inspec::Schema::ProfileJson
- Defined in:
- lib/inspec/schema/profile_json.rb
Constant Summary collapse
- CONTROL_DESCRIPTIONS =
Represents descriptions. Can have any string => string pairing
Primitives::SchemaType.new("Profile JSON Control Descriptions", { "type" => "object", "additionalProperties" => Primitives::STRING, "required" => [], }, [], "An arbitrary set of descriptions for a control.")
- CONTROL =
Represents a control that hasn’t been run Differs slightly from a normal control, in that it lacks results, and its descriptions are different
Primitives::SchemaType.new("Profile JSON Control", { "type" => "object", "additionalProperties" => true, "required" => %w{id title desc impact tags code}, "properties" => { "id" => Primitives.desc(Primitives::STRING, "The id."), "title" => Primitives.desc({ "type" => %w{string null} }, "The title - is nullable."), "desc" => Primitives.desc({ "type" => %w{string null} }, "The description for the overarching control."), "descriptions" => Primitives.desc(CONTROL_DESCRIPTIONS.ref, "A set of additional descriptions. Example: the 'fix' text."), "impact" => Primitives.desc(Primitives::IMPACT, "The impactfulness or severity."), "refs" => Primitives.desc(Primitives.array(Primitives::REFERENCE.ref), "The set of references to external documents."), "tags" => Primitives.desc(Primitives::TAGS, "A set of tags - usually metadata."), "code" => Primitives.desc(Primitives::STRING, "The raw source code of the control. Note that if this is an overlay control, it does not include the underlying source code."), "source_location" => Primitives.desc(Primitives::SOURCE_LOCATION.ref, "The explicit location of the control within the source code."), }, }, [CONTROL_DESCRIPTIONS, Primitives::REFERENCE, Primitives::SOURCE_LOCATION], "The set of all tests within the control.")
- ENHANCED_OUTCOME_CONTROL =
Represents a control with enhanced outcomes status information
Primitives::SchemaType.new("Profile JSON Control", { "type" => "object", "additionalProperties" => true, "required" => %w{id title desc impact tags code}, "properties" => { "id" => Primitives.desc(Primitives::STRING, "The id."), "title" => Primitives.desc({ "type" => %w{string null} }, "The title - is nullable."), "desc" => Primitives.desc({ "type" => %w{string null} }, "The description for the overarching control."), "descriptions" => Primitives.desc(CONTROL_DESCRIPTIONS.ref, "A set of additional descriptions. Example: the 'fix' text."), "impact" => Primitives.desc(Primitives::IMPACT, "The impactfulness or severity."), "status" => { "enum" => %w{passed failed not_applicable not_reviewed error}, "description" => Primitives.desc(Primitives::STRING, "The enhanced outcome status of the control"), }, "refs" => Primitives.desc(Primitives.array(Primitives::REFERENCE.ref), "The set of references to external documents."), "tags" => Primitives.desc(Primitives::TAGS, "A set of tags - usually metadata."), "code" => Primitives.desc(Primitives::STRING, "The raw source code of the control. Note that if this is an overlay control, it does not include the underlying source code."), "source_location" => Primitives.desc(Primitives::SOURCE_LOCATION.ref, "The explicit location of the control within the source code."), }, }, [CONTROL_DESCRIPTIONS, Primitives::REFERENCE, Primitives::SOURCE_LOCATION], "The set of all tests within the control.")
- PROFILE =
A profile that has not been run.
Primitives::SchemaType.new("Profile JSON Profile", { "type" => "object", "additionalProperties" => true, # Anything in the yaml will be put in here. LTTODO: Make this stricter! "required" => %w{name supports controls groups sha256}, "properties" => { "name" => Primitives.desc(Primitives::STRING, "The name - must be unique."), "supports" => Primitives.desc(Primitives.array(Primitives::SUPPORT.ref), "The set of supported platform targets."), "controls" => Primitives.desc(Primitives.array(CONTROL.ref), "The set of controls - contains no findings as the assessment has not yet occurred."), "groups" => Primitives.desc(Primitives.array(Primitives::CONTROL_GROUP.ref), "A set of descriptions for the control groups. Example: the ids of the controls."), "inputs" => Primitives.desc(Primitives.array(Primitives::INPUT), "The input(s) or attribute(s) used to be in the run."), "sha256" => Primitives.desc(Primitives::STRING, "The checksum of the profile."), "status" => Primitives.desc(Primitives::STRING, "The status. Example: skipped."), "generator" => Primitives.desc(Primitives::GENERATOR.ref, "The tool that generated this file. Example: Chef Inspec."), "version" => Primitives.desc(Primitives::STRING, "The version of the profile."), # Other properties possible in inspec docs, but that aren"t guaranteed "title" => Primitives.desc(Primitives::STRING, "The title - should be human readable."), "maintainer" => Primitives.desc(Primitives::STRING, "The maintainer(s)."), "copyright" => Primitives.desc(Primitives::STRING, "The copyright holder(s)."), "copyright_email" => Primitives.desc(Primitives::STRING, "The email address or other contract information of the copyright holder(s)."), "depends" => Primitives.desc(Primitives.array(Primitives::DEPENDENCY.ref), "The set of dependencies this profile depends on. Example: an overlay profile is dependent on another profile."), # Can have depends, but NOT a parentprofile }, }, [Primitives::SUPPORT, CONTROL, Primitives::CONTROL_GROUP, Primitives::DEPENDENCY, Primitives::GENERATOR], "Information on the set of controls that can be assessed. Example: it can include the name of the Inspec profile.")
- ENHANCED_OUTCOME_PROFILE =
Primitives::SchemaType.new("Profile JSON Profile", { "type" => "object", "additionalProperties" => true, # Anything in the yaml will be put in here. LTTODO: Make this stricter! "required" => %w{name supports controls groups sha256}, "properties" => { "name" => Primitives.desc(Primitives::STRING, "The name - must be unique."), "supports" => Primitives.desc(Primitives.array(Primitives::SUPPORT.ref), "The set of supported platform targets."), "controls" => Primitives.desc(Primitives.array(CONTROL.ref), "The set of controls - contains no findings as the assessment has not yet occurred."), "groups" => Primitives.desc(Primitives.array(Primitives::CONTROL_GROUP.ref), "A set of descriptions for the control groups. Example: the ids of the controls."), "inputs" => Primitives.desc(Primitives.array(Primitives::INPUT), "The input(s) or attribute(s) used to be in the run."), "sha256" => Primitives.desc(Primitives::STRING, "The checksum of the profile."), "status" => Primitives.desc(Primitives::STRING, "The status. Example: skipped."), "generator" => Primitives.desc(Primitives::GENERATOR.ref, "The tool that generated this file. Example: Chef Inspec."), "version" => Primitives.desc(Primitives::STRING, "The version of the profile."), # Other properties possible in inspec docs, but that aren"t guaranteed "title" => Primitives.desc(Primitives::STRING, "The title - should be human readable."), "maintainer" => Primitives.desc(Primitives::STRING, "The maintainer(s)."), "copyright" => Primitives.desc(Primitives::STRING, "The copyright holder(s)."), "copyright_email" => Primitives.desc(Primitives::STRING, "The email address or other contract information of the copyright holder(s)."), "depends" => Primitives.desc(Primitives.array(Primitives::DEPENDENCY.ref), "The set of dependencies this profile depends on. Example: an overlay profile is dependent on another profile."), # Can have depends, but NOT a parentprofile }, }, [Primitives::SUPPORT, ENHANCED_OUTCOME_CONTROL, Primitives::CONTROL_GROUP, Primitives::DEPENDENCY, Primitives::GENERATOR], "Information on the set of controls that can be assessed. Example: it can include the name of the Inspec profile.")