inspec 4.3.2 → 4.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +36 -38
  3. data/README.md +37 -21
  4. data/etc/deprecations.json +10 -0
  5. data/etc/plugin_filters.json +8 -0
  6. data/inspec.gemspec +38 -39
  7. data/lib/bundles/inspec-compliance/api.rb +1 -1
  8. data/lib/bundles/inspec-compliance/configuration.rb +1 -1
  9. data/lib/bundles/inspec-compliance/http.rb +1 -1
  10. data/lib/bundles/inspec-compliance/support.rb +1 -1
  11. data/lib/bundles/inspec-compliance/target.rb +1 -1
  12. data/lib/bundles/inspec-supermarket.rb +3 -7
  13. data/lib/bundles/inspec-supermarket/api.rb +10 -13
  14. data/lib/bundles/inspec-supermarket/cli.rb +12 -15
  15. data/lib/bundles/inspec-supermarket/target.rb +7 -11
  16. data/lib/fetchers/git.rb +14 -15
  17. data/lib/fetchers/local.rb +6 -10
  18. data/lib/fetchers/mock.rb +3 -5
  19. data/lib/fetchers/url.rb +42 -44
  20. data/lib/inspec.rb +23 -24
  21. data/lib/inspec/archive/tar.rb +2 -6
  22. data/lib/inspec/archive/zip.rb +3 -7
  23. data/lib/inspec/backend.rb +8 -9
  24. data/lib/inspec/base_cli.rb +64 -65
  25. data/lib/inspec/cached_fetcher.rb +2 -3
  26. data/lib/inspec/cli.rb +136 -97
  27. data/lib/inspec/config.rb +71 -61
  28. data/lib/inspec/control_eval_context.rb +22 -18
  29. data/lib/inspec/dependencies/cache.rb +2 -3
  30. data/lib/inspec/dependencies/dependency_set.rb +2 -3
  31. data/lib/inspec/dependencies/lockfile.rb +8 -9
  32. data/lib/inspec/dependencies/requirement.rb +7 -8
  33. data/lib/inspec/dependencies/resolver.rb +5 -7
  34. data/lib/inspec/describe.rb +2 -6
  35. data/lib/inspec/dist.rb +20 -0
  36. data/lib/inspec/dsl.rb +4 -7
  37. data/lib/inspec/dsl_shared.rb +1 -2
  38. data/lib/inspec/env_printer.rb +11 -12
  39. data/lib/inspec/errors.rb +0 -4
  40. data/lib/inspec/exceptions.rb +0 -1
  41. data/lib/inspec/expect.rb +5 -8
  42. data/lib/inspec/fetcher.rb +7 -10
  43. data/lib/inspec/file_provider.rb +24 -24
  44. data/lib/inspec/formatters.rb +3 -3
  45. data/lib/inspec/formatters/base.rb +8 -8
  46. data/lib/inspec/globals.rb +2 -2
  47. data/lib/inspec/impact.rb +5 -7
  48. data/lib/inspec/input_registry.rb +84 -33
  49. data/lib/inspec/library_eval_context.rb +3 -6
  50. data/lib/inspec/log.rb +1 -5
  51. data/lib/inspec/metadata.rb +17 -16
  52. data/lib/inspec/method_source.rb +5 -9
  53. data/lib/inspec/objects.rb +10 -12
  54. data/lib/inspec/objects/control.rb +7 -9
  55. data/lib/inspec/objects/describe.rb +9 -11
  56. data/lib/inspec/objects/each_loop.rb +1 -3
  57. data/lib/inspec/objects/input.rb +24 -26
  58. data/lib/inspec/objects/list.rb +4 -6
  59. data/lib/inspec/objects/or_test.rb +2 -4
  60. data/lib/inspec/objects/ruby_helper.rb +3 -5
  61. data/lib/inspec/objects/tag.rb +0 -2
  62. data/lib/inspec/objects/test.rb +9 -11
  63. data/lib/inspec/objects/value.rb +3 -5
  64. data/lib/inspec/plugin/v1.rb +2 -2
  65. data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
  66. data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
  67. data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
  68. data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
  69. data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
  70. data/lib/inspec/plugin/v1/plugins.rb +15 -19
  71. data/lib/inspec/plugin/v1/registry.rb +0 -4
  72. data/lib/inspec/plugin/v2.rb +8 -8
  73. data/lib/inspec/plugin/v2/activator.rb +1 -1
  74. data/lib/inspec/plugin/v2/config_file.rb +6 -6
  75. data/lib/inspec/plugin/v2/filter.rb +13 -13
  76. data/lib/inspec/plugin/v2/installer.rb +36 -24
  77. data/lib/inspec/plugin/v2/loader.rb +28 -28
  78. data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
  79. data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
  80. data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
  81. data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
  82. data/lib/inspec/plugin/v2/registry.rb +7 -7
  83. data/lib/inspec/polyfill.rb +0 -3
  84. data/lib/inspec/profile.rb +55 -63
  85. data/lib/inspec/profile_context.rb +27 -30
  86. data/lib/inspec/profile_vendor.rb +6 -9
  87. data/lib/inspec/reporters.rb +24 -24
  88. data/lib/inspec/reporters/automate.rb +17 -19
  89. data/lib/inspec/reporters/base.rb +1 -1
  90. data/lib/inspec/reporters/cli.rb +88 -91
  91. data/lib/inspec/reporters/json.rb +2 -4
  92. data/lib/inspec/reporters/json_automate.rb +1 -3
  93. data/lib/inspec/reporters/json_min.rb +1 -3
  94. data/lib/inspec/reporters/junit.rb +26 -28
  95. data/lib/inspec/reporters/yaml.rb +1 -3
  96. data/lib/inspec/require_loader.rb +0 -4
  97. data/lib/inspec/resource.rb +4 -125
  98. data/lib/inspec/resources.rb +121 -0
  99. data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
  100. data/lib/{resources → inspec/resources}/apache.rb +13 -14
  101. data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
  102. data/lib/{resources → inspec/resources}/apt.rb +17 -17
  103. data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
  104. data/lib/{resources → inspec/resources}/auditd.rb +62 -64
  105. data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
  106. data/lib/{resources → inspec/resources}/bash.rb +6 -8
  107. data/lib/{resources → inspec/resources}/bond.rb +15 -14
  108. data/lib/{resources → inspec/resources}/bridge.rb +8 -8
  109. data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
  110. data/lib/{resources → inspec/resources}/command.rb +11 -10
  111. data/lib/{resources → inspec/resources}/cpan.rb +12 -12
  112. data/lib/{resources → inspec/resources}/cran.rb +9 -9
  113. data/lib/{resources → inspec/resources}/crontab.rb +47 -48
  114. data/lib/{resources → inspec/resources}/csv.rb +5 -5
  115. data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
  116. data/lib/{resources → inspec/resources}/directory.rb +5 -7
  117. data/lib/{resources → inspec/resources}/docker.rb +63 -63
  118. data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
  119. data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
  120. data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
  121. data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
  122. data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
  123. data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
  124. data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
  125. data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
  126. data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
  127. data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
  128. data/lib/{resources → inspec/resources}/file.rb +80 -79
  129. data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
  130. data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
  131. data/lib/{resources → inspec/resources}/gem.rb +12 -12
  132. data/lib/{resources → inspec/resources}/groups.rb +28 -27
  133. data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
  134. data/lib/{resources → inspec/resources}/host.rb +31 -29
  135. data/lib/{resources → inspec/resources}/http.rb +24 -24
  136. data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
  137. data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
  138. data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
  139. data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
  140. data/lib/{resources → inspec/resources}/ini.rb +7 -8
  141. data/lib/{resources → inspec/resources}/interface.rb +30 -30
  142. data/lib/{resources → inspec/resources}/iptables.rb +8 -8
  143. data/lib/{resources → inspec/resources}/json.rb +8 -10
  144. data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
  145. data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
  146. data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
  147. data/lib/{resources → inspec/resources}/ksh.rb +6 -8
  148. data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
  149. data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
  150. data/lib/{resources → inspec/resources}/mount.rb +6 -8
  151. data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
  152. data/lib/inspec/resources/mysql.rb +81 -0
  153. data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
  154. data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
  155. data/lib/{resources → inspec/resources}/nginx.rb +16 -17
  156. data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
  157. data/lib/{resources → inspec/resources}/npm.rb +9 -10
  158. data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
  159. data/lib/{resources → inspec/resources}/oneget.rb +8 -8
  160. data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
  161. data/lib/{resources → inspec/resources}/os.rb +6 -8
  162. data/lib/{resources → inspec/resources}/os_env.rb +11 -12
  163. data/lib/{resources → inspec/resources}/package.rb +66 -65
  164. data/lib/{resources → inspec/resources}/packages.rb +13 -13
  165. data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
  166. data/lib/{resources → inspec/resources}/passwd.rb +18 -19
  167. data/lib/{resources → inspec/resources}/pip.rb +19 -19
  168. data/lib/{resources → inspec/resources}/platform.rb +9 -11
  169. data/lib/{resources → inspec/resources}/port.rb +134 -136
  170. data/lib/{resources → inspec/resources}/postgres.rb +40 -32
  171. data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
  172. data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
  173. data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
  174. data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
  175. data/lib/{resources → inspec/resources}/powershell.rb +17 -13
  176. data/lib/{resources → inspec/resources}/processes.rb +29 -29
  177. data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
  178. data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
  179. data/lib/inspec/resources/script.rb +1 -0
  180. data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
  181. data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
  182. data/lib/{resources → inspec/resources}/service.rb +74 -75
  183. data/lib/{resources → inspec/resources}/shadow.rb +44 -45
  184. data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
  185. data/lib/{resources → inspec/resources}/ssl.rb +28 -29
  186. data/lib/inspec/resources/sys_info.rb +30 -0
  187. data/lib/{resources → inspec/resources}/toml.rb +5 -7
  188. data/lib/{resources → inspec/resources}/users.rb +65 -65
  189. data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
  190. data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
  191. data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
  192. data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
  193. data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
  194. data/lib/{resources → inspec/resources}/wmi.rb +7 -8
  195. data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
  196. data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
  197. data/lib/{resources → inspec/resources}/xml.rb +7 -7
  198. data/lib/{resources → inspec/resources}/yaml.rb +5 -6
  199. data/lib/{resources → inspec/resources}/yum.rb +10 -10
  200. data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
  201. data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
  202. data/lib/inspec/rspec_extensions.rb +24 -8
  203. data/lib/inspec/rule.rb +14 -15
  204. data/lib/inspec/runner.rb +28 -28
  205. data/lib/inspec/runner_mock.rb +1 -5
  206. data/lib/inspec/runner_rspec.rb +18 -20
  207. data/lib/inspec/runtime_profile.rb +2 -5
  208. data/lib/inspec/schema.rb +142 -143
  209. data/lib/inspec/secrets.rb +3 -7
  210. data/lib/inspec/secrets/yaml.rb +3 -5
  211. data/lib/inspec/shell.rb +11 -15
  212. data/lib/inspec/shell_detector.rb +6 -7
  213. data/lib/inspec/source_reader.rb +4 -8
  214. data/lib/inspec/ui.rb +33 -39
  215. data/lib/inspec/ui_table_helper.rb +12 -0
  216. data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
  217. data/lib/{utils → inspec/utils}/convert.rb +0 -4
  218. data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
  219. data/lib/inspec/utils/deprecation.rb +6 -0
  220. data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
  221. data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
  222. data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
  223. data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
  224. data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
  225. data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
  226. data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
  227. data/lib/{utils → inspec/utils}/filter.rb +30 -33
  228. data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
  229. data/lib/{utils → inspec/utils}/find_files.rb +9 -12
  230. data/lib/{utils → inspec/utils}/hash.rb +1 -5
  231. data/lib/inspec/utils/json_log.rb +15 -0
  232. data/lib/inspec/utils/latest_version.rb +13 -0
  233. data/lib/{utils → inspec/utils}/modulator.rb +0 -3
  234. data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
  235. data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
  236. data/lib/{utils → inspec/utils}/parser.rb +45 -45
  237. data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
  238. data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
  239. data/lib/{utils → inspec/utils}/spdx.rb +1 -4
  240. data/lib/{utils → inspec/utils}/spdx.txt +0 -0
  241. data/lib/inspec/utils/telemetry.rb +3 -3
  242. data/lib/inspec/utils/telemetry/collector.rb +30 -9
  243. data/lib/inspec/utils/telemetry/data_series.rb +3 -1
  244. data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
  245. data/lib/inspec/version.rb +1 -1
  246. data/lib/matchers/matchers.rb +22 -25
  247. data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
  248. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
  249. data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
  250. data/lib/plugins/inspec-artifact/test/functional/inspec_artifact_test.rb +12 -11
  251. data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
  252. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
  253. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
  254. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
  255. data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
  256. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
  257. data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
  258. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
  259. data/lib/plugins/inspec-compliance/test/functional/inspec_compliance_test.rb +12 -14
  260. data/lib/plugins/inspec-compliance/test/integration/default/cli.rb +39 -41
  261. data/lib/plugins/inspec-compliance/test/unit/api/login_test.rb +64 -64
  262. data/lib/plugins/inspec-compliance/test/unit/api_test.rb +157 -156
  263. data/lib/plugins/inspec-compliance/test/unit/target_test.rb +85 -85
  264. data/lib/plugins/inspec-habitat/Berksfile +2 -2
  265. data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
  266. data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
  267. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
  268. data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
  269. data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
  270. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/Berksfile +1 -1
  271. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/metadata.rb +8 -8
  272. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/recipes/default.rb +17 -17
  273. data/lib/plugins/inspec-habitat/test/functional/inspec_habitat_test.rb +9 -8
  274. data/lib/plugins/inspec-habitat/test/integration/default/inspec_habitat/controls/inspec_habitat.rb +14 -14
  275. data/lib/plugins/inspec-habitat/test/support/example_profile/controls/example.rb +4 -4
  276. data/lib/plugins/inspec-habitat/test/unit/profile_test.rb +42 -41
  277. data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
  278. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
  279. data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
  280. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
  281. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
  282. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
  283. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
  284. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
  285. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
  286. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
  287. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
  288. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/functional/inspec_plugin_template_test.rb +5 -5
  289. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/helper.rb +1 -3
  290. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/cli_args_test.rb +2 -2
  291. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/plugin_def_test.rb +2 -2
  292. data/lib/plugins/inspec-init/templates/profiles/aws/controls/example.rb +10 -11
  293. data/lib/plugins/inspec-init/templates/profiles/azure/controls/example.rb +4 -5
  294. data/lib/plugins/inspec-init/templates/profiles/gcp/controls/example.rb +10 -11
  295. data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
  296. data/lib/plugins/inspec-init/test/functional/inspec_init_plugin_test.rb +51 -50
  297. data/lib/plugins/inspec-init/test/functional/inspec_init_profile_test.rb +35 -33
  298. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
  299. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
  300. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
  301. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name.rb +1 -1
  302. data/lib/plugins/inspec-plugin-manager-cli/test/functional/inspec-plugin_test.rb +281 -271
  303. data/lib/plugins/inspec-plugin-manager-cli/test/unit/cli_args_test.rb +41 -41
  304. data/lib/plugins/inspec-plugin-manager-cli/test/unit/plugin_def_test.rb +25 -6
  305. data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
  306. data/lib/resource_support/aws.rb +67 -67
  307. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +4 -1
  308. data/lib/resource_support/aws/aws_resource_mixin.rb +4 -3
  309. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +4 -1
  310. data/lib/resources/aws/aws_billing_report.rb +15 -8
  311. data/lib/resources/aws/aws_billing_reports.rb +10 -7
  312. data/lib/resources/aws/aws_cloudtrail_trail.rb +9 -5
  313. data/lib/resources/aws/aws_cloudtrail_trails.rb +9 -5
  314. data/lib/resources/aws/aws_cloudwatch_alarm.rb +9 -5
  315. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +12 -8
  316. data/lib/resources/aws/aws_config_delivery_channel.rb +13 -9
  317. data/lib/resources/aws/aws_config_recorder.rb +10 -6
  318. data/lib/resources/aws/aws_ebs_volume.rb +12 -8
  319. data/lib/resources/aws/aws_ebs_volumes.rb +9 -5
  320. data/lib/resources/aws/aws_ec2_instance.rb +14 -11
  321. data/lib/resources/aws/aws_ec2_instances.rb +9 -5
  322. data/lib/resources/aws/aws_ecs_cluster.rb +11 -7
  323. data/lib/resources/aws/aws_eks_cluster.rb +13 -9
  324. data/lib/resources/aws/aws_elb.rb +9 -5
  325. data/lib/resources/aws/aws_elbs.rb +9 -5
  326. data/lib/resources/aws/aws_flow_log.rb +17 -13
  327. data/lib/resources/aws/aws_iam_access_key.rb +15 -11
  328. data/lib/resources/aws/aws_iam_access_keys.rb +19 -15
  329. data/lib/resources/aws/aws_iam_group.rb +9 -5
  330. data/lib/resources/aws/aws_iam_groups.rb +9 -5
  331. data/lib/resources/aws/aws_iam_password_policy.rb +13 -10
  332. data/lib/resources/aws/aws_iam_policies.rb +9 -5
  333. data/lib/resources/aws/aws_iam_policy.rb +16 -12
  334. data/lib/resources/aws/aws_iam_role.rb +9 -5
  335. data/lib/resources/aws/aws_iam_root_user.rb +12 -8
  336. data/lib/resources/aws/aws_iam_user.rb +12 -12
  337. data/lib/resources/aws/aws_iam_users.rb +10 -10
  338. data/lib/resources/aws/aws_kms_key.rb +12 -8
  339. data/lib/resources/aws/aws_kms_keys.rb +9 -5
  340. data/lib/resources/aws/aws_rds_instance.rb +11 -8
  341. data/lib/resources/aws/aws_route_table.rb +11 -7
  342. data/lib/resources/aws/aws_route_tables.rb +10 -6
  343. data/lib/resources/aws/aws_s3_bucket.rb +14 -11
  344. data/lib/resources/aws/aws_s3_bucket_object.rb +12 -9
  345. data/lib/resources/aws/aws_s3_buckets.rb +9 -7
  346. data/lib/resources/aws/aws_security_group.rb +16 -12
  347. data/lib/resources/aws/aws_security_groups.rb +12 -8
  348. data/lib/resources/aws/aws_sns_subscription.rb +15 -11
  349. data/lib/resources/aws/aws_sns_topic.rb +10 -6
  350. data/lib/resources/aws/aws_sns_topics.rb +9 -5
  351. data/lib/resources/aws/aws_sqs_queue.rb +18 -14
  352. data/lib/resources/aws/aws_subnet.rb +11 -7
  353. data/lib/resources/aws/aws_subnets.rb +9 -5
  354. data/lib/resources/aws/aws_vpc.rb +10 -6
  355. data/lib/resources/aws/aws_vpcs.rb +9 -5
  356. data/lib/resources/azure/azure_backend.rb +20 -18
  357. data/lib/resources/azure/azure_generic_resource.rb +13 -15
  358. data/lib/resources/azure/azure_resource_group.rb +17 -19
  359. data/lib/resources/azure/azure_virtual_machine.rb +6 -8
  360. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +6 -8
  361. data/lib/source_readers/flat.rb +6 -10
  362. data/lib/source_readers/inspec.rb +8 -12
  363. metadata +141 -142
  364. data/lib/resources/mysql.rb +0 -82
  365. data/lib/resources/sys_info.rb +0 -28
  366. data/lib/utils/deprecation.rb +0 -6
  367. data/lib/utils/json_log.rb +0 -18
  368. data/lib/utils/latest_version.rb +0 -22
@@ -1,12 +1,10 @@
1
- # encoding: utf-8
2
-
3
- require 'utils/parser'
4
- require 'utils/file_reader'
1
+ require "inspec/utils/parser"
2
+ require "inspec/utils/file_reader"
5
3
 
6
4
  module Inspec::Resources
7
5
  class EtcHostsAllow < Inspec.resource(1)
8
- name 'etc_hosts_allow'
9
- supports platform: 'unix'
6
+ name "etc_hosts_allow"
7
+ supports platform: "unix"
10
8
  desc 'Use the etc_hosts_allow InSpec audit resource to test the connections
11
9
  the client will allow. Controlled by the /etc/hosts.allow file.'
12
10
  example <<~EXAMPLE
@@ -22,23 +20,23 @@ module Inspec::Resources
22
20
  include FileReader
23
21
 
24
22
  def initialize(hosts_allow_path = nil)
25
- @conf_path = hosts_allow_path || '/etc/hosts.allow'
23
+ @conf_path = hosts_allow_path || "/etc/hosts.allow"
26
24
  @content = nil
27
25
  @params = nil
28
26
  read_content
29
27
  end
30
28
 
31
29
  filter = FilterTable.create
32
- filter.register_column(:daemon, field: 'daemon')
33
- .register_column(:client_list, field: 'client_list')
34
- .register_column(:options, field: 'options')
30
+ filter.register_column(:daemon, field: "daemon")
31
+ .register_column(:client_list, field: "client_list")
32
+ .register_column(:options, field: "options")
35
33
 
36
34
  filter.install_filter_methods_on_resource(self, :params)
37
35
 
38
36
  private
39
37
 
40
38
  def read_content
41
- @content = ''
39
+ @content = ""
42
40
  @params = {}
43
41
  @content = split_daemons(read_file(@conf_path))
44
42
  @params = parse_conf(@content)
@@ -47,10 +45,10 @@ module Inspec::Resources
47
45
  def split_daemons(content)
48
46
  split_daemons_list = []
49
47
  content.each do |line|
50
- data, = parse_comment_line(line, comment_char: '#', standalone_comments: false)
51
- next unless data != ''
52
- data.split(':')[0].split(',').each do |daemon|
53
- split_daemons_list.push("#{daemon} : " + line.split(':', 2)[1])
48
+ data, = parse_comment_line(line, comment_char: "#", standalone_comments: false)
49
+ next unless data != ""
50
+ data.split(":")[0].split(",").each do |daemon|
51
+ split_daemons_list.push("#{daemon} : " + line.split(":", 2)[1])
54
52
  end
55
53
  end
56
54
  split_daemons_list
@@ -58,8 +56,8 @@ module Inspec::Resources
58
56
 
59
57
  def parse_conf(content)
60
58
  content.map do |line|
61
- data, = parse_comment_line(line, comment_char: '#', standalone_comments: false)
62
- parse_line(data) unless data == ''
59
+ data, = parse_comment_line(line, comment_char: "#", standalone_comments: false)
60
+ parse_line(data) unless data == ""
63
61
  end.compact
64
62
  end
65
63
 
@@ -67,17 +65,17 @@ module Inspec::Resources
67
65
  daemon, clients_and_options = line.split(/:\s+/, 2)
68
66
  daemon = daemon.strip
69
67
 
70
- clients_and_options ||= ''
68
+ clients_and_options ||= ""
71
69
  clients, options = clients_and_options.split(/\s+:\s+/, 2)
72
70
  client_list = clients.split(/,/).map(&:strip)
73
71
 
74
- options ||= ''
72
+ options ||= ""
75
73
  options_list = options.split(/:\s+/).map(&:strip)
76
74
 
77
75
  {
78
- 'daemon' => daemon,
79
- 'client_list' => client_list,
80
- 'options' => options_list,
76
+ "daemon" => daemon,
77
+ "client_list" => client_list,
78
+ "options" => options_list,
81
79
  }
82
80
  end
83
81
 
@@ -87,8 +85,8 @@ module Inspec::Resources
87
85
  end
88
86
 
89
87
  class EtcHostsDeny < EtcHostsAllow
90
- name 'etc_hosts_deny'
91
- supports platform: 'unix'
88
+ name "etc_hosts_deny"
89
+ supports platform: "unix"
92
90
  desc 'Use the etc_hosts_deny InSpec audit resource to test the connections
93
91
  the client will deny. Controlled by the /etc/hosts.deny file.'
94
92
  example <<~EXAMPLE
@@ -99,12 +97,12 @@ module Inspec::Resources
99
97
  EXAMPLE
100
98
 
101
99
  def initialize(path = nil)
102
- return skip_resource '`etc_hosts_deny` is not supported on your OS' unless inspec.os.linux?
103
- super(path || '/etc/hosts.deny')
100
+ return skip_resource "`etc_hosts_deny` is not supported on your OS" unless inspec.os.linux?
101
+ super(path || "/etc/hosts.deny")
104
102
  end
105
103
 
106
104
  def to_s
107
- 'hosts.deny Configuration'
105
+ "hosts.deny Configuration"
108
106
  end
109
107
  end
110
108
  end
@@ -1,7 +1,7 @@
1
- # encoding: utf-8
2
1
  # copyright: 2015, Vulcano Security GmbH
3
2
 
4
- require 'shellwords'
3
+ require "shellwords"
4
+ require "inspec/utils/parser"
5
5
 
6
6
  module Inspec::Resources
7
7
  module FilePermissionsSelector
@@ -14,14 +14,15 @@ module Inspec::Resources
14
14
  end
15
15
  end
16
16
 
17
+ # TODO: rename file_resource.rb
17
18
  class FileResource < Inspec.resource(1)
18
19
  include FilePermissionsSelector
19
20
  include LinuxMountParser
20
21
 
21
- name 'file'
22
- supports platform: 'unix'
23
- supports platform: 'windows'
24
- desc 'Use the file InSpec audit resource to test all system file types, including files, directories, symbolic links, named pipes, sockets, character devices, block devices, and doors.'
22
+ name "file"
23
+ supports platform: "unix"
24
+ supports platform: "windows"
25
+ desc "Use the file InSpec audit resource to test all system file types, including files, directories, symbolic links, named pipes, sockets, character devices, block devices, and doors."
25
26
  example <<~EXAMPLE
26
27
  describe file('path') do
27
28
  it { should exist }
@@ -48,45 +49,45 @@ module Inspec::Resources
48
49
  product_version file_version version? md5sum sha256sum
49
50
  path basename source source_path uid gid
50
51
  }.each do |m|
51
- define_method m.to_sym do |*args|
52
- file.method(m.to_sym).call(*args)
52
+ define_method m do |*args|
53
+ file.send(m, *args)
53
54
  end
54
55
  end
55
56
 
56
57
  def content
57
58
  res = file.content
58
59
  return nil if res.nil?
59
- res.force_encoding('utf-8')
60
+ res.force_encoding("utf-8")
60
61
  end
61
62
 
62
63
  def contain(*_)
63
- raise 'Contain is not supported. Please use standard RSpec matchers.'
64
+ raise "Contain is not supported. Please use standard RSpec matchers."
64
65
  end
65
66
 
66
67
  def readable?(by_usergroup, by_specific_user)
67
68
  return false unless exist?
68
- return skip_resource '`readable?` is not supported on your OS yet.' if @perms_provider.nil?
69
+ return skip_resource "`readable?` is not supported on your OS yet." if @perms_provider.nil?
69
70
 
70
- file_permission_granted?('read', by_usergroup, by_specific_user)
71
+ file_permission_granted?("read", by_usergroup, by_specific_user)
71
72
  end
72
73
 
73
74
  def writable?(by_usergroup, by_specific_user)
74
75
  return false unless exist?
75
- return skip_resource '`writable?` is not supported on your OS yet.' if @perms_provider.nil?
76
+ return skip_resource "`writable?` is not supported on your OS yet." if @perms_provider.nil?
76
77
 
77
- file_permission_granted?('write', by_usergroup, by_specific_user)
78
+ file_permission_granted?("write", by_usergroup, by_specific_user)
78
79
  end
79
80
 
80
81
  def executable?(by_usergroup, by_specific_user)
81
82
  return false unless exist?
82
- return skip_resource '`executable?` is not supported on your OS yet.' if @perms_provider.nil?
83
+ return skip_resource "`executable?` is not supported on your OS yet." if @perms_provider.nil?
83
84
 
84
- file_permission_granted?('execute', by_usergroup, by_specific_user)
85
+ file_permission_granted?("execute", by_usergroup, by_specific_user)
85
86
  end
86
87
 
87
88
  def allowed?(permission, opts = {})
88
89
  return false unless exist?
89
- return skip_resource '`allowed?` is not supported on your OS yet.' if @perms_provider.nil?
90
+ return skip_resource "`allowed?` is not supported on your OS yet." if @perms_provider.nil?
90
91
 
91
92
  file_permission_granted?(permission, opts[:by], opts[:by_user])
92
93
  end
@@ -98,7 +99,7 @@ module Inspec::Resources
98
99
  return file.mounted? if expected_options.nil?
99
100
 
100
101
  # deprecation warning, this functionality will be removed in future version
101
- Inspec.deprecate(:file_resource_be_mounted_matchers, 'The file resource `be_mounted.with` and `be_mounted.only_with` matchers are deprecated. Please use the `mount` resource instead')
102
+ Inspec.deprecate(:file_resource_be_mounted_matchers, "The file resource `be_mounted.with` and `be_mounted.only_with` matchers are deprecated. Please use the `mount` resource instead")
102
103
 
103
104
  # we cannot read mount data on non-Linux systems
104
105
  return nil if !inspec.os.linux?
@@ -134,10 +135,10 @@ module Inspec::Resources
134
135
  alias sticky? sticky
135
136
 
136
137
  def more_permissive_than?(max_mode = nil)
137
- raise Inspec::Exceptions::ResourceFailed, 'The file' + file.path + 'doesn\'t seem to exist' unless exist?
138
- raise ArgumentError, 'You must proivde a value for the `maximum allowable permission` for the file.' if max_mode.nil?
139
- raise ArgumentError, 'You must proivde the `maximum permission target` as a `String`, you provided: ' + max_mode.class.to_s unless max_mode.is_a?(String)
140
- raise ArgumentError, 'The value of the `maximum permission target` should be a valid file mode in 4-ditgit octal format: for example, `0644` or `0777`' unless /(0)?([0-7])([0-7])([0-7])/.match?(max_mode)
138
+ raise Inspec::Exceptions::ResourceFailed, "The file" + file.path + "doesn't seem to exist" unless exist?
139
+ raise ArgumentError, "You must proivde a value for the `maximum allowable permission` for the file." if max_mode.nil?
140
+ raise ArgumentError, "You must proivde the `maximum permission target` as a `String`, you provided: " + max_mode.class.to_s unless max_mode.is_a?(String)
141
+ raise ArgumentError, "The value of the `maximum permission target` should be a valid file mode in 4-ditgit octal format: for example, `0644` or `0777`" unless /(0)?([0-7])([0-7])([0-7])/.match?(max_mode)
141
142
 
142
143
  # Using the files mode and a few bit-wise calculations we can ensure a
143
144
  # file is no more permisive than desired.
@@ -156,10 +157,10 @@ module Inspec::Resources
156
157
  # to or less permissive than the desired mode (PASS). Otherwise, the files
157
158
  # mode is more permissive than the desired mode (FAIL).
158
159
 
159
- max_mode = max_mode.rjust(4, '0')
160
- binary_desired_mode = format('%04b', max_mode).to_i(2)
161
- desired_mode_inverse = (binary_desired_mode ^ 0b111111111)
162
- (desired_mode_inverse & file.mode).zero? ? false : true
160
+ max_mode = max_mode.to_i(8)
161
+ inv_mode = 0777 ^ max_mode
162
+
163
+ inv_mode & file.mode != 0
163
164
  end
164
165
 
165
166
  def to_s
@@ -169,7 +170,7 @@ module Inspec::Resources
169
170
  private
170
171
 
171
172
  def file_permission_granted?(access_type, by_usergroup, by_specific_user)
172
- raise '`file_permission_granted?` is not supported on your OS' if @perms_provider.nil?
173
+ raise "`file_permission_granted?` is not supported on your OS" if @perms_provider.nil?
173
174
  if by_specific_user.nil? || by_specific_user.empty?
174
175
  @perms_provider.check_file_permission_by_mask(file, access_type, by_usergroup, by_specific_user)
175
176
  else
@@ -188,22 +189,22 @@ module Inspec::Resources
188
189
  class UnixFilePermissions < FilePermissions
189
190
  def permission_flag(access_type)
190
191
  case access_type
191
- when 'read'
192
- 'r'
193
- when 'write'
194
- 'w'
195
- when 'execute'
196
- 'x'
192
+ when "read"
193
+ "r"
194
+ when "write"
195
+ "w"
196
+ when "execute"
197
+ "x"
197
198
  else
198
- raise 'Invalid access_type provided'
199
+ raise "Invalid access_type provided"
199
200
  end
200
201
  end
201
202
 
202
203
  def usergroup_for(usergroup, specific_user)
203
- if usergroup == 'others'
204
- 'other'
204
+ if usergroup == "others"
205
+ "other"
205
206
  elsif (usergroup.nil? || usergroup.empty?) && specific_user.nil?
206
- 'all'
207
+ "all"
207
208
  else
208
209
  usergroup
209
210
  end
@@ -213,7 +214,7 @@ module Inspec::Resources
213
214
  usergroup = usergroup_for(usergroup, specific_user)
214
215
  flag = permission_flag(access_type)
215
216
  mask = file.unix_mode_mask(usergroup, flag)
216
- raise 'Invalid usergroup/owner provided' if mask.nil?
217
+ raise "Invalid usergroup/owner provided" if mask.nil?
217
218
  (file.mode & mask) != 0
218
219
  end
219
220
 
@@ -228,7 +229,7 @@ module Inspec::Resources
228
229
  elsif inspec.os.hpux?
229
230
  perm_cmd = "su #{user} -c \"test -#{flag} #{path}\""
230
231
  else
231
- return skip_resource 'The `file` resource does not support `by_user` on your OS.'
232
+ return skip_resource "The `file` resource does not support `by_user` on your OS."
232
233
  end
233
234
 
234
235
  cmd = inspec.command(perm_cmd)
@@ -238,11 +239,11 @@ module Inspec::Resources
238
239
 
239
240
  class WindowsFilePermissions < FilePermissions
240
241
  def check_file_permission_by_mask(_file, _access_type, _usergroup, _specific_user)
241
- raise '`check_file_permission_by_mask` is not supported on Windows'
242
+ raise "`check_file_permission_by_mask` is not supported on Windows"
242
243
  end
243
244
 
244
245
  def more_permissive_than?(*)
245
- raise Inspec::Exceptions::ResourceSkipped, 'The `more_permissive_than?` matcher is not supported on your OS yet.'
246
+ raise Inspec::Exceptions::ResourceSkipped, "The `more_permissive_than?` matcher is not supported on your OS yet."
246
247
  end
247
248
 
248
249
  def check_file_permission_by_user(access_type, user, path)
@@ -250,14 +251,14 @@ module Inspec::Resources
250
251
  access_rule = convert_to_powershell_array(access_rule)
251
252
 
252
253
  cmd = inspec.command("@(@((Get-Acl '#{path}').access | Where-Object {$_.AccessControlType -eq 'Allow' -and $_.IdentityReference -eq '#{user}' }) | Where-Object {($_.FileSystemRights.ToString().Split(',') | % {$_.trim()} | ? {#{access_rule} -contains $_}) -ne $null}) | measure | % { $_.Count }")
253
- cmd.stdout.chomp == '0' ? false : true
254
+ cmd.stdout.chomp == "0" ? false : true
254
255
  end
255
256
 
256
257
  private
257
258
 
258
259
  def convert_to_powershell_array(arr)
259
260
  if arr.empty?
260
- '@()'
261
+ "@()"
261
262
  else
262
263
  %{@('#{arr.join("', '")}')}
263
264
  end
@@ -272,59 +273,59 @@ module Inspec::Resources
272
273
  names = translate_common_perms(access_type)
273
274
  names ||= translate_granular_perms(access_type)
274
275
  names ||= translate_uncommon_perms(access_type)
275
- raise 'Invalid access_type provided' unless names
276
+ raise "Invalid access_type provided" unless names
276
277
 
277
278
  names
278
279
  end
279
280
 
280
281
  def translate_common_perms(access_type)
281
282
  case access_type
282
- when 'full-control'
283
+ when "full-control"
283
284
  %w{FullControl}
284
- when 'modify'
285
- translate_perm_names('full-control') + %w{Modify}
286
- when 'read'
287
- translate_perm_names('modify') + %w{ReadAndExecute Read}
288
- when 'write'
289
- translate_perm_names('modify') + %w{Write}
290
- when 'execute'
291
- translate_perm_names('modify') + %w{ReadAndExecute ExecuteFile Traverse}
292
- when 'delete'
293
- translate_perm_names('modify') + %w{Delete}
285
+ when "modify"
286
+ translate_perm_names("full-control") + %w{Modify}
287
+ when "read"
288
+ translate_perm_names("modify") + %w{ReadAndExecute Read}
289
+ when "write"
290
+ translate_perm_names("modify") + %w{Write}
291
+ when "execute"
292
+ translate_perm_names("modify") + %w{ReadAndExecute ExecuteFile Traverse}
293
+ when "delete"
294
+ translate_perm_names("modify") + %w{Delete}
294
295
  end
295
296
  end
296
297
 
297
298
  def translate_uncommon_perms(access_type)
298
299
  case access_type
299
- when 'delete-subdirectories-and-files'
300
- translate_perm_names('full-control') + %w{DeleteSubdirectoriesAndFiles}
301
- when 'change-permissions'
302
- translate_perm_names('full-control') + %w{ChangePermissions}
303
- when 'take-ownership'
304
- translate_perm_names('full-control') + %w{TakeOwnership}
305
- when 'synchronize'
306
- translate_perm_names('full-control') + %w{Synchronize}
300
+ when "delete-subdirectories-and-files"
301
+ translate_perm_names("full-control") + %w{DeleteSubdirectoriesAndFiles}
302
+ when "change-permissions"
303
+ translate_perm_names("full-control") + %w{ChangePermissions}
304
+ when "take-ownership"
305
+ translate_perm_names("full-control") + %w{TakeOwnership}
306
+ when "synchronize"
307
+ translate_perm_names("full-control") + %w{Synchronize}
307
308
  end
308
309
  end
309
310
 
310
311
  def translate_granular_perms(access_type)
311
312
  case access_type
312
- when 'write-data', 'create-files'
313
- translate_perm_names('write') + %w{WriteData CreateFiles}
314
- when 'append-data', 'create-directories'
315
- translate_perm_names('write') + %w{CreateDirectories AppendData}
316
- when 'write-extended-attributes'
317
- translate_perm_names('write') + %w{WriteExtendedAttributes}
318
- when 'write-attributes'
319
- translate_perm_names('write') + %w{WriteAttributes}
320
- when 'read-data', 'list-directory'
321
- translate_perm_names('read') + %w{ReadData ListDirectory}
322
- when 'read-attributes'
323
- translate_perm_names('read') + %w{ReadAttributes}
324
- when 'read-extended-attributes'
325
- translate_perm_names('read') + %w{ReadExtendedAttributes}
326
- when 'read-permissions'
327
- translate_perm_names('read') + %w{ReadPermissions}
313
+ when "write-data", "create-files"
314
+ translate_perm_names("write") + %w{WriteData CreateFiles}
315
+ when "append-data", "create-directories"
316
+ translate_perm_names("write") + %w{CreateDirectories AppendData}
317
+ when "write-extended-attributes"
318
+ translate_perm_names("write") + %w{WriteExtendedAttributes}
319
+ when "write-attributes"
320
+ translate_perm_names("write") + %w{WriteAttributes}
321
+ when "read-data", "list-directory"
322
+ translate_perm_names("read") + %w{ReadData ListDirectory}
323
+ when "read-attributes"
324
+ translate_perm_names("read") + %w{ReadAttributes}
325
+ when "read-extended-attributes"
326
+ translate_perm_names("read") + %w{ReadExtendedAttributes}
327
+ when "read-permissions"
328
+ translate_perm_names("read") + %w{ReadPermissions}
328
329
  end
329
330
  end
330
331
  end
@@ -1,9 +1,11 @@
1
+ require "inspec/resources/command"
2
+
1
3
  module Inspec::Resources
2
4
  class FileSystemResource < Inspec.resource(1)
3
- name 'filesystem'
4
- supports platform: 'linux'
5
- supports platform: 'windows'
6
- desc 'Use the filesystem InSpec resource to test file system'
5
+ name "filesystem"
6
+ supports platform: "linux"
7
+ supports platform: "windows"
8
+ desc "Use the filesystem InSpec resource to test file system"
7
9
  example <<~EXAMPLE
8
10
  describe filesystem('/') do
9
11
  its('size_kb') { should be >= 32000 }
@@ -32,7 +34,7 @@ module Inspec::Resources
32
34
  elsif os.windows?
33
35
  @fsman = WindowsFileSystemResource.new(inspec)
34
36
  else
35
- raise Inspec::Exceptions::ResourceSkipped, 'The `filesystem` resource is not supported on your OS yet.'
37
+ raise Inspec::Exceptions::ResourceSkipped, "The `filesystem` resource is not supported on your OS yet."
36
38
  end
37
39
  end
38
40
 
@@ -52,7 +54,7 @@ module Inspec::Resources
52
54
  end
53
55
 
54
56
  def size
55
- Inspec.deprecate(:property_filesystem_size, 'The `size` property did not reliably use the correct units. Please use `size_kb` instead.')
57
+ Inspec.deprecate(:property_filesystem_size, "The `size` property did not reliably use the correct units. Please use `size_kb` instead.")
56
58
  if inspec.os.windows?
57
59
  # On windows, we had a bug prior to #3767 in which the
58
60
  # 'size' value was be scaled to GB in powershell.
@@ -93,8 +95,11 @@ module Inspec::Resources
93
95
  class LinuxFileSystemResource < FsManagement
94
96
  def info(partition)
95
97
  cmd = inspec.command("df #{partition} -T")
96
- raise Inspec::Exceptions::ResourceFailed, "Unable to get available space for partition #{partition}" if cmd.stdout.nil? || cmd.stdout.empty? || !cmd.exit_status.zero?
97
- value = cmd.stdout.split(/\n/)[1].strip.split(' ')
98
+ if cmd.stdout.nil? || cmd.stdout.empty? || cmd.exit_status != 0
99
+ raise Inspec::Exceptions::ResourceFailed,
100
+ "Unable to get available space for partition #{partition}"
101
+ end
102
+ value = cmd.stdout.split(/\n/)[1].strip.split(" ")
98
103
  {
99
104
  name: partition,
100
105
  size_kb: value[2].to_i,
@@ -106,26 +111,26 @@ module Inspec::Resources
106
111
 
107
112
  class WindowsFileSystemResource < FsManagement
108
113
  def info(partition)
109
- cmd = inspec.command <<-EOF.gsub(/^\s*/, '')
114
+ cmd = inspec.command <<-EOF.gsub(/^\s*/, "")
110
115
  $disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='#{partition}'"
111
116
  $disk.Size = $disk.Size / 1KB
112
117
  $disk.FreeSpace = $disk.FreeSpace / 1KB
113
118
  $disk | select -property DeviceID,Size,FileSystem,FreeSpace | ConvertTo-Json
114
119
  EOF
115
120
 
116
- raise Inspec::Exceptions::ResourceSkipped, "Unable to get available space for partition #{partition}" if cmd.stdout == '' || cmd.exit_status.to_i != 0
121
+ raise Inspec::Exceptions::ResourceSkipped, "Unable to get available space for partition #{partition}" if cmd.stdout == "" || cmd.exit_status.to_i != 0
117
122
  begin
118
123
  fs = JSON.parse(cmd.stdout)
119
124
  rescue JSON::ParserError => e
120
125
  raise Inspec::Exceptions::ResourceFailed,
121
- 'Failed to parse JSON from Powershell. ' \
126
+ "Failed to parse JSON from Powershell. " \
122
127
  "Error: #{e}"
123
128
  end
124
129
  {
125
- name: fs['DeviceID'],
126
- size_kb: fs['Size'].to_i,
127
- free_kb: fs['FreeSpace'].to_i,
128
- type: fs['FileSystem'],
130
+ name: fs["DeviceID"],
131
+ size_kb: fs["Size"].to_i,
132
+ free_kb: fs["FreeSpace"].to_i,
133
+ type: fs["FileSystem"],
129
134
  }
130
135
  end
131
136
  end