inspec 2.1.21 → 2.1.30

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.
Files changed (502) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +101 -101
  3. data/CHANGELOG.md +3062 -3045
  4. data/Gemfile +56 -56
  5. data/LICENSE +14 -14
  6. data/MAINTAINERS.md +33 -33
  7. data/MAINTAINERS.toml +52 -52
  8. data/README.md +447 -447
  9. data/Rakefile +322 -322
  10. data/bin/inspec +12 -12
  11. data/docs/.gitignore +2 -2
  12. data/docs/README.md +40 -40
  13. data/docs/dsl_inspec.md +258 -258
  14. data/docs/dsl_resource.md +100 -100
  15. data/docs/glossary.md +99 -99
  16. data/docs/habitat.md +191 -191
  17. data/docs/inspec_and_friends.md +114 -114
  18. data/docs/matchers.md +169 -169
  19. data/docs/migration.md +293 -293
  20. data/docs/platforms.md +118 -118
  21. data/docs/plugin_kitchen_inspec.md +50 -50
  22. data/docs/profiles.md +376 -376
  23. data/docs/reporters.md +105 -105
  24. data/docs/resources/aide_conf.md.erb +75 -75
  25. data/docs/resources/apache.md.erb +67 -67
  26. data/docs/resources/apache_conf.md.erb +68 -68
  27. data/docs/resources/apt.md.erb +71 -71
  28. data/docs/resources/audit_policy.md.erb +47 -47
  29. data/docs/resources/auditd.md.erb +79 -79
  30. data/docs/resources/auditd_conf.md.erb +68 -68
  31. data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
  32. data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
  33. data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
  34. data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
  35. data/docs/resources/aws_config_delivery_channel.md +79 -79
  36. data/docs/resources/aws_config_recorder.md.erb +71 -71
  37. data/docs/resources/aws_ec2_instance.md.erb +106 -106
  38. data/docs/resources/aws_iam_access_key.md.erb +123 -123
  39. data/docs/resources/aws_iam_access_keys.md.erb +198 -198
  40. data/docs/resources/aws_iam_group.md.erb +46 -46
  41. data/docs/resources/aws_iam_groups.md.erb +43 -43
  42. data/docs/resources/aws_iam_password_policy.md.erb +76 -76
  43. data/docs/resources/aws_iam_policies.md.erb +82 -82
  44. data/docs/resources/aws_iam_policy.md.erb +144 -144
  45. data/docs/resources/aws_iam_role.md.erb +63 -63
  46. data/docs/resources/aws_iam_root_user.md.erb +70 -58
  47. data/docs/resources/aws_iam_user.md.erb +64 -64
  48. data/docs/resources/aws_iam_users.md.erb +89 -89
  49. data/docs/resources/aws_kms_key.md.erb +171 -171
  50. data/docs/resources/aws_kms_keys.md.erb +84 -84
  51. data/docs/resources/aws_rds_instance.md.erb +60 -60
  52. data/docs/resources/aws_route_table.md.erb +47 -47
  53. data/docs/resources/aws_route_tables.md.erb +49 -0
  54. data/docs/resources/aws_s3_bucket.md.erb +134 -134
  55. data/docs/resources/aws_s3_bucket_object.md.erb +83 -83
  56. data/docs/resources/aws_s3_buckets.md.erb +53 -0
  57. data/docs/resources/aws_security_group.md.erb +151 -151
  58. data/docs/resources/aws_security_groups.md.erb +91 -91
  59. data/docs/resources/aws_sns_subscription.md.erb +124 -124
  60. data/docs/resources/aws_sns_topic.md.erb +63 -63
  61. data/docs/resources/aws_sns_topics.md.erb +52 -52
  62. data/docs/resources/aws_subnet.md.erb +134 -134
  63. data/docs/resources/aws_subnets.md.erb +126 -126
  64. data/docs/resources/aws_vpc.md.erb +120 -120
  65. data/docs/resources/aws_vpcs.md.erb +48 -48
  66. data/docs/resources/azure_generic_resource.md.erb +171 -171
  67. data/docs/resources/azure_resource_group.md.erb +284 -284
  68. data/docs/resources/azure_virtual_machine.md.erb +347 -347
  69. data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
  70. data/docs/resources/bash.md.erb +75 -75
  71. data/docs/resources/bond.md.erb +90 -90
  72. data/docs/resources/bridge.md.erb +57 -57
  73. data/docs/resources/bsd_service.md.erb +67 -67
  74. data/docs/resources/chocolatey_package.md.erb +58 -0
  75. data/docs/resources/command.md.erb +138 -138
  76. data/docs/resources/cpan.md.erb +79 -79
  77. data/docs/resources/cran.md.erb +64 -64
  78. data/docs/resources/crontab.md.erb +89 -89
  79. data/docs/resources/csv.md.erb +54 -54
  80. data/docs/resources/dh_params.md.erb +205 -205
  81. data/docs/resources/directory.md.erb +30 -30
  82. data/docs/resources/docker.md.erb +219 -219
  83. data/docs/resources/docker_container.md.erb +103 -103
  84. data/docs/resources/docker_image.md.erb +94 -94
  85. data/docs/resources/docker_service.md.erb +114 -114
  86. data/docs/resources/elasticsearch.md.erb +242 -242
  87. data/docs/resources/etc_fstab.md.erb +125 -125
  88. data/docs/resources/etc_group.md.erb +75 -75
  89. data/docs/resources/etc_hosts.md.erb +78 -78
  90. data/docs/resources/etc_hosts_allow.md.erb +74 -74
  91. data/docs/resources/etc_hosts_deny.md.erb +74 -74
  92. data/docs/resources/file.md.erb +526 -526
  93. data/docs/resources/filesystem.md.erb +41 -41
  94. data/docs/resources/firewalld.md.erb +107 -107
  95. data/docs/resources/gem.md.erb +79 -79
  96. data/docs/resources/group.md.erb +61 -61
  97. data/docs/resources/grub_conf.md.erb +101 -101
  98. data/docs/resources/host.md.erb +86 -86
  99. data/docs/resources/http.md.erb +196 -196
  100. data/docs/resources/iis_app.md.erb +122 -122
  101. data/docs/resources/iis_site.md.erb +135 -135
  102. data/docs/resources/inetd_conf.md.erb +94 -94
  103. data/docs/resources/ini.md.erb +76 -76
  104. data/docs/resources/interface.md.erb +58 -58
  105. data/docs/resources/iptables.md.erb +64 -64
  106. data/docs/resources/json.md.erb +63 -63
  107. data/docs/resources/kernel_module.md.erb +120 -120
  108. data/docs/resources/kernel_parameter.md.erb +53 -53
  109. data/docs/resources/key_rsa.md.erb +85 -85
  110. data/docs/resources/launchd_service.md.erb +57 -57
  111. data/docs/resources/limits_conf.md.erb +75 -75
  112. data/docs/resources/login_defs.md.erb +71 -71
  113. data/docs/resources/mount.md.erb +69 -69
  114. data/docs/resources/mssql_session.md.erb +60 -60
  115. data/docs/resources/mysql_conf.md.erb +99 -99
  116. data/docs/resources/mysql_session.md.erb +74 -74
  117. data/docs/resources/nginx.md.erb +79 -79
  118. data/docs/resources/nginx_conf.md.erb +138 -138
  119. data/docs/resources/npm.md.erb +60 -60
  120. data/docs/resources/ntp_conf.md.erb +60 -60
  121. data/docs/resources/oneget.md.erb +53 -53
  122. data/docs/resources/oracledb_session.md.erb +52 -52
  123. data/docs/resources/os.md.erb +141 -141
  124. data/docs/resources/os_env.md.erb +78 -78
  125. data/docs/resources/package.md.erb +120 -120
  126. data/docs/resources/packages.md.erb +67 -67
  127. data/docs/resources/parse_config.md.erb +103 -103
  128. data/docs/resources/parse_config_file.md.erb +138 -138
  129. data/docs/resources/passwd.md.erb +141 -141
  130. data/docs/resources/pip.md.erb +67 -67
  131. data/docs/resources/port.md.erb +137 -137
  132. data/docs/resources/postgres_conf.md.erb +79 -79
  133. data/docs/resources/postgres_hba_conf.md.erb +93 -93
  134. data/docs/resources/postgres_ident_conf.md.erb +76 -76
  135. data/docs/resources/postgres_session.md.erb +69 -69
  136. data/docs/resources/powershell.md.erb +102 -102
  137. data/docs/resources/processes.md.erb +109 -109
  138. data/docs/resources/rabbitmq_config.md.erb +41 -41
  139. data/docs/resources/registry_key.md.erb +158 -158
  140. data/docs/resources/runit_service.md.erb +57 -57
  141. data/docs/resources/security_policy.md.erb +47 -47
  142. data/docs/resources/service.md.erb +121 -121
  143. data/docs/resources/shadow.md.erb +146 -146
  144. data/docs/resources/ssh_config.md.erb +73 -73
  145. data/docs/resources/sshd_config.md.erb +83 -83
  146. data/docs/resources/ssl.md.erb +119 -119
  147. data/docs/resources/sys_info.md.erb +42 -42
  148. data/docs/resources/systemd_service.md.erb +57 -57
  149. data/docs/resources/sysv_service.md.erb +57 -57
  150. data/docs/resources/upstart_service.md.erb +57 -57
  151. data/docs/resources/user.md.erb +140 -140
  152. data/docs/resources/users.md.erb +127 -127
  153. data/docs/resources/vbscript.md.erb +55 -55
  154. data/docs/resources/virtualization.md.erb +57 -57
  155. data/docs/resources/windows_feature.md.erb +47 -47
  156. data/docs/resources/windows_hotfix.md.erb +53 -53
  157. data/docs/resources/windows_task.md.erb +95 -95
  158. data/docs/resources/wmi.md.erb +81 -81
  159. data/docs/resources/x509_certificate.md.erb +151 -151
  160. data/docs/resources/xinetd_conf.md.erb +156 -156
  161. data/docs/resources/xml.md.erb +85 -85
  162. data/docs/resources/yaml.md.erb +69 -69
  163. data/docs/resources/yum.md.erb +98 -98
  164. data/docs/resources/zfs_dataset.md.erb +53 -53
  165. data/docs/resources/zfs_pool.md.erb +47 -47
  166. data/docs/ruby_usage.md +203 -203
  167. data/docs/shared/matcher_be.md.erb +1 -1
  168. data/docs/shared/matcher_cmp.md.erb +43 -43
  169. data/docs/shared/matcher_eq.md.erb +3 -3
  170. data/docs/shared/matcher_include.md.erb +1 -1
  171. data/docs/shared/matcher_match.md.erb +1 -1
  172. data/docs/shell.md +217 -217
  173. data/examples/README.md +8 -8
  174. data/examples/inheritance/README.md +65 -65
  175. data/examples/inheritance/controls/example.rb +14 -14
  176. data/examples/inheritance/inspec.yml +15 -15
  177. data/examples/kitchen-ansible/.kitchen.yml +25 -25
  178. data/examples/kitchen-ansible/Gemfile +19 -19
  179. data/examples/kitchen-ansible/README.md +53 -53
  180. data/examples/kitchen-ansible/files/nginx.repo +6 -6
  181. data/examples/kitchen-ansible/tasks/main.yml +16 -16
  182. data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
  183. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
  184. data/examples/kitchen-chef/.kitchen.yml +20 -20
  185. data/examples/kitchen-chef/Berksfile +3 -3
  186. data/examples/kitchen-chef/Gemfile +19 -19
  187. data/examples/kitchen-chef/README.md +27 -27
  188. data/examples/kitchen-chef/metadata.rb +7 -7
  189. data/examples/kitchen-chef/recipes/default.rb +6 -6
  190. data/examples/kitchen-chef/recipes/nginx.rb +30 -30
  191. data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
  192. data/examples/kitchen-puppet/.kitchen.yml +22 -22
  193. data/examples/kitchen-puppet/Gemfile +20 -20
  194. data/examples/kitchen-puppet/Puppetfile +25 -25
  195. data/examples/kitchen-puppet/README.md +53 -53
  196. data/examples/kitchen-puppet/manifests/site.pp +33 -33
  197. data/examples/kitchen-puppet/metadata.json +11 -11
  198. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
  199. data/examples/meta-profile/README.md +37 -37
  200. data/examples/meta-profile/controls/example.rb +13 -13
  201. data/examples/meta-profile/inspec.yml +13 -13
  202. data/examples/profile-attribute.yml +2 -2
  203. data/examples/profile-attribute/README.md +14 -14
  204. data/examples/profile-attribute/controls/example.rb +11 -11
  205. data/examples/profile-attribute/inspec.yml +8 -8
  206. data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
  207. data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
  208. data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
  209. data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
  210. data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
  211. data/examples/profile-aws/inspec.yml +11 -11
  212. data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
  213. data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
  214. data/examples/profile-azure/inspec.yml +11 -11
  215. data/examples/profile-sensitive/README.md +29 -29
  216. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
  217. data/examples/profile-sensitive/controls/sensitive.rb +9 -9
  218. data/examples/profile-sensitive/inspec.yml +8 -8
  219. data/examples/profile/README.md +48 -48
  220. data/examples/profile/controls/example.rb +23 -23
  221. data/examples/profile/controls/gordon.rb +36 -36
  222. data/examples/profile/controls/meta.rb +34 -34
  223. data/examples/profile/inspec.yml +10 -10
  224. data/examples/profile/libraries/gordon_config.rb +59 -53
  225. data/inspec.gemspec +47 -47
  226. data/lib/bundles/README.md +3 -3
  227. data/lib/bundles/inspec-artifact.rb +7 -7
  228. data/lib/bundles/inspec-artifact/README.md +1 -1
  229. data/lib/bundles/inspec-artifact/cli.rb +277 -277
  230. data/lib/bundles/inspec-compliance.rb +16 -16
  231. data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
  232. data/lib/bundles/inspec-compliance/README.md +185 -185
  233. data/lib/bundles/inspec-compliance/api.rb +316 -316
  234. data/lib/bundles/inspec-compliance/api/login.rb +152 -152
  235. data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
  236. data/lib/bundles/inspec-compliance/cli.rb +254 -254
  237. data/lib/bundles/inspec-compliance/configuration.rb +103 -103
  238. data/lib/bundles/inspec-compliance/http.rb +86 -86
  239. data/lib/bundles/inspec-compliance/support.rb +36 -36
  240. data/lib/bundles/inspec-compliance/target.rb +98 -98
  241. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
  242. data/lib/bundles/inspec-habitat.rb +12 -12
  243. data/lib/bundles/inspec-habitat/cli.rb +36 -36
  244. data/lib/bundles/inspec-habitat/log.rb +10 -10
  245. data/lib/bundles/inspec-habitat/profile.rb +391 -391
  246. data/lib/bundles/inspec-init.rb +8 -8
  247. data/lib/bundles/inspec-init/README.md +31 -31
  248. data/lib/bundles/inspec-init/cli.rb +97 -97
  249. data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
  250. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
  251. data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
  252. data/lib/bundles/inspec-supermarket.rb +13 -13
  253. data/lib/bundles/inspec-supermarket/README.md +45 -45
  254. data/lib/bundles/inspec-supermarket/api.rb +84 -84
  255. data/lib/bundles/inspec-supermarket/cli.rb +73 -73
  256. data/lib/bundles/inspec-supermarket/target.rb +34 -34
  257. data/lib/fetchers/git.rb +163 -163
  258. data/lib/fetchers/local.rb +74 -74
  259. data/lib/fetchers/mock.rb +35 -35
  260. data/lib/fetchers/url.rb +204 -204
  261. data/lib/inspec.rb +24 -24
  262. data/lib/inspec/archive/tar.rb +29 -29
  263. data/lib/inspec/archive/zip.rb +19 -19
  264. data/lib/inspec/backend.rb +93 -93
  265. data/lib/inspec/base_cli.rb +363 -357
  266. data/lib/inspec/cached_fetcher.rb +66 -66
  267. data/lib/inspec/cli.rb +292 -292
  268. data/lib/inspec/completions/bash.sh.erb +45 -45
  269. data/lib/inspec/completions/fish.sh.erb +34 -34
  270. data/lib/inspec/completions/zsh.sh.erb +61 -61
  271. data/lib/inspec/control_eval_context.rb +179 -179
  272. data/lib/inspec/dependencies/cache.rb +72 -72
  273. data/lib/inspec/dependencies/dependency_set.rb +92 -92
  274. data/lib/inspec/dependencies/lockfile.rb +115 -115
  275. data/lib/inspec/dependencies/requirement.rb +123 -123
  276. data/lib/inspec/dependencies/resolver.rb +86 -86
  277. data/lib/inspec/describe.rb +27 -27
  278. data/lib/inspec/dsl.rb +66 -66
  279. data/lib/inspec/dsl_shared.rb +33 -33
  280. data/lib/inspec/env_printer.rb +157 -157
  281. data/lib/inspec/errors.rb +14 -13
  282. data/lib/inspec/exceptions.rb +12 -12
  283. data/lib/inspec/expect.rb +45 -45
  284. data/lib/inspec/fetcher.rb +45 -45
  285. data/lib/inspec/file_provider.rb +275 -275
  286. data/lib/inspec/formatters.rb +3 -3
  287. data/lib/inspec/formatters/base.rb +259 -250
  288. data/lib/inspec/formatters/json_rspec.rb +20 -20
  289. data/lib/inspec/formatters/show_progress.rb +12 -12
  290. data/lib/inspec/library_eval_context.rb +58 -58
  291. data/lib/inspec/log.rb +11 -11
  292. data/lib/inspec/metadata.rb +247 -247
  293. data/lib/inspec/method_source.rb +24 -24
  294. data/lib/inspec/objects.rb +14 -14
  295. data/lib/inspec/objects/attribute.rb +65 -65
  296. data/lib/inspec/objects/control.rb +61 -61
  297. data/lib/inspec/objects/describe.rb +92 -92
  298. data/lib/inspec/objects/each_loop.rb +36 -36
  299. data/lib/inspec/objects/list.rb +15 -15
  300. data/lib/inspec/objects/or_test.rb +40 -40
  301. data/lib/inspec/objects/ruby_helper.rb +15 -15
  302. data/lib/inspec/objects/tag.rb +27 -27
  303. data/lib/inspec/objects/test.rb +87 -87
  304. data/lib/inspec/objects/value.rb +27 -27
  305. data/lib/inspec/plugins.rb +60 -60
  306. data/lib/inspec/plugins/cli.rb +24 -24
  307. data/lib/inspec/plugins/fetcher.rb +86 -86
  308. data/lib/inspec/plugins/resource.rb +135 -135
  309. data/lib/inspec/plugins/secret.rb +15 -15
  310. data/lib/inspec/plugins/source_reader.rb +40 -40
  311. data/lib/inspec/polyfill.rb +12 -12
  312. data/lib/inspec/profile.rb +513 -513
  313. data/lib/inspec/profile_context.rb +208 -208
  314. data/lib/inspec/profile_vendor.rb +66 -66
  315. data/lib/inspec/reporters.rb +60 -54
  316. data/lib/inspec/reporters/automate.rb +76 -0
  317. data/lib/inspec/reporters/base.rb +25 -24
  318. data/lib/inspec/reporters/cli.rb +356 -356
  319. data/lib/inspec/reporters/json.rb +116 -116
  320. data/lib/inspec/reporters/json_min.rb +48 -48
  321. data/lib/inspec/reporters/junit.rb +77 -77
  322. data/lib/inspec/require_loader.rb +33 -33
  323. data/lib/inspec/resource.rb +187 -186
  324. data/lib/inspec/rule.rb +266 -266
  325. data/lib/inspec/runner.rb +345 -345
  326. data/lib/inspec/runner_mock.rb +41 -41
  327. data/lib/inspec/runner_rspec.rb +175 -175
  328. data/lib/inspec/runtime_profile.rb +26 -26
  329. data/lib/inspec/schema.rb +213 -213
  330. data/lib/inspec/secrets.rb +19 -19
  331. data/lib/inspec/secrets/yaml.rb +30 -30
  332. data/lib/inspec/shell.rb +220 -220
  333. data/lib/inspec/shell_detector.rb +90 -90
  334. data/lib/inspec/source_reader.rb +29 -29
  335. data/lib/inspec/version.rb +8 -8
  336. data/lib/matchers/matchers.rb +339 -339
  337. data/lib/resource_support/aws.rb +49 -47
  338. data/lib/resource_support/aws/aws_backend_base.rb +12 -12
  339. data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
  340. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
  341. data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
  342. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
  343. data/lib/resources/aide_conf.rb +151 -151
  344. data/lib/resources/apache.rb +48 -48
  345. data/lib/resources/apache_conf.rb +149 -149
  346. data/lib/resources/apt.rb +149 -149
  347. data/lib/resources/audit_policy.rb +63 -63
  348. data/lib/resources/auditd.rb +231 -231
  349. data/lib/resources/auditd_conf.rb +46 -46
  350. data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
  351. data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
  352. data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
  353. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
  354. data/lib/resources/aws/aws_config_delivery_channel.rb +76 -76
  355. data/lib/resources/aws/aws_config_recorder.rb +98 -98
  356. data/lib/resources/aws/aws_ec2_instance.rb +157 -157
  357. data/lib/resources/aws/aws_iam_access_key.rb +106 -106
  358. data/lib/resources/aws/aws_iam_access_keys.rb +149 -149
  359. data/lib/resources/aws/aws_iam_group.rb +56 -56
  360. data/lib/resources/aws/aws_iam_groups.rb +52 -52
  361. data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
  362. data/lib/resources/aws/aws_iam_policies.rb +53 -53
  363. data/lib/resources/aws/aws_iam_policy.rb +125 -125
  364. data/lib/resources/aws/aws_iam_role.rb +51 -51
  365. data/lib/resources/aws/aws_iam_root_user.rb +78 -60
  366. data/lib/resources/aws/aws_iam_user.rb +111 -111
  367. data/lib/resources/aws/aws_iam_users.rb +108 -108
  368. data/lib/resources/aws/aws_kms_key.rb +96 -96
  369. data/lib/resources/aws/aws_kms_keys.rb +53 -53
  370. data/lib/resources/aws/aws_rds_instance.rb +71 -71
  371. data/lib/resources/aws/aws_route_table.rb +63 -63
  372. data/lib/resources/aws/aws_route_tables.rb +60 -0
  373. data/lib/resources/aws/aws_s3_bucket.rb +115 -115
  374. data/lib/resources/aws/aws_s3_bucket_object.rb +82 -82
  375. data/lib/resources/aws/aws_s3_buckets.rb +51 -0
  376. data/lib/resources/aws/aws_security_group.rb +93 -93
  377. data/lib/resources/aws/aws_security_groups.rb +68 -68
  378. data/lib/resources/aws/aws_sns_subscription.rb +78 -78
  379. data/lib/resources/aws/aws_sns_topic.rb +53 -53
  380. data/lib/resources/aws/aws_sns_topics.rb +56 -56
  381. data/lib/resources/aws/aws_subnet.rb +88 -88
  382. data/lib/resources/aws/aws_subnets.rb +53 -53
  383. data/lib/resources/aws/aws_vpc.rb +69 -69
  384. data/lib/resources/aws/aws_vpcs.rb +45 -45
  385. data/lib/resources/azure/azure_backend.rb +377 -377
  386. data/lib/resources/azure/azure_generic_resource.rb +59 -59
  387. data/lib/resources/azure/azure_resource_group.rb +152 -152
  388. data/lib/resources/azure/azure_virtual_machine.rb +264 -264
  389. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +134 -134
  390. data/lib/resources/bash.rb +35 -35
  391. data/lib/resources/bond.rb +69 -69
  392. data/lib/resources/bridge.rb +122 -122
  393. data/lib/resources/chocolatey_package.rb +78 -0
  394. data/lib/resources/command.rb +73 -73
  395. data/lib/resources/cpan.rb +58 -58
  396. data/lib/resources/cran.rb +64 -64
  397. data/lib/resources/crontab.rb +169 -169
  398. data/lib/resources/csv.rb +56 -56
  399. data/lib/resources/dh_params.rb +77 -77
  400. data/lib/resources/directory.rb +25 -25
  401. data/lib/resources/docker.rb +236 -236
  402. data/lib/resources/docker_container.rb +89 -89
  403. data/lib/resources/docker_image.rb +83 -83
  404. data/lib/resources/docker_object.rb +57 -57
  405. data/lib/resources/docker_service.rb +90 -90
  406. data/lib/resources/elasticsearch.rb +169 -169
  407. data/lib/resources/etc_fstab.rb +94 -94
  408. data/lib/resources/etc_group.rb +152 -152
  409. data/lib/resources/etc_hosts.rb +66 -66
  410. data/lib/resources/etc_hosts_allow_deny.rb +112 -112
  411. data/lib/resources/file.rb +298 -298
  412. data/lib/resources/filesystem.rb +31 -31
  413. data/lib/resources/firewalld.rb +143 -143
  414. data/lib/resources/gem.rb +70 -70
  415. data/lib/resources/groups.rb +215 -215
  416. data/lib/resources/grub_conf.rb +227 -227
  417. data/lib/resources/host.rb +306 -306
  418. data/lib/resources/http.rb +253 -253
  419. data/lib/resources/iis_app.rb +101 -101
  420. data/lib/resources/iis_site.rb +148 -148
  421. data/lib/resources/inetd_conf.rb +54 -54
  422. data/lib/resources/ini.rb +29 -29
  423. data/lib/resources/interface.rb +129 -129
  424. data/lib/resources/iptables.rb +80 -80
  425. data/lib/resources/json.rb +107 -107
  426. data/lib/resources/kernel_module.rb +107 -107
  427. data/lib/resources/kernel_parameter.rb +58 -58
  428. data/lib/resources/key_rsa.rb +61 -61
  429. data/lib/resources/limits_conf.rb +46 -46
  430. data/lib/resources/login_def.rb +57 -57
  431. data/lib/resources/mount.rb +88 -88
  432. data/lib/resources/mssql_session.rb +101 -101
  433. data/lib/resources/mysql.rb +82 -81
  434. data/lib/resources/mysql_conf.rb +127 -127
  435. data/lib/resources/mysql_session.rb +85 -85
  436. data/lib/resources/nginx.rb +96 -96
  437. data/lib/resources/nginx_conf.rb +226 -226
  438. data/lib/resources/npm.rb +48 -48
  439. data/lib/resources/ntp_conf.rb +51 -51
  440. data/lib/resources/oneget.rb +71 -71
  441. data/lib/resources/oracledb_session.rb +139 -139
  442. data/lib/resources/os.rb +36 -36
  443. data/lib/resources/os_env.rb +75 -75
  444. data/lib/resources/package.rb +370 -370
  445. data/lib/resources/packages.rb +111 -111
  446. data/lib/resources/parse_config.rb +112 -112
  447. data/lib/resources/passwd.rb +76 -76
  448. data/lib/resources/pip.rb +130 -130
  449. data/lib/resources/platform.rb +109 -109
  450. data/lib/resources/port.rb +771 -771
  451. data/lib/resources/postgres.rb +131 -130
  452. data/lib/resources/postgres_conf.rb +114 -114
  453. data/lib/resources/postgres_hba_conf.rb +90 -90
  454. data/lib/resources/postgres_ident_conf.rb +79 -79
  455. data/lib/resources/postgres_session.rb +71 -71
  456. data/lib/resources/powershell.rb +66 -66
  457. data/lib/resources/processes.rb +204 -204
  458. data/lib/resources/rabbitmq_conf.rb +51 -51
  459. data/lib/resources/registry_key.rb +297 -297
  460. data/lib/resources/security_policy.rb +180 -180
  461. data/lib/resources/service.rb +794 -790
  462. data/lib/resources/shadow.rb +149 -149
  463. data/lib/resources/ssh_conf.rb +97 -97
  464. data/lib/resources/ssl.rb +99 -99
  465. data/lib/resources/sys_info.rb +28 -28
  466. data/lib/resources/toml.rb +32 -32
  467. data/lib/resources/users.rb +654 -654
  468. data/lib/resources/vbscript.rb +68 -68
  469. data/lib/resources/virtualization.rb +247 -247
  470. data/lib/resources/windows_feature.rb +84 -84
  471. data/lib/resources/windows_hotfix.rb +35 -35
  472. data/lib/resources/windows_task.rb +102 -102
  473. data/lib/resources/wmi.rb +110 -110
  474. data/lib/resources/x509_certificate.rb +137 -137
  475. data/lib/resources/xinetd.rb +106 -106
  476. data/lib/resources/xml.rb +46 -46
  477. data/lib/resources/yaml.rb +43 -43
  478. data/lib/resources/yum.rb +180 -180
  479. data/lib/resources/zfs_dataset.rb +60 -60
  480. data/lib/resources/zfs_pool.rb +49 -49
  481. data/lib/source_readers/flat.rb +39 -39
  482. data/lib/source_readers/inspec.rb +75 -75
  483. data/lib/utils/command_wrapper.rb +27 -27
  484. data/lib/utils/convert.rb +12 -12
  485. data/lib/utils/database_helpers.rb +77 -77
  486. data/lib/utils/erlang_parser.rb +192 -192
  487. data/lib/utils/file_reader.rb +25 -25
  488. data/lib/utils/filter.rb +273 -273
  489. data/lib/utils/filter_array.rb +27 -27
  490. data/lib/utils/find_files.rb +44 -44
  491. data/lib/utils/hash.rb +41 -41
  492. data/lib/utils/json_log.rb +18 -18
  493. data/lib/utils/latest_version.rb +22 -22
  494. data/lib/utils/modulator.rb +12 -12
  495. data/lib/utils/nginx_parser.rb +85 -85
  496. data/lib/utils/object_traversal.rb +49 -49
  497. data/lib/utils/parser.rb +274 -274
  498. data/lib/utils/plugin_registry.rb +93 -93
  499. data/lib/utils/simpleconfig.rb +120 -120
  500. data/lib/utils/spdx.rb +13 -13
  501. data/lib/utils/spdx.txt +343 -343
  502. metadata +9 -2
@@ -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