inspec 2.0.32 → 2.0.45
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/.rubocop.yml +101 -101
- data/CHANGELOG.md +2991 -2970
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +446 -437
- data/Rakefile +322 -322
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +40 -40
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +93 -93
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +107 -107
- data/docs/matchers.md +169 -168
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +49 -49
- data/docs/profiles.md +370 -370
- data/docs/reporters.md +105 -105
- data/docs/resources/aide_conf.md.erb +75 -75
- data/docs/resources/apache.md.erb +67 -67
- data/docs/resources/apache_conf.md.erb +68 -68
- data/docs/resources/apt.md.erb +71 -71
- data/docs/resources/audit_policy.md.erb +47 -47
- data/docs/resources/auditd.md.erb +79 -79
- data/docs/resources/auditd_conf.md.erb +68 -68
- data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
- data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
- data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
- data/docs/resources/aws_config_recorder.md.erb +71 -71
- data/docs/resources/aws_ec2_instance.md.erb +106 -106
- data/docs/resources/aws_iam_access_key.md.erb +123 -123
- data/docs/resources/aws_iam_access_keys.md.erb +198 -198
- data/docs/resources/aws_iam_group.md.erb +46 -46
- data/docs/resources/aws_iam_groups.md.erb +43 -43
- data/docs/resources/aws_iam_password_policy.md.erb +76 -76
- data/docs/resources/aws_iam_policies.md.erb +82 -82
- data/docs/resources/aws_iam_policy.md.erb +144 -144
- data/docs/resources/aws_iam_role.md.erb +63 -63
- data/docs/resources/aws_iam_root_user.md.erb +58 -58
- data/docs/resources/aws_iam_user.md.erb +64 -64
- data/docs/resources/aws_iam_users.md.erb +89 -89
- data/docs/resources/aws_kms_keys.md.erb +84 -84
- data/docs/resources/aws_route_table.md.erb +47 -47
- data/docs/resources/aws_s3_bucket.md.erb +134 -134
- data/docs/resources/aws_security_group.md.erb +151 -151
- data/docs/resources/aws_security_groups.md.erb +91 -91
- data/docs/resources/aws_sns_topic.md.erb +63 -63
- data/docs/resources/aws_subnet.md.erb +133 -133
- data/docs/resources/aws_subnets.md.erb +126 -126
- data/docs/resources/aws_vpc.md.erb +120 -120
- data/docs/resources/aws_vpcs.md.erb +48 -48
- data/docs/resources/azure_generic_resource.md.erb +170 -170
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -347
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
- data/docs/resources/bash.md.erb +75 -75
- data/docs/resources/bond.md.erb +90 -90
- data/docs/resources/bridge.md.erb +57 -57
- data/docs/resources/bsd_service.md.erb +67 -67
- data/docs/resources/command.md.erb +138 -138
- data/docs/resources/cpan.md.erb +79 -79
- data/docs/resources/cran.md.erb +64 -64
- data/docs/resources/crontab.md.erb +89 -89
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +205 -205
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +219 -219
- data/docs/resources/docker_container.md.erb +104 -104
- data/docs/resources/docker_image.md.erb +94 -94
- data/docs/resources/docker_service.md.erb +114 -114
- data/docs/resources/elasticsearch.md.erb +242 -242
- data/docs/resources/etc_fstab.md.erb +125 -125
- data/docs/resources/etc_group.md.erb +75 -75
- data/docs/resources/etc_hosts.md.erb +78 -78
- data/docs/resources/etc_hosts_allow.md.erb +74 -74
- data/docs/resources/etc_hosts_deny.md.erb +74 -74
- data/docs/resources/file.md.erb +526 -515
- data/docs/resources/filesystem.md.erb +41 -41
- data/docs/resources/firewalld.md.erb +107 -107
- data/docs/resources/gem.md.erb +79 -79
- data/docs/resources/group.md.erb +61 -61
- data/docs/resources/grub_conf.md.erb +101 -101
- data/docs/resources/host.md.erb +86 -86
- data/docs/resources/http.md.erb +196 -196
- data/docs/resources/iis_app.md.erb +122 -122
- data/docs/resources/iis_site.md.erb +135 -135
- data/docs/resources/inetd_conf.md.erb +94 -94
- data/docs/resources/ini.md.erb +76 -76
- data/docs/resources/interface.md.erb +58 -58
- data/docs/resources/iptables.md.erb +64 -64
- data/docs/resources/json.md.erb +63 -63
- data/docs/resources/kernel_module.md.erb +120 -120
- data/docs/resources/kernel_parameter.md.erb +53 -53
- data/docs/resources/key_rsa.md.erb +85 -85
- data/docs/resources/launchd_service.md.erb +57 -57
- data/docs/resources/limits_conf.md.erb +75 -75
- data/docs/resources/login_def.md.erb +71 -71
- data/docs/resources/mount.md.erb +69 -69
- data/docs/resources/mssql_session.md.erb +60 -60
- data/docs/resources/mysql_conf.md.erb +99 -99
- data/docs/resources/mysql_session.md.erb +74 -74
- data/docs/resources/nginx.md.erb +79 -79
- data/docs/resources/nginx_conf.md.erb +128 -128
- data/docs/resources/npm.md.erb +60 -60
- data/docs/resources/ntp_conf.md.erb +60 -60
- data/docs/resources/oneget.md.erb +53 -53
- data/docs/resources/oracledb_session.md.erb +52 -52
- data/docs/resources/os.md.erb +141 -141
- data/docs/resources/os_env.md.erb +78 -78
- data/docs/resources/package.md.erb +120 -120
- data/docs/resources/packages.md.erb +67 -67
- data/docs/resources/parse_config.md.erb +103 -103
- data/docs/resources/parse_config_file.md.erb +138 -138
- data/docs/resources/passwd.md.erb +141 -141
- data/docs/resources/pip.md.erb +67 -67
- data/docs/resources/port.md.erb +137 -137
- data/docs/resources/postgres_conf.md.erb +79 -79
- data/docs/resources/postgres_hba_conf.md.erb +93 -93
- data/docs/resources/postgres_ident_conf.md.erb +76 -76
- data/docs/resources/postgres_session.md.erb +69 -69
- data/docs/resources/powershell.md.erb +102 -102
- data/docs/resources/processes.md.erb +109 -109
- data/docs/resources/rabbitmq_config.md.erb +41 -41
- data/docs/resources/registry_key.md.erb +158 -158
- data/docs/resources/runit_service.md.erb +57 -57
- data/docs/resources/security_policy.md.erb +47 -47
- data/docs/resources/service.md.erb +121 -121
- data/docs/resources/shadow.md.erb +146 -144
- data/docs/resources/ssh_config.md.erb +80 -80
- data/docs/resources/sshd_config.md.erb +83 -83
- data/docs/resources/ssl.md.erb +119 -119
- data/docs/resources/sys_info.md.erb +42 -42
- data/docs/resources/systemd_service.md.erb +57 -57
- data/docs/resources/sysv_service.md.erb +57 -57
- data/docs/resources/upstart_service.md.erb +57 -57
- data/docs/resources/user.md.erb +140 -140
- data/docs/resources/users.md.erb +127 -127
- data/docs/resources/vbscript.md.erb +55 -55
- data/docs/resources/virtualization.md.erb +57 -57
- data/docs/resources/windows_feature.md.erb +47 -47
- data/docs/resources/windows_hotfix.md.erb +53 -53
- data/docs/resources/windows_task.md.erb +95 -95
- data/docs/resources/wmi.md.erb +81 -81
- data/docs/resources/x509_certificate.md.erb +151 -151
- data/docs/resources/xinetd_conf.md.erb +156 -156
- data/docs/resources/xml.md.erb +85 -85
- data/docs/resources/yaml.md.erb +69 -69
- data/docs/resources/yum.md.erb +98 -98
- data/docs/resources/zfs_dataset.md.erb +53 -53
- data/docs/resources/zfs_pool.md.erb +47 -47
- data/docs/ruby_usage.md +203 -203
- data/docs/shared/matcher_be.md.erb +1 -1
- data/docs/shared/matcher_cmp.md.erb +43 -43
- data/docs/shared/matcher_eq.md.erb +3 -3
- data/docs/shared/matcher_include.md.erb +1 -1
- data/docs/shared/matcher_match.md.erb +1 -1
- data/docs/shell.md +215 -215
- data/examples/README.md +8 -8
- data/examples/inheritance/README.md +65 -65
- data/examples/inheritance/controls/example.rb +14 -14
- data/examples/inheritance/inspec.yml +15 -15
- data/examples/kitchen-ansible/.kitchen.yml +25 -25
- data/examples/kitchen-ansible/Gemfile +19 -19
- data/examples/kitchen-ansible/README.md +53 -53
- data/examples/kitchen-ansible/files/nginx.repo +6 -6
- data/examples/kitchen-ansible/tasks/main.yml +16 -16
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-chef/.kitchen.yml +20 -20
- data/examples/kitchen-chef/Berksfile +3 -3
- data/examples/kitchen-chef/Gemfile +19 -19
- data/examples/kitchen-chef/README.md +27 -27
- data/examples/kitchen-chef/metadata.rb +7 -7
- data/examples/kitchen-chef/recipes/default.rb +6 -6
- data/examples/kitchen-chef/recipes/nginx.rb +30 -30
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-puppet/.kitchen.yml +22 -22
- data/examples/kitchen-puppet/Gemfile +20 -20
- data/examples/kitchen-puppet/Puppetfile +25 -25
- data/examples/kitchen-puppet/README.md +53 -53
- data/examples/kitchen-puppet/manifests/site.pp +33 -33
- data/examples/kitchen-puppet/metadata.json +11 -11
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
- data/examples/meta-profile/README.md +37 -37
- data/examples/meta-profile/controls/example.rb +13 -13
- data/examples/meta-profile/inspec.yml +13 -13
- data/examples/profile-attribute.yml +2 -2
- data/examples/profile-attribute/README.md +14 -14
- data/examples/profile-attribute/controls/example.rb +11 -11
- data/examples/profile-attribute/inspec.yml +8 -8
- data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
- data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
- data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
- data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
- data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
- data/examples/profile-aws/inspec.yml +11 -11
- data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
- data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
- data/examples/profile-azure/inspec.yml +11 -11
- data/examples/profile-sensitive/README.md +29 -29
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
- data/examples/profile-sensitive/controls/sensitive.rb +9 -9
- data/examples/profile-sensitive/inspec.yml +8 -8
- data/examples/profile/README.md +48 -48
- data/examples/profile/controls/example.rb +23 -23
- data/examples/profile/controls/gordon.rb +36 -36
- data/examples/profile/controls/meta.rb +34 -34
- data/examples/profile/inspec.yml +10 -10
- data/examples/profile/libraries/gordon_config.rb +53 -53
- data/inspec.gemspec +47 -47
- data/lib/bundles/README.md +3 -3
- data/lib/bundles/inspec-artifact.rb +7 -7
- data/lib/bundles/inspec-artifact/README.md +1 -1
- data/lib/bundles/inspec-artifact/cli.rb +277 -277
- data/lib/bundles/inspec-compliance.rb +16 -16
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
- data/lib/bundles/inspec-compliance/README.md +185 -185
- data/lib/bundles/inspec-compliance/api.rb +316 -316
- data/lib/bundles/inspec-compliance/api/login.rb +152 -152
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +254 -254
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +86 -86
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +98 -98
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
- data/lib/bundles/inspec-habitat.rb +12 -12
- data/lib/bundles/inspec-habitat/cli.rb +36 -36
- data/lib/bundles/inspec-habitat/log.rb +10 -10
- data/lib/bundles/inspec-habitat/profile.rb +390 -390
- data/lib/bundles/inspec-init.rb +8 -8
- data/lib/bundles/inspec-init/README.md +31 -31
- data/lib/bundles/inspec-init/cli.rb +97 -97
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
- data/lib/bundles/inspec-supermarket.rb +13 -13
- data/lib/bundles/inspec-supermarket/README.md +45 -45
- data/lib/bundles/inspec-supermarket/api.rb +84 -84
- data/lib/bundles/inspec-supermarket/cli.rb +73 -73
- data/lib/bundles/inspec-supermarket/target.rb +34 -34
- data/lib/fetchers/git.rb +163 -163
- data/lib/fetchers/local.rb +74 -74
- data/lib/fetchers/mock.rb +35 -35
- data/lib/fetchers/url.rb +204 -204
- data/lib/inspec.rb +24 -24
- data/lib/inspec/archive/tar.rb +29 -29
- data/lib/inspec/archive/zip.rb +19 -19
- data/lib/inspec/backend.rb +92 -92
- data/lib/inspec/base_cli.rb +355 -350
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -292
- data/lib/inspec/completions/bash.sh.erb +45 -45
- data/lib/inspec/completions/fish.sh.erb +34 -34
- data/lib/inspec/completions/zsh.sh.erb +61 -61
- data/lib/inspec/control_eval_context.rb +179 -179
- data/lib/inspec/dependencies/cache.rb +72 -72
- data/lib/inspec/dependencies/dependency_set.rb +92 -92
- data/lib/inspec/dependencies/lockfile.rb +115 -115
- data/lib/inspec/dependencies/requirement.rb +123 -123
- data/lib/inspec/dependencies/resolver.rb +86 -86
- data/lib/inspec/describe.rb +27 -27
- data/lib/inspec/dsl.rb +66 -66
- data/lib/inspec/dsl_shared.rb +33 -33
- data/lib/inspec/env_printer.rb +157 -157
- data/lib/inspec/errors.rb +13 -13
- data/lib/inspec/exceptions.rb +12 -12
- data/lib/inspec/expect.rb +45 -45
- data/lib/inspec/fetcher.rb +45 -45
- data/lib/inspec/file_provider.rb +275 -275
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +250 -250
- data/lib/inspec/formatters/json_rspec.rb +20 -20
- data/lib/inspec/formatters/show_progress.rb +12 -12
- data/lib/inspec/library_eval_context.rb +58 -58
- data/lib/inspec/log.rb +11 -11
- data/lib/inspec/metadata.rb +247 -247
- data/lib/inspec/method_source.rb +24 -24
- data/lib/inspec/objects.rb +14 -14
- data/lib/inspec/objects/attribute.rb +65 -65
- data/lib/inspec/objects/control.rb +61 -61
- data/lib/inspec/objects/describe.rb +92 -92
- data/lib/inspec/objects/each_loop.rb +36 -36
- data/lib/inspec/objects/list.rb +15 -15
- data/lib/inspec/objects/or_test.rb +40 -40
- data/lib/inspec/objects/ruby_helper.rb +15 -15
- data/lib/inspec/objects/tag.rb +27 -27
- data/lib/inspec/objects/test.rb +87 -87
- data/lib/inspec/objects/value.rb +27 -27
- data/lib/inspec/plugins.rb +60 -60
- data/lib/inspec/plugins/cli.rb +24 -24
- data/lib/inspec/plugins/fetcher.rb +86 -86
- data/lib/inspec/plugins/resource.rb +135 -135
- data/lib/inspec/plugins/secret.rb +15 -15
- data/lib/inspec/plugins/source_reader.rb +40 -40
- data/lib/inspec/polyfill.rb +12 -12
- data/lib/inspec/profile.rb +510 -510
- data/lib/inspec/profile_context.rb +207 -207
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +54 -50
- data/lib/inspec/reporters/base.rb +24 -24
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +116 -116
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +77 -77
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +186 -186
- data/lib/inspec/rule.rb +266 -266
- data/lib/inspec/runner.rb +345 -345
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +175 -175
- data/lib/inspec/runtime_profile.rb +26 -26
- data/lib/inspec/schema.rb +213 -213
- data/lib/inspec/secrets.rb +19 -19
- data/lib/inspec/secrets/yaml.rb +30 -30
- data/lib/inspec/shell.rb +220 -220
- data/lib/inspec/shell_detector.rb +90 -90
- data/lib/inspec/source_reader.rb +29 -29
- data/lib/inspec/version.rb +8 -8
- data/lib/matchers/matchers.rb +339 -339
- data/lib/resource_support/aws.rb +41 -41
- data/lib/resource_support/aws/aws_backend_base.rb +12 -12
- data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
- data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
- data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
- data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
- data/lib/resources/aide_conf.rb +159 -160
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +156 -156
- data/lib/resources/apt.rb +149 -149
- data/lib/resources/audit_policy.rb +63 -63
- data/lib/resources/auditd.rb +231 -231
- data/lib/resources/auditd_conf.rb +55 -55
- data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
- data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
- data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
- data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
- data/lib/resources/aws/aws_config_recorder.rb +98 -98
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -144
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +52 -45
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -46
- data/lib/resources/aws/aws_iam_policy.rb +125 -119
- data/lib/resources/aws/aws_iam_role.rb +51 -51
- data/lib/resources/aws/aws_iam_root_user.rb +60 -60
- data/lib/resources/aws/aws_iam_user.rb +111 -111
- data/lib/resources/aws/aws_iam_users.rb +108 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -46
- data/lib/resources/aws/aws_route_table.rb +61 -61
- data/lib/resources/aws/aws_s3_bucket.rb +115 -115
- data/lib/resources/aws/aws_security_group.rb +93 -93
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_subnet.rb +88 -88
- data/lib/resources/aws/aws_subnets.rb +53 -53
- data/lib/resources/aws/aws_vpc.rb +69 -69
- data/lib/resources/aws/aws_vpcs.rb +45 -45
- data/lib/resources/azure/azure_backend.rb +377 -377
- data/lib/resources/azure/azure_generic_resource.rb +59 -59
- data/lib/resources/azure/azure_resource_group.rb +152 -152
- data/lib/resources/azure/azure_virtual_machine.rb +264 -264
- data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +68 -68
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/command.rb +73 -69
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -170
- data/lib/resources/csv.rb +60 -60
- data/lib/resources/dh_params.rb +82 -82
- data/lib/resources/directory.rb +25 -25
- data/lib/resources/docker.rb +236 -236
- data/lib/resources/docker_container.rb +89 -89
- data/lib/resources/docker_image.rb +83 -83
- data/lib/resources/docker_object.rb +57 -57
- data/lib/resources/docker_service.rb +90 -90
- data/lib/resources/elasticsearch.rb +169 -169
- data/lib/resources/etc_fstab.rb +101 -102
- data/lib/resources/etc_group.rb +152 -156
- data/lib/resources/etc_hosts.rb +82 -81
- data/lib/resources/etc_hosts_allow_deny.rb +122 -123
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -144
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +237 -237
- data/lib/resources/host.rb +306 -300
- data/lib/resources/http.rb +251 -250
- data/lib/resources/iis_app.rb +101 -104
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +62 -62
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -69
- data/lib/resources/json.rb +117 -117
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +67 -67
- data/lib/resources/limits_conf.rb +55 -55
- data/lib/resources/login_def.rb +66 -66
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +81 -81
- data/lib/resources/mysql_conf.rb +134 -134
- data/lib/resources/mysql_session.rb +71 -71
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +227 -227
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +58 -58
- data/lib/resources/oneget.rb +71 -71
- data/lib/resources/oracledb_session.rb +139 -139
- data/lib/resources/os.rb +36 -36
- data/lib/resources/os_env.rb +76 -76
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +116 -116
- data/lib/resources/passwd.rb +74 -74
- data/lib/resources/pip.rb +89 -89
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +130 -130
- data/lib/resources/postgres_conf.rb +121 -121
- data/lib/resources/postgres_hba_conf.rb +99 -100
- data/lib/resources/postgres_ident_conf.rb +76 -78
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +53 -57
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +52 -52
- data/lib/resources/registry_key.rb +296 -296
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +789 -789
- data/lib/resources/shadow.rb +146 -140
- data/lib/resources/ssh_conf.rb +102 -102
- data/lib/resources/ssl.rb +99 -99
- data/lib/resources/sys_info.rb +28 -28
- data/lib/resources/toml.rb +32 -32
- data/lib/resources/users.rb +654 -654
- data/lib/resources/vbscript.rb +68 -69
- data/lib/resources/virtualization.rb +247 -247
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +102 -105
- data/lib/resources/wmi.rb +110 -113
- data/lib/resources/x509_certificate.rb +143 -143
- data/lib/resources/xinetd.rb +111 -111
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +47 -47
- data/lib/resources/yum.rb +180 -180
- data/lib/resources/zfs_dataset.rb +60 -60
- data/lib/resources/zfs_pool.rb +49 -49
- data/lib/source_readers/flat.rb +39 -39
- data/lib/source_readers/inspec.rb +75 -75
- data/lib/utils/command_wrapper.rb +27 -27
- data/lib/utils/convert.rb +12 -12
- data/lib/utils/database_helpers.rb +77 -77
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/filter.rb +272 -272
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +44 -44
- data/lib/utils/hash.rb +41 -41
- data/lib/utils/json_log.rb +18 -18
- data/lib/utils/latest_version.rb +22 -22
- data/lib/utils/modulator.rb +12 -12
- data/lib/utils/nginx_parser.rb +85 -85
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/plugin_registry.rb +93 -93
- data/lib/utils/simpleconfig.rb +120 -120
- data/lib/utils/spdx.rb +13 -13
- data/lib/utils/spdx.txt +343 -343
- metadata +2 -2
data/lib/inspec/secrets/yaml.rb
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
require 'yaml'
|
|
4
|
-
|
|
5
|
-
module Secrets
|
|
6
|
-
class YAML < Inspec.secrets(1)
|
|
7
|
-
name 'yaml'
|
|
8
|
-
|
|
9
|
-
attr_reader :attributes
|
|
10
|
-
|
|
11
|
-
def self.resolve(target)
|
|
12
|
-
unless target.is_a?(String) && File.file?(target) && ['.yml', '.yaml'].include?(File.extname(target).downcase)
|
|
13
|
-
return nil
|
|
14
|
-
end
|
|
15
|
-
new(target)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# array of yaml file paths
|
|
19
|
-
def initialize(target)
|
|
20
|
-
@attributes = ::YAML.load_file(target)
|
|
21
|
-
|
|
22
|
-
if @attributes == false || !@attributes.is_a?(Hash)
|
|
23
|
-
Inspec::Log.warn("#{self.class} unable to parse #{target}: invalid YAML or contents is not a Hash")
|
|
24
|
-
@attributes = nil
|
|
25
|
-
end
|
|
26
|
-
rescue => e
|
|
27
|
-
raise "Error reading Inspec attributes: #{e}"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'yaml'
|
|
4
|
+
|
|
5
|
+
module Secrets
|
|
6
|
+
class YAML < Inspec.secrets(1)
|
|
7
|
+
name 'yaml'
|
|
8
|
+
|
|
9
|
+
attr_reader :attributes
|
|
10
|
+
|
|
11
|
+
def self.resolve(target)
|
|
12
|
+
unless target.is_a?(String) && File.file?(target) && ['.yml', '.yaml'].include?(File.extname(target).downcase)
|
|
13
|
+
return nil
|
|
14
|
+
end
|
|
15
|
+
new(target)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# array of yaml file paths
|
|
19
|
+
def initialize(target)
|
|
20
|
+
@attributes = ::YAML.load_file(target)
|
|
21
|
+
|
|
22
|
+
if @attributes == false || !@attributes.is_a?(Hash)
|
|
23
|
+
Inspec::Log.warn("#{self.class} unable to parse #{target}: invalid YAML or contents is not a Hash")
|
|
24
|
+
@attributes = nil
|
|
25
|
+
end
|
|
26
|
+
rescue => e
|
|
27
|
+
raise "Error reading Inspec attributes: #{e}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/inspec/shell.rb
CHANGED
|
@@ -1,220 +1,220 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# author: Dominik Richter
|
|
3
|
-
# author: Christoph Hartmann
|
|
4
|
-
|
|
5
|
-
require 'pry'
|
|
6
|
-
|
|
7
|
-
module Inspec
|
|
8
|
-
# A pry based shell for inspec. Given a runner (with a configured backend and
|
|
9
|
-
# all that jazz), this shell will produce a pry shell from which you can run
|
|
10
|
-
# inspec/ruby commands that will be run within the context of the runner.
|
|
11
|
-
class Shell
|
|
12
|
-
def initialize(runner)
|
|
13
|
-
@runner = runner
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def start
|
|
17
|
-
# This will hold a single evaluation binding context as opened within
|
|
18
|
-
# the instance_eval context of the anonymous class that the profile
|
|
19
|
-
# context creates to evaluate each individual test file. We want to
|
|
20
|
-
# pretend like we are constantly appending to the same file and want
|
|
21
|
-
# to capture the local variable context from inside said class.
|
|
22
|
-
@ctx_binding = @runner.eval_with_virtual_profile('binding')
|
|
23
|
-
configure_pry
|
|
24
|
-
@ctx_binding.pry
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def configure_pry # rubocop:disable Metrics/AbcSize
|
|
28
|
-
# Delete any before_session, before_eval, and after_eval hooks so we can
|
|
29
|
-
# replace them with our own. Pry 0.10 used to have a single method to clear
|
|
30
|
-
# all hooks, but this was removed in Pry 0.11.
|
|
31
|
-
[:before_session, :before_eval, :after_eval].each do |event|
|
|
32
|
-
Pry.hooks.get_hooks(event).keys.map { |hook| Pry.hooks.delete_hook(event, hook) }
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
that = self
|
|
36
|
-
|
|
37
|
-
# Add the help command
|
|
38
|
-
Pry::Commands.block_command 'help', 'Show examples' do |resource|
|
|
39
|
-
that.help(resource)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# configure pry shell prompt
|
|
43
|
-
Pry.config.prompt_name = 'inspec'
|
|
44
|
-
Pry.prompt = [proc { "#{readline_ignore("\e[1m\e[32m")}#{Pry.config.prompt_name}> #{readline_ignore("\e[0m")}" }]
|
|
45
|
-
|
|
46
|
-
# Add a help menu as the default intro
|
|
47
|
-
Pry.hooks.add_hook(:before_session, 'inspec_intro') do
|
|
48
|
-
intro
|
|
49
|
-
print_target_info
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Track the rules currently registered and what their merge count is.
|
|
53
|
-
Pry.hooks.add_hook(:before_eval, 'inspec_before_eval') do
|
|
54
|
-
@runner.reset
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# After pry has evaluated a commanding within the binding context of a
|
|
58
|
-
# test file, register all the rules it discovered.
|
|
59
|
-
Pry.hooks.add_hook(:after_eval, 'inspec_after_eval') do
|
|
60
|
-
@runner.load
|
|
61
|
-
@runner.run_tests if !@runner.all_rules.empty?
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Don't print out control class inspection when the user uses DSL methods.
|
|
65
|
-
# Instead produce a result of evaluating their control.
|
|
66
|
-
Pry.config.print = proc do |_output_, value, pry|
|
|
67
|
-
next if !@runner.all_rules.empty?
|
|
68
|
-
pry.pager.open do |pager|
|
|
69
|
-
pager.print pry.config.output_prefix
|
|
70
|
-
Pry::ColorPrinter.pp(value, pager, Pry::Terminal.width! - 1)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def readline_ignore(code)
|
|
76
|
-
"\001#{code}\002"
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def mark(x)
|
|
80
|
-
"\e[1m\e[39m#{x}\e[0m"
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def print_example(example)
|
|
84
|
-
# determine min whitespace that can be removed
|
|
85
|
-
min = nil
|
|
86
|
-
example.lines.each do |line|
|
|
87
|
-
if !line.strip.empty? # ignore empty lines
|
|
88
|
-
line_whitespace = line.length - line.lstrip.length
|
|
89
|
-
min = line_whitespace if min.nil? || line_whitespace < min
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
# remove whitespace from each line
|
|
93
|
-
example.gsub(/\n\s{#{min}}/, "\n")
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def intro
|
|
97
|
-
puts 'Welcome to the interactive InSpec Shell'
|
|
98
|
-
puts "To find out how to use it, type: #{mark 'help'}"
|
|
99
|
-
puts
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def print_target_info
|
|
103
|
-
ctx = @runner.backend
|
|
104
|
-
puts <<~EOF
|
|
105
|
-
You are currently running on:
|
|
106
|
-
|
|
107
|
-
#{Inspec::BaseCLI.detect(params: ctx.platform.params, indent: 4, color: 39)}
|
|
108
|
-
EOF
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def help(topic = nil)
|
|
112
|
-
if topic.nil?
|
|
113
|
-
|
|
114
|
-
puts <<~EOF
|
|
115
|
-
Available commands:
|
|
116
|
-
|
|
117
|
-
`[resource]` - run resource on target machine
|
|
118
|
-
`help resources` - show all available resources that can be used as commands
|
|
119
|
-
`help [resource]` - information about a specific resource
|
|
120
|
-
`help matchers` - show information about common matchers
|
|
121
|
-
`exit` - exit the InSpec shell
|
|
122
|
-
|
|
123
|
-
You can use resources in this environment to test the target machine. For example:
|
|
124
|
-
|
|
125
|
-
command('uname -a').stdout
|
|
126
|
-
file('/proc/cpuinfo').content => "value"
|
|
127
|
-
|
|
128
|
-
#{print_target_info}
|
|
129
|
-
EOF
|
|
130
|
-
elsif topic == 'resources'
|
|
131
|
-
resources.sort.each do |resource|
|
|
132
|
-
puts " - #{resource}"
|
|
133
|
-
end
|
|
134
|
-
elsif topic == 'matchers'
|
|
135
|
-
print_matchers_help
|
|
136
|
-
elsif !Inspec::Resource.registry[topic].nil?
|
|
137
|
-
topic_info = Inspec::Resource.registry[topic]
|
|
138
|
-
info = "#{mark 'Name:'} #{topic}\n\n"
|
|
139
|
-
unless topic_info.desc.nil?
|
|
140
|
-
info += "#{mark 'Description:'}\n\n"
|
|
141
|
-
info += "#{topic_info.desc}\n\n"
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
unless topic_info.example.nil?
|
|
145
|
-
info += "#{mark 'Example:'}\n"
|
|
146
|
-
info += "#{print_example(topic_info.example)}\n\n"
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
info += "#{mark 'Web Reference:'}\n\n"
|
|
150
|
-
info += "https://www.inspec.io/docs/reference/resources/#{topic}\n\n"
|
|
151
|
-
puts info
|
|
152
|
-
else
|
|
153
|
-
puts "The resource #{topic} does not exist. For a list of valid resources, type: help resources"
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def resources
|
|
158
|
-
Inspec::Resource.registry.keys
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def print_matchers_help
|
|
162
|
-
puts <<~EOL
|
|
163
|
-
Matchers are used to compare resource values to expectations. While some
|
|
164
|
-
resources implement their own custom matchers, the following matchers are
|
|
165
|
-
common amongst all resources:
|
|
166
|
-
|
|
167
|
-
#{mark 'be'}
|
|
168
|
-
|
|
169
|
-
The #{mark 'be'} matcher can be used to compare numeric values.
|
|
170
|
-
|
|
171
|
-
its('size') { should be >= 10 }
|
|
172
|
-
|
|
173
|
-
#{mark 'cmp'}
|
|
174
|
-
|
|
175
|
-
The #{mark 'cmp'} matcher is like #{mark 'eq'} but less restrictive. It will try
|
|
176
|
-
to fit the resource value to the expectation.
|
|
177
|
-
|
|
178
|
-
"Protocol" likely returns a string, but cmp will ensure it's a number before
|
|
179
|
-
comparing:
|
|
180
|
-
|
|
181
|
-
its('Protocol') { should cmp 2 }
|
|
182
|
-
its('Protocol') { should cmp '2' }
|
|
183
|
-
|
|
184
|
-
"users" may return an array, but if it contains only one item, cmp will compare
|
|
185
|
-
it as a string or number as needed:
|
|
186
|
-
|
|
187
|
-
its('users') { should cmp 'root' }
|
|
188
|
-
|
|
189
|
-
cmp is not case-sensitive:
|
|
190
|
-
|
|
191
|
-
its('log_format') { should cmp 'raw' }
|
|
192
|
-
its('log_format') { should cmp 'RAW' }
|
|
193
|
-
|
|
194
|
-
#{mark 'eq'}
|
|
195
|
-
|
|
196
|
-
The #{mark 'eq'} matcher tests for exact equality of two values. Value type
|
|
197
|
-
(string, number, etc.) is important and must be the same. For a less-restrictive
|
|
198
|
-
comparison matcher, use the #{mark 'cmp'} matcher.
|
|
199
|
-
|
|
200
|
-
its('RSAAuthentication') { should_not eq 'no' }
|
|
201
|
-
|
|
202
|
-
#{mark 'include'}
|
|
203
|
-
|
|
204
|
-
The #{mark 'include'} matcher tests to see if a value is included in a list.
|
|
205
|
-
|
|
206
|
-
its('users') { should include 'my_user' }
|
|
207
|
-
|
|
208
|
-
#{mark 'match'}
|
|
209
|
-
|
|
210
|
-
The #{mark 'match'} matcher can be used to test a string for a match using a
|
|
211
|
-
regular expression.
|
|
212
|
-
|
|
213
|
-
its('content') { should_not match /^MyKey:\\s+some value/ }
|
|
214
|
-
|
|
215
|
-
For more examples, see: https://www.inspec.io/docs/reference/matchers/
|
|
216
|
-
|
|
217
|
-
EOL
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# author: Dominik Richter
|
|
3
|
+
# author: Christoph Hartmann
|
|
4
|
+
|
|
5
|
+
require 'pry'
|
|
6
|
+
|
|
7
|
+
module Inspec
|
|
8
|
+
# A pry based shell for inspec. Given a runner (with a configured backend and
|
|
9
|
+
# all that jazz), this shell will produce a pry shell from which you can run
|
|
10
|
+
# inspec/ruby commands that will be run within the context of the runner.
|
|
11
|
+
class Shell
|
|
12
|
+
def initialize(runner)
|
|
13
|
+
@runner = runner
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def start
|
|
17
|
+
# This will hold a single evaluation binding context as opened within
|
|
18
|
+
# the instance_eval context of the anonymous class that the profile
|
|
19
|
+
# context creates to evaluate each individual test file. We want to
|
|
20
|
+
# pretend like we are constantly appending to the same file and want
|
|
21
|
+
# to capture the local variable context from inside said class.
|
|
22
|
+
@ctx_binding = @runner.eval_with_virtual_profile('binding')
|
|
23
|
+
configure_pry
|
|
24
|
+
@ctx_binding.pry
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def configure_pry # rubocop:disable Metrics/AbcSize
|
|
28
|
+
# Delete any before_session, before_eval, and after_eval hooks so we can
|
|
29
|
+
# replace them with our own. Pry 0.10 used to have a single method to clear
|
|
30
|
+
# all hooks, but this was removed in Pry 0.11.
|
|
31
|
+
[:before_session, :before_eval, :after_eval].each do |event|
|
|
32
|
+
Pry.hooks.get_hooks(event).keys.map { |hook| Pry.hooks.delete_hook(event, hook) }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
that = self
|
|
36
|
+
|
|
37
|
+
# Add the help command
|
|
38
|
+
Pry::Commands.block_command 'help', 'Show examples' do |resource|
|
|
39
|
+
that.help(resource)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# configure pry shell prompt
|
|
43
|
+
Pry.config.prompt_name = 'inspec'
|
|
44
|
+
Pry.prompt = [proc { "#{readline_ignore("\e[1m\e[32m")}#{Pry.config.prompt_name}> #{readline_ignore("\e[0m")}" }]
|
|
45
|
+
|
|
46
|
+
# Add a help menu as the default intro
|
|
47
|
+
Pry.hooks.add_hook(:before_session, 'inspec_intro') do
|
|
48
|
+
intro
|
|
49
|
+
print_target_info
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Track the rules currently registered and what their merge count is.
|
|
53
|
+
Pry.hooks.add_hook(:before_eval, 'inspec_before_eval') do
|
|
54
|
+
@runner.reset
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# After pry has evaluated a commanding within the binding context of a
|
|
58
|
+
# test file, register all the rules it discovered.
|
|
59
|
+
Pry.hooks.add_hook(:after_eval, 'inspec_after_eval') do
|
|
60
|
+
@runner.load
|
|
61
|
+
@runner.run_tests if !@runner.all_rules.empty?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Don't print out control class inspection when the user uses DSL methods.
|
|
65
|
+
# Instead produce a result of evaluating their control.
|
|
66
|
+
Pry.config.print = proc do |_output_, value, pry|
|
|
67
|
+
next if !@runner.all_rules.empty?
|
|
68
|
+
pry.pager.open do |pager|
|
|
69
|
+
pager.print pry.config.output_prefix
|
|
70
|
+
Pry::ColorPrinter.pp(value, pager, Pry::Terminal.width! - 1)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def readline_ignore(code)
|
|
76
|
+
"\001#{code}\002"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def mark(x)
|
|
80
|
+
"\e[1m\e[39m#{x}\e[0m"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def print_example(example)
|
|
84
|
+
# determine min whitespace that can be removed
|
|
85
|
+
min = nil
|
|
86
|
+
example.lines.each do |line|
|
|
87
|
+
if !line.strip.empty? # ignore empty lines
|
|
88
|
+
line_whitespace = line.length - line.lstrip.length
|
|
89
|
+
min = line_whitespace if min.nil? || line_whitespace < min
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
# remove whitespace from each line
|
|
93
|
+
example.gsub(/\n\s{#{min}}/, "\n")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def intro
|
|
97
|
+
puts 'Welcome to the interactive InSpec Shell'
|
|
98
|
+
puts "To find out how to use it, type: #{mark 'help'}"
|
|
99
|
+
puts
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def print_target_info
|
|
103
|
+
ctx = @runner.backend
|
|
104
|
+
puts <<~EOF
|
|
105
|
+
You are currently running on:
|
|
106
|
+
|
|
107
|
+
#{Inspec::BaseCLI.detect(params: ctx.platform.params, indent: 4, color: 39)}
|
|
108
|
+
EOF
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def help(topic = nil)
|
|
112
|
+
if topic.nil?
|
|
113
|
+
|
|
114
|
+
puts <<~EOF
|
|
115
|
+
Available commands:
|
|
116
|
+
|
|
117
|
+
`[resource]` - run resource on target machine
|
|
118
|
+
`help resources` - show all available resources that can be used as commands
|
|
119
|
+
`help [resource]` - information about a specific resource
|
|
120
|
+
`help matchers` - show information about common matchers
|
|
121
|
+
`exit` - exit the InSpec shell
|
|
122
|
+
|
|
123
|
+
You can use resources in this environment to test the target machine. For example:
|
|
124
|
+
|
|
125
|
+
command('uname -a').stdout
|
|
126
|
+
file('/proc/cpuinfo').content => "value"
|
|
127
|
+
|
|
128
|
+
#{print_target_info}
|
|
129
|
+
EOF
|
|
130
|
+
elsif topic == 'resources'
|
|
131
|
+
resources.sort.each do |resource|
|
|
132
|
+
puts " - #{resource}"
|
|
133
|
+
end
|
|
134
|
+
elsif topic == 'matchers'
|
|
135
|
+
print_matchers_help
|
|
136
|
+
elsif !Inspec::Resource.registry[topic].nil?
|
|
137
|
+
topic_info = Inspec::Resource.registry[topic]
|
|
138
|
+
info = "#{mark 'Name:'} #{topic}\n\n"
|
|
139
|
+
unless topic_info.desc.nil?
|
|
140
|
+
info += "#{mark 'Description:'}\n\n"
|
|
141
|
+
info += "#{topic_info.desc}\n\n"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
unless topic_info.example.nil?
|
|
145
|
+
info += "#{mark 'Example:'}\n"
|
|
146
|
+
info += "#{print_example(topic_info.example)}\n\n"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
info += "#{mark 'Web Reference:'}\n\n"
|
|
150
|
+
info += "https://www.inspec.io/docs/reference/resources/#{topic}\n\n"
|
|
151
|
+
puts info
|
|
152
|
+
else
|
|
153
|
+
puts "The resource #{topic} does not exist. For a list of valid resources, type: help resources"
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def resources
|
|
158
|
+
Inspec::Resource.registry.keys
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def print_matchers_help
|
|
162
|
+
puts <<~EOL
|
|
163
|
+
Matchers are used to compare resource values to expectations. While some
|
|
164
|
+
resources implement their own custom matchers, the following matchers are
|
|
165
|
+
common amongst all resources:
|
|
166
|
+
|
|
167
|
+
#{mark 'be'}
|
|
168
|
+
|
|
169
|
+
The #{mark 'be'} matcher can be used to compare numeric values.
|
|
170
|
+
|
|
171
|
+
its('size') { should be >= 10 }
|
|
172
|
+
|
|
173
|
+
#{mark 'cmp'}
|
|
174
|
+
|
|
175
|
+
The #{mark 'cmp'} matcher is like #{mark 'eq'} but less restrictive. It will try
|
|
176
|
+
to fit the resource value to the expectation.
|
|
177
|
+
|
|
178
|
+
"Protocol" likely returns a string, but cmp will ensure it's a number before
|
|
179
|
+
comparing:
|
|
180
|
+
|
|
181
|
+
its('Protocol') { should cmp 2 }
|
|
182
|
+
its('Protocol') { should cmp '2' }
|
|
183
|
+
|
|
184
|
+
"users" may return an array, but if it contains only one item, cmp will compare
|
|
185
|
+
it as a string or number as needed:
|
|
186
|
+
|
|
187
|
+
its('users') { should cmp 'root' }
|
|
188
|
+
|
|
189
|
+
cmp is not case-sensitive:
|
|
190
|
+
|
|
191
|
+
its('log_format') { should cmp 'raw' }
|
|
192
|
+
its('log_format') { should cmp 'RAW' }
|
|
193
|
+
|
|
194
|
+
#{mark 'eq'}
|
|
195
|
+
|
|
196
|
+
The #{mark 'eq'} matcher tests for exact equality of two values. Value type
|
|
197
|
+
(string, number, etc.) is important and must be the same. For a less-restrictive
|
|
198
|
+
comparison matcher, use the #{mark 'cmp'} matcher.
|
|
199
|
+
|
|
200
|
+
its('RSAAuthentication') { should_not eq 'no' }
|
|
201
|
+
|
|
202
|
+
#{mark 'include'}
|
|
203
|
+
|
|
204
|
+
The #{mark 'include'} matcher tests to see if a value is included in a list.
|
|
205
|
+
|
|
206
|
+
its('users') { should include 'my_user' }
|
|
207
|
+
|
|
208
|
+
#{mark 'match'}
|
|
209
|
+
|
|
210
|
+
The #{mark 'match'} matcher can be used to test a string for a match using a
|
|
211
|
+
regular expression.
|
|
212
|
+
|
|
213
|
+
its('content') { should_not match /^MyKey:\\s+some value/ }
|
|
214
|
+
|
|
215
|
+
For more examples, see: https://www.inspec.io/docs/reference/matchers/
|
|
216
|
+
|
|
217
|
+
EOL
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|