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
data/lib/fetchers/local.rb
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
# author: Dominik Richter
|
|
3
|
-
# author: Christoph Hartmann
|
|
4
|
-
|
|
5
|
-
require 'openssl'
|
|
1
|
+
require "openssl"
|
|
6
2
|
|
|
7
3
|
module Fetchers
|
|
8
4
|
class Local < Inspec.fetcher(1)
|
|
9
|
-
name
|
|
5
|
+
name "local"
|
|
10
6
|
priority 0
|
|
11
7
|
|
|
12
8
|
def self.resolve(target)
|
|
@@ -31,11 +27,11 @@ module Fetchers
|
|
|
31
27
|
|
|
32
28
|
def self.resolve_from_string(target)
|
|
33
29
|
# Support "urls" in the form of file://
|
|
34
|
-
if target.start_with?(
|
|
35
|
-
target = target.gsub(%r{^file://},
|
|
30
|
+
if target.start_with?("file://")
|
|
31
|
+
target = target.gsub(%r{^file://}, "")
|
|
36
32
|
else
|
|
37
33
|
# support for windows paths
|
|
38
|
-
target = target.tr('\\',
|
|
34
|
+
target = target.tr('\\', "/")
|
|
39
35
|
end
|
|
40
36
|
|
|
41
37
|
target if File.exist?(File.expand_path(target))
|
|
@@ -105,7 +101,7 @@ module Fetchers
|
|
|
105
101
|
end
|
|
106
102
|
|
|
107
103
|
def perform_shasum(target)
|
|
108
|
-
@archive_shasum ||= OpenSSL::Digest::SHA256.digest(File.read(target)).unpack(
|
|
104
|
+
@archive_shasum ||= OpenSSL::Digest::SHA256.digest(File.read(target)).unpack("H*")[0]
|
|
109
105
|
end
|
|
110
106
|
|
|
111
107
|
def resolved_source
|
data/lib/fetchers/mock.rb
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
# author: Dominik Richter
|
|
3
|
-
# author: Christoph Hartmann
|
|
1
|
+
require "inspec/fetcher"
|
|
4
2
|
|
|
5
3
|
module Fetchers
|
|
6
4
|
class Mock < Inspec.fetcher(1)
|
|
7
|
-
name
|
|
5
|
+
name "mock"
|
|
8
6
|
priority 0
|
|
9
7
|
|
|
10
8
|
def self.resolve(target)
|
|
@@ -29,7 +27,7 @@ module Fetchers
|
|
|
29
27
|
end
|
|
30
28
|
|
|
31
29
|
def cache_key
|
|
32
|
-
|
|
30
|
+
""
|
|
33
31
|
end
|
|
34
32
|
end
|
|
35
33
|
end
|
data/lib/fetchers/url.rb
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'uri'
|
|
6
|
-
require 'openssl'
|
|
7
|
-
require 'tempfile'
|
|
8
|
-
require 'open-uri'
|
|
1
|
+
require "uri"
|
|
2
|
+
require "openssl"
|
|
3
|
+
require "tempfile"
|
|
4
|
+
require "open-uri"
|
|
9
5
|
|
|
10
6
|
module Fetchers
|
|
11
7
|
class Url < Inspec.fetcher(1)
|
|
12
8
|
MIME_TYPES = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
"application/x-zip-compressed" => ".zip",
|
|
10
|
+
"application/zip" => ".zip",
|
|
11
|
+
"application/x-gzip" => ".tar.gz",
|
|
12
|
+
"application/gzip" => ".tar.gz",
|
|
17
13
|
}.freeze
|
|
18
14
|
|
|
19
|
-
name
|
|
15
|
+
name "url"
|
|
20
16
|
priority 200
|
|
21
17
|
|
|
22
18
|
def self.resolve(target, opts = {})
|
|
@@ -31,7 +27,7 @@ module Fetchers
|
|
|
31
27
|
|
|
32
28
|
def self.resolve_from_string(target, opts, username = nil, password = nil)
|
|
33
29
|
uri = URI.parse(target)
|
|
34
|
-
return nil if uri.nil?
|
|
30
|
+
return nil if uri.nil? || uri.scheme.nil?
|
|
35
31
|
return nil unless %{ http https }.include? uri.scheme
|
|
36
32
|
target = transform(target)
|
|
37
33
|
opts[:username] = username if username
|
|
@@ -66,11 +62,11 @@ module Fetchers
|
|
|
66
62
|
# https://bitbucket.org/username/repo/commits/95ce1f83d5bbe9eec34c5973f6894617e8d6d8cc is transformed to
|
|
67
63
|
# https://bitbucket.org/username/repo/get/95ce1f83d5bbe9eec34c5973f6894617e8d6d8cc.tar.gz
|
|
68
64
|
|
|
69
|
-
GITHUB_URL_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w
|
|
70
|
-
GITHUB_URL_WITH_TREE_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w
|
|
71
|
-
BITBUCKET_URL_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}
|
|
72
|
-
BITBUCKET_URL_BRANCH_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/branch/(?<branch>[\w\.]+)(/)?$}
|
|
73
|
-
BITBUCKET_URL_COMMIT_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/commits/(?<commit>[\w\.]+)(/)?$}
|
|
65
|
+
GITHUB_URL_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w.-]+?)(\.git)?(/)?$}.freeze
|
|
66
|
+
GITHUB_URL_WITH_TREE_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w.-]+)/tree/(?<commit>[\w\.]+)(/)?$}.freeze
|
|
67
|
+
BITBUCKET_URL_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}.freeze
|
|
68
|
+
BITBUCKET_URL_BRANCH_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/branch/(?<branch>[\w\.]+)(/)?$}.freeze
|
|
69
|
+
BITBUCKET_URL_COMMIT_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/commits/(?<commit>[\w\.]+)(/)?$}.freeze
|
|
74
70
|
|
|
75
71
|
def self.transform(target)
|
|
76
72
|
transformed_target = if m = GITHUB_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
|
@@ -98,8 +94,8 @@ module Fetchers
|
|
|
98
94
|
def initialize(url, opts)
|
|
99
95
|
@target = url.to_s
|
|
100
96
|
@target_uri = url.is_a?(URI) ? url : parse_uri(url)
|
|
101
|
-
@insecure = opts[
|
|
102
|
-
@token = opts[
|
|
97
|
+
@insecure = opts["insecure"]
|
|
98
|
+
@token = opts["token"]
|
|
103
99
|
@config = opts
|
|
104
100
|
@archive_path = nil
|
|
105
101
|
@temp_archive_path = nil
|
|
@@ -130,23 +126,23 @@ module Fetchers
|
|
|
130
126
|
|
|
131
127
|
def sha256
|
|
132
128
|
file = @archive_path || temp_archive_path
|
|
133
|
-
OpenSSL::Digest::SHA256.digest(File.read(file)).unpack(
|
|
129
|
+
OpenSSL::Digest::SHA256.digest(File.read(file)).unpack("H*")[0]
|
|
134
130
|
end
|
|
135
131
|
|
|
136
132
|
def file_type_from_remote(remote)
|
|
137
|
-
content_type = remote.meta[
|
|
133
|
+
content_type = remote.meta["content-type"]
|
|
138
134
|
file_type = MIME_TYPES[content_type]
|
|
139
135
|
|
|
140
136
|
if file_type.nil?
|
|
141
137
|
Inspec::Log.warn("Unrecognized content type: #{content_type}. Assuming tar.gz")
|
|
142
|
-
file_type =
|
|
138
|
+
file_type = ".tar.gz"
|
|
143
139
|
end
|
|
144
140
|
|
|
145
141
|
file_type
|
|
146
142
|
end
|
|
147
143
|
|
|
148
144
|
def temp_archive_path
|
|
149
|
-
@temp_archive_path ||= if @config[
|
|
145
|
+
@temp_archive_path ||= if @config["server_type"] == "automate2"
|
|
150
146
|
download_automate2_archive_to_temp
|
|
151
147
|
else
|
|
152
148
|
download_archive_to_temp
|
|
@@ -158,13 +154,13 @@ module Fetchers
|
|
|
158
154
|
|
|
159
155
|
Inspec::Log.debug("Fetching URL: #{@target}")
|
|
160
156
|
json = {
|
|
161
|
-
owner: @config[
|
|
162
|
-
name: @config[
|
|
163
|
-
version: @config[
|
|
157
|
+
owner: @config["profile"][0],
|
|
158
|
+
name: @config["profile"][1],
|
|
159
|
+
version: @config["profile"][2],
|
|
164
160
|
}.to_json
|
|
165
161
|
|
|
166
162
|
opts = http_opts
|
|
167
|
-
opts[:use_ssl] = @target_uri.scheme ==
|
|
163
|
+
opts[:use_ssl] = @target_uri.scheme == "https"
|
|
168
164
|
|
|
169
165
|
if @insecure
|
|
170
166
|
opts[:verify_mode] = OpenSSL::SSL::VERIFY_NONE
|
|
@@ -177,12 +173,12 @@ module Fetchers
|
|
|
177
173
|
req.add_field(key, value)
|
|
178
174
|
end
|
|
179
175
|
req.body = json
|
|
180
|
-
res = Net::HTTP.start(@target_uri.host, @target_uri.port, opts)
|
|
176
|
+
res = Net::HTTP.start(@target_uri.host, @target_uri.port, opts) do |http|
|
|
181
177
|
http.request(req)
|
|
182
|
-
|
|
178
|
+
end
|
|
183
179
|
|
|
184
|
-
@archive_type =
|
|
185
|
-
archive = Tempfile.new([
|
|
180
|
+
@archive_type = ".tar.gz"
|
|
181
|
+
archive = Tempfile.new(["inspec-dl-", @archive_type])
|
|
186
182
|
archive.binmode
|
|
187
183
|
archive.write(res.body)
|
|
188
184
|
archive.rewind
|
|
@@ -197,7 +193,7 @@ module Fetchers
|
|
|
197
193
|
Inspec::Log.debug("Fetching URL: #{@target}")
|
|
198
194
|
remote = open_via_uri(@target)
|
|
199
195
|
@archive_type = file_type_from_remote(remote) # side effect :(
|
|
200
|
-
archive = Tempfile.new([
|
|
196
|
+
archive = Tempfile.new(["inspec-dl-", @archive_type])
|
|
201
197
|
archive.binmode
|
|
202
198
|
archive.write(remote.read)
|
|
203
199
|
archive.rewind
|
|
@@ -211,7 +207,7 @@ module Fetchers
|
|
|
211
207
|
|
|
212
208
|
if opts[:http_basic_authentication]
|
|
213
209
|
# OpenURI does not support userinfo so we need to remove it
|
|
214
|
-
open(target.sub("#{@target_uri.userinfo}@",
|
|
210
|
+
open(target.sub("#{@target_uri.userinfo}@", ""), opts)
|
|
215
211
|
else
|
|
216
212
|
open(target, opts)
|
|
217
213
|
end
|
|
@@ -231,16 +227,16 @@ module Fetchers
|
|
|
231
227
|
opts = {}
|
|
232
228
|
opts[:ssl_verify_mode] = OpenSSL::SSL::VERIFY_NONE if @insecure
|
|
233
229
|
|
|
234
|
-
if @config[
|
|
235
|
-
opts[
|
|
236
|
-
if @config[
|
|
237
|
-
opts[
|
|
230
|
+
if @config["server_type"] =~ /automate/
|
|
231
|
+
opts["chef-delivery-enterprise"] = @config["automate"]["ent"]
|
|
232
|
+
if @config["automate"]["token_type"] == "dctoken"
|
|
233
|
+
opts["x-data-collector-token"] = @config["token"]
|
|
238
234
|
else
|
|
239
|
-
opts[
|
|
240
|
-
opts[
|
|
235
|
+
opts["chef-delivery-user"] = @config["user"]
|
|
236
|
+
opts["chef-delivery-token"] = @config["token"]
|
|
241
237
|
end
|
|
242
238
|
elsif @token
|
|
243
|
-
opts[
|
|
239
|
+
opts["Authorization"] = "Bearer #{@token}"
|
|
244
240
|
end
|
|
245
241
|
|
|
246
242
|
username = @config[:username] || @target_uri.user
|
|
@@ -264,8 +260,10 @@ module Fetchers
|
|
|
264
260
|
true
|
|
265
261
|
end
|
|
266
262
|
end
|
|
267
|
-
|
|
268
|
-
"
|
|
263
|
+
unless keys_missing_values.empty?
|
|
264
|
+
raise "Unable to fetch profile - the following HTTP headers have no value: " \
|
|
265
|
+
"#{keys_missing_values.join(', ')}"
|
|
266
|
+
end
|
|
269
267
|
end
|
|
270
268
|
end
|
|
271
269
|
end
|
data/lib/inspec.rb
CHANGED
|
@@ -1,32 +1,31 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
1
|
# copyright: 2015, Dominik Richter
|
|
3
|
-
# author: Dominik Richter
|
|
4
|
-
# author: Christoph Hartmann
|
|
5
2
|
|
|
6
3
|
libdir = File.dirname(__FILE__)
|
|
7
4
|
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
|
8
5
|
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
13
|
-
require
|
|
14
|
-
require
|
|
15
|
-
require
|
|
16
|
-
require
|
|
17
|
-
require
|
|
18
|
-
require
|
|
19
|
-
require
|
|
20
|
-
require
|
|
21
|
-
require
|
|
22
|
-
require
|
|
23
|
-
require
|
|
6
|
+
require "inspec/version"
|
|
7
|
+
require "inspec/exceptions"
|
|
8
|
+
require "inspec/utils/deprecation"
|
|
9
|
+
require "inspec/profile"
|
|
10
|
+
require "inspec/rule"
|
|
11
|
+
require "matchers/matchers"
|
|
12
|
+
require "inspec/runner"
|
|
13
|
+
require "inspec/shell"
|
|
14
|
+
require "inspec/formatters"
|
|
15
|
+
require "inspec/reporters"
|
|
16
|
+
require "inspec/input_registry"
|
|
17
|
+
require "inspec/rspec_extensions"
|
|
18
|
+
require "inspec/globals"
|
|
19
|
+
require "inspec/impact"
|
|
20
|
+
require "inspec/utils/telemetry"
|
|
21
|
+
require "inspec/utils/telemetry/global_methods"
|
|
24
22
|
|
|
25
|
-
require
|
|
26
|
-
require
|
|
23
|
+
require "inspec/plugin/v2"
|
|
24
|
+
require "inspec/plugin/v1"
|
|
27
25
|
|
|
28
26
|
# all utils that may be required by legacy plugins
|
|
29
|
-
require
|
|
30
|
-
require
|
|
31
|
-
require
|
|
32
|
-
require
|
|
27
|
+
require "inspec/base_cli"
|
|
28
|
+
require "inspec/fetcher"
|
|
29
|
+
require "inspec/source_reader"
|
|
30
|
+
require "inspec/resource"
|
|
31
|
+
require "inspec/resources"
|
data/lib/inspec/archive/tar.rb
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
# author: Christoph Hartmann
|
|
3
|
-
# author: Dominik Richter
|
|
4
|
-
|
|
5
|
-
require 'rubygems/package'
|
|
1
|
+
require "rubygems/package"
|
|
6
2
|
|
|
7
3
|
module Inspec::Archive
|
|
8
4
|
class TarArchiveGenerator
|
|
9
5
|
def archive(base_dir, files, archive)
|
|
10
|
-
File.open(archive,
|
|
6
|
+
File.open(archive, "wb") do |file|
|
|
11
7
|
Zlib::GzipWriter.wrap(file) do |gz|
|
|
12
8
|
Gem::Package::TarWriter.new(gz) do |tar|
|
|
13
9
|
files.each do |input_filename|
|
data/lib/inspec/archive/zip.rb
CHANGED
data/lib/inspec/backend.rb
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
1
|
# copyright: 2015, Dominik Richter
|
|
3
|
-
# author: Dominik Richter
|
|
4
|
-
# author: Christoph Hartmann
|
|
5
2
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require "train"
|
|
4
|
+
require "inspec/config"
|
|
5
|
+
require "inspec/version"
|
|
6
|
+
require "inspec/resource"
|
|
8
7
|
|
|
9
8
|
module Inspec
|
|
10
9
|
module Backend
|
|
@@ -28,7 +27,7 @@ module Inspec
|
|
|
28
27
|
|
|
29
28
|
# Ruby internal for printing a nice name for this class
|
|
30
29
|
def to_s
|
|
31
|
-
|
|
30
|
+
"Inspec::Backend::Class"
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
# Ruby internal for pretty-printing a summary for this class
|
|
@@ -57,15 +56,15 @@ module Inspec
|
|
|
57
56
|
# Set caching settings. We always want to enable caching for
|
|
58
57
|
# the Mock transport for testing.
|
|
59
58
|
if config[:backend_cache] || config[:backend] == :mock
|
|
60
|
-
Inspec::Log.debug
|
|
59
|
+
Inspec::Log.debug "Option backend_cache is enabled"
|
|
61
60
|
connection.enable_cache(:file)
|
|
62
61
|
connection.enable_cache(:command)
|
|
63
62
|
elsif config[:debug_shell]
|
|
64
|
-
Inspec::Log.debug
|
|
63
|
+
Inspec::Log.debug "Option backend_cache is disabled"
|
|
65
64
|
connection.disable_cache(:file)
|
|
66
65
|
connection.disable_cache(:command)
|
|
67
66
|
else
|
|
68
|
-
Inspec::Log.debug
|
|
67
|
+
Inspec::Log.debug "Option backend_cache is disabled"
|
|
69
68
|
connection.disable_cache(:file)
|
|
70
69
|
connection.disable_cache(:command)
|
|
71
70
|
end
|
data/lib/inspec/base_cli.rb
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require
|
|
6
|
-
require 'inspec/log'
|
|
7
|
-
require 'inspec/profile_vendor'
|
|
8
|
-
require 'inspec/ui'
|
|
1
|
+
require "thor"
|
|
2
|
+
require "inspec/log"
|
|
3
|
+
require "inspec/ui"
|
|
4
|
+
require "inspec/config"
|
|
5
|
+
require "inspec/utils/deprecation/global_method"
|
|
9
6
|
|
|
10
7
|
# Allow end of options during array type parsing
|
|
11
8
|
# https://github.com/erikhuda/thor/issues/631
|
|
@@ -34,107 +31,107 @@ module Inspec
|
|
|
34
31
|
|
|
35
32
|
def self.target_options # rubocop:disable MethodLength
|
|
36
33
|
option :target, aliases: :t, type: :string,
|
|
37
|
-
desc:
|
|
34
|
+
desc: "Simple targeting option using URIs, e.g. ssh://user:pass@host:port"
|
|
38
35
|
option :backend, aliases: :b, type: :string,
|
|
39
|
-
desc:
|
|
36
|
+
desc: "Choose a backend: local, ssh, winrm, docker."
|
|
40
37
|
option :host, type: :string,
|
|
41
|
-
desc:
|
|
38
|
+
desc: "Specify a remote host which is tested."
|
|
42
39
|
option :port, aliases: :p, type: :numeric,
|
|
43
|
-
desc:
|
|
40
|
+
desc: "Specify the login port for a remote scan."
|
|
44
41
|
option :user, type: :string,
|
|
45
|
-
desc:
|
|
42
|
+
desc: "The login user for a remote scan."
|
|
46
43
|
option :password, type: :string, lazy_default: -1,
|
|
47
|
-
desc:
|
|
44
|
+
desc: "Login password for a remote scan, if required."
|
|
48
45
|
option :enable_password, type: :string, lazy_default: -1,
|
|
49
|
-
desc:
|
|
46
|
+
desc: "Password for enable mode on Cisco IOS devices."
|
|
50
47
|
option :key_files, aliases: :i, type: :array,
|
|
51
|
-
desc:
|
|
48
|
+
desc: "Login key or certificate file for a remote scan."
|
|
52
49
|
option :path, type: :string,
|
|
53
|
-
desc:
|
|
50
|
+
desc: "Login path to use when connecting to the target (WinRM)."
|
|
54
51
|
option :sudo, type: :boolean,
|
|
55
|
-
desc:
|
|
52
|
+
desc: "Run scans with sudo. Only activates on Unix and non-root user."
|
|
56
53
|
option :sudo_password, type: :string, lazy_default: -1,
|
|
57
|
-
desc:
|
|
54
|
+
desc: "Specify a sudo password, if it is required."
|
|
58
55
|
option :sudo_options, type: :string,
|
|
59
|
-
desc:
|
|
56
|
+
desc: "Additional sudo options for a remote scan."
|
|
60
57
|
option :sudo_command, type: :string,
|
|
61
|
-
desc:
|
|
58
|
+
desc: "Alternate command for sudo."
|
|
62
59
|
option :shell, type: :boolean,
|
|
63
|
-
desc:
|
|
60
|
+
desc: "Run scans in a subshell. Only activates on Unix."
|
|
64
61
|
option :shell_options, type: :string,
|
|
65
|
-
desc:
|
|
62
|
+
desc: "Additional shell options."
|
|
66
63
|
option :shell_command, type: :string,
|
|
67
|
-
desc:
|
|
64
|
+
desc: "Specify a particular shell to use."
|
|
68
65
|
option :ssl, type: :boolean,
|
|
69
|
-
desc:
|
|
66
|
+
desc: "Use SSL for transport layer encryption (WinRM)."
|
|
70
67
|
option :self_signed, type: :boolean,
|
|
71
|
-
desc:
|
|
72
|
-
option :winrm_transport, type: :string, default:
|
|
73
|
-
desc:
|
|
68
|
+
desc: "Allow remote scans with self-signed certificates (WinRM)."
|
|
69
|
+
option :winrm_transport, type: :string, default: "negotiate",
|
|
70
|
+
desc: "Specify which transport to use, defaults to negotiate (WinRM)."
|
|
74
71
|
option :winrm_disable_sspi, type: :boolean,
|
|
75
|
-
desc:
|
|
72
|
+
desc: "Whether to use disable sspi authentication, defaults to false (WinRM)."
|
|
76
73
|
option :winrm_basic_auth, type: :boolean,
|
|
77
|
-
desc:
|
|
74
|
+
desc: "Whether to use basic authentication, defaults to false (WinRM)."
|
|
78
75
|
option :config, type: :string,
|
|
79
|
-
desc:
|
|
76
|
+
desc: "Read configuration from JSON file (`-` reads from stdin)."
|
|
80
77
|
option :json_config, type: :string, hide: true
|
|
81
78
|
option :proxy_command, type: :string,
|
|
82
|
-
desc:
|
|
79
|
+
desc: "Specifies the command to use to connect to the server"
|
|
83
80
|
option :bastion_host, type: :string,
|
|
84
|
-
desc:
|
|
81
|
+
desc: "Specifies the bastion host if applicable"
|
|
85
82
|
option :bastion_user, type: :string,
|
|
86
|
-
desc:
|
|
83
|
+
desc: "Specifies the bastion user if applicable"
|
|
87
84
|
option :bastion_port, type: :string,
|
|
88
|
-
desc:
|
|
85
|
+
desc: "Specifies the bastion port if applicable"
|
|
89
86
|
option :insecure, type: :boolean, default: false,
|
|
90
|
-
desc:
|
|
87
|
+
desc: "Disable SSL verification on select targets"
|
|
91
88
|
option :target_id, type: :string,
|
|
92
|
-
desc:
|
|
89
|
+
desc: "Provide a ID which will be included on reports"
|
|
93
90
|
end
|
|
94
91
|
|
|
95
92
|
def self.profile_options
|
|
96
93
|
option :profiles_path, type: :string,
|
|
97
|
-
desc:
|
|
94
|
+
desc: "Folder which contains referenced profiles."
|
|
98
95
|
option :vendor_cache, type: :string,
|
|
99
|
-
desc:
|
|
96
|
+
desc: "Use the given path for caching dependencies. (default: ~/.inspec/cache)"
|
|
100
97
|
end
|
|
101
98
|
|
|
102
99
|
def self.exec_options
|
|
103
100
|
target_options
|
|
104
101
|
profile_options
|
|
105
102
|
option :controls, type: :array,
|
|
106
|
-
desc:
|
|
103
|
+
desc: "A list of control names to run, or a list of /regexes/ to match against control names. Ignore all other tests."
|
|
107
104
|
option :reporter, type: :array,
|
|
108
|
-
banner:
|
|
109
|
-
desc:
|
|
105
|
+
banner: "one two:/output/file/path",
|
|
106
|
+
desc: "Enable one or more output reporters: cli, documentation, html, progress, json, json-min, json-rspec, junit, yaml"
|
|
110
107
|
option :input_file, type: :array,
|
|
111
|
-
desc:
|
|
108
|
+
desc: "Load one or more input files, a YAML file with values for the profile to use"
|
|
112
109
|
option :attrs, type: :array,
|
|
113
|
-
desc:
|
|
110
|
+
desc: "Legacy name for --input-file - deprecated."
|
|
114
111
|
option :create_lockfile, type: :boolean,
|
|
115
|
-
desc:
|
|
112
|
+
desc: "Write out a lockfile based on this execution (unless one already exists)"
|
|
116
113
|
option :backend_cache, type: :boolean,
|
|
117
|
-
desc:
|
|
114
|
+
desc: "Allow caching for backend command output. (default: true)"
|
|
118
115
|
option :show_progress, type: :boolean,
|
|
119
|
-
desc:
|
|
116
|
+
desc: "Show progress while executing tests."
|
|
120
117
|
option :distinct_exit, type: :boolean, default: true,
|
|
121
|
-
desc:
|
|
118
|
+
desc: "Exit with code 101 if any tests fail, and 100 if any are skipped (default). If disabled, exit 0 on skips and 1 for failures."
|
|
122
119
|
end
|
|
123
120
|
|
|
124
121
|
def self.format_platform_info(params: {}, indent: 0, color: 39)
|
|
125
|
-
str =
|
|
126
|
-
params.each
|
|
122
|
+
str = ""
|
|
123
|
+
params.each do |item, info|
|
|
127
124
|
data = info
|
|
128
125
|
|
|
129
126
|
# Format Array for better output if applicable
|
|
130
|
-
data = data.join(
|
|
127
|
+
data = data.join(", ") if data.is_a?(Array)
|
|
131
128
|
|
|
132
129
|
# Do not output fields of data is missing ('unknown' is fine)
|
|
133
130
|
next if data.nil?
|
|
134
131
|
|
|
135
132
|
data = "\e[1m\e[#{color}m#{data}\e[0m"
|
|
136
|
-
str << format("#{' ' * indent}%-10s %s\n", item.to_s.capitalize +
|
|
137
|
-
|
|
133
|
+
str << format("#{' ' * indent}%-10s %s\n", item.to_s.capitalize + ":", data)
|
|
134
|
+
end
|
|
138
135
|
str
|
|
139
136
|
end
|
|
140
137
|
|
|
@@ -193,12 +190,12 @@ module Inspec
|
|
|
193
190
|
private
|
|
194
191
|
|
|
195
192
|
def suppress_log_output?(opts)
|
|
196
|
-
return false if opts[
|
|
197
|
-
match = %w{json json-min json-rspec json-automate junit html yaml documentation progress} & opts[
|
|
193
|
+
return false if opts["reporter"].nil?
|
|
194
|
+
match = %w{json json-min json-rspec json-automate junit html yaml documentation progress} & opts["reporter"].keys
|
|
198
195
|
unless match.empty?
|
|
199
196
|
match.each do |m|
|
|
200
197
|
# check to see if we are outputting to stdout
|
|
201
|
-
return true if opts[
|
|
198
|
+
return true if opts["reporter"][m]["stdout"] == true
|
|
202
199
|
end
|
|
203
200
|
end
|
|
204
201
|
false
|
|
@@ -220,7 +217,7 @@ module Inspec
|
|
|
220
217
|
if valid.include?(level)
|
|
221
218
|
l = level
|
|
222
219
|
else
|
|
223
|
-
l =
|
|
220
|
+
l = "info"
|
|
224
221
|
end
|
|
225
222
|
|
|
226
223
|
Logger.const_get(l.upcase)
|
|
@@ -237,11 +234,13 @@ module Inspec
|
|
|
237
234
|
end
|
|
238
235
|
|
|
239
236
|
def vendor_deps(path, opts)
|
|
237
|
+
require "inspec/profile_vendor"
|
|
238
|
+
|
|
240
239
|
profile_path = path || Dir.pwd
|
|
241
240
|
profile_vendor = Inspec::ProfileVendor.new(profile_path)
|
|
242
241
|
|
|
243
242
|
if (profile_vendor.cache_path.exist? || profile_vendor.lockfile.exist?) && !opts[:overwrite]
|
|
244
|
-
puts
|
|
243
|
+
puts "Profile is already vendored. Use --overwrite."
|
|
245
244
|
return false
|
|
246
245
|
end
|
|
247
246
|
|
|
@@ -257,23 +256,23 @@ module Inspec
|
|
|
257
256
|
# logging singleton Inspec::Log. Eventually it would be nice to
|
|
258
257
|
# move internal debug logging to use this logging singleton.
|
|
259
258
|
#
|
|
260
|
-
loc = if o[
|
|
261
|
-
o[
|
|
259
|
+
loc = if o["log_location"]
|
|
260
|
+
o["log_location"]
|
|
262
261
|
elsif suppress_log_output?(o)
|
|
263
|
-
|
|
262
|
+
$stderr
|
|
264
263
|
else
|
|
265
|
-
|
|
264
|
+
$stdout
|
|
266
265
|
end
|
|
267
266
|
|
|
268
267
|
Inspec::Log.init(loc)
|
|
269
|
-
Inspec::Log.level = get_log_level(o[
|
|
268
|
+
Inspec::Log.level = get_log_level(o["log_level"])
|
|
270
269
|
|
|
271
270
|
o[:logger] = Logger.new(loc)
|
|
272
271
|
# output json if we have activated the json formatter
|
|
273
|
-
if o[
|
|
272
|
+
if o["log-format"] == "json"
|
|
274
273
|
o[:logger].formatter = Logger::JSONFormatter.new
|
|
275
274
|
end
|
|
276
|
-
o[:logger].level = get_log_level(o[
|
|
275
|
+
o[:logger].level = get_log_level(o["log_level"])
|
|
277
276
|
end
|
|
278
277
|
end
|
|
279
278
|
end
|