inspec-core 4.3.2 → 4.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +37 -21
- data/etc/deprecations.json +10 -0
- data/etc/plugin_filters.json +8 -0
- data/lib/bundles/inspec-compliance/api.rb +1 -1
- data/lib/bundles/inspec-compliance/configuration.rb +1 -1
- data/lib/bundles/inspec-compliance/http.rb +1 -1
- data/lib/bundles/inspec-compliance/support.rb +1 -1
- data/lib/bundles/inspec-compliance/target.rb +1 -1
- data/lib/bundles/inspec-supermarket.rb +3 -7
- data/lib/bundles/inspec-supermarket/api.rb +10 -13
- data/lib/bundles/inspec-supermarket/cli.rb +12 -15
- data/lib/bundles/inspec-supermarket/target.rb +7 -11
- data/lib/fetchers/git.rb +14 -15
- data/lib/fetchers/local.rb +6 -10
- data/lib/fetchers/mock.rb +3 -5
- data/lib/fetchers/url.rb +42 -44
- data/lib/inspec.rb +23 -24
- data/lib/inspec/archive/tar.rb +2 -6
- data/lib/inspec/archive/zip.rb +3 -7
- data/lib/inspec/backend.rb +8 -9
- data/lib/inspec/base_cli.rb +64 -65
- data/lib/inspec/cached_fetcher.rb +2 -3
- data/lib/inspec/cli.rb +136 -97
- data/lib/inspec/config.rb +71 -61
- data/lib/inspec/control_eval_context.rb +22 -18
- data/lib/inspec/dependencies/cache.rb +2 -3
- data/lib/inspec/dependencies/dependency_set.rb +2 -3
- data/lib/inspec/dependencies/lockfile.rb +8 -9
- data/lib/inspec/dependencies/requirement.rb +7 -8
- data/lib/inspec/dependencies/resolver.rb +5 -7
- data/lib/inspec/describe.rb +2 -6
- data/lib/inspec/dist.rb +20 -0
- data/lib/inspec/dsl.rb +4 -7
- data/lib/inspec/dsl_shared.rb +1 -2
- data/lib/inspec/env_printer.rb +11 -12
- data/lib/inspec/errors.rb +0 -4
- data/lib/inspec/exceptions.rb +0 -1
- data/lib/inspec/expect.rb +5 -8
- data/lib/inspec/fetcher.rb +7 -10
- data/lib/inspec/file_provider.rb +24 -24
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +8 -8
- data/lib/inspec/globals.rb +2 -2
- data/lib/inspec/impact.rb +5 -7
- data/lib/inspec/input_registry.rb +84 -33
- data/lib/inspec/library_eval_context.rb +3 -6
- data/lib/inspec/log.rb +1 -5
- data/lib/inspec/metadata.rb +17 -16
- data/lib/inspec/method_source.rb +5 -9
- data/lib/inspec/objects.rb +10 -12
- data/lib/inspec/objects/control.rb +7 -9
- data/lib/inspec/objects/describe.rb +9 -11
- data/lib/inspec/objects/each_loop.rb +1 -3
- data/lib/inspec/objects/input.rb +24 -26
- data/lib/inspec/objects/list.rb +4 -6
- data/lib/inspec/objects/or_test.rb +2 -4
- data/lib/inspec/objects/ruby_helper.rb +3 -5
- data/lib/inspec/objects/tag.rb +0 -2
- data/lib/inspec/objects/test.rb +9 -11
- data/lib/inspec/objects/value.rb +3 -5
- data/lib/inspec/plugin/v1.rb +2 -2
- data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
- data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
- data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
- data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
- data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
- data/lib/inspec/plugin/v1/plugins.rb +15 -19
- data/lib/inspec/plugin/v1/registry.rb +0 -4
- data/lib/inspec/plugin/v2.rb +8 -8
- data/lib/inspec/plugin/v2/activator.rb +1 -1
- data/lib/inspec/plugin/v2/config_file.rb +6 -6
- data/lib/inspec/plugin/v2/filter.rb +13 -13
- data/lib/inspec/plugin/v2/installer.rb +36 -24
- data/lib/inspec/plugin/v2/loader.rb +28 -28
- data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
- data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
- data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
- data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
- data/lib/inspec/plugin/v2/registry.rb +7 -7
- data/lib/inspec/polyfill.rb +0 -3
- data/lib/inspec/profile.rb +55 -63
- data/lib/inspec/profile_context.rb +27 -30
- data/lib/inspec/profile_vendor.rb +6 -9
- data/lib/inspec/reporters.rb +24 -24
- data/lib/inspec/reporters/automate.rb +17 -19
- data/lib/inspec/reporters/base.rb +1 -1
- data/lib/inspec/reporters/cli.rb +88 -91
- data/lib/inspec/reporters/json.rb +2 -4
- data/lib/inspec/reporters/json_automate.rb +1 -3
- data/lib/inspec/reporters/json_min.rb +1 -3
- data/lib/inspec/reporters/junit.rb +26 -28
- data/lib/inspec/reporters/yaml.rb +1 -3
- data/lib/inspec/require_loader.rb +0 -4
- data/lib/inspec/resource.rb +4 -125
- data/lib/inspec/resources.rb +121 -0
- data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
- data/lib/{resources → inspec/resources}/apache.rb +13 -14
- data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
- data/lib/{resources → inspec/resources}/apt.rb +17 -17
- data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
- data/lib/{resources → inspec/resources}/auditd.rb +62 -64
- data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
- data/lib/{resources → inspec/resources}/bash.rb +6 -8
- data/lib/{resources → inspec/resources}/bond.rb +15 -14
- data/lib/{resources → inspec/resources}/bridge.rb +8 -8
- data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
- data/lib/{resources → inspec/resources}/command.rb +11 -10
- data/lib/{resources → inspec/resources}/cpan.rb +12 -12
- data/lib/{resources → inspec/resources}/cran.rb +9 -9
- data/lib/{resources → inspec/resources}/crontab.rb +47 -48
- data/lib/{resources → inspec/resources}/csv.rb +5 -5
- data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
- data/lib/{resources → inspec/resources}/directory.rb +5 -7
- data/lib/{resources → inspec/resources}/docker.rb +63 -63
- data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
- data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
- data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
- data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
- data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
- data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
- data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
- data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
- data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
- data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
- data/lib/{resources → inspec/resources}/file.rb +80 -79
- data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
- data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
- data/lib/{resources → inspec/resources}/gem.rb +12 -12
- data/lib/{resources → inspec/resources}/groups.rb +28 -27
- data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
- data/lib/{resources → inspec/resources}/host.rb +31 -29
- data/lib/{resources → inspec/resources}/http.rb +24 -24
- data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
- data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
- data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
- data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
- data/lib/{resources → inspec/resources}/ini.rb +7 -8
- data/lib/{resources → inspec/resources}/interface.rb +30 -30
- data/lib/{resources → inspec/resources}/iptables.rb +8 -8
- data/lib/{resources → inspec/resources}/json.rb +8 -10
- data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
- data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
- data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
- data/lib/{resources → inspec/resources}/ksh.rb +6 -8
- data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
- data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
- data/lib/{resources → inspec/resources}/mount.rb +6 -8
- data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
- data/lib/inspec/resources/mysql.rb +81 -0
- data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
- data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
- data/lib/{resources → inspec/resources}/nginx.rb +16 -17
- data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
- data/lib/{resources → inspec/resources}/npm.rb +9 -10
- data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
- data/lib/{resources → inspec/resources}/oneget.rb +8 -8
- data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
- data/lib/{resources → inspec/resources}/os.rb +6 -8
- data/lib/{resources → inspec/resources}/os_env.rb +11 -12
- data/lib/{resources → inspec/resources}/package.rb +66 -65
- data/lib/{resources → inspec/resources}/packages.rb +13 -13
- data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
- data/lib/{resources → inspec/resources}/passwd.rb +18 -19
- data/lib/{resources → inspec/resources}/pip.rb +19 -19
- data/lib/{resources → inspec/resources}/platform.rb +9 -11
- data/lib/{resources → inspec/resources}/port.rb +134 -136
- data/lib/{resources → inspec/resources}/postgres.rb +40 -32
- data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
- data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
- data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
- data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
- data/lib/{resources → inspec/resources}/powershell.rb +17 -13
- data/lib/{resources → inspec/resources}/processes.rb +29 -29
- data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
- data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
- data/lib/inspec/resources/script.rb +1 -0
- data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
- data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
- data/lib/{resources → inspec/resources}/service.rb +74 -75
- data/lib/{resources → inspec/resources}/shadow.rb +44 -45
- data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
- data/lib/{resources → inspec/resources}/ssl.rb +28 -29
- data/lib/inspec/resources/sys_info.rb +30 -0
- data/lib/{resources → inspec/resources}/toml.rb +5 -7
- data/lib/{resources → inspec/resources}/users.rb +65 -65
- data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
- data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
- data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
- data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
- data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
- data/lib/{resources → inspec/resources}/wmi.rb +7 -8
- data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
- data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
- data/lib/{resources → inspec/resources}/xml.rb +7 -7
- data/lib/{resources → inspec/resources}/yaml.rb +5 -6
- data/lib/{resources → inspec/resources}/yum.rb +10 -10
- data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
- data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
- data/lib/inspec/rspec_extensions.rb +24 -8
- data/lib/inspec/rule.rb +14 -15
- data/lib/inspec/runner.rb +28 -28
- data/lib/inspec/runner_mock.rb +1 -5
- data/lib/inspec/runner_rspec.rb +18 -20
- data/lib/inspec/runtime_profile.rb +2 -5
- data/lib/inspec/schema.rb +142 -143
- data/lib/inspec/secrets.rb +3 -7
- data/lib/inspec/secrets/yaml.rb +3 -5
- data/lib/inspec/shell.rb +11 -15
- data/lib/inspec/shell_detector.rb +6 -7
- data/lib/inspec/source_reader.rb +4 -8
- data/lib/inspec/ui.rb +33 -39
- data/lib/inspec/ui_table_helper.rb +12 -0
- data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
- data/lib/{utils → inspec/utils}/convert.rb +0 -4
- data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
- data/lib/inspec/utils/deprecation.rb +6 -0
- data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
- data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
- data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
- data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
- data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
- data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
- data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
- data/lib/{utils → inspec/utils}/filter.rb +30 -33
- data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
- data/lib/{utils → inspec/utils}/find_files.rb +9 -12
- data/lib/{utils → inspec/utils}/hash.rb +1 -5
- data/lib/inspec/utils/json_log.rb +15 -0
- data/lib/inspec/utils/latest_version.rb +13 -0
- data/lib/{utils → inspec/utils}/modulator.rb +0 -3
- data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
- data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
- data/lib/{utils → inspec/utils}/parser.rb +45 -45
- data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
- data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
- data/lib/{utils → inspec/utils}/spdx.rb +1 -4
- data/lib/{utils → inspec/utils}/spdx.txt +0 -0
- data/lib/inspec/utils/telemetry.rb +3 -3
- data/lib/inspec/utils/telemetry/collector.rb +30 -9
- data/lib/inspec/utils/telemetry/data_series.rb +3 -1
- data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/matchers/matchers.rb +22 -25
- data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
- data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
- data/lib/plugins/inspec-habitat/Berksfile +2 -2
- data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
- data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
- data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
- data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
- data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
- data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
- data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
- data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
- data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
- data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
- data/lib/source_readers/flat.rb +6 -10
- data/lib/source_readers/inspec.rb +8 -12
- metadata +139 -140
- data/lib/resources/mysql.rb +0 -82
- data/lib/resources/sys_info.rb +0 -28
- data/lib/utils/deprecation.rb +0 -6
- data/lib/utils/json_log.rb +0 -18
- data/lib/utils/latest_version.rb +0 -22
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'inspec/profile'
|
|
5
|
-
require 'inspec/config'
|
|
1
|
+
require "inspec/profile"
|
|
2
|
+
require "inspec/config"
|
|
6
3
|
|
|
7
4
|
module Inspec
|
|
8
5
|
class ProfileVendor
|
|
@@ -34,11 +31,11 @@ module Inspec
|
|
|
34
31
|
end
|
|
35
32
|
|
|
36
33
|
def cache_path
|
|
37
|
-
profile_path.join(
|
|
34
|
+
profile_path.join("vendor")
|
|
38
35
|
end
|
|
39
36
|
|
|
40
37
|
def lockfile
|
|
41
|
-
profile_path.join(
|
|
38
|
+
profile_path.join("inspec.lock")
|
|
42
39
|
end
|
|
43
40
|
|
|
44
41
|
private
|
|
@@ -66,10 +63,10 @@ module Inspec
|
|
|
66
63
|
end
|
|
67
64
|
|
|
68
65
|
def extract_archives
|
|
69
|
-
Dir.glob(File.join(cache_path,
|
|
66
|
+
Dir.glob(File.join(cache_path, "*")).each do |filepath|
|
|
70
67
|
# Get SHA without extension
|
|
71
68
|
# We use split since '.' is not valid in a SHA checksum
|
|
72
|
-
destination_dir_name = File.basename(filepath).split(
|
|
69
|
+
destination_dir_name = File.basename(filepath).split(".")[0]
|
|
73
70
|
destination_path = File.join(cache_path, destination_dir_name)
|
|
74
71
|
|
|
75
72
|
provider = FileProvider.for_path(filepath)
|
data/lib/inspec/reporters.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
1
|
+
require "inspec/reporters/base"
|
|
2
|
+
require "inspec/reporters/cli"
|
|
3
|
+
require "inspec/reporters/json"
|
|
4
|
+
require "inspec/reporters/json_automate"
|
|
5
|
+
require "inspec/reporters/json_min"
|
|
6
|
+
require "inspec/reporters/junit"
|
|
7
|
+
require "inspec/reporters/automate"
|
|
8
|
+
require "inspec/reporters/yaml"
|
|
9
9
|
|
|
10
10
|
module Inspec::Reporters
|
|
11
11
|
# rubocop:disable Metrics/CyclomaticComplexity
|
|
@@ -13,21 +13,21 @@ module Inspec::Reporters
|
|
|
13
13
|
name, config = reporter.dup
|
|
14
14
|
config[:run_data] = run_data
|
|
15
15
|
case name
|
|
16
|
-
when
|
|
16
|
+
when "cli"
|
|
17
17
|
reporter = Inspec::Reporters::CLI.new(config)
|
|
18
|
-
when
|
|
18
|
+
when "json"
|
|
19
19
|
reporter = Inspec::Reporters::Json.new(config)
|
|
20
20
|
# This reporter is only used for Chef internal. We reserve the
|
|
21
21
|
# right to introduce breaking changes to this reporter at any time.
|
|
22
|
-
when
|
|
22
|
+
when "json-automate"
|
|
23
23
|
reporter = Inspec::Reporters::JsonAutomate.new(config)
|
|
24
|
-
when
|
|
24
|
+
when "json-min"
|
|
25
25
|
reporter = Inspec::Reporters::JsonMin.new(config)
|
|
26
|
-
when
|
|
26
|
+
when "junit"
|
|
27
27
|
reporter = Inspec::Reporters::Junit.new(config)
|
|
28
|
-
when
|
|
28
|
+
when "automate"
|
|
29
29
|
reporter = Inspec::Reporters::Automate.new(config)
|
|
30
|
-
when
|
|
30
|
+
when "yaml"
|
|
31
31
|
reporter = Inspec::Reporters::Yaml.new(config)
|
|
32
32
|
else
|
|
33
33
|
raise NotImplementedError, "'#{name}' is not a valid reporter type."
|
|
@@ -39,15 +39,15 @@ module Inspec::Reporters
|
|
|
39
39
|
reporter.render
|
|
40
40
|
output = reporter.rendered_output
|
|
41
41
|
|
|
42
|
-
if config[
|
|
42
|
+
if config["file"]
|
|
43
43
|
# create destination directory if it does not exist
|
|
44
|
-
dirname = File.dirname(config[
|
|
44
|
+
dirname = File.dirname(config["file"])
|
|
45
45
|
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
|
46
46
|
|
|
47
|
-
File.write(config[
|
|
48
|
-
elsif config[
|
|
47
|
+
File.write(config["file"], output)
|
|
48
|
+
elsif config["stdout"] == true
|
|
49
49
|
print output
|
|
50
|
-
|
|
50
|
+
$stdout.flush
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -55,13 +55,13 @@ module Inspec::Reporters
|
|
|
55
55
|
name, config = reporter.dup
|
|
56
56
|
config[:run_data] = run_data
|
|
57
57
|
case name
|
|
58
|
-
when
|
|
58
|
+
when "json"
|
|
59
59
|
reporter = Inspec::Reporters::Json.new(config)
|
|
60
|
-
when
|
|
60
|
+
when "json-min"
|
|
61
61
|
reporter = Inspec::Reporters::JsonMin.new(config)
|
|
62
|
-
when
|
|
62
|
+
when "json-automate"
|
|
63
63
|
reporter = Inspec::Reporters::JsonAutomate.new(config)
|
|
64
|
-
when
|
|
64
|
+
when "yaml"
|
|
65
65
|
reporter = Inspec::Reporters::Yaml.new(config)
|
|
66
66
|
else
|
|
67
67
|
# use base run_data hash for any other report
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'json'
|
|
4
|
-
require 'net/http'
|
|
1
|
+
require "json"
|
|
2
|
+
require "net/http"
|
|
5
3
|
|
|
6
4
|
module Inspec::Reporters
|
|
7
5
|
class Automate < JsonAutomate
|
|
@@ -9,10 +7,10 @@ module Inspec::Reporters
|
|
|
9
7
|
super(config)
|
|
10
8
|
|
|
11
9
|
# allow the insecure flag
|
|
12
|
-
@config[
|
|
10
|
+
@config["verify_ssl"] = !@config["insecure"] if @config.key?("insecure")
|
|
13
11
|
|
|
14
12
|
# default to not verifying ssl for sending reports
|
|
15
|
-
@config[
|
|
13
|
+
@config["verify_ssl"] = @config["verify_ssl"] || false
|
|
16
14
|
end
|
|
17
15
|
|
|
18
16
|
def enriched_report
|
|
@@ -20,30 +18,30 @@ module Inspec::Reporters
|
|
|
20
18
|
final_report = report
|
|
21
19
|
|
|
22
20
|
# Label this content as an inspec_report
|
|
23
|
-
final_report[:type] =
|
|
21
|
+
final_report[:type] = "inspec_report"
|
|
24
22
|
|
|
25
|
-
final_report[:end_time] = Time.now.utc.strftime(
|
|
26
|
-
final_report[:node_uuid] = @config[
|
|
27
|
-
raise Inspec::ReporterError,
|
|
23
|
+
final_report[:end_time] = Time.now.utc.strftime("%FT%TZ")
|
|
24
|
+
final_report[:node_uuid] = @config["node_uuid"] || @config["target_id"]
|
|
25
|
+
raise Inspec::ReporterError, "Cannot find a UUID for your node. Please specify one via json-config." if final_report[:node_uuid].nil?
|
|
28
26
|
|
|
29
|
-
final_report[:report_uuid] = @config[
|
|
27
|
+
final_report[:report_uuid] = @config["report_uuid"] || uuid_from_string(final_report[:end_time] + final_report[:node_uuid])
|
|
30
28
|
|
|
31
29
|
final_report
|
|
32
30
|
end
|
|
33
31
|
|
|
34
32
|
def send_report
|
|
35
|
-
headers = {
|
|
36
|
-
headers[
|
|
37
|
-
headers[
|
|
33
|
+
headers = { "Content-Type" => "application/json" }
|
|
34
|
+
headers["x-data-collector-token"] = @config["token"]
|
|
35
|
+
headers["x-data-collector-auth"] = "version=1.0"
|
|
38
36
|
|
|
39
|
-
uri = URI(@config[
|
|
37
|
+
uri = URI(@config["url"])
|
|
40
38
|
req = Net::HTTP::Post.new(uri.path, headers)
|
|
41
39
|
req.body = enriched_report.to_json
|
|
42
40
|
begin
|
|
43
41
|
Inspec::Log.debug "Posting report to Chef Automate: #{uri.path}"
|
|
44
42
|
http = Net::HTTP.new(uri.hostname, uri.port)
|
|
45
|
-
http.use_ssl = uri.scheme ==
|
|
46
|
-
if @config[
|
|
43
|
+
http.use_ssl = uri.scheme == "https"
|
|
44
|
+
if @config["verify_ssl"] == true
|
|
47
45
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
|
48
46
|
else
|
|
49
47
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
@@ -70,11 +68,11 @@ module Inspec::Reporters
|
|
|
70
68
|
def uuid_from_string(string)
|
|
71
69
|
hash = Digest::SHA1.new
|
|
72
70
|
hash.update(string)
|
|
73
|
-
ary = hash.digest.unpack(
|
|
71
|
+
ary = hash.digest.unpack("NnnnnN")
|
|
74
72
|
ary[2] = (ary[2] & 0x0FFF) | (5 << 12)
|
|
75
73
|
ary[3] = (ary[3] & 0x3FFF) | 0x8000
|
|
76
74
|
# rubocop:disable Style/FormatString
|
|
77
|
-
|
|
75
|
+
"%08x-%04x-%04x-%04x-%04x%08x" % ary
|
|
78
76
|
end
|
|
79
77
|
end
|
|
80
78
|
end
|
data/lib/inspec/reporters/cli.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
1
|
module Inspec::Reporters
|
|
4
2
|
class CLI < Base
|
|
5
3
|
case RUBY_PLATFORM
|
|
@@ -7,36 +5,36 @@ module Inspec::Reporters
|
|
|
7
5
|
# Most currently available Windows terminals have poor support
|
|
8
6
|
# for ANSI extended colors
|
|
9
7
|
COLORS = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
"failed" => "\033[0;1;31m",
|
|
9
|
+
"passed" => "\033[0;1;32m",
|
|
10
|
+
"skipped" => "\033[0;37m",
|
|
11
|
+
"reset" => "\033[0m",
|
|
14
12
|
}.freeze
|
|
15
13
|
|
|
16
14
|
# Most currently available Windows terminals have poor support
|
|
17
15
|
# for UTF-8 characters so use these boring indicators
|
|
18
16
|
INDICATORS = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
"failed" => "[FAIL]",
|
|
18
|
+
"skipped" => "[SKIP]",
|
|
19
|
+
"passed" => "[PASS]",
|
|
20
|
+
"unknown" => "[UNKN]",
|
|
23
21
|
}.freeze
|
|
24
22
|
else
|
|
25
23
|
# Extended colors for everyone else
|
|
26
24
|
COLORS = {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
"failed" => "\033[38;5;9m",
|
|
26
|
+
"passed" => "\033[38;5;41m",
|
|
27
|
+
"skipped" => "\033[38;5;247m",
|
|
28
|
+
"reset" => "\033[0m",
|
|
31
29
|
}.freeze
|
|
32
30
|
|
|
33
31
|
# Groovy UTF-8 characters for everyone else...
|
|
34
32
|
# ...even though they probably only work on Mac
|
|
35
33
|
INDICATORS = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
"failed" => "×",
|
|
35
|
+
"skipped" => "↺",
|
|
36
|
+
"passed" => "✔",
|
|
37
|
+
"unknown" => "?",
|
|
40
38
|
}.freeze
|
|
41
39
|
end
|
|
42
40
|
|
|
@@ -44,23 +42,25 @@ module Inspec::Reporters
|
|
|
44
42
|
|
|
45
43
|
def render
|
|
46
44
|
run_data[:profiles].each do |profile|
|
|
47
|
-
if profile[:status] ==
|
|
45
|
+
if profile[:status] == "skipped"
|
|
48
46
|
platform = run_data[:platform]
|
|
49
47
|
output("Skipping profile: '#{profile[:name]}' on unsupported platform: '#{platform[:name]}/#{platform[:release]}'.")
|
|
50
48
|
next
|
|
51
49
|
end
|
|
52
50
|
@control_count = 0
|
|
53
|
-
output(
|
|
51
|
+
output("")
|
|
54
52
|
print_profile_header(profile)
|
|
55
53
|
print_standard_control_results(profile)
|
|
56
54
|
print_anonymous_control_results(profile)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
if @control_count == 0
|
|
56
|
+
output(format_message(
|
|
57
|
+
indentation: 5,
|
|
58
|
+
message: "No tests executed."
|
|
59
|
+
))
|
|
60
|
+
end
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
output(
|
|
63
|
+
output("")
|
|
64
64
|
print_profile_summary
|
|
65
65
|
print_tests_summary
|
|
66
66
|
end
|
|
@@ -69,17 +69,17 @@ module Inspec::Reporters
|
|
|
69
69
|
|
|
70
70
|
def print_profile_header(profile)
|
|
71
71
|
header = {
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
"Profile" => format_profile_name(profile),
|
|
73
|
+
"Version" => profile[:version] || "(not specified)",
|
|
74
74
|
}
|
|
75
|
-
header[
|
|
76
|
-
header[
|
|
75
|
+
header["Target"] = run_data[:platform][:target] unless run_data[:platform][:target].nil?
|
|
76
|
+
header["Target ID"] = @config["target_id"] unless @config["target_id"].nil?
|
|
77
77
|
|
|
78
78
|
pad = header.keys.max_by(&:length).length + 1
|
|
79
79
|
header.each do |title, value|
|
|
80
|
-
output(format("%-#{pad}s %s", title +
|
|
80
|
+
output(format("%-#{pad}s %s", title + ":", value))
|
|
81
81
|
end
|
|
82
|
-
output(
|
|
82
|
+
output("")
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def print_standard_control_results(profile)
|
|
@@ -92,7 +92,7 @@ module Inspec::Reporters
|
|
|
92
92
|
@control_count += 1
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
|
-
output(
|
|
95
|
+
output("") if @control_count > 0
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
def print_anonymous_control_results(profile)
|
|
@@ -109,7 +109,7 @@ module Inspec::Reporters
|
|
|
109
109
|
|
|
110
110
|
def format_profile_name(profile)
|
|
111
111
|
if profile[:title].nil?
|
|
112
|
-
(profile[:name] ||
|
|
112
|
+
(profile[:name] || "unknown").to_s
|
|
113
113
|
else
|
|
114
114
|
"#{profile[:title]} (#{profile[:name] || 'unknown'})"
|
|
115
115
|
end
|
|
@@ -120,14 +120,14 @@ module Inspec::Reporters
|
|
|
120
120
|
format_message(
|
|
121
121
|
color: impact,
|
|
122
122
|
indicator: impact,
|
|
123
|
-
message: control.title_for_report
|
|
123
|
+
message: control.title_for_report
|
|
124
124
|
)
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def format_result(control, result, type)
|
|
128
128
|
impact = control.impact_string_for_result(result)
|
|
129
129
|
|
|
130
|
-
message = if result[:status] ==
|
|
130
|
+
message = if result[:status] == "skipped"
|
|
131
131
|
result[:skip_message]
|
|
132
132
|
elsif type == :anonymous
|
|
133
133
|
result[:expectation_message]
|
|
@@ -142,7 +142,7 @@ module Inspec::Reporters
|
|
|
142
142
|
color: impact,
|
|
143
143
|
indicator: impact,
|
|
144
144
|
indentation: 5,
|
|
145
|
-
message: message
|
|
145
|
+
message: message
|
|
146
146
|
)
|
|
147
147
|
end
|
|
148
148
|
|
|
@@ -152,7 +152,7 @@ module Inspec::Reporters
|
|
|
152
152
|
indentation = message_info.fetch(:indentation, 2)
|
|
153
153
|
message = message_info[:message]
|
|
154
154
|
|
|
155
|
-
message_to_format =
|
|
155
|
+
message_to_format = ""
|
|
156
156
|
message_to_format += "#{INDICATORS[indicator]} " unless indicator.nil?
|
|
157
157
|
message_to_format += message.to_s.lstrip.force_encoding(Encoding::UTF_8)
|
|
158
158
|
|
|
@@ -167,14 +167,11 @@ module Inspec::Reporters
|
|
|
167
167
|
end
|
|
168
168
|
|
|
169
169
|
def all_unique_controls
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
@unique_controls
|
|
170
|
+
@unique_controls ||= begin
|
|
171
|
+
run_data[:profiles].flat_map do |profile|
|
|
172
|
+
profile[:controls]
|
|
173
|
+
end.uniq
|
|
174
|
+
end
|
|
178
175
|
end
|
|
179
176
|
|
|
180
177
|
def profile_summary
|
|
@@ -183,11 +180,11 @@ module Inspec::Reporters
|
|
|
183
180
|
passed = 0
|
|
184
181
|
|
|
185
182
|
all_unique_controls.each do |control|
|
|
186
|
-
next if control[:id].start_with?
|
|
183
|
+
next if control[:id].start_with? "(generated from "
|
|
187
184
|
next unless control[:results]
|
|
188
|
-
if control[:results].any? { |r| r[:status] ==
|
|
185
|
+
if control[:results].any? { |r| r[:status] == "failed" }
|
|
189
186
|
failed += 1
|
|
190
|
-
elsif control[:results].any? { |r| r[:status] ==
|
|
187
|
+
elsif control[:results].any? { |r| r[:status] == "skipped" }
|
|
191
188
|
skipped += 1
|
|
192
189
|
else
|
|
193
190
|
passed += 1
|
|
@@ -197,10 +194,10 @@ module Inspec::Reporters
|
|
|
197
194
|
total = failed + passed + skipped
|
|
198
195
|
|
|
199
196
|
{
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
197
|
+
"total" => total,
|
|
198
|
+
"failed" => failed,
|
|
199
|
+
"skipped" => skipped,
|
|
200
|
+
"passed" => passed,
|
|
204
201
|
}
|
|
205
202
|
end
|
|
206
203
|
|
|
@@ -213,9 +210,9 @@ module Inspec::Reporters
|
|
|
213
210
|
all_unique_controls.each do |control|
|
|
214
211
|
next unless control[:results]
|
|
215
212
|
control[:results].each do |result|
|
|
216
|
-
if result[:status] ==
|
|
213
|
+
if result[:status] == "failed"
|
|
217
214
|
failed += 1
|
|
218
|
-
elsif result[:status] ==
|
|
215
|
+
elsif result[:status] == "skipped"
|
|
219
216
|
skipped += 1
|
|
220
217
|
else
|
|
221
218
|
passed += 1
|
|
@@ -224,48 +221,48 @@ module Inspec::Reporters
|
|
|
224
221
|
end
|
|
225
222
|
|
|
226
223
|
{
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
224
|
+
"total" => total,
|
|
225
|
+
"failed" => failed,
|
|
226
|
+
"skipped" => skipped,
|
|
227
|
+
"passed" => passed,
|
|
231
228
|
}
|
|
232
229
|
end
|
|
233
230
|
|
|
234
231
|
def print_profile_summary
|
|
235
232
|
summary = profile_summary
|
|
236
|
-
return unless summary[
|
|
233
|
+
return unless summary["total"] > 0
|
|
237
234
|
|
|
238
|
-
success_str = summary[
|
|
239
|
-
failed_str = summary[
|
|
240
|
-
skipped_str = summary[
|
|
235
|
+
success_str = summary["passed"] == 1 ? "1 successful control" : "#{summary['passed']} successful controls"
|
|
236
|
+
failed_str = summary["failed"] == 1 ? "1 control failure" : "#{summary['failed']} control failures"
|
|
237
|
+
skipped_str = summary["skipped"] == 1 ? "1 control skipped" : "#{summary['skipped']} controls skipped"
|
|
241
238
|
|
|
242
|
-
success_color = summary[
|
|
243
|
-
failed_color = summary[
|
|
244
|
-
skipped_color = summary[
|
|
239
|
+
success_color = summary["passed"] > 0 ? "passed" : "no_color"
|
|
240
|
+
failed_color = summary["failed"] > 0 ? "failed" : "no_color"
|
|
241
|
+
skipped_color = summary["skipped"] > 0 ? "skipped" : "no_color"
|
|
245
242
|
|
|
246
243
|
s = format(
|
|
247
|
-
|
|
244
|
+
"Profile Summary: %s, %s, %s",
|
|
248
245
|
format_with_color(success_color, success_str),
|
|
249
246
|
format_with_color(failed_color, failed_str),
|
|
250
|
-
format_with_color(skipped_color, skipped_str)
|
|
247
|
+
format_with_color(skipped_color, skipped_str)
|
|
251
248
|
)
|
|
252
|
-
output(s) if summary[
|
|
249
|
+
output(s) if summary["total"] > 0
|
|
253
250
|
end
|
|
254
251
|
|
|
255
252
|
def print_tests_summary
|
|
256
253
|
summary = tests_summary
|
|
257
254
|
|
|
258
|
-
failed_str = summary[
|
|
255
|
+
failed_str = summary["failed"] == 1 ? "1 failure" : "#{summary['failed']} failures"
|
|
259
256
|
|
|
260
|
-
success_color = summary[
|
|
261
|
-
failed_color = summary[
|
|
262
|
-
skipped_color = summary[
|
|
257
|
+
success_color = summary["passed"] > 0 ? "passed" : "no_color"
|
|
258
|
+
failed_color = summary["failed"] > 0 ? "failed" : "no_color"
|
|
259
|
+
skipped_color = summary["skipped"] > 0 ? "skipped" : "no_color"
|
|
263
260
|
|
|
264
261
|
s = format(
|
|
265
|
-
|
|
262
|
+
"Test Summary: %s, %s, %s",
|
|
266
263
|
format_with_color(success_color, "#{summary['passed']} successful"),
|
|
267
264
|
format_with_color(failed_color, failed_str),
|
|
268
|
-
format_with_color(skipped_color, "#{summary['skipped']} skipped")
|
|
265
|
+
format_with_color(skipped_color, "#{summary['skipped']} skipped")
|
|
269
266
|
)
|
|
270
267
|
|
|
271
268
|
output(s)
|
|
@@ -280,11 +277,11 @@ module Inspec::Reporters
|
|
|
280
277
|
end
|
|
281
278
|
|
|
282
279
|
def is_anonymous_control?(control)
|
|
283
|
-
control[:id].start_with?(
|
|
280
|
+
control[:id].start_with?("(generated from ")
|
|
284
281
|
end
|
|
285
282
|
|
|
286
283
|
def indent_lines(message, indentation)
|
|
287
|
-
message.lines.map { |line|
|
|
284
|
+
message.lines.map { |line| " " * indentation + line }.join
|
|
288
285
|
end
|
|
289
286
|
|
|
290
287
|
class Control
|
|
@@ -311,7 +308,7 @@ module Inspec::Reporters
|
|
|
311
308
|
end
|
|
312
309
|
|
|
313
310
|
def anonymous?
|
|
314
|
-
id.start_with?(
|
|
311
|
+
id.start_with?("(generated from ")
|
|
315
312
|
end
|
|
316
313
|
|
|
317
314
|
def title_for_report
|
|
@@ -335,34 +332,34 @@ module Inspec::Reporters
|
|
|
335
332
|
if anonymous?
|
|
336
333
|
nil
|
|
337
334
|
elsif impact.nil?
|
|
338
|
-
|
|
339
|
-
elsif results&.find { |r| r[:status] ==
|
|
340
|
-
|
|
341
|
-
elsif results.nil? || results.empty? || results.all? { |r| r[:status] ==
|
|
342
|
-
|
|
335
|
+
"unknown"
|
|
336
|
+
elsif results&.find { |r| r[:status] == "skipped" }
|
|
337
|
+
"skipped"
|
|
338
|
+
elsif results.nil? || results.empty? || results.all? { |r| r[:status] == "passed" }
|
|
339
|
+
"passed"
|
|
343
340
|
else
|
|
344
|
-
|
|
341
|
+
"failed"
|
|
345
342
|
end
|
|
346
343
|
end
|
|
347
344
|
|
|
348
345
|
def impact_string_for_result(result)
|
|
349
|
-
if result[:status] ==
|
|
350
|
-
|
|
351
|
-
elsif result[:status] ==
|
|
352
|
-
|
|
346
|
+
if result[:status] == "skipped"
|
|
347
|
+
"skipped"
|
|
348
|
+
elsif result[:status] == "passed"
|
|
349
|
+
"passed"
|
|
353
350
|
elsif impact.nil?
|
|
354
|
-
|
|
351
|
+
"unknown"
|
|
355
352
|
else
|
|
356
|
-
|
|
353
|
+
"failed"
|
|
357
354
|
end
|
|
358
355
|
end
|
|
359
356
|
|
|
360
357
|
def failure_count
|
|
361
|
-
results.select { |r| r[:status] ==
|
|
358
|
+
results.select { |r| r[:status] == "failed" }.size
|
|
362
359
|
end
|
|
363
360
|
|
|
364
361
|
def skipped_count
|
|
365
|
-
results.select { |r| r[:status] ==
|
|
362
|
+
results.select { |r| r[:status] == "skipped" }.size
|
|
366
363
|
end
|
|
367
364
|
end
|
|
368
365
|
end
|