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,8 +1,12 @@
1
1
  # Represents InSpec configuration. Merges defaults, config file options,
2
2
  # and CLI arguments.
3
3
 
4
- require 'pp'
5
- require 'stringio'
4
+ require "pp"
5
+ require "stringio"
6
+ require "forwardable"
7
+ require "thor"
8
+ require "base64"
9
+ require "inspec/base_cli"
6
10
 
7
11
  module Inspec
8
12
  class Config
@@ -27,7 +31,7 @@ module Inspec
27
31
 
28
32
  # This makes it easy to make a config with a mock backend.
29
33
  def self.mock(opts = {})
30
- Inspec::Config.new({ backend: :mock }.merge(opts), StringIO.new('{}'))
34
+ Inspec::Config.new({ backend: :mock }.merge(opts), StringIO.new("{}"))
31
35
  end
32
36
 
33
37
  # Use this to get a cached version of the config. This prevents you from
@@ -58,15 +62,21 @@ module Inspec
58
62
  return unless self[:diagnose]
59
63
  puts "InSpec version: #{Inspec::VERSION}"
60
64
  puts "Train version: #{Train::VERSION}"
61
- puts 'Command line configuration:'
65
+ puts "Command line configuration:"
62
66
  pp @cli_opts
63
- puts 'JSON configuration file:'
67
+ puts "JSON configuration file:"
64
68
  pp @cfg_file_contents
65
- puts 'Merged configuration:'
69
+ puts "Merged configuration:"
66
70
  pp @merged_options
67
71
  puts
68
72
  end
69
73
 
74
+ # return all telemetry options from config
75
+ # @return [Hash]
76
+ def telemetry_options
77
+ final_options.select { |key, _| key.include?("telemetry") }
78
+ end
79
+
70
80
  #-----------------------------------------------------------------------#
71
81
  # Train Credential Handling
72
82
  #-----------------------------------------------------------------------#
@@ -121,7 +131,7 @@ module Inspec
121
131
  credentials.merge!(unprefixed_transport_options)
122
132
 
123
133
  # If there are any prefixed options, merge them in, stripping the prefix.
124
- transport_prefix = transport_name.downcase.tr('-', '_') + '_'
134
+ transport_prefix = transport_name.downcase.tr("-", "_") + "_"
125
135
  transport_options.each do |bare_option_name|
126
136
  prefixed_option_name = transport_prefix + bare_option_name.to_s
127
137
  if final_options.key?(prefixed_option_name)
@@ -140,7 +150,7 @@ module Inspec
140
150
 
141
151
  # Default to local
142
152
  unless @final_options.key?(:target)
143
- credentials[:backend] = 'local'
153
+ credentials[:backend] = "local"
144
154
  return
145
155
  end
146
156
 
@@ -157,7 +167,7 @@ module Inspec
157
167
  credset_name = _utc_find_credset_name(credentials, transport_name)
158
168
 
159
169
  if credset_name
160
- credset = @cfg_file_contents.dig('credentials', transport_name, credset_name)
170
+ credset = @cfg_file_contents.dig("credentials", transport_name, credset_name)
161
171
  if credset
162
172
  credentials.merge!(credset)
163
173
  else
@@ -185,7 +195,7 @@ module Inspec
185
195
 
186
196
  # Regardless of our situation, end up with a readable IO object
187
197
  def resolve_cfg_io(cli_opts, cfg_io)
188
- raise(ArgumentError, 'Inspec::Config must use an IO to read from') if cfg_io && !cfg_io.respond_to?(:read)
198
+ raise(ArgumentError, "Inspec::Config must use an IO to read from") if cfg_io && !cfg_io.respond_to?(:read)
189
199
  cfg_io ||= check_for_piped_config(cli_opts)
190
200
  return cfg_io if cfg_io
191
201
 
@@ -200,10 +210,10 @@ module Inspec
200
210
  Inspec.deprecate(:cli_option_json_config) if cli_opts.key?(:json_config)
201
211
 
202
212
  return nil unless cli_opt
203
- return nil unless cli_opt == '-'
213
+ return nil unless cli_opt == "-"
204
214
  # This warning is here so that if a user invokes inspec with --config=-,
205
215
  # they will have an explanation for why it appears to hang.
206
- Inspec::Log.warn 'Reading JSON config from standard input' if STDIN.tty?
216
+ Inspec::Log.warn "Reading JSON config from standard input" if STDIN.tty?
207
217
  STDIN
208
218
  end
209
219
 
@@ -212,7 +222,7 @@ module Inspec
212
222
  Inspec.deprecate(:cli_option_json_config) if cli_opts.key?(:json_config)
213
223
 
214
224
  if path.nil?
215
- default_path = File.join(Inspec.config_dir, 'config.json')
225
+ default_path = File.join(Inspec.config_dir, "config.json")
216
226
  path = default_path if File.exist?(default_path)
217
227
  elsif !File.exist?(path)
218
228
  raise ArgumentError, "Could not read configuration file at #{path}"
@@ -239,7 +249,7 @@ module Inspec
239
249
  end
240
250
 
241
251
  def file_version
242
- @cfg_file_contents['version'] || :legacy
252
+ @cfg_file_contents["version"] || :legacy
243
253
  end
244
254
 
245
255
  def legacy_file?
@@ -251,26 +261,26 @@ module Inspec
251
261
  # Assume everything in the file is a CLI option
252
262
  @cfg_file_contents
253
263
  else
254
- @cfg_file_contents['cli_options'] || {}
264
+ @cfg_file_contents["cli_options"] || {}
255
265
  end
256
266
  end
257
267
 
258
268
  def config_file_reporter_options
259
269
  # This is assumed to be top-level in both legacy and 1.1.
260
270
  # Technically, you could sneak it in the 1.1 cli opts area.
261
- @cfg_file_contents.key?('reporter') ? { 'reporter' => @cfg_file_contents['reporter'] } : {}
271
+ @cfg_file_contents.key?("reporter") ? { "reporter" => @cfg_file_contents["reporter"] } : {}
262
272
  end
263
273
 
264
274
  #-----------------------------------------------------------------------#
265
275
  # Validation
266
276
  #-----------------------------------------------------------------------#
267
277
  def validate_config_file_contents!
268
- version = @cfg_file_contents['version']
278
+ version = @cfg_file_contents["version"]
269
279
 
270
280
  # Assume legacy format, which is unconstrained
271
281
  return unless version
272
282
 
273
- unless version == '1.1'
283
+ unless version == "1.1"
274
284
  raise Inspec::ConfigError::Invalid, "Unsupported config file version '#{version}' - currently supported versions: 1.1"
275
285
  end
276
286
 
@@ -286,23 +296,23 @@ module Inspec
286
296
  return if reporters.nil?
287
297
  # TODO: move this into a reporter plugin type system
288
298
  valid_types = [
289
- 'automate',
290
- 'cli',
291
- 'documentation',
292
- 'html',
293
- 'json',
294
- 'json-automate',
295
- 'json-min',
296
- 'json-rspec',
297
- 'junit',
298
- 'progress',
299
- 'yaml',
299
+ "automate",
300
+ "cli",
301
+ "documentation",
302
+ "html",
303
+ "json",
304
+ "json-automate",
305
+ "json-min",
306
+ "json-rspec",
307
+ "junit",
308
+ "progress",
309
+ "yaml",
300
310
  ]
301
311
 
302
312
  reporters.each do |reporter_name, reporter_config|
303
313
  raise NotImplementedError, "'#{reporter_name}' is not a valid reporter type." unless valid_types.include?(reporter_name)
304
314
 
305
- next unless reporter_name == 'automate'
315
+ next unless reporter_name == "automate"
306
316
  %w{token url}.each do |option|
307
317
  raise Inspec::ReporterError, "You must specify a automate #{option} via the config file." if reporter_config[option].nil?
308
318
  end
@@ -311,10 +321,10 @@ module Inspec
311
321
  # check to make sure we are only reporting one type to stdout
312
322
  stdout_reporters = 0
313
323
  reporters.each_value do |reporter_config|
314
- stdout_reporters += 1 if reporter_config['stdout'] == true
324
+ stdout_reporters += 1 if reporter_config["stdout"] == true
315
325
  end
316
326
 
317
- raise ArgumentError, 'The option --reporter can only have a single report outputting to stdout.' if stdout_reporters > 1
327
+ raise ArgumentError, "The option --reporter can only have a single report outputting to stdout." if stdout_reporters > 1
318
328
  end
319
329
 
320
330
  #-----------------------------------------------------------------------#
@@ -358,36 +368,36 @@ module Inspec
358
368
 
359
369
  def finalize_parse_reporters(options) # rubocop:disable Metrics/AbcSize
360
370
  # default to cli report for ad-hoc runners
361
- options['reporter'] = ['cli'] if options['reporter'].nil?
371
+ options["reporter"] = ["cli"] if options["reporter"].nil?
362
372
 
363
373
  # parse out cli to proper report format
364
- if options['reporter'].is_a?(Array)
374
+ if options["reporter"].is_a?(Array)
365
375
  reports = {}
366
- options['reporter'].each do |report|
367
- reporter_name, destination = report.split(':', 2)
368
- if destination.nil? || destination.strip == '-'
369
- reports[reporter_name] = { 'stdout' => true }
376
+ options["reporter"].each do |report|
377
+ reporter_name, destination = report.split(":", 2)
378
+ if destination.nil? || destination.strip == "-"
379
+ reports[reporter_name] = { "stdout" => true }
370
380
  else
371
381
  reports[reporter_name] = {
372
- 'file' => destination,
373
- 'stdout' => false,
382
+ "file" => destination,
383
+ "stdout" => false,
374
384
  }
375
- reports[reporter_name]['target_id'] = options['target_id'] if options['target_id']
385
+ reports[reporter_name]["target_id"] = options["target_id"] if options["target_id"]
376
386
  end
377
387
  end
378
- options['reporter'] = reports
388
+ options["reporter"] = reports
379
389
  end
380
390
 
381
391
  # add in stdout if not specified
382
- if options['reporter'].is_a?(Hash)
383
- options['reporter'].each do |reporter_name, config|
384
- options['reporter'][reporter_name] = {} if config.nil?
385
- options['reporter'][reporter_name]['stdout'] = true if options['reporter'][reporter_name].empty?
386
- options['reporter'][reporter_name]['target_id'] = options['target_id'] if options['target_id']
392
+ if options["reporter"].is_a?(Hash)
393
+ options["reporter"].each do |reporter_name, config|
394
+ options["reporter"][reporter_name] = {} if config.nil?
395
+ options["reporter"][reporter_name]["stdout"] = true if options["reporter"][reporter_name].empty?
396
+ options["reporter"][reporter_name]["target_id"] = options["target_id"] if options["target_id"]
387
397
  end
388
398
  end
389
399
 
390
- validate_reporters!(options['reporter'])
400
+ validate_reporters!(options["reporter"])
391
401
  options
392
402
  end
393
403
 
@@ -398,38 +408,38 @@ module Inspec
398
408
  # whenever it is used, it requires a value. Handle options that were
399
409
  # defined in such a way and require a value here:
400
410
  %w{password sudo-password}.each do |option_name|
401
- snake_case_option_name = option_name.tr('-', '_').to_s
411
+ snake_case_option_name = option_name.tr("-", "_").to_s
402
412
  next unless options[snake_case_option_name] == -1 # Thor sets -1 for missing value - see #1918
403
413
  raise ArgumentError, "Please provide a value for --#{option_name}. For example: --#{option_name}=hello."
404
414
  end
405
415
 
406
416
  # Infer `--sudo` if using `--sudo-password` without `--sudo`
407
- if options['sudo_password'] && !options['sudo']
408
- options['sudo'] = true
409
- Inspec::Log.warn '`--sudo-password` used without `--sudo`. Adding `--sudo`.'
417
+ if options["sudo_password"] && !options["sudo"]
418
+ options["sudo"] = true
419
+ Inspec::Log.warn "`--sudo-password` used without `--sudo`. Adding `--sudo`."
410
420
  end
411
421
  end
412
422
 
413
423
  def finalize_compliance_login(options)
414
424
  # check for compliance settings
415
425
  # This is always a hash, comes from config file, not CLI opts
416
- if options.key?('compliance')
417
- require 'plugins/inspec-compliance/lib/inspec-compliance/api'
418
- InspecPlugins::Compliance::API.login(options['compliance'])
426
+ if options.key?("compliance")
427
+ require "plugins/inspec-compliance/lib/inspec-compliance/api"
428
+ InspecPlugins::Compliance::API.login(options["compliance"])
419
429
  end
420
430
  end
421
431
 
422
432
  class Defaults
423
433
  DEFAULTS = {
424
434
  exec: {
425
- 'reporter' => ['cli'],
426
- 'show_progress' => false,
427
- 'color' => true,
428
- 'create_lockfile' => true,
429
- 'backend_cache' => true,
435
+ "reporter" => ["cli"],
436
+ "show_progress" => false,
437
+ "color" => true,
438
+ "create_lockfile" => true,
439
+ "backend_cache" => true,
430
440
  },
431
441
  shell: {
432
- 'reporter' => ['cli'],
442
+ "reporter" => ["cli"],
433
443
  },
434
444
  }.freeze
435
445
 
@@ -1,8 +1,6 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
- require 'inspec/dsl'
5
- require 'inspec/dsl_shared'
1
+ require "inspec/dsl"
2
+ require "inspec/dsl_shared"
3
+ require "rspec/core/dsl"
6
4
 
7
5
  module Inspec
8
6
  #
@@ -20,22 +18,20 @@ module Inspec
20
18
  # @param [ResourcesDSL] resources_dsl which has all resources to attach
21
19
  # @return [RuleContext] the inner context of rules
22
20
  def self.rule_context(resources_dsl, profile_id)
23
- require 'rspec/core/dsl'
24
21
  Class.new(Inspec::Rule) do
25
22
  include RSpec::Core::DSL
26
23
  with_resource_dsl resources_dsl
27
24
 
28
25
  # allow attributes to be accessed within control blocks
29
- # TODO: deprecate name, use input()
30
- define_method :attribute do |input_name, options = {}|
26
+ define_method :input do |input_name, options = {}|
31
27
  if options.empty?
32
28
  # Simply an access, no event here
33
29
  Inspec::InputRegistry.find_or_register_input(input_name, profile_id).value
34
30
  else
35
- options[:priority] = 20
31
+ options[:priority] ||= 20
36
32
  options[:provider] = :inline_control_code
37
33
  evt = Inspec::Input.infer_event(options)
38
- Inspec::InputRegistry.find_or_register_input(input_name, profile_name, event: evt).value
34
+ Inspec::InputRegistry.find_or_register_input(input_name, profile_id, event: evt).value
39
35
  end
40
36
  end
41
37
 
@@ -45,6 +41,11 @@ module Inspec
45
41
  Inspec::InputRegistry.find_or_register_input(input_name, profile_id)
46
42
  end
47
43
 
44
+ define_method :attribute do |name, options = {}|
45
+ Inspec.deprecate(:attrs_dsl, "Input name: #{name}, Profile: #{profile_id}")
46
+ input(name, options)
47
+ end
48
+
48
49
  # Support for Control DSL plugins.
49
50
  # This is called when an unknown method is encountered
50
51
  # within a control block.
@@ -170,29 +171,27 @@ module Inspec
170
171
 
171
172
  unless profile_context_owner.profile_supports_platform?
172
173
  platform = inspec.platform
173
- msg = "Profile #{profile_context_owner.profile_id} is not supported on platform #{platform.name}/#{platform.release}."
174
+ msg = "Profile `#{profile_context_owner.profile_id}` is not supported on platform #{platform.name}/#{platform.release}."
174
175
  ::Inspec::Rule.set_skip_rule(control, true, msg)
175
176
  end
176
177
 
177
178
  unless profile_context_owner.profile_supports_inspec_version?
178
- msg = "Profile #{profile_context_owner.profile_id} is not supported on InSpec version (#{Inspec::VERSION})."
179
+ msg = "Profile `#{profile_context_owner.profile_id}` is not supported on InSpec version (#{Inspec::VERSION})."
179
180
  ::Inspec::Rule.set_skip_rule(control, true, msg)
180
181
  end
181
182
 
182
183
  profile_context_owner.register_rule(control, &block) unless control.nil?
183
184
  end
184
185
 
185
- # method for inputs; import input handling
186
- # TODO: deprecate name, use input()
187
- define_method :attribute do |input_name, options = {}|
186
+ define_method :input do |input_name, options = {}|
188
187
  if options.empty?
189
188
  # Simply an access, no event here
190
189
  Inspec::InputRegistry.find_or_register_input(input_name, profile_id).value
191
190
  else
192
- options[:priority] = 20
191
+ options[:priority] ||= 20
193
192
  options[:provider] = :inline_control_code
194
193
  evt = Inspec::Input.infer_event(options)
195
- Inspec::InputRegistry.find_or_register_input(input_name, profile_name, event: evt).value
194
+ Inspec::InputRegistry.find_or_register_input(input_name, profile_id, event: evt).value
196
195
  end
197
196
  end
198
197
 
@@ -202,6 +201,11 @@ module Inspec
202
201
  Inspec::InputRegistry.find_or_register_input(input_name, profile_id)
203
202
  end
204
203
 
204
+ define_method :attribute do |name, options = {}|
205
+ Inspec.deprecate(:attrs_dsl, "Input name: #{name}, Profile: #{profile_id}")
206
+ input(name, options)
207
+ end
208
+
205
209
  define_method :skip_control do |id|
206
210
  profile_context_owner.unregister_rule(id)
207
211
  end
@@ -229,7 +233,7 @@ module Inspec
229
233
 
230
234
  def block_location(block, alternate_caller)
231
235
  if block.nil?
232
- alternate_caller[/^(.+:\d+):in .+$/, 1] || 'unknown'
236
+ alternate_caller[/^(.+:\d+):in .+$/, 1] || "unknown"
233
237
  else
234
238
  path, line = block.source_location
235
239
  "#{File.basename(path)}:#{line}"
@@ -1,5 +1,4 @@
1
- # encoding: utf-8
2
- require 'fileutils'
1
+ require "fileutils"
3
2
 
4
3
  module Inspec
5
4
  #
@@ -18,7 +17,7 @@ module Inspec
18
17
  class Cache
19
18
  attr_reader :path
20
19
  def initialize(path = nil)
21
- @path = path || File.join(Inspec.config_dir, 'cache')
20
+ @path = path || File.join(Inspec.config_dir, "cache")
22
21
  FileUtils.mkdir_p(@path) unless File.directory?(@path)
23
22
  end
24
23
 
@@ -1,6 +1,5 @@
1
- # encoding: utf-8
2
- require 'inspec/dependencies/requirement'
3
- require 'inspec/dependencies/resolver'
1
+ require "inspec/dependencies/requirement"
2
+ require "inspec/dependencies/resolver"
4
3
 
5
4
  module Inspec
6
5
  #
@@ -1,5 +1,4 @@
1
- # encoding: utf-8
2
- require 'yaml'
1
+ require "yaml"
3
2
 
4
3
  module Inspec
5
4
  class Lockfile
@@ -9,15 +8,15 @@ module Inspec
9
8
 
10
9
  def self.from_dependency_set(dep_set)
11
10
  lockfile_content = {
12
- 'lockfile_version' => CURRENT_LOCKFILE_VERSION,
13
- 'depends' => dep_set.to_array,
11
+ "lockfile_version" => CURRENT_LOCKFILE_VERSION,
12
+ "depends" => dep_set.to_array,
14
13
  }
15
14
  new(lockfile_content)
16
15
  end
17
16
 
18
17
  def self.from_content(content)
19
18
  parsed_content = YAML.load(content)
20
- version = parsed_content['lockfile_version']
19
+ version = parsed_content["lockfile_version"]
21
20
  raise "No lockfile_version set in #{path}!" if version.nil?
22
21
  validate_lockfile_version!(version.to_i)
23
22
  new(parsed_content)
@@ -51,15 +50,15 @@ module Inspec
51
50
 
52
51
  attr_reader :version, :deps
53
52
  def initialize(lockfile_content_hash)
54
- version = lockfile_content_hash['lockfile_version']
53
+ version = lockfile_content_hash["lockfile_version"]
55
54
  @version = version.to_i
56
55
  parse_content_hash(lockfile_content_hash)
57
56
  end
58
57
 
59
58
  def to_yaml
60
59
  {
61
- 'lockfile_version' => CURRENT_LOCKFILE_VERSION,
62
- 'depends' => @deps.map { |i| stringify_keys(i) },
60
+ "lockfile_version" => CURRENT_LOCKFILE_VERSION,
61
+ "depends" => @deps.map { |i| stringify_keys(i) },
63
62
  }.to_yaml
64
63
  end
65
64
 
@@ -85,7 +84,7 @@ module Inspec
85
84
  end
86
85
 
87
86
  def parse_content_hash_1(lockfile_content_hash)
88
- @deps = lockfile_content_hash['depends']&.map { |i| symbolize_keys(i) }
87
+ @deps = lockfile_content_hash["depends"]&.map { |i| symbolize_keys(i) }
89
88
  end
90
89
 
91
90
  def mutate_hash_keys_with(hash, fun)