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,4 +1,4 @@
1
- require 'inspec/base_cli'
1
+ require "inspec/base_cli"
2
2
 
3
3
  # The InSpec load order has this file being loaded before `inspec/base_cli` can
4
4
  # finish being loaded. So, we must define Inspec::BaseCLI here first to avoid
@@ -12,8 +12,8 @@ module Inspec::Plugin::V2::PluginType
12
12
  super(args, options, config)
13
13
  class_options = config.fetch(:class_options, nil)
14
14
  if class_options
15
- Inspec::Log.init(class_options['log_location']) if class_options.key?('log_location')
16
- Inspec::Log.level = get_log_level(class_options['log_level']) if class_options.key?('log_level')
15
+ Inspec::Log.init(class_options["log_location"]) if class_options.key?("log_location")
16
+ Inspec::Log.level = get_log_level(class_options["log_level"]) if class_options.key?("log_level")
17
17
  end
18
18
  end
19
19
 
@@ -41,9 +41,9 @@ module Inspec::Plugin::V2::PluginType
41
41
 
42
42
  # Allow plugins to use inspec log settings
43
43
  class_option :log_level, type: :string,
44
- desc: 'Set the log level: info (default), debug, warn, error'
44
+ desc: "Set the log level: info (default), debug, warn, error"
45
45
 
46
46
  class_option :log_location, type: :string,
47
- desc: 'Location to send diagnostic log messages to. (default: STDOUT or Inspec::Log.error)'
47
+ desc: "Location to send diagnostic log messages to. (default: $stdout or Inspec::Log.error)"
48
48
  end
49
49
  end
@@ -0,0 +1,34 @@
1
+ module Inspec::Plugin::V2::PluginType
2
+ class Input < Inspec::Plugin::V2::PluginBase
3
+ register_plugin_type(:input)
4
+
5
+ #====================================================================#
6
+ # Input plugin type API
7
+ #====================================================================#
8
+ # Implementation classes must implement these methods.
9
+
10
+ # When an input is obtained from the plugin, this number determines what
11
+ # precedence to assign to the input.
12
+ # @return Integer range 0-100. Higher priority means higher precedence
13
+ def default_priority
14
+ 60
15
+ end
16
+
17
+ # Indicates an attempt is being made to read the value for an input.
18
+ # Return nil if the input is not supplied by the plugin, otherwise
19
+ # return the value.
20
+ # @return Object or nil
21
+ def fetch(_profile_name, _input_name)
22
+ raise NotImplementedError, "Plugin #{plugin_name} must implement the #fetch method"
23
+ end
24
+
25
+ # Given a profile name, list all input names for which the plugin
26
+ # would offer a response.
27
+ # @param String profile_name Name of the profile
28
+ # @return Array[String] List of input names for which the plugin
29
+ # would offer a response.
30
+ def list_inputs(_profile)
31
+ raise NotImplementedError, "Plugin #{plugin_name} must implement the #list_inputs method"
32
+ end
33
+ end
34
+ end
@@ -6,7 +6,7 @@ module Inspec::Plugin::V2::PluginType
6
6
  # This is the API for the mock plugin type: when a mock plugin is
7
7
  # activated, it is expected to be able to respond to this, and "do something"
8
8
  def mock_hook
9
- raise NotImplementedError, 'Mock plugins must implement mock_hook'
9
+ raise NotImplementedError, "Mock plugins must implement mock_hook"
10
10
  end
11
11
  end
12
12
  end
@@ -1,9 +1,9 @@
1
- require 'forwardable'
2
- require 'singleton'
3
- require 'train'
1
+ require "forwardable"
2
+ require "singleton"
3
+ require "train"
4
4
 
5
- require_relative 'status'
6
- require_relative 'activator'
5
+ require_relative "status"
6
+ require_relative "activator"
7
7
 
8
8
  module Inspec::Plugin::V2
9
9
  class Registry
@@ -29,8 +29,8 @@ module Inspec::Plugin::V2
29
29
  def loaded_plugin?(name)
30
30
  # HACK: Status is normally the source of truth for loadedness, unless it is a train plugin; then the Train::Registry is the source of truth.
31
31
  # Also, InSpec registry is keyed on Symbols; Train is keyed on Strings.
32
- return registry.dig(name.to_sym, :loaded) unless name.to_s.start_with?('train-')
33
- Train::Plugins.registry.key?(name.to_s.sub(/^train-/, ''))
32
+ return registry.dig(name.to_sym, :loaded) unless name.to_s.start_with?("train-")
33
+ Train::Plugins.registry.key?(name.to_s.sub(/^train-/, ""))
34
34
  end
35
35
 
36
36
  def loaded_count
@@ -1,7 +1,4 @@
1
- # encoding: utf-8
2
1
  # copyright: 2016, Chef Software Inc.
3
- # author: Dominik Richter
4
- # author: Christoph Hartmann
5
2
 
6
3
  class Struct
7
4
  unless instance_methods.include? :to_h
@@ -1,25 +1,17 @@
1
- # encoding: utf-8
2
1
  # Copyright 2015 Dominik Richter
3
- # author: Dominik Richter
4
- # author: Christoph Hartmann
5
-
6
- require 'forwardable'
7
- require 'openssl'
8
- require 'inspec/input_registry'
9
- require 'inspec/polyfill'
10
- require 'inspec/cached_fetcher'
11
- require 'inspec/file_provider'
12
- require 'inspec/source_reader'
13
- require 'inspec/metadata'
14
- require 'inspec/backend'
15
- require 'inspec/rule'
16
- require 'inspec/log'
17
- require 'inspec/profile_context'
18
- require 'inspec/runtime_profile'
19
- require 'inspec/method_source'
20
- require 'inspec/dependencies/cache'
21
- require 'inspec/dependencies/lockfile'
22
- require 'inspec/dependencies/dependency_set'
2
+
3
+ require "forwardable"
4
+ require "openssl"
5
+ require "pathname"
6
+ require "inspec/input_registry"
7
+ require "inspec/cached_fetcher" # TODO: split or rename
8
+ require "inspec/source_reader"
9
+ require "inspec/profile_context"
10
+ require "inspec/runtime_profile"
11
+ require "inspec/method_source"
12
+ require "inspec/dependencies/cache"
13
+ require "inspec/dependencies/lockfile"
14
+ require "inspec/dependencies/dependency_set"
23
15
 
24
16
  module Inspec
25
17
  class Profile
@@ -36,14 +28,14 @@ module Inspec
36
28
  def self.copy_deps_into_cache(file_provider, opts)
37
29
  # filter content
38
30
  cache = file_provider.files.find_all do |entry|
39
- entry.start_with?('vendor')
31
+ entry.start_with?("vendor")
40
32
  end
41
33
  content = Hash[cache.map { |x| [x, file_provider.binread(x)] }]
42
34
  keys = content.keys
43
35
  keys.each do |key|
44
36
  next if content[key].nil?
45
37
  # remove prefix
46
- rel = Pathname.new(key).relative_path_from(Pathname.new('vendor')).to_s
38
+ rel = Pathname.new(key).relative_path_from(Pathname.new("vendor")).to_s
47
39
  tar = Pathname.new(opts[:vendor_cache].path).join(rel)
48
40
 
49
41
  FileUtils.mkdir_p tar.dirname.to_s
@@ -113,7 +105,7 @@ module Inspec
113
105
  # we share the backend between profiles.
114
106
  #
115
107
  # This will cause issues if a profile attempts to load a file via `inspec.profile.file`
116
- train_options = options.reject { |k, _| k == 'target' } # See https://github.com/chef/inspec/pull/1646
108
+ train_options = options.reject { |k, _| k == "target" } # See https://github.com/chef/inspec/pull/1646
117
109
  @backend = options[:backend].nil? ? Inspec::Backend.create(Inspec::Config.new(train_options)) : options[:backend].dup
118
110
  @runtime_profile = RuntimeProfile.new(self)
119
111
  @backend.profile = @runtime_profile
@@ -124,7 +116,7 @@ module Inspec
124
116
  options[:runner_conf] ||= Inspec::Config.cached
125
117
 
126
118
  if options[:runner_conf].key?(:attrs)
127
- Inspec.deprecate(:rename_attributes_to_inputs, 'Use --input-file on the command line instead of --attrs.')
119
+ Inspec.deprecate(:rename_attributes_to_inputs, "Use --input-file on the command line instead of --attrs.")
128
120
  options[:runner_conf][:input_file] = options[:runner_conf].delete(:attrs)
129
121
  end
130
122
 
@@ -174,7 +166,7 @@ module Inspec
174
166
  if @supports_platform.nil?
175
167
  @supports_platform = metadata.supports_platform?(@backend)
176
168
  end
177
- if @backend.backend.class.to_s == 'Train::Transports::Mock::Connection'
169
+ if @backend.backend.class.to_s == "Train::Transports::Mock::Connection"
178
170
  @supports_platform = true
179
171
  end
180
172
 
@@ -214,7 +206,7 @@ module Inspec
214
206
  include_list.each_with_index do |inclusion, index|
215
207
  next if inclusion.is_a?(Regexp)
216
208
  # Insist the user wrap the regex in slashes to demarcate it as a regex
217
- next unless inclusion.start_with?('/') && inclusion.end_with?('/')
209
+ next unless inclusion.start_with?("/") && inclusion.end_with?("/")
218
210
  inclusion = inclusion[1..-2] # Trim slashes
219
211
  begin
220
212
  re = Regexp.new(inclusion)
@@ -244,14 +236,14 @@ module Inspec
244
236
  # this metadata if the parent profile is supported.
245
237
  if supports_platform? && !d.supports_platform?
246
238
  # since ruby 1.9 hashes are ordered so we can just use index values here
247
- metadata.dependencies[i][:status] = 'skipped'
239
+ metadata.dependencies[i][:status] = "skipped"
248
240
  msg = "Skipping profile: '#{d.name}' on unsupported platform: '#{d.backend.platform.name}/#{d.backend.platform.release}'."
249
241
  metadata.dependencies[i][:skip_message] = msg
250
242
  next
251
243
  elsif metadata.dependencies[i]
252
244
  # Currently wrapper profiles will load all dependencies, and then we
253
245
  # load them again when we dive down. This needs to be re-done.
254
- metadata.dependencies[i][:status] = 'loaded'
246
+ metadata.dependencies[i][:status] = "loaded"
255
247
  end
256
248
  c = d.load_libraries
257
249
  @runner_context.add_resources(c)
@@ -315,11 +307,11 @@ module Inspec
315
307
  res[:parent_profile] = parent_profile unless parent_profile.nil?
316
308
 
317
309
  if !supports_platform?
318
- res[:status] = 'skipped'
310
+ res[:status] = "skipped"
319
311
  msg = "Skipping profile: '#{name}' on unsupported platform: '#{backend.platform.name}/#{backend.platform.release}'."
320
312
  res[:skip_message] = msg
321
313
  else
322
- res[:status] = 'loaded'
314
+ res[:status] = "loaded"
323
315
  end
324
316
 
325
317
  # convert legacy os-* supports to their platform counterpart
@@ -380,23 +372,23 @@ module Inspec
380
372
  m_warnings.each { |msg| warn.call(meta_path, 0, 0, nil, msg) }
381
373
  m_unsupported = metadata.unsupported
382
374
  m_unsupported.each { |u| warn.call(meta_path, 0, 0, nil, "doesn't support: #{u}") }
383
- @logger.info 'Metadata OK.' if m_errors.empty? && m_unsupported.empty?
375
+ @logger.info "Metadata OK." if m_errors.empty? && m_unsupported.empty?
384
376
 
385
377
  # only run the vendor check if the legacy profile-path is not used as argument
386
378
  if @legacy_profile_path == false
387
379
  # verify that a lockfile is present if we have dependencies
388
380
  if !metadata.dependencies.empty?
389
- error.call(meta_path, 0, 0, nil, 'Your profile needs to be vendored with `inspec vendor`.') if !lockfile_exists?
381
+ error.call(meta_path, 0, 0, nil, "Your profile needs to be vendored with `inspec vendor`.") if !lockfile_exists?
390
382
  end
391
383
 
392
384
  if lockfile_exists?
393
385
  # verify if metadata and lockfile are out of sync
394
386
  if lockfile.deps.size != metadata.dependencies.size
395
- error.call(meta_path, 0, 0, nil, 'inspec.yml and inspec.lock are out-of-sync. Please re-vendor with `inspec vendor`.')
387
+ error.call(meta_path, 0, 0, nil, "inspec.yml and inspec.lock are out-of-sync. Please re-vendor with `inspec vendor`.")
396
388
  end
397
389
 
398
390
  # verify if metadata and lockfile have the same dependency names
399
- metadata.dependencies.each { |dep|
391
+ metadata.dependencies.each do |dep|
400
392
  # Skip if the dependency does not specify a name
401
393
  next if dep[:name].nil?
402
394
 
@@ -404,7 +396,7 @@ module Inspec
404
396
  if !lockfile.deps.map { |x| x[:name] }.include? dep[:name]
405
397
  error.call(meta_path, 0, 0, nil, "Cannot find #{dep[:name]} in lockfile. Please re-vendor with `inspec vendor`.")
406
398
  end
407
- }
399
+ end
408
400
  end
409
401
  end
410
402
 
@@ -414,28 +406,28 @@ module Inspec
414
406
  count = controls_count
415
407
  result[:summary][:controls] = count
416
408
  if count == 0
417
- warn.call(nil, nil, nil, nil, 'No controls or tests were defined.')
409
+ warn.call(nil, nil, nil, nil, "No controls or tests were defined.")
418
410
  else
419
411
  @logger.info("Found #{count} controls.")
420
412
  end
421
413
 
422
414
  # iterate over hash of groups
423
- params[:controls].each { |id, control|
415
+ params[:controls].each do |id, control|
424
416
  sfile = control[:source_location][:ref]
425
417
  sline = control[:source_location][:line]
426
- error.call(sfile, sline, nil, id, 'Avoid controls with empty IDs') if id.nil? or id.empty?
427
- next if id.start_with? '(generated '
418
+ error.call(sfile, sline, nil, id, "Avoid controls with empty IDs") if id.nil? || id.empty?
419
+ next if id.start_with? "(generated "
428
420
  warn.call(sfile, sline, nil, id, "Control #{id} has no title") if control[:title].to_s.empty?
429
421
  warn.call(sfile, sline, nil, id, "Control #{id} has no descriptions") if control[:descriptions][:default].to_s.empty?
430
422
  warn.call(sfile, sline, nil, id, "Control #{id} has impact > 1.0") if control[:impact].to_f > 1.0
431
423
  warn.call(sfile, sline, nil, id, "Control #{id} has impact < 0.0") if control[:impact].to_f < 0.0
432
- warn.call(sfile, sline, nil, id, "Control #{id} has no tests defined") if control[:checks].nil? or control[:checks].empty?
433
- }
424
+ warn.call(sfile, sline, nil, id, "Control #{id} has no tests defined") if control[:checks].nil? || control[:checks].empty?
425
+ end
434
426
 
435
427
  # profile is valid if we could not find any error
436
428
  result[:summary][:valid] = result[:errors].empty?
437
429
 
438
- @logger.info 'Control definitions OK.' if result[:warnings].empty?
430
+ @logger.info "Control definitions OK." if result[:warnings].empty?
439
431
  result
440
432
  end
441
433
 
@@ -461,22 +453,22 @@ module Inspec
461
453
  # TODO ignore all .files, but add the files to debug output
462
454
 
463
455
  # display all files that will be part of the archive
464
- @logger.debug 'Add the following files to archive:'
465
- files.each { |f| @logger.debug ' ' + f }
456
+ @logger.debug "Add the following files to archive:"
457
+ files.each { |f| @logger.debug " " + f }
466
458
 
467
459
  if opts[:zip]
468
460
  # generate zip archive
469
- require 'inspec/archive/zip'
461
+ require "inspec/archive/zip"
470
462
  zag = Inspec::Archive::ZipArchiveGenerator.new
471
463
  zag.archive(root_path, files, dst)
472
464
  else
473
465
  # generate tar archive
474
- require 'inspec/archive/tar'
466
+ require "inspec/archive/tar"
475
467
  tag = Inspec::Archive::TarArchiveGenerator.new
476
468
  tag.archive(root_path, files, dst)
477
469
  end
478
470
 
479
- @logger.info 'Finished archive generation.'
471
+ @logger.info "Finished archive generation."
480
472
  true
481
473
  end
482
474
 
@@ -485,11 +477,11 @@ module Inspec
485
477
  end
486
478
 
487
479
  def lockfile_exists?
488
- @source_reader.target.files.include?('inspec.lock')
480
+ @source_reader.target.files.include?("inspec.lock")
489
481
  end
490
482
 
491
483
  def lockfile_path
492
- File.join(cwd, 'inspec.lock')
484
+ File.join(cwd, "inspec.lock")
493
485
  end
494
486
 
495
487
  def root_path
@@ -506,12 +498,12 @@ module Inspec
506
498
  # tarballs.
507
499
  #
508
500
  def cwd
509
- @target.is_a?(String) && File.directory?(@target) ? @target : './'
501
+ @target.is_a?(String) && File.directory?(@target) ? @target : "./"
510
502
  end
511
503
 
512
504
  def lockfile
513
505
  @lockfile ||= if lockfile_exists?
514
- Inspec::Lockfile.from_content(@source_reader.target.read('inspec.lock'))
506
+ Inspec::Lockfile.from_content(@source_reader.target.read("inspec.lock"))
515
507
  else
516
508
  generate_lockfile
517
509
  end
@@ -550,14 +542,14 @@ module Inspec
550
542
 
551
543
  res = OpenSSL::Digest::SHA256.new
552
544
  files = source_reader.tests.to_a + source_reader.libraries.to_a +
553
- source_reader.data_files.to_a +
554
- [['inspec.yml', source_reader.metadata.content]] +
555
- [['inspec.lock.deps', YAML.dump(deps)]]
545
+ source_reader.data_files.to_a +
546
+ [["inspec.yml", source_reader.metadata.content]] +
547
+ [["inspec.lock.deps", YAML.dump(deps)]]
556
548
 
557
549
  files.sort_by { |a| a[0] }
558
550
  .map { |f| res << f[0] << "\0" << f[1] << "\0" }
559
551
 
560
- res.digest.unpack('H*')[0]
552
+ res.digest.unpack("H*")[0]
561
553
  end
562
554
 
563
555
  private
@@ -573,13 +565,13 @@ module Inspec
573
565
  end
574
566
 
575
567
  name = params[:name] ||
576
- raise('Cannot create an archive without a profile name! Please '\
577
- 'specify the name in metadata or use --output to create the archive.')
568
+ raise("Cannot create an archive without a profile name! Please "\
569
+ "specify the name in metadata or use --output to create the archive.")
578
570
  version = params[:version] ||
579
- raise('Cannot create an archive without a profile version! Please '\
580
- 'specify the version in metadata or use --output to create the archive.')
581
- ext = opts[:zip] ? 'zip' : 'tar.gz'
582
- slug = name.downcase.strip.tr(' ', '-').gsub(/[^\w-]/, '_')
571
+ raise("Cannot create an archive without a profile version! Please "\
572
+ "specify the version in metadata or use --output to create the archive.")
573
+ ext = opts[:zip] ? "zip" : "tar.gz"
574
+ slug = name.downcase.strip.tr(" ", "-").gsub(/[^\w-]/, "_")
583
575
  Pathname.new(Dir.pwd).join("#{slug}-#{version}.#{ext}")
584
576
  end
585
577
 
@@ -596,7 +588,7 @@ module Inspec
596
588
  tests = collect_tests
597
589
  params[:controls] = controls = {}
598
590
  params[:groups] = groups = {}
599
- prefix = @source_reader.target.prefix || ''
591
+ prefix = @source_reader.target.prefix || ""
600
592
  tests&.each do |rule|
601
593
  next if rule.nil?
602
594
  f = load_rule_filepath(prefix, rule)
@@ -1,33 +1,30 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
- require 'inspec/log'
5
- require 'inspec/rule'
6
- require 'inspec/resource'
7
- require 'inspec/library_eval_context'
8
- require 'inspec/control_eval_context'
9
- require 'inspec/require_loader'
10
- require 'securerandom'
11
- require 'inspec/objects/input'
1
+ require "inspec/log"
2
+ require "inspec/rule"
3
+ require "inspec/resource"
4
+ require "inspec/library_eval_context"
5
+ require "inspec/control_eval_context"
6
+ require "inspec/require_loader"
7
+ require "securerandom"
8
+ require "inspec/objects/input"
12
9
 
13
10
  module Inspec
14
11
  class ProfileContext
15
12
  def self.for_profile(profile, backend)
16
- new(profile.name, backend, { 'profile' => profile, 'check_mode' => profile.check_mode })
13
+ new(profile.name, backend, { "profile" => profile, "check_mode" => profile.check_mode })
17
14
  end
18
15
 
19
16
  attr_reader :backend, :profile_name, :profile_id, :resource_registry
20
17
  attr_accessor :rules
21
18
  def initialize(profile_id, backend, conf)
22
19
  if backend.nil?
23
- raise 'ProfileContext is initiated with a backend == nil. ' \
24
- 'This is a backend error which must be fixed upstream.'
20
+ raise "ProfileContext is initiated with a backend == nil. " \
21
+ "This is a backend error which must be fixed upstream."
25
22
  end
26
23
  @profile_id = profile_id
27
24
  @backend = backend
28
25
  @conf = conf.dup
29
- @profile_name = @conf['profile'].profile_name || @profile_id if @conf['profile']
30
- @skip_only_if_eval = @conf['check_mode']
26
+ @profile_name = @conf.key?("profile") ? @conf["profile"].profile_name : @profile_id
27
+ @skip_only_if_eval = @conf["check_mode"]
31
28
  @rules = {}
32
29
  @control_subcontexts = []
33
30
  @lib_subcontexts = []
@@ -47,10 +44,10 @@ module Inspec
47
44
  end
48
45
 
49
46
  def dependencies
50
- if @conf['profile'].nil?
47
+ if @conf["profile"].nil?
51
48
  {}
52
49
  else
53
- @conf['profile'].locked_dependencies
50
+ @conf["profile"].locked_dependencies
54
51
  end
55
52
  end
56
53
 
@@ -70,15 +67,15 @@ module Inspec
70
67
  end
71
68
 
72
69
  def profile_supports_platform?
73
- return true if @conf['profile'].nil?
70
+ return true if @conf["profile"].nil?
74
71
 
75
- @conf['profile'].supports_platform?
72
+ @conf["profile"].supports_platform?
76
73
  end
77
74
 
78
75
  def profile_supports_inspec_version?
79
- return true if @conf['profile'].nil?
76
+ return true if @conf["profile"].nil?
80
77
 
81
- @conf['profile'].supports_runtime?
78
+ @conf["profile"].supports_runtime?
82
79
  end
83
80
 
84
81
  def remove_rule(id)
@@ -119,15 +116,15 @@ module Inspec
119
116
  end
120
117
 
121
118
  def load_libraries(libs)
122
- lib_prefix = 'libraries' + File::SEPARATOR
119
+ lib_prefix = "libraries" + File::SEPARATOR
123
120
  autoloads = []
124
121
 
125
122
  libs.sort_by! { |l| l[1] } # Sort on source path so load order is deterministic
126
123
  libs.each do |content, source, line|
127
124
  path = source
128
125
  if source.start_with?(lib_prefix)
129
- path = source.sub(lib_prefix, '')
130
- autoloads.push(path) if File.dirname(path) == '.'
126
+ path = source.sub(lib_prefix, "")
127
+ autoloads.push(path) if File.dirname(path) == "."
131
128
  end
132
129
 
133
130
  @require_loader.add(path, content, source, line)
@@ -135,7 +132,7 @@ module Inspec
135
132
 
136
133
  # load all files directly that are flat inside the libraries folder
137
134
  autoloads.each do |path|
138
- next unless path.end_with?('.rb')
135
+ next unless path.end_with?(".rb")
139
136
  load_library_file(*@require_loader.load(path)) unless @require_loader.loaded?(path)
140
137
  end
141
138
  reload_dsl
@@ -160,7 +157,7 @@ module Inspec
160
157
  elsif source.nil? && line.nil?
161
158
  context.instance_eval(content)
162
159
  else
163
- context.instance_eval(content, source || 'unknown', line || 1)
160
+ context.instance_eval(content, source || "unknown", line || 1)
164
161
  end
165
162
  end
166
163
 
@@ -173,9 +170,9 @@ module Inspec
173
170
  def register_rule(r)
174
171
  # get the full ID
175
172
  file = if @current_load.nil?
176
- 'unknown'
173
+ "unknown"
177
174
  else
178
- @current_load[:file] || 'unknown'
175
+ @current_load[:file] || "unknown"
179
176
  end
180
177
  r.instance_variable_set(:@__file, file)
181
178
  r.instance_variable_set(:@__group_title, current_load[:title])
@@ -198,7 +195,7 @@ module Inspec
198
195
 
199
196
  def full_id(pid, rid)
200
197
  return rid.to_s if pid.to_s.empty?
201
- pid.to_s + '/' + rid.to_s
198
+ pid.to_s + "/" + rid.to_s
202
199
  end
203
200
  end
204
201
  end