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
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `be` matcher to use a comparison operator---`=` (equal to), `>` (greater than), `<` (less than), `>=` (greater than or equal to), and `<=` (less than or equal to)---to compare two values: `its('value') { should be >= value }`, `its('value') { should be < value }`, and so on.
|
|
1
|
+
Use the `be` matcher to use a comparison operator---`=` (equal to), `>` (greater than), `<` (less than), `>=` (greater than or equal to), and `<=` (less than or equal to)---to compare two values: `its('value') { should be >= value }`, `its('value') { should be < value }`, and so on.
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
Use the `cmp` matcher compare two values, such as comparing strings to numbers, comparing a single value to an array of values, comparing an array of strings to a regular expression, improving the printing of octal values, and comparing while ignoring case sensitivity.
|
|
2
|
-
|
|
3
|
-
Compare a single value to an array:
|
|
4
|
-
|
|
5
|
-
describe some_resource do
|
|
6
|
-
its('users') { should cmp 'root' }
|
|
7
|
-
its('users') { should cmp ['root'] }
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
Compare strings and regular expressions:
|
|
11
|
-
|
|
12
|
-
describe some_resource do
|
|
13
|
-
its('setting') { should cmp /raw/i }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
Compare strings and numbers:
|
|
17
|
-
|
|
18
|
-
describe some_resource do
|
|
19
|
-
its('setting') { should eq '2' }
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
vs:
|
|
23
|
-
|
|
24
|
-
describe some_resource do
|
|
25
|
-
its('setting') { should cmp '2' }
|
|
26
|
-
its('setting') { should cmp 2 }
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
Ignoring case sensitivity:
|
|
30
|
-
|
|
31
|
-
describe some_resource do
|
|
32
|
-
its('setting') { should cmp 'raw' }
|
|
33
|
-
its('setting') { should cmp 'RAW' }
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
Printing octal values:
|
|
37
|
-
|
|
38
|
-
describe some_resource('/proc/cpuinfo') do
|
|
39
|
-
its('mode') { should cmp '0345' }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
expected: 0345
|
|
43
|
-
got: 0444
|
|
1
|
+
Use the `cmp` matcher compare two values, such as comparing strings to numbers, comparing a single value to an array of values, comparing an array of strings to a regular expression, improving the printing of octal values, and comparing while ignoring case sensitivity.
|
|
2
|
+
|
|
3
|
+
Compare a single value to an array:
|
|
4
|
+
|
|
5
|
+
describe some_resource do
|
|
6
|
+
its('users') { should cmp 'root' }
|
|
7
|
+
its('users') { should cmp ['root'] }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
Compare strings and regular expressions:
|
|
11
|
+
|
|
12
|
+
describe some_resource do
|
|
13
|
+
its('setting') { should cmp /raw/i }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Compare strings and numbers:
|
|
17
|
+
|
|
18
|
+
describe some_resource do
|
|
19
|
+
its('setting') { should eq '2' }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
vs:
|
|
23
|
+
|
|
24
|
+
describe some_resource do
|
|
25
|
+
its('setting') { should cmp '2' }
|
|
26
|
+
its('setting') { should cmp 2 }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Ignoring case sensitivity:
|
|
30
|
+
|
|
31
|
+
describe some_resource do
|
|
32
|
+
its('setting') { should cmp 'raw' }
|
|
33
|
+
its('setting') { should cmp 'RAW' }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Printing octal values:
|
|
37
|
+
|
|
38
|
+
describe some_resource('/proc/cpuinfo') do
|
|
39
|
+
its('mode') { should cmp '0345' }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
expected: 0345
|
|
43
|
+
got: 0444
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Use the `eq` matcher to test the equality of two values: `its('Port') { should eq '22' }`.
|
|
2
|
-
|
|
3
|
-
Using `its('Port') { should eq 22 }` will fail because `22` is not a string value! Use the `cmp` matcher for less restrictive value comparisons.
|
|
1
|
+
Use the `eq` matcher to test the equality of two values: `its('Port') { should eq '22' }`.
|
|
2
|
+
|
|
3
|
+
Using `its('Port') { should eq 22 }` will fail because `22` is not a string value! Use the `cmp` matcher for less restrictive value comparisons.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `include` matcher to verify that a string value is included in a list: `its('list') { should include 'string' }`.
|
|
1
|
+
Use the `include` matcher to verify that a string value is included in a list: `its('list') { should include 'string' }`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `match` matcher to check if a string matches a regular expression: `its('string') { should_not match /regex/ }`.
|
|
1
|
+
Use the `match` matcher to check if a string matches a regular expression: `its('string') { should_not match /regex/ }`.
|
data/docs/shell.md
CHANGED
|
@@ -1,215 +1,215 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: InSpec Shell
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# InSpec Shell
|
|
6
|
-
|
|
7
|
-
The InSpec interactive shell is a pry based REPL that can be used to
|
|
8
|
-
quickly run InSpec controls and tests without having to write it to a
|
|
9
|
-
file. Its functionality is similar to `chef shell` - it provides a way
|
|
10
|
-
to exercise the InSpec DSL, its resources, tests and plugins without
|
|
11
|
-
having to create a profile or write a test file. See
|
|
12
|
-
[http://pryrepl.org/](http://pryrepl.org/) for an introduction to what pry is and what it can
|
|
13
|
-
do.
|
|
14
|
-
|
|
15
|
-
## Launching the shell
|
|
16
|
-
|
|
17
|
-
If you are using InSpec from a platform-specific package (rpm, msi,
|
|
18
|
-
etc.) or from a chef prepared shell in ChefDK, you can directly launch
|
|
19
|
-
InSpec shell against your local machine using the following. See
|
|
20
|
-
<https://docs.chef.io/install_dk.html#set-system-ruby> for details.
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
$ inspec shell
|
|
24
|
-
$ inspec help shell # This will describe inspec shell usage
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
If you wish to connect to a remote machine (called a target within
|
|
28
|
-
InSpec), you can use the `-t` flag. We support connecting using ssh,
|
|
29
|
-
WinRm and Docker. If no target is provided, we implicitly support the
|
|
30
|
-
"local" target - i.e. tests running on the current machine running
|
|
31
|
-
InSpec. For an ssh connection, use `-i` for specifying ssh key files,
|
|
32
|
-
and the `--sudo*` commands for requesting a privilege escalation after
|
|
33
|
-
logging in. For a WinRM connection, use `--path` to change the login
|
|
34
|
-
path, `--ssl` to use SSL for transport layer encryption.
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
$ inspec shell -t ssh://root@192.168.64.2:11022 # Login to remote machine using ssh as root.
|
|
38
|
-
$ inspec shell -t ssh://user@hostname:1234 -i /path/to/user_key # Login to hostname on port 1234 as user using given ssh key.
|
|
39
|
-
$ inspec shell -t winrm://UserName:Password@windowsmachine:1234 # Login to windowsmachine over WinRM as UserName.
|
|
40
|
-
$ inspec shell -t docker://container_id # Login to a Docker container.
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Resource Packs
|
|
44
|
-
|
|
45
|
-
Use resource packs to share custom resources with other InSpec users.
|
|
46
|
-
A resource pack is an InSpec profile that contains only custom resources and no other controls or tests.
|
|
47
|
-
|
|
48
|
-
For example, the profile in [`examples/profile`](https://github.com/chef/inspec/tree/master/examples/profile)in the InSpec git repo defines a [`gordon_config` resource](https://github.com/chef/inspec/blob/master/examples/profile/controls/gordon.rb). To use these resources within the InSpec shell, you will need to download and specify them as a dependency.
|
|
49
|
-
|
|
50
|
-
Once you have local access to the profile, you can use the `gordon_config` custom resource provided in the `examples/profile` GitHub repo in your local environment :
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
inspec shell --depends examples/profile
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Once inside the shell your resource will be available:
|
|
57
|
-
|
|
58
|
-
```ruby
|
|
59
|
-
inspec> gordon_config
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Using Ruby in InSpec shell
|
|
63
|
-
|
|
64
|
-
Since InSpec shell is pry based, you may treat the shell as an
|
|
65
|
-
interactive Ruby session. You may write Ruby expressions and evaluate
|
|
66
|
-
them. Source high-lighting, automatic indentation and command history
|
|
67
|
-
(using the up and down arrow keys) are available to make your experience
|
|
68
|
-
more delightful. You can exit the shell using `exit`.
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
$ inspec shell
|
|
72
|
-
Welcome to the interactive InSpec Shell
|
|
73
|
-
To find out how to use it, type: help
|
|
74
|
-
|
|
75
|
-
inspec> 1 + 2
|
|
76
|
-
=> 3
|
|
77
|
-
inspec> exit
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Using InSpec DSL in InSpec shell
|
|
81
|
-
|
|
82
|
-
InSpec shell will automatically evaluate the result of every command as
|
|
83
|
-
if it were a test file. If you type in a Ruby command that is not an
|
|
84
|
-
InSpec control or test, the shell will evaluate it as if it were a
|
|
85
|
-
regular ruby command.
|
|
86
|
-
|
|
87
|
-
Bare InSpec resources are instantiated and their help text is presented.
|
|
88
|
-
You may also access the resource contents or other matchers that they
|
|
89
|
-
define. Run `help <resource>` to get more help on using a particular
|
|
90
|
-
resource or see the InSpec resources documentation online.
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
$ inspec shell
|
|
94
|
-
Welcome to the interactive InSpec Shell
|
|
95
|
-
To find out how to use it, type: help
|
|
96
|
-
|
|
97
|
-
inspec> file('/Users/myuser').directory?
|
|
98
|
-
=> true
|
|
99
|
-
inspec> os_env('HOME')
|
|
100
|
-
=> Environment variable HOME
|
|
101
|
-
inspec> os_env('HOME').content
|
|
102
|
-
=> /Users/myuser
|
|
103
|
-
inspec> exit
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
InSpec tests are immediately executed.
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
inspec> describe file('/Users') # Empty test.
|
|
110
|
-
Summary: 0 successful, 0 failures, 0 skipped
|
|
111
|
-
inspec> describe file('/Users') do # Test with one check.
|
|
112
|
-
inspec> it { should exist }
|
|
113
|
-
inspec> end
|
|
114
|
-
✔ File /Users should exist
|
|
115
|
-
|
|
116
|
-
Summary: 1 successful, 0 failures, 0 skipped
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
All tests in a control are immediately executed as well. If a control is
|
|
120
|
-
redefined in the shell, the old control's tests are destroyed and
|
|
121
|
-
replaced with the redefinition and the control is re-run.
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
inspec> control 'my_control' do
|
|
125
|
-
inspec> describe os_env('HOME') do
|
|
126
|
-
inspec> its('content') { should eq '/Users/myuser' }
|
|
127
|
-
inspec> end
|
|
128
|
-
inspec> end
|
|
129
|
-
✔ my_control: Environment variable HOME content should eq "/Users/myuser"
|
|
130
|
-
|
|
131
|
-
Summary: 1 successful, 0 failures, 0 skipped
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Syntax errors are illegal tests are also detected and reported.
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
inspec> control 'foo' do
|
|
138
|
-
inspec> thisisnonsense
|
|
139
|
-
inspec> end
|
|
140
|
-
NameError: undefined local variable or method `thisisnonsense' for #<#<Class:0x007fd63b571f98>:0x007fd639825cc8>
|
|
141
|
-
from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-expectations-3.5.0/lib/rspec/matchers.rb:967:in `method_missing'
|
|
142
|
-
inspec> control 'foo' do
|
|
143
|
-
inspec> describe file('wut') do
|
|
144
|
-
inspec> its('thismakesnosense') { should cmp 'fail' }
|
|
145
|
-
inspec> end
|
|
146
|
-
inspec> end
|
|
147
|
-
✖ foo: File wut thismakesnosense (undefined method `thismakesnosense' for File wut:Inspec::Resource::Registry::File)
|
|
148
|
-
|
|
149
|
-
Summary: 0 successful, 1 failures, 0 skipped
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Running a single InSpec command
|
|
153
|
-
|
|
154
|
-
If you wish to run a single InSpec command and fetch its results, you
|
|
155
|
-
may use the `-c` flag. This is similar to using `bash -c`.
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
$ inspec shell -c 'describe file("/Users/myuser") do it { should exist } end'
|
|
159
|
-
Target: local://
|
|
160
|
-
|
|
161
|
-
✔ File /Users/myuser should exist
|
|
162
|
-
|
|
163
|
-
Summary: 1 successful, 0 failures, 0 skipped
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
```bash
|
|
167
|
-
$ inspec shell --format json -c 'describe file("/Users/test") do it { should exist } end'
|
|
168
|
-
{
|
|
169
|
-
"version": "1.49.2",
|
|
170
|
-
"controls": [{
|
|
171
|
-
"status": "passed",
|
|
172
|
-
"code_desc": "File /Users/test should exist",
|
|
173
|
-
"run_time": 0.002374,
|
|
174
|
-
"start_time": "2018-01-06 18:32:38 -0500"
|
|
175
|
-
}],
|
|
176
|
-
"other_checks": [],
|
|
177
|
-
"profiles": [{
|
|
178
|
-
"name": "inspec-shell",
|
|
179
|
-
"supports": [],
|
|
180
|
-
"controls": [{
|
|
181
|
-
"title": null,
|
|
182
|
-
"desc": null,
|
|
183
|
-
"impact": 0.5,
|
|
184
|
-
"refs": [],
|
|
185
|
-
"tags": {},
|
|
186
|
-
"code": "",
|
|
187
|
-
"source_location": {
|
|
188
|
-
"ref": "/usr/local/lib/ruby/gems/2.4.0/gems/inspec-1.49.2/lib/inspec/control_eval_context.rb",
|
|
189
|
-
"line": 89
|
|
190
|
-
},
|
|
191
|
-
"id": "(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)",
|
|
192
|
-
"results": [{
|
|
193
|
-
"status": "passed",
|
|
194
|
-
"code_desc": "File /Users/test should exist",
|
|
195
|
-
"run_time": 0.002374,
|
|
196
|
-
"start_time": "2018-01-06 18:32:38 -0500"
|
|
197
|
-
}]
|
|
198
|
-
}],
|
|
199
|
-
"groups": [{
|
|
200
|
-
"title": null,
|
|
201
|
-
"controls": ["(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)"],
|
|
202
|
-
"id": "unknown"
|
|
203
|
-
}],
|
|
204
|
-
"attributes": [],
|
|
205
|
-
"sha256": "29c070a90b7e3521babf618215573284a790d92907783d5b2c138f411bfd2e74"
|
|
206
|
-
}],
|
|
207
|
-
"platform": {
|
|
208
|
-
"name": "mac_os_x",
|
|
209
|
-
"release": "17.3.0"
|
|
210
|
-
},
|
|
211
|
-
"statistics": {
|
|
212
|
-
"duration": 0.003171
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
```
|
|
1
|
+
---
|
|
2
|
+
title: InSpec Shell
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# InSpec Shell
|
|
6
|
+
|
|
7
|
+
The InSpec interactive shell is a pry based REPL that can be used to
|
|
8
|
+
quickly run InSpec controls and tests without having to write it to a
|
|
9
|
+
file. Its functionality is similar to `chef shell` - it provides a way
|
|
10
|
+
to exercise the InSpec DSL, its resources, tests and plugins without
|
|
11
|
+
having to create a profile or write a test file. See
|
|
12
|
+
[http://pryrepl.org/](http://pryrepl.org/) for an introduction to what pry is and what it can
|
|
13
|
+
do.
|
|
14
|
+
|
|
15
|
+
## Launching the shell
|
|
16
|
+
|
|
17
|
+
If you are using InSpec from a platform-specific package (rpm, msi,
|
|
18
|
+
etc.) or from a chef prepared shell in ChefDK, you can directly launch
|
|
19
|
+
InSpec shell against your local machine using the following. See
|
|
20
|
+
<https://docs.chef.io/install_dk.html#set-system-ruby> for details.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
$ inspec shell
|
|
24
|
+
$ inspec help shell # This will describe inspec shell usage
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If you wish to connect to a remote machine (called a target within
|
|
28
|
+
InSpec), you can use the `-t` flag. We support connecting using ssh,
|
|
29
|
+
WinRm and Docker. If no target is provided, we implicitly support the
|
|
30
|
+
"local" target - i.e. tests running on the current machine running
|
|
31
|
+
InSpec. For an ssh connection, use `-i` for specifying ssh key files,
|
|
32
|
+
and the `--sudo*` commands for requesting a privilege escalation after
|
|
33
|
+
logging in. For a WinRM connection, use `--path` to change the login
|
|
34
|
+
path, `--ssl` to use SSL for transport layer encryption.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
$ inspec shell -t ssh://root@192.168.64.2:11022 # Login to remote machine using ssh as root.
|
|
38
|
+
$ inspec shell -t ssh://user@hostname:1234 -i /path/to/user_key # Login to hostname on port 1234 as user using given ssh key.
|
|
39
|
+
$ inspec shell -t winrm://UserName:Password@windowsmachine:1234 # Login to windowsmachine over WinRM as UserName.
|
|
40
|
+
$ inspec shell -t docker://container_id # Login to a Docker container.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Resource Packs
|
|
44
|
+
|
|
45
|
+
Use resource packs to share custom resources with other InSpec users.
|
|
46
|
+
A resource pack is an InSpec profile that contains only custom resources and no other controls or tests.
|
|
47
|
+
|
|
48
|
+
For example, the profile in [`examples/profile`](https://github.com/chef/inspec/tree/master/examples/profile)in the InSpec git repo defines a [`gordon_config` resource](https://github.com/chef/inspec/blob/master/examples/profile/controls/gordon.rb). To use these resources within the InSpec shell, you will need to download and specify them as a dependency.
|
|
49
|
+
|
|
50
|
+
Once you have local access to the profile, you can use the `gordon_config` custom resource provided in the `examples/profile` GitHub repo in your local environment :
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
inspec shell --depends examples/profile
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Once inside the shell your resource will be available:
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
inspec> gordon_config
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Using Ruby in InSpec shell
|
|
63
|
+
|
|
64
|
+
Since InSpec shell is pry based, you may treat the shell as an
|
|
65
|
+
interactive Ruby session. You may write Ruby expressions and evaluate
|
|
66
|
+
them. Source high-lighting, automatic indentation and command history
|
|
67
|
+
(using the up and down arrow keys) are available to make your experience
|
|
68
|
+
more delightful. You can exit the shell using `exit`.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
$ inspec shell
|
|
72
|
+
Welcome to the interactive InSpec Shell
|
|
73
|
+
To find out how to use it, type: help
|
|
74
|
+
|
|
75
|
+
inspec> 1 + 2
|
|
76
|
+
=> 3
|
|
77
|
+
inspec> exit
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Using InSpec DSL in InSpec shell
|
|
81
|
+
|
|
82
|
+
InSpec shell will automatically evaluate the result of every command as
|
|
83
|
+
if it were a test file. If you type in a Ruby command that is not an
|
|
84
|
+
InSpec control or test, the shell will evaluate it as if it were a
|
|
85
|
+
regular ruby command.
|
|
86
|
+
|
|
87
|
+
Bare InSpec resources are instantiated and their help text is presented.
|
|
88
|
+
You may also access the resource contents or other matchers that they
|
|
89
|
+
define. Run `help <resource>` to get more help on using a particular
|
|
90
|
+
resource or see the InSpec resources documentation online.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
$ inspec shell
|
|
94
|
+
Welcome to the interactive InSpec Shell
|
|
95
|
+
To find out how to use it, type: help
|
|
96
|
+
|
|
97
|
+
inspec> file('/Users/myuser').directory?
|
|
98
|
+
=> true
|
|
99
|
+
inspec> os_env('HOME')
|
|
100
|
+
=> Environment variable HOME
|
|
101
|
+
inspec> os_env('HOME').content
|
|
102
|
+
=> /Users/myuser
|
|
103
|
+
inspec> exit
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
InSpec tests are immediately executed.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
inspec> describe file('/Users') # Empty test.
|
|
110
|
+
Summary: 0 successful, 0 failures, 0 skipped
|
|
111
|
+
inspec> describe file('/Users') do # Test with one check.
|
|
112
|
+
inspec> it { should exist }
|
|
113
|
+
inspec> end
|
|
114
|
+
✔ File /Users should exist
|
|
115
|
+
|
|
116
|
+
Summary: 1 successful, 0 failures, 0 skipped
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
All tests in a control are immediately executed as well. If a control is
|
|
120
|
+
redefined in the shell, the old control's tests are destroyed and
|
|
121
|
+
replaced with the redefinition and the control is re-run.
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
inspec> control 'my_control' do
|
|
125
|
+
inspec> describe os_env('HOME') do
|
|
126
|
+
inspec> its('content') { should eq '/Users/myuser' }
|
|
127
|
+
inspec> end
|
|
128
|
+
inspec> end
|
|
129
|
+
✔ my_control: Environment variable HOME content should eq "/Users/myuser"
|
|
130
|
+
|
|
131
|
+
Summary: 1 successful, 0 failures, 0 skipped
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Syntax errors are illegal tests are also detected and reported.
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
inspec> control 'foo' do
|
|
138
|
+
inspec> thisisnonsense
|
|
139
|
+
inspec> end
|
|
140
|
+
NameError: undefined local variable or method `thisisnonsense' for #<#<Class:0x007fd63b571f98>:0x007fd639825cc8>
|
|
141
|
+
from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-expectations-3.5.0/lib/rspec/matchers.rb:967:in `method_missing'
|
|
142
|
+
inspec> control 'foo' do
|
|
143
|
+
inspec> describe file('wut') do
|
|
144
|
+
inspec> its('thismakesnosense') { should cmp 'fail' }
|
|
145
|
+
inspec> end
|
|
146
|
+
inspec> end
|
|
147
|
+
✖ foo: File wut thismakesnosense (undefined method `thismakesnosense' for File wut:Inspec::Resource::Registry::File)
|
|
148
|
+
|
|
149
|
+
Summary: 0 successful, 1 failures, 0 skipped
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Running a single InSpec command
|
|
153
|
+
|
|
154
|
+
If you wish to run a single InSpec command and fetch its results, you
|
|
155
|
+
may use the `-c` flag. This is similar to using `bash -c`.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
$ inspec shell -c 'describe file("/Users/myuser") do it { should exist } end'
|
|
159
|
+
Target: local://
|
|
160
|
+
|
|
161
|
+
✔ File /Users/myuser should exist
|
|
162
|
+
|
|
163
|
+
Summary: 1 successful, 0 failures, 0 skipped
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
$ inspec shell --format json -c 'describe file("/Users/test") do it { should exist } end'
|
|
168
|
+
{
|
|
169
|
+
"version": "1.49.2",
|
|
170
|
+
"controls": [{
|
|
171
|
+
"status": "passed",
|
|
172
|
+
"code_desc": "File /Users/test should exist",
|
|
173
|
+
"run_time": 0.002374,
|
|
174
|
+
"start_time": "2018-01-06 18:32:38 -0500"
|
|
175
|
+
}],
|
|
176
|
+
"other_checks": [],
|
|
177
|
+
"profiles": [{
|
|
178
|
+
"name": "inspec-shell",
|
|
179
|
+
"supports": [],
|
|
180
|
+
"controls": [{
|
|
181
|
+
"title": null,
|
|
182
|
+
"desc": null,
|
|
183
|
+
"impact": 0.5,
|
|
184
|
+
"refs": [],
|
|
185
|
+
"tags": {},
|
|
186
|
+
"code": "",
|
|
187
|
+
"source_location": {
|
|
188
|
+
"ref": "/usr/local/lib/ruby/gems/2.4.0/gems/inspec-1.49.2/lib/inspec/control_eval_context.rb",
|
|
189
|
+
"line": 89
|
|
190
|
+
},
|
|
191
|
+
"id": "(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)",
|
|
192
|
+
"results": [{
|
|
193
|
+
"status": "passed",
|
|
194
|
+
"code_desc": "File /Users/test should exist",
|
|
195
|
+
"run_time": 0.002374,
|
|
196
|
+
"start_time": "2018-01-06 18:32:38 -0500"
|
|
197
|
+
}]
|
|
198
|
+
}],
|
|
199
|
+
"groups": [{
|
|
200
|
+
"title": null,
|
|
201
|
+
"controls": ["(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)"],
|
|
202
|
+
"id": "unknown"
|
|
203
|
+
}],
|
|
204
|
+
"attributes": [],
|
|
205
|
+
"sha256": "29c070a90b7e3521babf618215573284a790d92907783d5b2c138f411bfd2e74"
|
|
206
|
+
}],
|
|
207
|
+
"platform": {
|
|
208
|
+
"name": "mac_os_x",
|
|
209
|
+
"release": "17.3.0"
|
|
210
|
+
},
|
|
211
|
+
"statistics": {
|
|
212
|
+
"duration": 0.003171
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|