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,155 +1,155 @@
1
- require 'minitest/autorun'
2
- require 'mocha/setup'
3
- require_relative '../../lib/inspec-compliance/api.rb'
1
+ require "minitest/autorun"
2
+ require "mocha/setup"
3
+ require_relative "../../lib/inspec-compliance/api.rb"
4
4
 
5
5
  describe InspecPlugins::Compliance::Fetcher do
6
- let(:config) { { 'server' => 'myserver' } }
6
+ let(:config) { { "server" => "myserver" } }
7
7
 
8
- describe 'the check_compliance_token method' do
9
- let(:fetcher) { fetcher = InspecPlugins::Compliance::Fetcher.new('a/bad/url', config) }
8
+ describe "the check_compliance_token method" do
9
+ let(:fetcher) { InspecPlugins::Compliance::Fetcher.new("a/bad/url", config) }
10
10
 
11
- it 'returns without error if token is set' do
12
- config['token'] = 'my-token'
13
- fetcher.class.check_compliance_token('http://test.com', config)
11
+ it "returns without error if token is set" do
12
+ config["token"] = "my-token"
13
+ fetcher.class.check_compliance_token("http://test.com", config)
14
14
  end
15
15
 
16
- it 'returns an error when token is not set' do
17
- ex = assert_raises(Inspec::FetcherFailure) { fetcher.class.check_compliance_token('http://test.com', config) }
16
+ it "returns an error when token is not set" do
17
+ ex = assert_raises(Inspec::FetcherFailure) { fetcher.class.check_compliance_token("http://test.com", config) }
18
18
  ex.message.must_include "Cannot fetch http://test.com because your compliance token has not been\nconfigured."
19
19
  end
20
20
  end
21
21
 
22
- describe 'when the server is an automate2 server' do
22
+ describe "when the server is an automate2 server" do
23
23
  before { InspecPlugins::Compliance::API.expects(:is_automate2_server?).with(config).returns(true) }
24
24
 
25
- it 'returns the correct owner and profile name' do
26
- config['profile'] = ['admin', 'ssh-baseline', nil]
27
- fetcher = InspecPlugins::Compliance::Fetcher.new('myserver/profile', config)
28
- fetcher.send(:compliance_profile_name).must_equal 'admin/ssh-baseline'
25
+ it "returns the correct owner and profile name" do
26
+ config["profile"] = ["admin", "ssh-baseline", nil]
27
+ fetcher = InspecPlugins::Compliance::Fetcher.new("myserver/profile", config)
28
+ fetcher.send(:compliance_profile_name).must_equal "admin/ssh-baseline"
29
29
  end
30
30
  end
31
31
 
32
- describe 'when the server is an automate server pre-0.8.0' do
32
+ describe "when the server is an automate server pre-0.8.0" do
33
33
  before { InspecPlugins::Compliance::API.expects(:is_automate_server_pre_080?).with(config).returns(true) }
34
34
 
35
- it 'returns the correct profile name when the url is correct' do
36
- fetcher = InspecPlugins::Compliance::Fetcher.new('myserver/myowner/myprofile/tar', config)
37
- fetcher.send(:compliance_profile_name).must_equal 'myowner/myprofile'
35
+ it "returns the correct profile name when the url is correct" do
36
+ fetcher = InspecPlugins::Compliance::Fetcher.new("myserver/myowner/myprofile/tar", config)
37
+ fetcher.send(:compliance_profile_name).must_equal "myowner/myprofile"
38
38
  end
39
39
 
40
- it 'raises an exception if the url is malformed' do
41
- fetcher = InspecPlugins::Compliance::Fetcher.new('a/bad/url', config)
40
+ it "raises an exception if the url is malformed" do
41
+ fetcher = InspecPlugins::Compliance::Fetcher.new("a/bad/url", config)
42
42
  proc { fetcher.send(:compliance_profile_name) }.must_raise RuntimeError
43
43
  end
44
44
  end
45
45
 
46
- describe 'when the server is an automate server 0.8.0-or-later' do
46
+ describe "when the server is an automate server 0.8.0-or-later" do
47
47
  before do
48
48
  InspecPlugins::Compliance::API.expects(:is_automate_server_pre_080?).with(config).returns(false)
49
49
  InspecPlugins::Compliance::API.expects(:is_automate_server_080_and_later?).with(config).returns(true)
50
50
  end
51
51
 
52
- it 'returns the correct profile name when the url is correct' do
53
- fetcher = InspecPlugins::Compliance::Fetcher.new('myserver/profiles/myowner/myprofile/tar', config)
54
- fetcher.send(:compliance_profile_name).must_equal 'myowner/myprofile'
52
+ it "returns the correct profile name when the url is correct" do
53
+ fetcher = InspecPlugins::Compliance::Fetcher.new("myserver/profiles/myowner/myprofile/tar", config)
54
+ fetcher.send(:compliance_profile_name).must_equal "myowner/myprofile"
55
55
  end
56
56
 
57
- it 'raises an exception if the url is malformed' do
58
- fetcher = InspecPlugins::Compliance::Fetcher.new('a/bad/url', config)
57
+ it "raises an exception if the url is malformed" do
58
+ fetcher = InspecPlugins::Compliance::Fetcher.new("a/bad/url", config)
59
59
  proc { fetcher.send(:compliance_profile_name) }.must_raise RuntimeError
60
60
  end
61
61
  end
62
62
 
63
- describe 'when the server is not an automate server (likely a compliance server)' do
63
+ describe "when the server is not an automate server (likely a compliance server)" do
64
64
  before do
65
65
  InspecPlugins::Compliance::API.expects(:is_automate_server_pre_080?).with(config).returns(false)
66
66
  InspecPlugins::Compliance::API.expects(:is_automate_server_080_and_later?).with(config).returns(false)
67
67
  end
68
68
 
69
- it 'returns the correct profile name when the url is correct' do
70
- fetcher = InspecPlugins::Compliance::Fetcher.new('myserver/owners/myowner/compliance/myprofile/tar', config)
71
- fetcher.send(:compliance_profile_name).must_equal 'myowner/myprofile'
69
+ it "returns the correct profile name when the url is correct" do
70
+ fetcher = InspecPlugins::Compliance::Fetcher.new("myserver/owners/myowner/compliance/myprofile/tar", config)
71
+ fetcher.send(:compliance_profile_name).must_equal "myowner/myprofile"
72
72
  end
73
73
 
74
- it 'raises an exception if the url is malformed' do
75
- fetcher = InspecPlugins::Compliance::Fetcher.new('a/bad/url', config)
74
+ it "raises an exception if the url is malformed" do
75
+ fetcher = InspecPlugins::Compliance::Fetcher.new("a/bad/url", config)
76
76
  proc { fetcher.send(:compliance_profile_name) }.must_raise RuntimeError
77
77
  end
78
78
  end
79
79
 
80
- describe 'when the server calls an automate profile' do
80
+ describe "when the server calls an automate profile" do
81
81
  let(:profiles_result) do
82
- [{ 'name'=>'ssh-baseline',
83
- 'title'=>'InSpec Profile',
84
- 'maintainer'=>'The Authors',
85
- 'copyright'=>'The Authors',
86
- 'copyright_email'=>'you@example.com',
87
- 'license'=>'Apache-2.0',
88
- 'summary'=>'An InSpec Compliance Profile',
89
- 'version'=>'0.1.1',
90
- 'owner'=>'admin',
91
- 'supports'=>[],
92
- 'depends'=>[],
93
- 'sha256'=>'132j1kjdasfasdoaefaewo12312',
94
- 'groups'=>[],
95
- 'controls'=>[],
96
- 'attributes'=>[],
97
- 'latest_version'=>'' }]
82
+ [{ "name" => "ssh-baseline",
83
+ "title" => "InSpec Profile",
84
+ "maintainer" => "The Authors",
85
+ "copyright" => "The Authors",
86
+ "copyright_email" => "you@example.com",
87
+ "license" => "Apache-2.0",
88
+ "summary" => "An InSpec Compliance Profile",
89
+ "version" => "0.1.1",
90
+ "owner" => "admin",
91
+ "supports" => [],
92
+ "depends" => [],
93
+ "sha256" => "132j1kjdasfasdoaefaewo12312",
94
+ "groups" => [],
95
+ "controls" => [],
96
+ "attributes" => [],
97
+ "latest_version" => "" }]
98
98
  end
99
99
  before do
100
- InspecPlugins::Compliance::Configuration.expects(:new).returns({ 'token' => '123abc', 'server' => 'https://a2.instance.com' })
100
+ InspecPlugins::Compliance::Configuration.expects(:new).returns({ "token" => "123abc", "server" => "https://a2.instance.com" })
101
101
  end
102
102
 
103
- it 'returns the correct profile name when parsing url' do
104
- InspecPlugins::Compliance::API.stubs(:profiles).returns(['success', profiles_result])
105
- fetcher = InspecPlugins::Compliance::Fetcher.resolve('compliance://admin/ssh-baseline')
106
- assert = ['admin', 'ssh-baseline', nil]
107
- fetcher.instance_variable_get(:"@config")['profile'].must_equal assert
103
+ it "returns the correct profile name when parsing url" do
104
+ InspecPlugins::Compliance::API.stubs(:profiles).returns(["success", profiles_result])
105
+ fetcher = InspecPlugins::Compliance::Fetcher.resolve("compliance://admin/ssh-baseline")
106
+ assert = ["admin", "ssh-baseline", nil]
107
+ fetcher.instance_variable_get(:"@config")["profile"].must_equal assert
108
108
  end
109
109
 
110
- it 'returns the correct profile name when parsing compliance hash' do
111
- InspecPlugins::Compliance::API.stubs(:profiles).returns(['success', profiles_result])
110
+ it "returns the correct profile name when parsing compliance hash" do
111
+ InspecPlugins::Compliance::API.stubs(:profiles).returns(["success", profiles_result])
112
112
  hash = {
113
- target: 'https://a2.instance.com/api/v0/compliance/tar',
114
- compliance: 'admin/ssh-baseline',
115
- sha256: '132j1kjdasfasdoaefaewo12312',
113
+ target: "https://a2.instance.com/api/v0/compliance/tar",
114
+ compliance: "admin/ssh-baseline",
115
+ sha256: "132j1kjdasfasdoaefaewo12312",
116
116
  }
117
117
  fetcher = InspecPlugins::Compliance::Fetcher.resolve(hash)
118
- assert = ['admin', 'ssh-baseline', nil]
119
- fetcher.instance_variable_get(:"@config")['profile'].must_equal assert
118
+ assert = ["admin", "ssh-baseline", nil]
119
+ fetcher.instance_variable_get(:"@config")["profile"].must_equal assert
120
120
  end
121
121
  end
122
122
 
123
- describe 'when the server provides a sha256 in the profiles_result' do
123
+ describe "when the server provides a sha256 in the profiles_result" do
124
124
  let(:profiles_result) do
125
- [{ 'name'=>'ssh-baseline',
126
- 'title'=>'InSpec Profile',
127
- 'maintainer'=>'The Authors',
128
- 'copyright'=>'The Authors',
129
- 'copyright_email'=>'you@example.com',
130
- 'license'=>'Apache-2.0',
131
- 'summary'=>'An InSpec Compliance Profile',
132
- 'version'=>'0.1.1',
133
- 'owner'=>'admin',
134
- 'supports'=>[],
135
- 'depends'=>[],
136
- 'sha256'=>'132j1kjdasfasdoaefaewo12312',
137
- 'groups'=>[],
138
- 'controls'=>[],
139
- 'attributes'=>[],
140
- 'latest_version'=>'' }]
125
+ [{ "name" => "ssh-baseline",
126
+ "title" => "InSpec Profile",
127
+ "maintainer" => "The Authors",
128
+ "copyright" => "The Authors",
129
+ "copyright_email" => "you@example.com",
130
+ "license" => "Apache-2.0",
131
+ "summary" => "An InSpec Compliance Profile",
132
+ "version" => "0.1.1",
133
+ "owner" => "admin",
134
+ "supports" => [],
135
+ "depends" => [],
136
+ "sha256" => "132j1kjdasfasdoaefaewo12312",
137
+ "groups" => [],
138
+ "controls" => [],
139
+ "attributes" => [],
140
+ "latest_version" => "" }]
141
141
  end
142
142
 
143
143
  before do
144
- InspecPlugins::Compliance::Configuration.expects(:new).returns({ 'token' => '123abc', 'server' => 'https://a2.instance.com' })
144
+ InspecPlugins::Compliance::Configuration.expects(:new).returns({ "token" => "123abc", "server" => "https://a2.instance.com" })
145
145
  end
146
146
 
147
- it 'contains the upstream_sha256' do
148
- InspecPlugins::Compliance::API.stubs(:profiles).returns(['success', profiles_result])
147
+ it "contains the upstream_sha256" do
148
+ InspecPlugins::Compliance::API.stubs(:profiles).returns(["success", profiles_result])
149
149
  prof = profiles_result[0]
150
150
  target = "compliance://#{prof['owner']}/#{prof['name']}"
151
151
  fetcher = InspecPlugins::Compliance::Fetcher.resolve(target)
152
- fetcher.upstream_sha256.must_equal prof['sha256']
152
+ fetcher.upstream_sha256.must_equal prof["sha256"]
153
153
  end
154
154
  end
155
155
  end
@@ -1,5 +1,5 @@
1
- source 'https://supermarket.chef.io'
1
+ source "https://supermarket.chef.io"
2
2
 
3
3
  group :integration do
4
- cookbook 'inspec_habitat_fixture', path: 'test/cookbooks/inspec_habitat_fixture/'
4
+ cookbook "inspec_habitat_fixture", path: "test/cookbooks/inspec_habitat_fixture/"
5
5
  end
@@ -3,7 +3,7 @@ module InspecPlugins
3
3
  class Plugin < Inspec.plugin(2)
4
4
  plugin_name :'inspec-habitat'
5
5
  cli_command :habitat do
6
- require_relative 'inspec-habitat/cli'
6
+ require_relative "inspec-habitat/cli"
7
7
  InspecPlugins::Habitat::CLI
8
8
  end
9
9
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- require_relative 'profile'
1
+ require_relative "profile"
2
+ require "inspec/dist"
3
3
 
4
4
  module InspecPlugins
5
5
  module Habitat
@@ -10,30 +10,32 @@ module InspecPlugins
10
10
  "#{basename} habitat profile #{command.usage}"
11
11
  end
12
12
 
13
- desc 'create PATH', 'Create a Habitat artifact for the profile found at PATH'
13
+ desc "create PATH", "Create a Habitat artifact for the profile found at PATH"
14
14
  option :output_dir, type: :string, required: false,
15
- desc: 'Output directory for the Habitat artifact. Default: current directory'
16
- def create(path = '.')
15
+ desc: "Output directory for the Habitat artifact. Default: current directory"
16
+ def create(path = ".")
17
17
  InspecPlugins::Habitat::Profile.new(path, options).create
18
18
  end
19
19
 
20
- desc 'setup PATH', 'Configure the profile at PATH for Habitat, including a plan and hooks'
21
- def setup(path = '.')
20
+ desc "setup PATH", "Configure the profile at PATH for Habitat, including a plan and hooks"
21
+ def setup(path = ".")
22
22
  InspecPlugins::Habitat::Profile.new(path, options).setup
23
23
  end
24
24
 
25
- desc 'upload PATH', 'Create then upload a Habitat artifact for the profile found at PATH to the Habitat Builder Depot'
26
- def upload(path = '.')
25
+ desc "upload PATH", "Create then upload a Habitat artifact for the profile found at PATH to the Habitat Builder Depot"
26
+ def upload(path = ".")
27
27
  InspecPlugins::Habitat::Profile.new(path, options).upload
28
28
  end
29
29
  end
30
30
 
31
31
  class CLI < Inspec.plugin(2, :cli_command)
32
- subcommand_desc 'habitat SUBCOMMAND', 'Manage Habitat with InSpec'
33
- namespace 'habitat'
32
+ include Inspec::Dist
34
33
 
35
- desc 'profile', 'Manage InSpec profiles as Habitat artifacts'
36
- subcommand 'profile', ProfileCLI
34
+ subcommand_desc "habitat SUBCOMMAND", "Manage Habitat with #{PRODUCT_NAME}"
35
+ namespace "habitat"
36
+
37
+ desc "profile", "Manage #{PRODUCT_NAME} profiles as Habitat artifacts"
38
+ subcommand "profile", ProfileCLI
37
39
  end
38
40
  end
39
41
  end
@@ -1,19 +1,20 @@
1
- # encoding: utf-8
2
-
3
- require 'inspec/profile_vendor'
4
- require 'mixlib/shellout'
5
- require 'tomlrb'
6
- require 'ostruct'
1
+ require "inspec/profile_vendor"
2
+ require "mixlib/shellout"
3
+ require "tomlrb"
4
+ require "ostruct"
5
+ require "inspec/dist"
7
6
 
8
7
  module InspecPlugins
9
8
  module Habitat
10
9
  class Profile
10
+ include Inspec::Dist
11
+
11
12
  attr_reader :logger
12
13
  def initialize(path, options = {})
13
14
  @path = path
14
15
  @options = options
15
16
  @logger = Inspec::Log
16
- logger.level(options.fetch(:log_level, 'info').to_sym)
17
+ logger.level(options.fetch(:log_level, "info").to_sym)
17
18
  end
18
19
 
19
20
  def create
@@ -28,7 +29,7 @@ module InspecPlugins
28
29
  output_dir = @options[:output_dir] || Dir.pwd
29
30
  unless File.directory?(output_dir)
30
31
  exit_with_error("Output directory #{output_dir} is not a directory " \
31
- 'or does not exist.')
32
+ "or does not exist.")
32
33
  end
33
34
 
34
35
  duplicated_profile = duplicate_profile(@path, working_dir)
@@ -44,7 +45,7 @@ module InspecPlugins
44
45
  destination
45
46
  rescue => e
46
47
  logger.debug(e.backtrace.join("\n"))
47
- exit_with_error('Unable to create Habitat artifact.')
48
+ exit_with_error("Unable to create Habitat artifact.")
48
49
  ensure
49
50
  if Dir.exist?(working_dir)
50
51
  logger.debug("Deleting working directory #{working_dir}")
@@ -56,34 +57,34 @@ module InspecPlugins
56
57
  path = profile.root_path
57
58
  logger.debug("Setting up #{path} for Habitat...")
58
59
 
59
- plan_file = File.join(path, 'habitat', 'plan.sh')
60
+ plan_file = File.join(path, "habitat", "plan.sh")
60
61
  logger.info("Generating Habitat plan at #{plan_file}...")
61
62
  vars = {
62
63
  profile: profile,
63
- habitat_origin: read_habitat_config['origin'],
64
+ habitat_origin: read_habitat_config["origin"],
64
65
  }
65
- create_file_from_template(plan_file, 'plan.sh.erb', vars)
66
+ create_file_from_template(plan_file, "plan.sh.erb", vars)
66
67
 
67
- run_hook_file = File.join(path, 'habitat', 'hooks', 'run')
68
+ run_hook_file = File.join(path, "habitat", "hooks", "run")
68
69
  logger.info("Generating a Habitat run hook at #{run_hook_file}...")
69
- create_file_from_template(run_hook_file, 'hooks/run.erb')
70
+ create_file_from_template(run_hook_file, "hooks/run.erb")
70
71
 
71
- default_toml = File.join(path, 'habitat', 'default.toml')
72
+ default_toml = File.join(path, "habitat", "default.toml")
72
73
  logger.info("Generating a Habitat default.toml at #{default_toml}...")
73
- create_file_from_template(default_toml, 'default.toml.erb')
74
+ create_file_from_template(default_toml, "default.toml.erb")
74
75
 
75
- config = File.join(path, 'habitat', 'config', 'inspec_exec_config.json')
76
- logger.info("Generating #{config} for `inspec exec`...")
77
- create_file_from_template(config, 'config/inspec_exec_config.json.erb')
76
+ config = File.join(path, "habitat", "config", "inspec_exec_config.json")
77
+ logger.info("Generating #{config} for `#{EXEC_NAME} exec`...")
78
+ create_file_from_template(config, "config/inspec_exec_config.json.erb")
78
79
  end
79
80
 
80
81
  def upload
81
82
  habitat_config = read_habitat_config
82
83
 
83
- if habitat_config['auth_token'].nil?
84
+ if habitat_config["auth_token"].nil?
84
85
  exit_with_error(
85
- 'Unable to determine Habitat auth token for uploading.',
86
- 'Run `hab setup` or set the HAB_AUTH_TOKEN environment variable.',
86
+ "Unable to determine Habitat auth token for uploading.",
87
+ "Run `hab setup` or set the HAB_AUTH_TOKEN environment variable."
87
88
  )
88
89
  end
89
90
 
@@ -95,7 +96,7 @@ module InspecPlugins
95
96
  logger.info("Habitat artifact #{hart} uploaded.")
96
97
  rescue => e
97
98
  logger.debug(e.backtrace.join("\n"))
98
- exit_with_error('Unable to upload Habitat artifact.')
99
+ exit_with_error("Unable to upload Habitat artifact.")
99
100
  end
100
101
 
101
102
  private
@@ -121,14 +122,14 @@ module InspecPlugins
121
122
  def profile_from_path(path)
122
123
  Inspec::Profile.for_target(
123
124
  path,
124
- backend: Inspec::Backend.create(Inspec::Config.mock),
125
+ backend: Inspec::Backend.create(Inspec::Config.mock)
125
126
  )
126
127
  end
127
128
 
128
129
  def copy_profile_to_working_dir(profile, working_dir)
129
- logger.debug('Copying profile contents to the working directory...')
130
+ logger.debug("Copying profile contents to the working directory...")
130
131
  profile.files.each do |profile_file|
131
- next if File.extname(profile_file) == '.hart'
132
+ next if File.extname(profile_file) == ".hart"
132
133
 
133
134
  src = File.join(profile.root_path, profile_file)
134
135
  dst = File.join(working_dir, profile_file)
@@ -143,86 +144,86 @@ module InspecPlugins
143
144
  end
144
145
 
145
146
  def verify_profile(profile)
146
- logger.debug('Checking to see if the profile is valid...')
147
+ logger.debug("Checking to see if the profile is valid...")
147
148
 
148
149
  unless profile.check[:summary][:valid]
149
- exit_with_error('Profile check failed. Please fix the profile ' \
150
- 'before creating a Habitat artifact.')
150
+ exit_with_error("Profile check failed. Please fix the profile " \
151
+ "before creating a Habitat artifact.")
151
152
  end
152
153
 
153
- logger.debug('Profile is valid.')
154
+ logger.debug("Profile is valid.")
154
155
  end
155
156
 
156
157
  def vendor_profile_dependencies!(profile)
157
158
  profile_vendor = Inspec::ProfileVendor.new(profile.root_path)
158
159
  if profile_vendor.lockfile.exist? && profile_vendor.cache_path.exist?
159
160
  logger.debug("Profile's dependencies are already vendored, skipping " \
160
- 'vendor process.')
161
+ "vendor process.")
161
162
  else
162
163
  logger.debug("Vendoring the profile's dependencies...")
163
164
  profile_vendor.vendor!
164
165
 
165
- logger.debug('Ensuring all vendored content has read permissions...')
166
+ logger.debug("Ensuring all vendored content has read permissions...")
166
167
  profile_vendor.make_readable
167
168
  end
168
169
 
169
170
  # Return new profile since it has changed
170
171
  Inspec::Profile.for_target(
171
172
  profile.root_path,
172
- backend: Inspec::Backend.create(Inspec::Config.mock),
173
+ backend: Inspec::Backend.create(Inspec::Config.mock)
173
174
  )
174
175
  end
175
176
 
176
177
  def verify_habitat_setup(habitat_config)
177
- logger.debug('Checking to see if Habitat is installed...')
178
- cmd = Mixlib::ShellOut.new('hab --version')
178
+ logger.debug("Checking to see if Habitat is installed...")
179
+ cmd = Mixlib::ShellOut.new("hab --version")
179
180
  cmd.run_command
180
181
  if cmd.error?
181
- exit_with_error('Unable to run Habitat commands.', cmd.stderr)
182
+ exit_with_error("Unable to run Habitat commands.", cmd.stderr)
182
183
  end
183
184
 
184
- if habitat_config['origin'].nil?
185
+ if habitat_config["origin"].nil?
185
186
  exit_with_error(
186
- 'Unable to determine Habitat origin name.',
187
- 'Run `hab setup` or set the HAB_ORIGIN environment variable.',
187
+ "Unable to determine Habitat origin name.",
188
+ "Run `hab setup` or set the HAB_ORIGIN environment variable."
188
189
  )
189
190
  end
190
191
  end
191
192
 
192
193
  def create_file_from_template(file, template, vars = {})
193
194
  FileUtils.mkdir_p(File.dirname(file))
194
- template_path = File.join(__dir__, '../../templates/habitat', template)
195
+ template_path = File.join(__dir__, "../../templates/habitat", template)
195
196
  contents = ERB.new(File.read(template_path))
196
197
  .result(OpenStruct.new(vars).instance_eval { binding })
197
198
  File.write(file, contents)
198
199
  end
199
200
 
200
201
  def build_hart(working_dir, habitat_config)
201
- logger.debug('Building our Habitat artifact...')
202
+ logger.debug("Building our Habitat artifact...")
202
203
 
203
204
  env = {
204
- 'TERM' => 'vt100',
205
- 'HAB_ORIGIN' => habitat_config['origin'],
206
- 'HAB_NONINTERACTIVE' => 'true',
205
+ "TERM" => "vt100",
206
+ "HAB_ORIGIN" => habitat_config["origin"],
207
+ "HAB_NONINTERACTIVE" => "true",
207
208
  }
208
209
 
209
- env['RUST_LOG'] = 'debug' if logger.level == :debug
210
+ env["RUST_LOG"] = "debug" if logger.level == :debug
210
211
 
211
212
  # TODO: Would love to use Mixlib::ShellOut here, but it doesn't
212
213
  # seem to preserve the STDIN tty, and docker gets angry.
213
214
  Dir.chdir(working_dir) do
214
- unless system(env, 'hab pkg build .')
215
- exit_with_error('Unable to build the Habitat artifact.')
215
+ unless system(env, "hab pkg build .")
216
+ exit_with_error("Unable to build the Habitat artifact.")
216
217
  end
217
218
  end
218
219
 
219
- hart_files = Dir.glob(File.join(working_dir, 'results', '*.hart'))
220
+ hart_files = Dir.glob(File.join(working_dir, "results", "*.hart"))
220
221
 
221
222
  if hart_files.length > 1
222
- exit_with_error('More than one Habitat artifact was created which ' \
223
- 'was not expected.')
223
+ exit_with_error("More than one Habitat artifact was created which " \
224
+ "was not expected.")
224
225
  elsif hart_files.empty?
225
- exit_with_error('No Habitat artifact was created.')
226
+ exit_with_error("No Habitat artifact was created.")
226
227
  end
227
228
 
228
229
  hart_files.first
@@ -234,33 +235,33 @@ module InspecPlugins
234
235
  config = habitat_config
235
236
 
236
237
  env = {
237
- 'HAB_AUTH_TOKEN' => config['auth_token'],
238
- 'HAB_NONINTERACTIVE' => 'true',
239
- 'HAB_ORIGIN' => config['origin'],
240
- 'TERM' => 'vt100',
238
+ "HAB_AUTH_TOKEN" => config["auth_token"],
239
+ "HAB_NONINTERACTIVE" => "true",
240
+ "HAB_ORIGIN" => config["origin"],
241
+ "TERM" => "vt100",
241
242
  }
242
243
 
243
- env['HAB_DEPOT_URL'] = ENV['HAB_DEPOT_URL'] if ENV['HAB_DEPOT_URL']
244
+ env["HAB_DEPOT_URL"] = ENV["HAB_DEPOT_URL"] if ENV["HAB_DEPOT_URL"]
244
245
 
245
246
  cmd = Mixlib::ShellOut.new("hab pkg upload #{hart_file}", env: env)
246
247
  cmd.run_command
247
248
  if cmd.error?
248
249
  exit_with_error(
249
- 'Unable to upload Habitat artifact to the Depot.',
250
+ "Unable to upload Habitat artifact to the Depot.",
250
251
  cmd.stdout,
251
- cmd.stderr,
252
+ cmd.stderr
252
253
  )
253
254
  end
254
255
 
255
- logger.debug('Upload complete!')
256
+ logger.debug("Upload complete!")
256
257
  end
257
258
 
258
259
  def read_habitat_config
259
- cli_toml = File.join(ENV['HOME'], '.hab', 'etc', 'cli.toml')
260
- cli_toml = '/hab/etc/cli.toml' unless File.exist?(cli_toml)
260
+ cli_toml = File.join(ENV["HOME"], ".hab", "etc", "cli.toml")
261
+ cli_toml = "/hab/etc/cli.toml" unless File.exist?(cli_toml)
261
262
  cli_config = File.exist?(cli_toml) ? Tomlrb.load_file(cli_toml) : {}
262
- cli_config['origin'] ||= ENV['HAB_ORIGIN']
263
- cli_config['auth_token'] ||= ENV['HAB_AUTH_TOKEN']
263
+ cli_config["origin"] ||= ENV["HAB_ORIGIN"]
264
+ cli_config["auth_token"] ||= ENV["HAB_AUTH_TOKEN"]
264
265
  cli_config
265
266
  end
266
267